日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Dart 中 JS 互操作的歷史,你知道嗎?

來源: 責編: 時間:2024-04-09 17:22:32 226觀看
導讀由于在 Dart 3.3 中達到了令人興奮的 JavaScript 互操作里程碑,Wasm 的支持剛剛登陸當前的 Flutter 測試版。為了慶祝這一里程碑,我們回顧了 Dart 和 JavaScript 互操作性長達十年的歷程。從 Dart 誕生之初,互操作性就是

由于在 Dart 3.3 中達到了令人興奮的 JavaScript 互操作里程碑,Wasm 的支持剛剛登陸當前的 Flutter 測試版。為了慶祝這一里程碑,我們回顧了 Dart 和 JavaScript 互操作性長達十年的歷程。VMR28資訊網——每日最新資訊28at.com

從 Dart 誕生之初,互操作性就是一個核心重點。2011 年 Dart 首次發布時,它被設計為可嵌入和多平臺的。它可以運行在獨立的虛擬機上,嵌入到瀏覽器中,并編譯為 JavaScript。2015 年 Flutter 出現時,我們也準備將其嵌入其中。現在,我們也很高興能將 WasmGC 運行時作為目標。VMR28資訊網——每日最新資訊28at.com

起初,我們很快就暴露了嵌入 Dart 的各個平臺的功能。這就是我們的 SDK 平臺特定庫出現的方式:dart:io 暴露了虛擬機上的文件系統,dart:html 暴露了 Web 上的瀏覽器 API,等等。這些庫在外觀和感覺上都與普通的 Dart 庫無異,但其背后卻隱藏著一些復雜的底層本地原語,以使它們能正常工作。這是我們發明的第一種互操作形式。它具有很強的表現力,但僅限于 SDK 庫。VMR28資訊網——每日最新資訊28at.com

在 Web 上,開發人員需要訪問的不僅僅是瀏覽器 API。因此,我們開始研究如何開放互操作性,以覆蓋更多目標。作為起點,我們在 2013 年推出了 dart:js,以實現對 JavaScript 庫的訪問。VMR28資訊網——每日最新資訊28at.com

// 用于說明 Dart/JS 互操作的簡短 JavaScript 代碼示例window.myTopLevel = {  field1: 0,  method2() {    return this.field1;  }}
// 通過“dart:js”訪問(2013)import 'dart:js' as js;void main() {  // 這一行有一個錯字!哎呀 :(  var object = js.context['myTopLevl'];  object['field1'] = 1;  // 此調用因 noSuchMethod 失敗,因為 method2 返回一個 int,哎呀  object.callMethod('method2', []).substr(1);}

我們當時就知道,dart:js 并不是我們想要的編程模型。你必須使用字符串來訪問 JavaScript 中的名稱--別提在編譯時發現問題了,也別提代碼自動補全了!實現成本也很高。大多數操作都嚴重依賴盒和深度拷貝。因此,我們在 2014 年和 2015 年繼續起草各種想法,直到 package:js 的 v0.6 版本發布。VMR28資訊網——每日最新資訊28at.com

// 通過 `package:js` 訪問 (2015)import 'package:js/js.dart';// @JS 注解允許我們聲明 API 簽名:@JS()class MyObject {  external int get field1;  external void set field1(int value);  external String method2();}@JS()external MyObject get myTopLevel;void main() {  // 訪問代碼不容易出錯:分析器可以檢查  // 這些符號與聲明相匹配,而且我們還能獲得代碼補全!   var object = myTopLevel;  object.field1 = 1;  // 但是沒有檢查類型,這就在一個 int 上調用了子串,這是不正確的。  object.method2().substring(1);}

有了 package:js,我們終于有了高效、用戶友好的開放式 API。你可以在抽象類上添加一些注解,然后就可以訪問 JavaScript API 了。這一切就像魔法一樣神奇,直到它失效。使用 package:js 有很多無法實現的功能:直接訪問瀏覽器 API、重命名成員、轉換、附加 Dart 邏輯等等。為了彌補這些不足,我們還提供了 dart:js_util--一個類似于 dart:js 的輕量級、高效的底層 API 作為備用。package:js 中的所有限制確實困擾著我們,但我們束手無策。我們需要更多的 Dart 語言來做得更好。VMR28資訊網——每日最新資訊28at.com

大約在那個時候,我們已經在致力于對語言進行有史以來最大的改變——我們讓 Dart 聽起來更有趣。諷刺的是,當我們在 2018 年發布帶有 Dart 2.0 的新類型系統時,互操作性變得更糟!除了這些早期的限制之外,使 package:js 變得特別的魔法也有一個黑暗的一面——它無法檢查類型的有效性。這意味著我們的互操作性是我們原本健全的語言中不健全的根源。VMR28資訊網——每日最新資訊28at.com

之后,我們的工作重心發生了變化,轉而集中精力改進 Dart 和 JS-interop。我們遵循明確的原則(習慣化、表現力強、組合性強、精確、平易近人、務實、非神化和完整),轉向以類型和靜態分派為基礎的設計,并對 Dart 語言提出了挑戰。接下來的發展是并行的。VMR28資訊網——每日最新資訊28at.com

  • 2019 年,Dart 2.7 添加了靜態擴展方法。您可以將自定義 Dart 邏輯附加到 JS 互操作類并轉換值,例如將 JS Promise 轉換為 Dart Future ,而無需使用包裝器。
  • 2021 年,我們發布了 @staticInterop 和 package:js v0.6.4。最后,JS 互操作具有足夠的表現力 - 您可以公開以前由 dart:html 等 SDK 庫專門管理的瀏覽器 API。
  • 2023 年,當我們在 Dart 3.0 中放棄了不健全的空安全性時,我們終于看到了我們所取得的進步,我們的設計和 @staticInterop 的工作清楚地表明,我們已經準備好解決長期存在的健全性差距。

那一年,我們為 WasmGC 引入了編譯功能,并利用 JS 互操作在其上運行 Flutter web 等豐富的框架。這引發了 JS Types 的工作,以在編程模型中明確定義 Dart 和 JS 的邊界,并找到在 Wasm 和 JS 編譯目標中使用 JS 的一致方法。我們還開始了擴展類型語言實驗--這是 Dart 3.3 中推出的一項功能,它在 Dart 語言和 JS 互操作之間架起了一座橋梁。多年來,JS 互操作的行為(如類型擦除)與 Dart 中的任何其他行為都不匹配。有了擴展類型,JS 互操作終于可以習以為常,并在 Dart 開發工具中獲得應有的支持。VMR28資訊網——每日最新資訊28at.com

盡管一路走來經歷了許多轉變和轉折,但有一件事在整個十年中始終如一:我們的 Dart 社區的積極參與。社區成員采取了早期步驟測試并為 dart:js 做出貢獻,然后影響 package:js 的設計。他們編寫了工具來解決功能差距 (package:js_wrapping[1]),并嘗試通過自動生成 Dart API 來提高生產力的方法 (package:js_facade_gen[2] 、 package:js_bindings[3] 、 package:typings[4])VMR28資訊網——每日最新資訊28at.com

最后,我們已經到了 2024 年了。我們在 Dart 3.3 中發布了 dart:js_interop 以及 package:web ,這是 Dart 中 JS 互操作的最新解決方案,使將 Flutter 編譯為 Wasm 成為可能。VMR28資訊網——每日最新資訊28at.com

// 通過 `dart:js_interop` 訪問 (2024)import 'dart:js_interop';// 聲明使用擴展類型,這與 package:js// 聲明非常相似。主要區別在于:它們是靜態調度的。extension type MyObject._(JSObject _) implements JSObject {  external int get field1;  external void set field1(int value);  external String method2();}@JS()external MyObject get myTopLevel;void main() {  var object = myTopLevel;  object.field1 = 1;  // At last, access is sound - this line fails with a type error  // when returning from method2.  object.method2().substring(1);}
  • dart:js_interop 是一種靜態、健全、慣用、富有表現力且一致的互操作形式,基于能夠公開任何 JavaScript 或瀏覽器 API 的擴展類型。
  • package:web 使用 dart:js_interop 完成 13 年前 dart:html 曾經做過的事情,但是 JavaScript 和 WasmGC 都支持這種方式。

今天,我們很高興慶祝 Dart/JS 互操作的新形式及其所帶來的未來。了解我們的過去,我們確信這不是旅程的終點,而是我們歷史上令人興奮的時刻。VMR28資訊網——每日最新資訊28at.com

我們迫不及待地想看看您將用它構建什么!VMR28資訊網——每日最新資訊28at.com

原文:https://medium.com/dartlang/history-of-js-interop-in-dart-98b06991158fVMR28資訊網——每日最新資訊28at.com

VMR28資訊網——每日最新資訊28at.com

VMR28資訊網——每日最新資訊28at.com

參考資料

[1]package:js_wrapping: https://github.com/a14n/dart-js-wrappingVMR28資訊網——每日最新資訊28at.com

[2]package:js_facade_gen: https://github.com/dart-archive/js_facade_genVMR28資訊網——每日最新資訊28at.com

[3]package:js_bindings: https://pub.dev/packages/js_bindingsVMR28資訊網——每日最新資訊28at.com

[4]package:typings: https://pub.dev/packages/typingsVMR28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-82365-0.htmlDart 中 JS 互操作的歷史,你知道嗎?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 教你如何玩轉Next Image

下一篇: 圖解 CSS Grid 布局,一起來看看 CSS Grid 布局是如何使用的

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 一加Ace2 Pro官宣:普及16G內存 引領24G

    一加官方今天繼續為本月發布的新機一加Ace2 Pro帶來預熱,公布了內存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領,還有呢?#一加Ace2Pro#,2023 年 8 月,敬請期待。”同時
  • 摸魚心法第一章——和配置文件說拜拜

    為了能摸魚我們團隊做了容器化,但是帶來的問題是服務配置文件很麻煩,然后大家在群里進行了“親切友好”的溝通圖片圖片圖片圖片對比就對比,簡單對比下獨立配置中心和k8s作為配
  • 一篇聊聊Go錯誤封裝機制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • 深度探索 Elasticsearch 8.X:function_score 參數解讀與實戰案例分析

    在 Elasticsearch 中,function_score 可以讓我們在查詢的同時對搜索結果進行自定義評分。function_score 提供了一系列的參數和函數讓我們可以根據需求靈活地進行設置。近期
  • 新電商三兄弟,“抖快紅”成團!

    來源:價值研究所作 者:Hernanderz 隨著內容電商的概念興起,抖音、快手、小紅書組成的“新電商三兄弟”成為業內一股不可忽視的勢力,給阿里、京東、拼多多帶去了巨大壓
  • 蘋果、三星、惠普等暫停向印度出口筆記本和平板電腦

    集微網消息,據彭博社報道,在8月3日印度突然禁止在沒有許可證的情況下向印度進口電腦/平板及顯示器等產品后,蘋果、三星電子和惠普等大公司暫停向印度
  • 英特爾Xe-HP項目終止,將專注Xe-HPC/HPG系列顯卡

    據10 月 31 日消息報道,英特爾高級副總裁兼加速計算系統和圖形事業部總經理 表示,Xe-HP“ Arctic Sound” 系列服務器 GPU 已經應用于 oneAPI devcloud 云服
  • 2022爆款:ROG魔霸6 冰川散熱系統持續護航

    喜逢開學季,各大商家開始推出自己的新產品,進行打折促銷活動。對于忠實的端游愛好者來說,能夠擁有一款夢寐以求的筆記本電腦是一件十分開心的事。但是現在的
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲第一页在线| 免费试看一区| 一区二区三区福利| 亚洲一级片在线看| 久久国产色av| 欧美xx69| 欧美午夜精品久久久久久孕妇| 国产精品va在线播放我和闺蜜| 国产精品自拍小视频| 精品成人在线观看| 99国产精品久久久久久久| 亚洲视频1区| 久久国产黑丝| 欧美黄污视频| 国产精品久久久久毛片软件| 狠狠色狠狠色综合| 一区二区三区|亚洲午夜| 亚洲欧美一区二区三区久久| 免费亚洲一区| 国产精品一卡二卡| 在线观看91久久久久久| 亚洲一区二区三区影院| 六月丁香综合| 国产精品丝袜白浆摸在线| 亚洲福利视频网| 亚洲欧美日韩区| 欧美高清一区二区| 国产亚洲精品v| 一本色道久久综合亚洲精品小说| 久久精品理论片| 欧美性片在线观看| 亚洲国产99| 欧美亚洲在线| 欧美日韩中文在线观看| 在线免费观看欧美| 欧美一区二区视频在线观看| 亚洲日本中文字幕区| 亚洲欧美日韩另类| 欧美日韩国产三区| 曰本成人黄色| 午夜精品剧场| 欧美日韩网站| 亚洲激情在线播放| 久久久999国产| 国产精品欧美精品| 99riav国产精品| 麻豆精品视频在线观看| 国产日韩欧美黄色| 亚洲午夜精品一区二区| 欧美福利视频一区| 一区二区亚洲精品| 欧美中文字幕在线观看| 国产精品国产精品国产专区不蜜| 亚洲日本aⅴ片在线观看香蕉| 久久精品99国产精品| 国产精品久久久一区二区| 亚洲精选一区二区| 欧美~级网站不卡| 国自产拍偷拍福利精品免费一| 亚洲男人的天堂在线aⅴ视频| 欧美日韩高清在线一区| 亚洲精品国产精品国自产在线 | 国产精品久久一级| 一本色道久久综合亚洲91 | 国产一区二区丝袜高跟鞋图片 | 欧美日韩亚洲另类| 亚洲精品专区| 欧美成人免费在线| 在线国产欧美| 久久午夜影视| 伊人成年综合电影网| 久久久人成影片一区二区三区| 国产日韩精品久久| 亚久久调教视频| 国产欧美日韩视频一区二区| 亚洲欧美综合一区| 国产婷婷成人久久av免费高清| 午夜精品久久久久久久| 国产精品人人爽人人做我的可爱| 亚洲一级黄色片| 国产精品美女久久久免费| 亚洲欧美日韩国产综合| 国产精一区二区三区| 亚洲欧美日韩直播| 国产欧美日韩中文字幕在线| 欧美一区二区在线免费播放| 国产一区日韩一区| 久久美女艺术照精彩视频福利播放| 国产一区在线看| 久久野战av| 在线观看成人av电影| 欧美成年人视频网站| 日韩视频国产视频| 欧美三级在线视频| 亚洲伊人色欲综合网| 国产精品欧美久久| 欧美在线观看网站| 一区在线播放| 欧美激情视频网站| 正在播放欧美视频| 国产精品自拍三区| 久久精品一区中文字幕| 揄拍成人国产精品视频| 欧美高清在线一区二区| 99热精品在线| 国产日韩精品综合网站| 久久免费视频在线观看| 亚洲国产精品久久久久秋霞不卡 | 亚洲一级黄色| 韩国av一区二区三区| 欧美成人精品在线视频| 一区二区免费在线视频| 国产精品一区二区久久精品| 久久午夜激情| 日韩视频三区| 国产乱码精品一区二区三区忘忧草 | 国产综合一区二区| 蜜臀91精品一区二区三区| 亚洲最黄网站| 国产午夜亚洲精品理论片色戒| 麻豆视频一区二区| 这里只有精品电影| 国内外成人免费激情在线视频网站| 欧美成人免费视频| 亚洲女人天堂成人av在线| 黄网站色欧美视频| 欧美久久久久免费| 欧美一区二区三区免费在线看 | 91久久精品网| 国产精品任我爽爆在线播放 | 国产日韩在线播放| 欧美成人免费播放| 午夜日韩电影| 亚洲精品久久久久久下一站 | 欧美亚洲日本国产| 亚洲人午夜精品免费| 国产毛片一区二区| 欧美大尺度在线观看| 香蕉国产精品偷在线观看不卡 | 亚洲欧美国产毛片在线| 在线观看视频欧美| 国产精品毛片大码女人| 蜜臀a∨国产成人精品| 亚洲综合国产精品| 最新成人在线| 国产日韩在线不卡| 欧美日韩精品一区| 久久琪琪电影院| 亚洲免费影视| 亚洲乱码日产精品bd| 国内精品久久久久久久果冻传媒 | 亚洲国产一区视频| 国产亚洲一二三区| 欧美日韩在线免费观看| 噜噜噜噜噜久久久久久91| 午夜国产精品影院在线观看 | 免费在线观看日韩欧美| 午夜欧美精品| 一区二区三区四区蜜桃| 亚洲精品1区| 黄色免费成人| 国产精品婷婷午夜在线观看| 欧美精品一区二区视频| 久久亚洲综合色| 先锋影音网一区二区| 99这里只有久久精品视频| 1000部国产精品成人观看| 国产欧美日韩综合一区在线观看 | 国内精品免费午夜毛片| 国产精品久久久久久久久久免费看 | 男同欧美伦乱| 久久久国产精品一区二区中文 | 久久久精品tv| 香蕉成人久久| 亚洲一区二区免费| 一本色道**综合亚洲精品蜜桃冫 | 久久久人成影片一区二区三区 | 国产精品视屏| 国产精品国产自产拍高清av王其| 欧美精品成人91久久久久久久| 久久人人爽人人| 久久电影一区| 欧美一区久久| 香蕉久久夜色精品国产使用方法| 亚洲深夜av| 一区二区黄色| 一个色综合导航| 日韩亚洲欧美成人一区| 亚洲精品视频在线观看网站| 亚洲国产精品va在线看黑人| 影音先锋在线一区| 黄色欧美日韩| 尤物yw午夜国产精品视频明星| 狠狠88综合久久久久综合网| 国产日韩欧美精品在线| 国产美女精品| 国产欧美一区二区三区在线看蜜臀 | 欧美日韩一区在线观看| 欧美区视频在线观看| 欧美另类在线观看| 欧美日韩国产精品一卡| 欧美日韩日韩| 欧美日韩亚洲一区二| 欧美美女bb生活片|