摘要:介紹是一個基于和的的安全運行時。文件中主要是的代碼,是功能的具體實現。圖來自于官網,圖的架構圖預告接下來還會有兩篇文章分析的內部原理
deno介紹
deno是一個基于v8、rust和Tokio的Javascript/Typescript的安全運行時。它在內部嵌入了一個typescript的編譯器。可以將typescript編譯成js然后運行在v8上,并通過c++ libdeno實現js與rust的通信交互,當然deno也可以直接運行Javascript代碼。
deno安裝linux/mac
curl -fsSL https://deno.land/x/install/install.sh | sh
windows
iwr https://deno.land/x/install/install.ps1 | iex
詳細的細節請參考官網安裝介紹
deno的簡單例子 計算斐波那契數列公式摘抄自維基百科斐波那契數列
run javascripttest.js
function fibo(n) { if (n === 0) return 0; let fn = 0, nextFn = 1; let tmp_fn = 0, tmp_nextFn = 0; for (var i = 0; i < n; i++) { tmp_fn = nextFn; tmp_nextFn = nextFn + fn; fn = tmp_fn; nextFn = tmp_nextFn; } return tmp_fn; } console.log(fibo(13));
deno ./test.jsrun typescript
test.ts
function fibo(n: number) { if (n === 0) return 0; let fn: number = 0, nextFn: number = 1; let tmp_fn: number = 0, tmp_nextFn: number = 1; for (let i: number = 0; i < n; i++) { tmp_fn = nextFn; tmp_nextFn = nextFn + fn; fn = tmp_fn; nextFn = tmp_nextFn; } return tmp_fn; } console.log(fibo(13));
deno ./test.ts引入外部包
import * as log from "https://deno.land/x/std/log/mod.ts";執行異步方法
(async () => { for (let i = 1; i < Deno.args.length; i++) { let filename = Deno.args[i]; let file = await Deno.open(filename); await Deno.copy(Deno.stdout, file); file.close(); } })();deno內部結構
下圖1是deno的部分文件截圖
上圖中圈出來的三個文件夾分別是
js
libdeno
src
分別對應deno的api層、中間層、和實現層,其中js中主要是typescript的代碼,包含typescript的編譯器和deno暴露給用戶的api。libdeno中主要是c++代碼,用來加載v8實例,實現typescript和rust的通信。src文件中主要是rust的代碼,是deno功能的具體實現。例如用戶使用File實例的write方法來寫文件,實際上是api層(typescript)通過中間層(libdeno)將數據傳輸給實現層(rust),最終寫文件操作由rust去完成。deno結合了Typescript/Javascript的易用性和rust的系統語言能力。下圖2可以清晰的表示js和rust之間的邏輯關系。
預告
圖來自于官網,圖2 deno的架構圖
~~~接下來還會有兩篇文章分析deno的內部原理~~~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102405.html
摘要:理解基礎篇原理篇一啟動加載通信方式執行代碼和相似,包含同步和異步的方式,異步方式通過的實現。同時在異步通信完成后,會創建一個對象,將作為,作為,加入中。 理解deno-基礎篇deno-原理篇一啟動加載 通信方式 deno執行代碼和node相似,包含同步和異步的方式, 異步方式通過async的實現。 Typescript/Javascript調用rust 在上一節中講到deno的啟動時會...
摘要:長文預警字,圖。開發并不是因為,也不是為了取代。不知道從官方介紹來看,可以認為它是下一代是如何腦補出來的。只是一個原型或實驗性產品。所以,不是要取代,也不是下一代,也不是要放棄重建生態。的目前是要擁抱瀏覽器生態。 這幾天前端圈最火的事件莫過于 ry(Ryan Dahl) 的新項目 deno 了,很多 IT 新聞和媒體都用了標題:下一代 Node.js。這周末讀了一遍 deno 的源碼,...
摘要:里面有一句描述,可以看到的目標是兼容瀏覽器。那么這里的兼容瀏覽器到底如何是什么意思呢我簡單談談我的理解吧。很多人還有誤解以為兼容瀏覽器指的是會提供類似里的寫法。 Deno 里面有一句描述:Aims to be browser compatible,可以看到 Deno 的目標是兼容瀏覽器。那么這里的兼容瀏覽器到底如何是什么意思呢? 我簡單談談我的理解吧。 首先這里的兼容性肯定不是 Den...
摘要:之父在中的設計錯誤演講中表示不允許將任意本地函數綁定至當中。所有系統調用都將通過消息傳遞完成序列化。兩項原生函數與。這既簡化了設計流程,又使得系統更易于審計。 Node之父ry:在Node中的設計錯誤演講中表示: 不允許將任意本地函數綁定至 V8 當中。 所有系統調用都將通過消息傳遞完成(protobuf 序列化)。 兩項原生函數:send 與 recv。 這既簡化了設計流程,又使得...
摘要:自發布以來就備受關注,也有很多媒體和開發者稱為下一代。所以在寫這個插件之前,我又為寫了一個插件。插件提供了開箱即用的支持,開發者不需要任何配置,但是有一個前提是開發者需要使用內置的。 這幾天為 Deno 開發了一個 VS Code 插件:Deno support for VSCode,GitHub 地址:https://github.com/justjavac/...。 自 Deno ...
閱讀 955·2023-04-25 23:50
閱讀 1954·2021-11-19 09:40
閱讀 598·2019-08-30 13:50
閱讀 2727·2019-08-29 17:11
閱讀 1041·2019-08-29 16:37
閱讀 2986·2019-08-29 12:54
閱讀 2792·2019-08-28 18:17
閱讀 2636·2019-08-26 16:55