fbpx
维基百科

E语言

E语言是1997年由Mark S. Miller英语Mark S. MillerDan Bornstein和Electric Communities的其他人创建的用于安全分布式计算面向对象程序设计语言。E语言主要源自于安全分布式编程中Java的并行语言Joule英语Joule programming language和Original-E,后者是Java的一组扩展。E将基于消息的计算与类Java语法相结合。基于事件循环Promise英语promise (programming)并发模型确保永远不会发生死锁

E语言
编程范型多范型面向对象消息传递
設計者Mark S. Miller英语Mark S. Miller
发行时间1997
型態系統强类型动态类型
操作系统跨平台
許可證portions in different free licenses英语Free software licence
網站erights.org
主要實作產品
E-on-Java, E-on-CL
啟發語言
Joule英语Joule programming language, Original-E, Java
影響語言
Pony

开发理念以及过程 编辑

E语言在设计时考虑到了安全计算; 这主要是通过严格遵守面向对象计算模型来实现的,面向对象计算模型的纯形式具有支持安全计算的属性。E语言及其标准库始终采用基于能力英语capability-based security的设计理念,以帮助程序员构建安全的软件,并使软件组件即使彼此不完全信任也能够合作。在E语言中,对象引用用作功能,因此功能不增加计算或概念性开销。该语言的语法被设计为便于人们审查安全性缺陷。例如,词法作用域限制了必须检查对给定变量的影响的代码数量。另一个例子,语言使用==运算符进行比较,使用:=运算符进行赋值; 为了避免混淆的可能性,没有=运算符。

计算模型 编辑

在E语言中,所有值都是对象,计算是通过向对象发送消息来执行的。每个物体都属于一个vat(类似行程)。每个vat都有一个执行线程、一个堆栈帧和一个事件队列。分布式编程只是向远程对象(其他vat中的对象)发送消息的问题。与远程方的所有通信都由E运行时加密。到达的消息被放置到vat的事件队列中; vat的事件循环按到达的次序逐个处理传入的消息。

E语言有两种发送消息的方式:即时呼叫eventual发送。立即调用类似于非并发语言中的典型函数或方法调用:发送方等待接收方完成并返回值。eventual发送发送消息,同时为结果生成一个占位符,称为promise。发送者立即带着promise继续执行。之后,当接收者完成并产生结果时,promise将解析为结果。由于在与远程对象通信时只允许eventual发送,因此不会发生死锁。在分布式系统中,promise机制还可以最小化由网络延迟引起的延迟。

语法和示例 编辑

E的语法与Java最为相似,尽管它也与PythonPascal有些相似。变量都是动态类型的,并且有词法作用域。然而,与Java或Python不同的是,E完全由表达式英语expression (programming)组成。下面是一个非常简单的E语言程序:

 println("Hello, world!") 

这里有一个递归函数,用于计算一个数的阶乘,它是用E语言写的。函数使用def关键字定义。

 def factorial(n :int) :int { if (n == 1) { return 1 } else if (n > 0) { return n * factorial(n-1) } else { throw("invalid argument to factorial: "+n) } } 

在第一行中,:int是约束函数的参数和结果的“守卫”。守卫与类型声明并不完全相同;守卫是可选的,可以指定约束。第一个:int确保函数体只需要处理整数参数。如果没有上面的第二个:int参数,函数将不能返回值。能够事先看到函数的信息泄漏,有利于安全审计。

由于E的目的是支持安全合作,因此E程序的典型例子是挖矿,它是一个简单的电子货币系统,只需几行E代码。下面的代码定义了一个挖矿的函数,其中每个矿厂都有自己的货币。每个矿厂可以制造装有自己货币的钱包,任何两个同一种货币的钱包的持有者都可以安全地在两个钱包之间转账。通过快速检查源代码,E程序员可以很容易地验证只有矿厂可以改变流通中的货币数量,货币只能被创造而不能被销毁,矿厂只能创造自己的货币,只有钱包的持有者才能改变它的余额。

 def makeMint(name) :any { def [sealer, unsealer] := makeBrandPair(name) def mint { to makePurse(var balance :(int >= 0)) :any { def decr(amount :(0..balance)) :void { balance -= amount } def purse { to getBalance() :int { return balance } to sprout() :any { return mint.makePurse(0) } to getDecr() :any { return sealer.seal(decr) } to deposit(amount :int, src) :void { unsealer.unseal(src.getDecr())(amount) balance += amount } } return purse } } return mint } 

在E语言中使用def关键字定义对象,在对象定义中,to关键字开始每个方法。本例中的守卫表达式说明了如何指定值约束(如:(int >= 0):(0..balance))。

挖矿的例子使用了一个内置的机制,称为sealer。函数makeBrandPair创建了两个关联对象,一个sealer和一个unsealer,这样sealer就可以在一个盒子中封口一个对象,而unsealer就是唯一可以检索盒子中内容的对象。有关此货币示例的更详细说明,请参阅E语言的网站。[1]

参考文献 编辑

  1. ^ Rees, Jonathan; Miller, Mark. From Objects To Capabilities - Simple Money. erights.org. ERights. 2001 [2014-07-08]. (原始内容于2014-07-24). Before presenting the following simple example of capability-based money, we must attempt to head off a confusion this example repeatedly causes. We are not proposing to actually do money this way! A desirable money system must also provide for... 

外部链接 编辑

  • 官方网站

e语言, 提示, 此条目的主题不是易语言, 此條目需要补充更多来源, 2018年11月28日, 请协助補充多方面可靠来源以改善这篇条目, 无法查证的内容可能會因為异议提出而被移除, 致使用者, 请搜索一下条目的标题, 来源搜索, 网页, 新闻, 书籍, 学术, 图像, 以检查网络上是否存在该主题的更多可靠来源, 判定指引, 是1997年由mark, miller, 英语, mark, miller, bornstein和electric, communities的其他人创建的用于安全分布式计算的面向对象程序设计语言. 提示 此条目的主题不是易语言 此條目需要补充更多来源 2018年11月28日 请协助補充多方面可靠来源以改善这篇条目 无法查证的内容可能會因為异议提出而被移除 致使用者 请搜索一下条目的标题 来源搜索 E语言 网页 新闻 书籍 学术 图像 以检查网络上是否存在该主题的更多可靠来源 判定指引 E语言是1997年由Mark S Miller 英语 Mark S Miller Dan Bornstein和Electric Communities的其他人创建的用于安全分布式计算的面向对象程序设计语言 E语言主要源自于安全分布式编程中Java的并行语言Joule 英语 Joule programming language 和Original E 后者是Java的一组扩展 E将基于消息的计算与类Java语法相结合 基于事件循环和Promise 英语 promise programming 的并发模型确保永远不会发生死锁 E语言编程范型多范型 面向对象 消息传递設計者Mark S Miller 英语 Mark S Miller 发行时间1997型態系統强类型 动态类型操作系统跨平台許可證portions in different free licenses 英语 Free software licence 網站erights wbr org主要實作產品E on Java E on CL啟發語言Joule 英语 Joule programming language Original E Java影響語言Pony 目录 1 开发理念以及过程 2 计算模型 3 语法和示例 4 参考文献 5 外部链接开发理念以及过程 编辑E语言在设计时考虑到了安全计算 这主要是通过严格遵守面向对象计算模型来实现的 面向对象计算模型的纯形式具有支持安全计算的属性 E语言及其标准库始终采用基于能力 英语 capability based security 的设计理念 以帮助程序员构建安全的软件 并使软件组件即使彼此不完全信任也能够合作 在E语言中 对象引用用作功能 因此功能不增加计算或概念性开销 该语言的语法被设计为便于人们审查安全性缺陷 例如 词法作用域限制了必须检查对给定变量的影响的代码数量 另一个例子 语言使用 运算符进行比较 使用 运算符进行赋值 为了避免混淆的可能性 没有 运算符 计算模型 编辑在E语言中 所有值都是对象 计算是通过向对象发送消息来执行的 每个物体都属于一个vat 类似行程 每个vat都有一个执行线程 一个堆栈帧和一个事件队列 分布式编程只是向远程对象 其他vat中的对象 发送消息的问题 与远程方的所有通信都由E运行时加密 到达的消息被放置到vat的事件队列中 vat的事件循环按到达的次序逐个处理传入的消息 E语言有两种发送消息的方式 即时呼叫和eventual发送 立即调用类似于非并发语言中的典型函数或方法调用 发送方等待接收方完成并返回值 eventual发送发送消息 同时为结果生成一个占位符 称为promise 发送者立即带着promise继续执行 之后 当接收者完成并产生结果时 promise将解析为结果 由于在与远程对象通信时只允许eventual发送 因此不会发生死锁 在分布式系统中 promise机制还可以最小化由网络延迟引起的延迟 语法和示例 编辑E的语法与Java最为相似 尽管它也与Python和Pascal有些相似 变量都是动态类型的 并且有词法作用域 然而 与Java或Python不同的是 E完全由表达式 英语 expression programming 组成 下面是一个非常简单的E语言程序 println Hello world 这里有一个递归函数 用于计算一个数的阶乘 它是用E语言写的 函数使用def关键字定义 def factorial n int int if n 1 return 1 else if n gt 0 return n factorial n 1 else throw invalid argument to factorial n 在第一行中 int是约束函数的参数和结果的 守卫 守卫与类型声明并不完全相同 守卫是可选的 可以指定约束 第一个 int确保函数体只需要处理整数参数 如果没有上面的第二个 int参数 函数将不能返回值 能够事先看到函数的信息泄漏 有利于安全审计 由于E的目的是支持安全合作 因此E程序的典型例子是挖矿 它是一个简单的电子货币系统 只需几行E代码 下面的代码定义了一个挖矿的函数 其中每个矿厂都有自己的货币 每个矿厂可以制造装有自己货币的钱包 任何两个同一种货币的钱包的持有者都可以安全地在两个钱包之间转账 通过快速检查源代码 E程序员可以很容易地验证只有矿厂可以改变流通中的货币数量 货币只能被创造而不能被销毁 矿厂只能创造自己的货币 只有钱包的持有者才能改变它的余额 def makeMint name any def sealer unsealer makeBrandPair name def mint to makePurse var balance int gt 0 any def decr amount 0 balance void balance amount def purse to getBalance int return balance to sprout any return mint makePurse 0 to getDecr any return sealer seal decr to deposit amount int src void unsealer unseal src getDecr amount balance amount return purse return mint 在E语言中使用def关键字定义对象 在对象定义中 to关键字开始每个方法 本例中的守卫表达式说明了如何指定值约束 如 int gt 0 或 0 balance 挖矿的例子使用了一个内置的机制 称为sealer 函数makeBrandPair创建了两个关联对象 一个sealer和一个unsealer 这样sealer就可以在一个盒子中封口一个对象 而unsealer就是唯一可以检索盒子中内容的对象 有关此货币示例的更详细说明 请参阅E语言的网站 1 参考文献 编辑 Rees Jonathan Miller Mark From Objects To Capabilities Simple Money erights org ERights 2001 2014 07 08 原始内容存档于2014 07 24 Before presenting the following simple example of capability based money we must attempt to head off a confusion this example repeatedly causes We are not proposing to actually do money this way A desirable money system must also provide for 外部链接 编辑官方网站 取自 https zh wikipedia org w index php title E语言 amp oldid 61954426, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。