成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用Rust + Electron開(kāi)發(fā)跨平臺(tái)桌面應(yīng)用 ( 一 )

DrizzleX / 3127人閱讀

摘要:所以我們需要將打包成模塊提供給進(jìn)行調(diào)用。安裝完之后我們執(zhí)行,新建一個(gè)項(xiàng)目。需要注意的是編譯的版本需要與運(yùn)行的版本一致,否則會(huì)出現(xiàn)無(wú)法調(diào)用的情況。

前言

近段時(shí)間學(xué)習(xí)了Rust,一直想著做點(diǎn)什么東西深入學(xué)習(xí),因?yàn)槭莿倢W(xué)習(xí),很多地方都不熟悉,所以也就不能拿它來(lái)做編譯器這些,至于web開(kāi)發(fā),實(shí)際上我并不建議拿這個(gè)來(lái)學(xué)習(xí)一門語(yǔ)言,大概有幾個(gè)方面,一是web開(kāi)發(fā)的套路無(wú)非也就那么幾個(gè),對(duì)學(xué)習(xí)一門語(yǔ)言并不會(huì)有多大的幫助。二是web開(kāi)發(fā)大多已經(jīng)被封裝了很多東西,對(duì)學(xué)習(xí)語(yǔ)言本身其實(shí)不利,真的要深入學(xué)習(xí)的話還是建議從語(yǔ)言本身出發(fā),盡量不要用封裝好的東西,當(dāng)然,標(biāo)準(zhǔn)庫(kù)除外。

為什么是Rust + Electron

原因其實(shí)很簡(jiǎn)單,我不想做太復(fù)雜的東西,因?yàn)榇蟛糠值木€是要放在工作上,其次是希望做一個(gè)我日常能用的東西,當(dāng)然現(xiàn)在還沒(méi)想好,可能是個(gè)音樂(lè)播放器,也可能是個(gè)天氣展示的app,這樣我就可以每天使用了,這也會(huì)更有動(dòng)力促使我開(kāi)發(fā)好它。

Rust 和 Electron 想必就不用我多介紹了吧,至于為什么是這個(gè)組合可以查看知乎的這個(gè)問(wèn)題,我贊同的是的方案是

使用 C/Cpp/Rust 開(kāi)發(fā)的核心 + Electron / Qt 開(kāi)發(fā)界面
本期目標(biāo)

本期的目標(biāo)非常簡(jiǎn)單,將Rust 和 Electron結(jié)合起來(lái),使用Rust獲取電腦cpu核數(shù),Electron將數(shù)據(jù)繪制在界面上展示。

初始化Electron項(xiàng)目

Electron項(xiàng)目的初始化我用的工具是electron-forge,首先我們按照electron-forge的官網(wǎng)介紹來(lái)

npm install -g electron-forge

electron-forge init my-new-project

cd my-new-project

electron-forge start

解釋一下,首先我們要安裝electron-forge,這是一個(gè)腳手架工具,類似于Vue-cli。
然后我們初始化一個(gè)項(xiàng)目,項(xiàng)目名稱為my-new-project。

需要注意的是這初始化的過(guò)程中electron-forge會(huì)構(gòu)建package.json, 然后下載依賴,我第一次下載依賴的時(shí)候卡在了electron-runtime,第二次重試的時(shí)候就好了。

第二個(gè)是electron-forge中的依賴會(huì)對(duì)Python版本有要求,只能要求Python2,這里要注意的一點(diǎn)是,我十分不建議使用pyenv來(lái)控制Python版本,會(huì)出現(xiàn)以下錯(cuò)誤,我的解決方式是使用virtualenv新建一個(gè)Python2 的環(huán)境。

Fatal Python error: PyThreadState_Get: no current thread

現(xiàn)在我們來(lái)看一下項(xiàng)目結(jié)構(gòu)

整個(gè)項(xiàng)目結(jié)構(gòu)非常簡(jiǎn)單,src中是我們的源文件,index.html是界面文件,index.js是界面邏輯文件,大家打開(kāi)index.js就可以看到一段自動(dòng)生成的代碼,主要是創(chuàng)建了一個(gè)app,以及監(jiān)聽(tīng)app的活動(dòng),需要注意到的是其中對(duì)mac的處理。

app.on("window-all-closed", () => {
  // On OS X it is common for applications and their menu bar
  // to stay active until the user quits explicitly with Cmd + Q
  if (process.platform !== "darwin") {
    app.quit();
  }
});

好了,現(xiàn)在讓我們把項(xiàng)目跑起來(lái),在項(xiàng)目目錄下執(zhí)行electron-forge start命令,稍等一會(huì)我們就可以看到界面運(yùn)行起來(lái)了

初始化Rust項(xiàng)目

在開(kāi)發(fā)之前我們要知道,JS是無(wú)法直接運(yùn)行Rust的,就像JS無(wú)法直接運(yùn)行C++一樣。所以我們需要將Rust打包成Node模塊提供給JS進(jìn)行調(diào)用。所以我們會(huì)使用neon來(lái)做到這件事,neon的github地址在這里

首先我們需要安裝neon,注意,neon對(duì)python版本也是有要求的,如果你是mac,python版本必須要是Python2.7,不支持Python3,同樣,這里也會(huì)出現(xiàn)上面說(shuō)過(guò)的no current thread問(wèn)題,所以我們?cè)陂_(kāi)發(fā)時(shí)最好用virtualenv新建一個(gè)Python2的環(huán)境。

安裝完neon之后我們執(zhí)行neon new thread-count,新建一個(gè)項(xiàng)目??匆幌马?xiàng)目結(jié)構(gòu)

lib是我們最終的導(dǎo)出文件,提供給electron進(jìn)行調(diào)用,native下則是我們的rust代碼,注意,這里的入口文件是native/src/lib.rs,因?yàn)槲覀兘⒌氖且粋€(gè)庫(kù)而不是一個(gè)可執(zhí)行的應(yīng)用程序。
讓我們先編譯項(xiàng)目,在文件目錄下執(zhí)行neon build --release命令。

讓我們進(jìn)入終端調(diào)用一下項(xiàng)目試試:

成功!到現(xiàn)在我們就成功的將rust寫(xiě)的代碼封裝成node庫(kù),使得JS可以進(jìn)行調(diào)用了,接下來(lái)我們回到上面說(shuō)過(guò)的,將rust的功能更改為獲取CPU核數(shù),然后將它封裝成一個(gè)函數(shù)并進(jìn)行導(dǎo)出。

首先我們要修改Cargo.toml,在[dependencies]下增加一個(gè)num_cpus = "1.4.0"的依賴項(xiàng),
然后修改native/src/lib.rs文件如下

#[macro_use]
extern crate neon;

use neon::prelude::*;

fn thread_count(mut cx: FunctionContext) -> JsResult {
    Ok(cx.number(num_cpus::get() as f64))
}

register_module!(mut cx, {
    cx.export_function("thread_count", thread_count)
});

修改lib/index.js如下:

var addon = require("../native");

module.exports = addon.thread_count;

然后我們?cè)龠M(jìn)行編譯,執(zhí)行neon build --release命令,然后再進(jìn)入終端調(diào)用這個(gè)函數(shù)試試

成功啦,至此,我們就成功的將rust代碼封裝給JS進(jìn)行了調(diào)用。需要注意的是編譯rust的node版本需要與運(yùn)行electron的node版本一致,否則會(huì)出現(xiàn)無(wú)法調(diào)用的情況。好了,到此第一期就結(jié)束了,代碼我會(huì)抽空整理到github,以供有需要的同學(xué)查看。

效果

最后看一下效果圖吧

ps: 現(xiàn)在Rust的各項(xiàng)工具和庫(kù)都不是很成熟,所以大家再實(shí)踐過(guò)程中會(huì)遇到各種問(wèn)題,都可以評(píng)論到下面大家一起討論。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108960.html

相關(guān)文章

  • 使用Rust + Electron開(kāi)發(fā)平臺(tái)桌面應(yīng)用 ( 二 )

    摘要:前言在上一篇文章使用開(kāi)發(fā)跨平臺(tái)桌面應(yīng)用一中,我們將結(jié)合起來(lái),使用編寫(xiě)核心業(yè)務(wù)邏輯,并編譯成庫(kù)提供給的界面調(diào)用,但是在上一篇文章中發(fā)現(xiàn)遇到了很多問(wèn)題,尤其是的版本和編譯出來(lái)的版本必須要一致,否則會(huì)無(wú)法調(diào)用成功,這就很坑了,所以為了改變這一情況 前言 在上一篇文章使用Rust + Electron開(kāi)發(fā)跨平臺(tái)桌面應(yīng)用 ( 一 )中,我們將Rust + Electron結(jié)合起來(lái),使用Rust編...

    forrest23 評(píng)論0 收藏0
  • 前端每周清單第 43 期:2017 JavaScript 回顧、Rust 與 WebAssembly

    摘要:楊冀龍是安全焦點(diǎn)民間白帽黑客組織核心成員,被浪潮之巔評(píng)為中國(guó)新一代黑客領(lǐng)軍人物之一他在本文中依次分享了對(duì)于黑客的定義如何從黑客成為一名安全創(chuàng)業(yè)者技術(shù)創(chuàng)業(yè)踩過(guò)的坑給技術(shù)創(chuàng)業(yè)者建議等內(nèi)容。 showImg(https://segmentfault.com/img/remote/1460000012377230?w=1240&h=796); 前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為...

    xorpay 評(píng)論0 收藏0
  • 用JS開(kāi)發(fā)平臺(tái)桌面應(yīng)用,從原理到實(shí)踐

    摘要:導(dǎo)讀使用開(kāi)發(fā)客戶端程序已經(jīng)有一段時(shí)間了,整體感覺(jué)還是非常不錯(cuò)的,其中也遇到了一些坑點(diǎn),本文是從運(yùn)行原理到實(shí)際應(yīng)用對(duì)進(jìn)行一次系統(tǒng)性的總結(jié)。一桌面應(yīng)用程序桌面應(yīng)用程序,又稱為程序,但是和程序也有一些區(qū)別。就開(kāi)發(fā)速度方面,比原生編譯技術(shù)要快一些。 導(dǎo)讀 使用Electron開(kāi)發(fā)客戶端程序已經(jīng)有一段時(shí)間了,整體感覺(jué)還是非常不錯(cuò)的,其中也遇到了一些坑點(diǎn),本文是從【運(yùn)行原理】到【實(shí)際應(yīng)用】對(duì)Ele...

    mj 評(píng)論0 收藏0
  • 2019 - Web開(kāi)發(fā)技術(shù)指南和趨勢(shì)

    摘要:以下內(nèi)容來(lái)自我特別喜歡的一個(gè)頻道這是一個(gè)年你成為前端,后端或全棧開(kāi)發(fā)者的進(jìn)階指南你不需要學(xué)習(xí)所有的技術(shù)成為一個(gè)開(kāi)發(fā)者這個(gè)指南只是通過(guò)簡(jiǎn)單分類列出了技術(shù)選項(xiàng)我將從我的經(jīng)驗(yàn)和參考中給出建議首選我們會(huì)介紹通用的知識(shí)最后介紹年的的一些趨勢(shì)基礎(chǔ)前端開(kāi) 以下內(nèi)容來(lái)自我特別喜歡的一個(gè)Youtube頻道: Traversy Media 這是一個(gè)2019年你成為前端,后端或全棧開(kāi)發(fā)者的進(jìn)階指南: 你...

    sourcenode 評(píng)論0 收藏0
  • electron寫(xiě)桌面應(yīng)用

    摘要:說(shuō)起桌面應(yīng)用,想必大家使用過(guò)的就已經(jīng)海了去了。那么現(xiàn)在我們就來(lái)生成一個(gè)程序包吧最后生成的可執(zhí)行程序出就現(xiàn)在了如下位置愉快的雙擊使用吧 說(shuō)起桌面應(yīng)用,想必大家使用過(guò)的就已經(jīng)海了去了。什么暴風(fēng)影音、QQ、skype之類的,早已不是新鮮事!不過(guò)大家有沒(méi)有了解過(guò)如何編寫(xiě)一個(gè)桌面應(yīng)用?歷史上,我們都有哪些方式去編寫(xiě)桌面應(yīng)用呢? 實(shí)際上,桌面應(yīng)用的歷史并不算久遠(yuǎn),不去查找各種資料,僅憑記憶,我能想...

    wawor4827 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<