理解deno-基础篇
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 javascript
test.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.js
run 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的部分文件截图
图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的内部原理~~~
原文地址:https://segmentfault.com/a/1190000018399769
相关推荐
-
递归与分治-合并排序、快速排序以及循环赛问题 c/c++
2019-6-30
-
区分指针、变量名、指针所指向的内存 c/c++
2019-4-1
-
Chapter 1 基于CUDA的异构并行计算 c/c++
2019-3-29
-
c/c++ code JSON c/c++
2019-4-1
-
数据结构与算法系列之绪论 c/c++
2019-3-30
-
STL容器之deque c/c++
2019-4-1
-
learn openMVG-安装和简介 c/c++
2019-3-29
-
c++ 栈的基本应用 c/c++
2019-7-24
-
二叉排序树实现(C++封装) c/c++
2019-4-1
-
C/C++ – 压榨结构体的空间 c/c++
2019-4-1