理解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的简单例子

计算斐波那契数列公式
clipboard.png

摘抄自维基百科斐波那契数列

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的部分文件截图

clipboard.png
图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之间的逻辑关系。

clipboard.png
图来自于 官网,图2 deno的架构图

预告

~~~接下来还会有两篇文章分析deno的内部原理~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值