34

Dfinity离上线不远了?新发布的Motoko编程语言和Canister SDK了解下 | Odaily星球日报

 4 years ago
source link: https://www.odaily.com/post/5142261
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Dfinity离上线不远了?新发布的Motoko编程语言和Canister SDK了解下

巴比特2019-11-03

Dfinity将成为以太坊竞品。

编者按:本文来自巴比特,译者洒脱喜;原文来自Dfinity官方,Odaily星球日报经授权转载。

Dfinity离上线不远了?新发布的Motoko编程语言和Canister SDK了解下

曾在3轮融资中共获得1.95亿美元的公链平台Dfinity,其开发团队在昨日发布了它的编程语言Motoko以及软件开发工具包Canister SDK的Alpha版本。

据悉,Dfinity曾获得 Andreesen Horowitz、Polychain Capital 等圈内一线投机机构的青睐,曾被认为是“下一代”公链的有力竞争者,中文社区则将其称为“蒂芙尼”,而其自身的定义是成为“互联网计算机”。 

所谓的互联网计算机是指什么?

而在了解Dfinity这次发布的产品之前,我们还需要了解两个概念,一个就是“互联网计算机”,另一个就是“Canister”。

那么,它们到底是指什么呢,我们先看官方给出的解释:

“对于使用Motoko语言编写的软件服务,互联网计算机提供了托管这些服务的单个共享操作系统的抽象。每个服务都是一个Canister(容器),其由元数据、静态内容以及编译后Motoko软件的Wasm模块(也可以是来自另一种语言的Wasm模块)组成。

互联网计算机上的每个Canister(容器)实现一个微服务,该微服务通过防篡改、异步消息传递和强通信保证与其他微服务交互。

而在底层,互联网计算机是一个由安全通信的联网计算机组成的网络,它们共同为注册用户、开发人员和其他计算机处理服务。

与传统的公共或私有云(如AWS、谷歌云平台或微软Azure)不同,互联网计算机平台托管的程序都是分布式的,而平台本身并不是由单个私有公司拥有和运营。

相反,它的分布式架构,使得多台计算机能够作为一个强大的虚拟机运行。此虚拟机没有单点故障,它独立于易受攻击的传统IT技术运行。因此,互联网计算机为托管Motoko微服务提供了一个独特、开放且不可阻挡的平台。”

好吧,实际上,Dfinity的愿景与以太坊是“一毛一样”的,我们可以把它视为一个竞争品。 

Canister SDK和Motoko编程语言

简单的说,Canister SDK 的存在目的是让你能够轻松地在DFINITY平台上构建应用和服务。

根据DFINITY官方发布的信息来看,目前的Canister SDK还只是一个Alpha版本,其暂时只支持 macOS和Linux平台,而在发布正式版本之前,开发者会定期对其进行检查并尝试新的功能。

而Motoko,则是一种现代编程语言,其旨在让那些熟悉JavaScript或其他现代编程语言(如Rust、Swift、TypeScript、C#或Java)的现代面向对象和函数式编程习惯用法的程序员,能够轻松使用这种语言,并为“DFINITY”平台做贡献。

Motoko 语言允许编程者使用现代编程习惯,包括分布式应用的特殊编程抽象。每个应用都由一个actor组成,该actor与其他actor通信时不使用共享状态,而是使用(异步)消息传递。

Motoko语言基于actor的编程抽象允许人类可读的消息传递模式,并且它们强制所有网络交互遵守某些规则并避免某些常见错误。

具体来说, Motoko类型系统静态地检查每个motoko程序是否在所有可能的输入上安全地执行,而没有内部类型错误。因此,其排除了其他语言中常见的编程陷阱类,包括空指针错误、参数和结果类型不匹配及很多其它陷阱类型。

Motoko语言亮点

 1、原生Canister支持

actor Counter {

var value = 0;
public func inc() : async Nat {
value += 1;
return value;
};
}

Motoko语言对互联网计算机软件Canister有原生支持,这些软件Canister表示为actor、封装其状态并通过异步消息进行通信的自治对象。

2、以直接样式顺序编码

actor Factorial {

var last = 1;
public func next() : async Nat {
last *= (await Counter.inc());
return last;
}
}

在互联网计算机上,软件Canister会异步调用其它Canister,但Motoko语言能够使你以直接样式顺序编程你的系统。

异步消息是返回future的函数调用,await结构则允许链接调用,就好像它们是同步的一样。

3、Modern类型系统

type Tree<T> = { #leaf : T; #branch : {left : Tree<T>; right : Tree<T>}; };

func iterTree<T>(tree : Tree<T>, f : T -> ()) { switch (tree) { case (#leaf(x)) { f(x) }; case (#branch{left; right}) { iterTree<T>(left, f); iterTree<T>(right, f); }; } }

Motoko语言的设计对于熟悉Javascript和其他流行编程语言的人来说是非常直观的,但是它具有现代语言特征,比如完备的结构类型、泛型、变体类型以及核实模式匹配。

4、自动生成IDL文件

service Counter : {
inc : () -> (nat);
reset : () -> ();
}

SDK会导出你的接口定义,因此其它Canister、浏览器驻留代码以及具有权限的智能手机应用可调用你的函数。Motoko编译器还可读写接口定义文件,允许Motoko与使用其它编程语言编写的Canister进行无缝交互。

5、正交持久性

(Orthogonal persistence) import Dict = "mo:dict";

actor Registry { type Id = Nat64; let dict = Dict<Id>(); public func register(name : Text, id : Id) { dict.insert<Id>(name, id); }; public func lookup(name : Text, id : Id) : async ?Id { dict.lookup<Id>(name); }; }

互联网计算机会保留Canister运行的寄存器页。因此,参与者及其所有寄存器数据结构的状态将无限期地存在,不需要显式地“保存”它们。Motoko提供了很多功能来帮助你利用这个环境,包括允许你在升级Canister软件时实现自迁移的语言功能。

另外,Motoko还提供了很多很酷的功能,包括对WebAssembly虚拟机的深度支持,其允许你使用其它语言编写的模块链接到你的Canister中。

想要了解Dfinity SDK更多的信息?你可以看这里:https://sdk.dfinity.org/developers-guide/quickstart.html

关于Motoko语言的?你可以看这里:https://sdk.dfinity.org/language-guide/index.html

本文来自投稿,不代表Odaily立场。如若转载请注明出处。

Odaily星球日报提醒,请广大读者树立正确的货币观念和投资理念,理性看待区块链,切实提高风险意识;对发现的违法犯罪线索,可积极向有关部门举报反映。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK