Dart2.6正式版發布了,支持編譯為三大系統的Native文件 [復制鏈接]

2019-11-11 10:24
aishare 閱讀:403 評論:0 贊:0
Tag:  Dart Native文

近日Dart團隊發布了Dart 又雙叒叕 更新了。是的,你沒聽錯。Dart團隊在11月初正式發布了 Dart2.6 的正式版本。(估計好多讀者內心波瀾:求你們別更新了,我學不動了)。別擔心,我在這里逐個幫大家分析一下Dart2.6這次更新有什么亮點,官方的都是英文,如果大家利用工具翻譯的話,機器翻譯的語言句子不通順,不太容易理解,所以這時候 精通英語四級的我 就派上用場了。專門幫大家整理了一些核心知識點,寫在這里分享給大家。作者寫文章不容易,覺得好看的話,點一下文末的“在看”,支持一下吧,謝謝大家。

通過前面的文章介紹,想必大家對Dart也有所了解了,Dart針對不同系統平臺提供了豐富的編譯器:適用于Android和iOS的“Flutter”,用于Web開發的“Flutter Web”,適用于桌面端的“Flutter”(該功能處于實驗中),使用AngularDart 進行Web開發等,這些都離不開Dart的編譯器。


最近Dart團隊推出了最新版本的Dart功能的更新,最大的亮點是:“dart2native”。它是現有編譯器基礎上的一個擴展,能夠將Dart程序編譯為包含預編譯(AOT)機器碼的self-contained的可執行程序。使用dart2native,您可以使用Dart 通過macOS,Windows或Linux上的命令行創建工具。此功能的演示圖如下所示:

相關鏈接:

Dart支持的系統平臺:

https://dart.dev/platforms

AngularDart介紹:

https://angulardart.dev/
1

DartNative和dart2native編譯器

Dart支持將AOT(預編譯)編譯為本地機器代碼已有多年,因此Dart Native是相當成熟的技術。但是過去,Dart僅通過Flutter在iOS和Android移動設備上發布了此功能。現在借助dart2native,擴展了native編譯支持,以支持運行macOS,Windows和Linux的傳統桌面操作系統。由于使用dart2native創建的可執行文件是獨立的,因此它們可以在未安裝Dart SDK的計算機上運行。并且由于它們是使用Dart的AOT編譯器進行編譯的,因此可執行文件僅在幾毫秒內即可開始運行。與其他Dart編譯器和運行時一樣,當編譯為native代碼時,Dart中可以使用相同的一套核心庫 core libraries。

如果你以前使用過dart2aot,那么從Dart2.6開始,你將使用dart2native,這個是dart2aot的超集,比dart2aot更完善。

2

Dart2.6下載和安裝

Dart官網已經支持Dart2.6的文檔,網址如下:

https://dart.dev/get-dart

首先我們找到下載地址,可以點擊:

https://dart.dev/tools/sdk/archive

然后在 Stable channel 里面,選擇你對應的系統(Windows、Linux、Mac),然后選擇根據你電腦對應的系統架構進行下載對應的文件,比如:X64是64位,ia32是32位。下好之后,解壓縮,選擇一個英文的安裝路徑(不要是Flutter的安裝路徑,否則會出現錯誤),然后將安裝路徑添加到環境變量“path”里面,重啟一下電腦,即可使用Dart命令行了。

【注意】:Dart SDK的安裝和Flutter內置的Dart SDK是不一致的,不能共用。需要單獨設置安裝文件夾分別存放。輸入dart –version,查看Dart版本號,輸入where dart查看Dart安裝路徑。如下圖所示:

使用dart2native編譯命令行應用程序

dart2native可以用于構建和部署命令行程序。通常會使用諸如:dart:io(基本I/O)、package:http(網絡操作)、package:args(參數解析)之類的庫。

下面看一下dart2native將“ hello.dart”應用編譯為可執行文件簡單的示例代碼:hello.dart源代碼:

接下來:編譯hello.dart為可執行文件:

編譯過程如下圖所示:

4dart2native對dart:ffi的增強及其兼容性

native應用程序通常需要從操作系統訪問本地API功能。這些系統api通常在本地的基于C的庫中存在,而Dart通過dart:ffi 支持與這些庫的互交互性,這是Dart 2.5的預覽版中推出的Dart與C交互的新功能。

Dart2.6對許多dart:ffi的API進行了重大更改,使我們的API易于使用,提供更多的類型安全性并提供對內存的便捷訪問,dart2native編譯器與dart:ffi兼容,因此您可以創建和編譯使用它的本地的dart應用程序。

Dart的某位團隊成員最近開始使用dart:ffi創建了一個用于控制臺應用程序開發的dart_console庫,它具有諸如獲取窗口尺寸、讀取和設置光標位置、管理顏色、讀取鍵和控制序列等功能。使用dart的能力:ffi使dart成為一種非常強大的控制臺應用程序語言。dart_console是Kilo文本編輯器的Dart版本實現。Kilo庫使用C語言編寫而成,大約有1000行代碼。

dart_console庫下載:

https://pub.dev/packages/dart_console

Kilo源碼地址:

https://github.com/antirez/kilo

500行代碼打造Dart控制臺代碼編輯器

使用dart:core核心庫、dart:ffi 和 dart_console 庫,我們可以創建非常有趣的控制臺應用程序。dart_console庫包括一個完整的 Kilo 演示,這是一個用大約500行Dart代碼編寫的控制臺文本編輯器。使用新的dart2native編譯器,我們可以輕松地打包它,最后得到一個7MB的self-contained代碼編輯器。

下圖是一個編譯編輯器的演示,然后使用編譯的編輯器編輯自己的源代碼來修復錯誤:

6

基于dart2native的服務端架構性能大大提升

對于無服務器后端,服務快速啟動至關重要。傳統上,基于Dart的服務與我們的JIT(即時)編譯器一起運行,但是基于JIT的執行在啟動時會存在較高的延遲,因為需要對其進行編譯和預熱后才能開始執行代碼。通過將服務的代碼提前編譯為native代碼,您可以避免這種延遲并立即開始運行。此外,使用native代碼,您可以創建具有較小磁盤占用空間且獨立的Dart services,從而大大減小了運行Dart services的容器的大小。實驗表明,使用dart2native編譯器,能夠將Docker鏡像的大小減少91%,從使用JIT編譯的220MB的代碼減少至使用native編譯的20MB的代碼!

有關服務器端應用程序和軟件包的更多詳細信息,可以查看以下文檔:

服務器端應用程:

https://dart.dev/tutorials/server/httpserver

軟件包:

https://dart.dev/server/libraries#server-packages

7

暫時尚未解決的問題

Dart2.6暫時還有一些問題需要解決的,主要有以下幾個:

Dart2.6暫不支持交叉編譯

dart2native編譯器僅支持為其運行的操作系統創建native代碼。因此,如果要為macOS,Windows和Linux上這三個平臺的程序創建可執行文件,則需要分別在各個平臺運行該編譯器。一種實現方法是使用能夠同時支持三種操作系統的CI(連續集成)程序。

暫不支持簽名

生成的可執行文件使用的格式與標準簽名工具(例如codesign和signtool)不兼容。

暫不支持dart:mirrors和dart:developer這兩個庫

8

其他功能

Dart 2.6還包含令人興奮的新語言功能“靜態擴展方法”的預覽版本,該功能允許像在特殊靜態類型的表達式的實例成員一樣,調用特別聲明的靜態函數。但是此功能仍然需要完善,官方也表示在下一個Dart SDK版本中將會正式啟動這個功能。Dart類具有虛擬方法,比如就像thing.doStuff()這樣的調用將調用thing表示的對象上的虛擬doStuff方法。向類添加方法的唯一方法是修改類。如果你是不是類的作者,你必須使用靜態輔助函數(functions),而不是方法(methods),因此使用 doMyStuff(thing) 代替 thing.doMyStuff()。這對于單個功能是可以接受的。

更多關于“靜態擴展方法”的資料可以查看官方的文檔介紹:

https://github.com/dart-lang/language/issues/41


我來說兩句
您需要登錄后才可以評論 登錄 | 立即注冊
facelist
所有評論(0)
領先的中文移動開發者社區
18620764416
7*24全天服務
意見反饋:[email protected]

掃一掃關注我們

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粵ICP備15117877號 )

龙江福彩p62开奖 千炮捕鱼怎么关闭游戏背景音乐 无人赚钱方式 闲来琼崖海南麻将 麻将客户端 百灵德州麻将 怎样复利赚钱 烤面筋怎么样赚钱吗 qq捕鱼大亨兑换码 养鸡赚钱游戏 李彦宏靠什么赚钱 冒险岛那个职业最赚钱 KK彩票安卓 qq农村怎么赚钱 dn祝福f强化卷强化什么赚钱 捕鸟达人 淮南黑车能赚钱吗