资讯专栏INFORMATION COLUMN

理解deno-基础篇

heartFollower / 3117人阅读

摘要:介绍是一个基于和的的安全运行时。文件中主要是的代码,是功能的具体实现。图来自于官网,图的架构图预告接下来还会有两篇文章分析的内部原理

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://www.ucloud.cn/yun/102405.html

相关文章

  • deno原理-通信实现

    摘要:理解基础篇原理篇一启动加载通信方式执行代码和相似,包含同步和异步的方式,异步方式通过的实现。同时在异步通信完成后,会创建一个对象,将作为,作为,加入中。 理解deno-基础篇deno-原理篇一启动加载 通信方式 deno执行代码和node相似,包含同步和异步的方式, 异步方式通过async的实现。 Typescript/Javascript调用rust 在上一节中讲到deno的启动时会...

    ChristmasBoy 评论0 收藏0
  • Deno 并不是下一代 Node.js

    摘要:长文预警字,图。开发并不是因为,也不是为了取代。不知道从官方介绍来看,可以认为它是下一代是如何脑补出来的。只是一个原型或实验性产品。所以,不是要取代,也不是下一代,也不是要放弃重建生态。的目前是要拥抱浏览器生态。 这几天前端圈最火的事件莫过于 ry(Ryan Dahl) 的新项目 deno 了,很多 IT 新闻和媒体都用了标题:下一代 Node.js。这周末读了一遍 deno 的源码,...

    mmy123456 评论0 收藏0
  • Deno 兼容浏览器具体指的是什么?

    摘要:里面有一句描述,可以看到的目标是兼容浏览器。那么这里的兼容浏览器到底如何是什么意思呢我简单谈谈我的理解吧。很多人还有误解以为兼容浏览器指的是会提供类似里的写法。 Deno 里面有一句描述:Aims to be browser compatible,可以看到 Deno 的目标是兼容浏览器。那么这里的兼容浏览器到底如何是什么意思呢? 我简单谈谈我的理解吧。 首先这里的兼容性肯定不是 Den...

    Yangyang 评论0 收藏0
  • 从源码一步步学习,Ryan Dahl的Deno实现原理

    摘要:之父在中的设计错误演讲中表示不允许将任意本地函数绑定至当中。所有系统调用都将通过消息传递完成序列化。两项原生函数与。这既简化了设计流程,又使得系统更易于审计。 Node之父ry:在Node中的设计错误演讲中表示: 不允许将任意本地函数绑定至 V8 当中。 所有系统调用都将通过消息传递完成(protobuf 序列化)。 两项原生函数:send 与 recv。 这既简化了设计流程,又使得...

    goji 评论0 收藏0
  • 我为 VS Code 开发了一个 Deno 插件

    摘要:自发布以来就备受关注,也有很多媒体和开发者称为下一代。所以在写这个插件之前,我又为写了一个插件。插件提供了开箱即用的支持,开发者不需要任何配置,但是有一个前提是开发者需要使用内置的。 这几天为 Deno 开发了一个 VS Code 插件:Deno support for VSCode,GitHub 地址:https://github.com/justjavac/...。 自 Deno ...

    YanceyOfficial 评论0 收藏0

发表评论

0条评论

heartFollower

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<