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

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

洒脱喜 发布在 竞争币 42688

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

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

Canister SDK

(图片来自Dfinity)

 

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

 

而在了解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

 

评论
登录 账号发表你的看法,还没有账号?立即免费 注册