xsdh良田s520rr怎么可以抽象理解

如何理解语言的抽象性?是不是语言就是抽摸不透的?为什么?_百度知道
如何理解语言的抽象性?是不是语言就是抽摸不透的?为什么?
语言的抽象性表现为词汇级抽象和语法级抽象。在词汇意义上每个词都是一般的、概括的,表示一类事物。如“笔”表示所有的笔,钢笔、铅笔、毛笔和圆珠笔等。语法意义更是人类思维长期抽象化的成果,是从具体的词句中抽象出来的。 人之俯恭碘枷鄢磺碉委冬莲所以能了解语言的意思,是因为语言是音义结合的,可以用来交际和进行思维的符号系统。语言符号包括形式和意义两个方面。语言是听觉可以感知的,感知的形式语音又是和意义结合在一起的。如“人”的语音形式ren,是听觉上可以感知的声音,它的意义是“两条腿走路、会说话、会干活的动物”。ren这个形式和“人”的意义结合,代表了客观世界中“人”这种事物。正因为如此,所以说语言是可以为人所了解的。不是语言就是抽摸不透的,我们能够将语言总结归纳出来 ,说明是有规律可循的···
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁如何理解抽象解释(abstract interpretation)?
按投票排序
CMU的PL专家Robert Harper在里说计算里分两个流派, 一是逻辑学家, 另一类是组合学家. 逻辑学家告诉你什么是合理的世界, 组合学家教你怎样去建造世界. 这么说:Fritz Henglein recently pointed out to me that the world of theoretical Computer Science is divided into two camps, which I’ll call the logicians (who are concerned with languages and semantics) and the combinatorialists (who are concerned with algorithms and complexity).
The logicians love to prove that programs work properly, the combinatorialists love to count how many steps a program takes to run.
Yet, curiously, the logicians hate the Booleans, and love abstractions such as trees or streams, whereas the combinatorialists love bits, and hate abstraction!
(O allow me my rhetorical devices.)抽象解释算是告诉你这么一个世界观: 分析程序, 不要死磕在最底层的具体的细节上, 要在更高的视野上去思考. 传统的解释器知道每个变量最具体的值, 是1, 是2, 还是false. 每个变量的值域就是它原始的值, 姑且称之为具体值域(concrete domain). 这种解释器其实就是具体解释器(concrete interpreter). 所以抽象解释之所以有这个名字就是因为每个变量的值域不是原始的值, 而是一个更高阶的抽象值域(abstract domain). 如果你写好了一个传统的解释器, 迁移到抽象解释器, 差不多就是写一个函数把具体值域映射到抽象值域. 当然你还要适当地修改一下解释器处理抽象值的代码, 也就是语义(semantics), 如之前传统的解释器里1+1返回2, 但是对于做类型推导的抽象解释器看到的是int+int返回的是int. 但是怎么样设计这个抽象值域以及对应语义函数, 抽象解释不管这个, 人家只是告诉你需要这么些东西. 当你辛辛苦苦想出了这些, 抽象解释又跳出来, 哒哒, 你的抽象值域满不满足Galois Connection呀? 你的语义函数是不是单调函数哇? ......所以知道抽象解释为啥叫这个名字, 也没啥用. 真正要应用它, 就得撸起袖管, 拿起笔分析程序. # 资料1. CMU的Soonho Kong博士写过一个很好看的, 介绍了抽象解释的那些理论的东西. 2. AIWS15的 讲得也不错。
抽象解释就是用来计算程序某些属性的静态分析。但是呢一个程序完全可以有无数种具体的运行时状态(可以理解为变量的值的组合),静态不可能穷举完,不然就变成动态分析了。这时候就要取舍了。抽象解释牺牲精度换取时间。它将程序某些具体值(concrete value,不一定是变量的值)概括成一个抽象值(abstract value),这样有些语句只用遍历一次就可以概括它所有运行时的…呃,这个具体属性。一个sound(不知道怎么翻译…)的抽象解释可以把所有具体值可以映射到一个抽象值,但反过来却不行,反过来只能把抽象值映射成相应的具体值的集合,最后抽象解释的结果是抽象值,丢失了精度。但仍然能正确地总结出程序的某些属性。最经典又简单的例子就是把无限的整数的具体值抽象成正、负、0这三个有限的抽象值。网上随便找个抽象解释的课件都有这个例子。
最基本的思想甜品专家同学以及Might的已经说得很清楚。鉴于抽象解释的理论、应用涵盖之广,我就不展开说了。。只提供些进一步了解的资料两篇安利神文,先洗洗脑。。Abstract Interpretation: Past, Present, and Future, LICS 14的invited paperConstructive design of a hierarchy of semantics of a transition system by abstract interpretation, TCS 02应用的话可以先了解一下ASTREE(最具代表性的)和Clousot(已经集成在.NET里)我没看过系统、全面介绍抽象解释的课程,目前推荐,Cousot在MIT的那个也不错。其他如Sagiv、Aiken的无力吐槽(要么都是私货,要么特别基础,要么。。)。。期待早日出Handbook of Abstract Interptation什么的。。
就是说你interpret出来的是一些abstract的东西,而不是具体的程序的运行结果。当然这个范围太大了,就跟马哲一样,什么都可以套进去。所以你还是去关心具体的东西吧,不要来搞这些术语。
抽象解释是静态程序分析中的一套理论,旨在通过静态代码分析找出程序运行时错误。程序代码包含许多变量、函数或功能等,抽象解释是将具体程序变量投影为抽象域,并根据程序描述的具体语义抽象为高层的抽象运算,对抽象域进行不动点的迭代计算,最终对抽象计算出的不动点进行性质判定,从而检测代码是否符合设计要求。抽象解释可以肯定的回答是否包含某些运行时错误,因而在安全关键软件的设计中具有一定应用价值。
已有帐号?
无法登录?
社交帐号登录  摘要:抽象绘画无具体的形象,画家仅靠线条和色形排列组合来表达情绪,使得观众无法产生任何切实和具体的联想。对于思想稚嫩、" />
免费阅读期刊
论文发表、论文指导
周一至周五
9:00&22:00
如何引导学生理解抽象绘画美术作品
&&&&&&本期共收录文章20篇
  摘要:抽象绘画无具体的形象,画家仅靠线条和色形排列组合来表达情绪,使得观众无法产生任何切实和具体的联想。对于思想稚嫩、判断力较弱的青少年来说,如何欣赏抽象绘画成为艺术教育的艰巨任务。本文通过四个方面来阐述如何引导学生理解难以欣赏的抽象绘画作品。 中国论文网 /9/view-4888234.htm  关键词:抽象;线条;色形   中图分类号:G632.0 文献标志码:A 文章编号:(1-02   19世纪末,现代化工业的文明和社会科学技术的发展不仅影响了人民的生活和生活方式,也影响了艺术领域。在欧美涌现了一批标新立异、敢于大胆创新的现代画家。像梵高、高更等这样的激进画家,他们在突破绘画再现性方面已经做出了新的尝试,他们尽量减少画面深度的透视感,消除物体的三维体量,达到平面的效果。这种实验画面中仍有可以辨识的物象,比如人物、风景、静物等等。但是抽象性绘画,画布上却只剩下狂飞乱舞的色形和线条,让人无法产生任何切实和具体的联想。使得观众与艺术家的距离越来越远。对于成年观众来说,他们可以根据个人的知识结构和生活阅历去欣赏艺术品,但对于思想稚嫩、判断力较弱的青少年来说,如何欣赏现代艺术抽象绘画成为艺术教育的艰巨任务。笔者在教学中通过实践,总结了以下几点。   一、对抽象画的初步感受   这是学生在没有受任何训练和未改变自己的观点和立场的情况下去欣赏一幅作品。艺术的本质是唤起情感,也就是学生在观看作品时的一系列心理活动。学生根据个人的素养和兴趣爱好做出不同的反应和评价。教师可以选一幅抽象绘画作品问以下问题:你认为这幅抽象绘画具有艺术的美感吗?画面的线条、色彩是否有隐含的一定的含义?这幅画是精心策划的吗?是用技巧创作出来的吗?这幅画表现了什么?是否有一定的创作力?是符合个人口味的作品吗?如果你喜欢它,它是很好的作品吗?作品对你是否有特殊的意义?如果有人讨厌它,你会改变对它的喜爱吗?你能说出理由吗?   这时候学生对抽象绘画作品的判别带有强烈主观意识。学生通常可以不懂得这幅抽象作品,但是学生知道自己喜欢什么。教师可以告诉学生这是画家是利用一种新的方式进行作画。学生必须借助一种正确的评判的方式来重新审视抽象绘画作品。   二、了解一定的美术史知识   首先对于抽象画正确地分析解读,一定要了解艺术发展和风格形成的大概历史线索,西方美术大概经历这几个时期:古典时期—文艺复兴()—后期文艺复兴()—印象派()—后期印象派()—现代艺术(约1900-)。   在后期印象派中之所以出现抽象表现主义绘画。有这样的一个分水岭,文艺复兴之前的是模仿艺术史,那时候所有的绘画艺术模仿熟悉的外部世界。在印象派之后,因照相机的出现,画家意识到绘画不能局限于对现实的模仿,艺术家们开始了新的探索,他们反对逼真的描绘,虽然一些绘画作品上依旧有可以辨识的物象。到了后期印象派中抽象绘画的出现,画面不再有具体物象,仅仅利用线条和色彩排列组合表达画家情绪。它是画家内在想象力的任意发挥。   抽象画的形成也与画家的天生秉性、个人气质和经历有关,最早尝试抽象绘画的康定斯基,从小就对色彩有超乎寻常的偏好,他的音乐体验常常与色彩的感觉交融在一起。他说,他听欢快的音乐时,眼前常常会幻化出飞舞的色形和跳跃的线条。康定斯基最初是以画具象画为主,康定斯基从具象走向抽象也是经历了逐渐孕育、演变的过程的。了解这些都可以帮助学生更好地理解抽象绘画作品。比如可以向学生介绍康定斯基抽象绘画得以形成的一个小插曲。有一天,康定斯基打开画室的门,突然被一幅画吸引。这幅画完全没有主题,也没有可以辨认的物象,画面全部由明亮的色块构成。最后康定斯基靠近以后,才辨认出它是什么,原来是康定斯基的一幅被侧放着的画。这个无意的体验使康定斯基发现原来没有具体的物象,只靠线条、色形也依旧可以传递出艺术的美感,传达艺术家的内在情感和精神表现的气质。   具体的课堂操作,教师可以采用三种方法:让学生交换对抽象画的观察和意见;学生比较相关的绘画作品;借助美术史知识,克服个人对抽象画欣赏的偏见。在此过程中,教师既是指导者又是合作者,要和学生共同完成欣赏抽象画的任务。   三、寻找画家的绘画语言   欣赏一幅抽象画作品,要了解画家所运用的特殊的艺术语言,画家创作,好比文学家写诗或写小说,但是画家用的是一种比文字更形象生动的语言“美术元素”,这是美术作品的基本成分。这些美术元素是:线条、颜色、形状、肌理、空间和数值。在欣赏抽象绘画中可以通过分析绘画大师们怎么运用美术法则及其作品中的具体表达,从而获得对抽象绘画大师作品的更丰富的了解。例如在欣赏康定斯基的画作《构图,7号》时,初一学生会归纳出绘画语言:(1)自由流动的线条;(2)不规则的很奇怪的形状;(3)鲜艳、明丽的色块,放在一起有一种音乐一样的节奏感;等等。学生在分析、归纳、总结的过程中,可以逐步掌握欣赏抽象绘画作品的方法,积累审美经验,掌握美术绘画语言。   创作体验。在学生对抽象绘画有一定了解的基础上,教师可以鼓励学生放开手脚不受具象绘画的比例和形象的限制,大胆地进行创作。以自己的情感体验,借助绘画大师的绘画语言,表现内心的丰富情感。在此创作过程中可以帮助学生理解自己、理解他人,认识到抽象绘画是另一种表达方式,认识到抽象绘画创作也存在差异性。也认识抽象绘画对于创作者的意义。教师需要去理解学生的创作特点、避免采取强制的方式禁止什么。   在此基础上,教师还要鼓励学生用语言描述自己的作品,表达自己的感情。学生在这种创作体验及师生交流的过程中,发挥了想象、创造力、语言表达及审美能力,全面提高了艺术素养。   参考文献:   [1]多纳德·赫伯霍兹,芭芭拉·赫伯霍兹.美国初等教育美术教师培训教材[M].上海:上海人民美术出版社,2006.   [2]腾守尧.美国艺术教育新台阶[M].成都:四川人民出版社,2006.
转载请注明来源。原文地址:
【xzbu】郑重声明:本网站资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有,如有不愿意被转载的情况,请通知我们删除已转载的信息。
xzbu发布此信息目的在于传播更多信息,与本网站立场无关。xzbu不保证该信息(包括但不限于文字、数据及图表)准确性、真实性、完整性等。理解 Serenity - 第一部分: 深度抽象 & 论坛 & EthFans | 以太坊爱好者
理解 Serenity - 第一部分: 深度抽象
by Vitalik Buterin, on December 24th, 2015
我们已经公开继续改进以太坊协议的计划和长期开发路线图相当长一段时间了,这个做法也是来自于从1.0版本发布之前或者事后没有能及时处理的错误中学到的经验。不管怎样,以太坊核心协议的周期性开发已经重新启动,Homestead阶段很快就要到来,我们也已经悄悄开始开发一个概念原型(PoC),目标是中最大的里程碑: Serenity.
Serenity会有两大主要特性:深度抽象,一个我最早在展开讨论过的特性,和Casper,基于保证金的权益证明(PoS)算法。此外,我们也在探索平滑的部署(scalability)的方法,至少是一个脚手架,同时完全解决对并行性的担忧 - 运行在私有链环境下,多核CPU专有服务器之上的以太坊节点性能将会有立竿见影的巨大提升,甚至公有链的可伸缩性也能看到2到5倍的提升。在过去的几个月中,Casper的研究和对可伸缩性与抽象改进的形式化工作(eg. )都在快速推进,参与者有我, Vlad Zamfir, Lucius Greg Meredith和其他一些人。现在我很高兴的宣布,Serenity阶段的第一个概念原型, 尽管能做的事情还非常有限仅仅可以用于测试,。
在ethereum目录下运行python test.py就可以把概念原型跑起来(别忘了先从下载和安装最新的 develop分支),如果看到这样的输出就对了:
vub@vub-ThinkPad-X250 15:01:03 serenity/ethereum: python test.py
REVERTING 940534 gas from account 0x0000 to account 0x98c78be58d729dcdc3de9efbe4e3bf with data 0x
Warning (file "casper.se.py", line 74, char 0): Warning: function return type inconsistent!
Running with 13 maximum nodes
Warning (file "casper.se.py", line 74, char 0): Warning: function return type inconsistent!
Warning (file "casper.se.py", line 74, char 0): Warning: function return type inconsistent!
Length of validation code: 57
Length of account code: 0
Joined with index 0
Length of validation code: 57
Length of account code: 0
Joined with index 1
Length of validation code: 57
在每5秒一个块,使用Casper+Serenity协议的条件下,这个程序模拟了的13个节点的运行;这个模拟已经很接近当前客户端能处理的上限了,不过要注意:(i) 这是python写的,C++和Go的实现很可能会有更好的表现,以及(ii) 所有这些节点都同时运行在一台电脑上,所以你有理由相信在一个更“正常”的环境中python版本的Casper可以处理大约169个节点(不过,从另一方面来说,我们希望共识的开销远低于100%的CPU占用,因此这两点注意并不表示你可以期待Casper和上千个节点一起工作!)。如果你的电脑太慢处理不了13个节点,试试用python test.py 10来模拟10个节点(或者python test.py 7来模拟7个节点,你懂的)。当然,改进Casper效率的研究仍在继续,虽然这改进可能会以减慢终局性(finality)的收敛为代价,这些问题都会逐渐解决。network.py文件模拟了一个基本的P2P网络接口,接下来的工作会把它替换成运行在真实网络上的真实计算机。
程序代码被分割到几个主要文件中:
serenity_blocks.py - 描述block类,state类,以及block和transaction级别状态转移函数的代码(比以前的版本简单一倍)。
serenity_transactions.py - 描述transaction的代码(比之前简单一倍)。
casper.se.py - Casper合约的serpent实现,激励正确的下注行为。
bet.py - Casper的下注逻辑和完整的客户端实现。
ecdsa_accounts.py - 账户相关代码,让你可以在Serenity上模拟当前的账户验证逻辑。
test.py - 测试脚本
config.py - 参数配置
vm.py - 虚拟机(fastvm.py提供了一个更快的实现)
network.py - 网络模拟
在这篇文章中,我们只讨论深度抽象的特性,因此关键文件是serenity_blocks.py, ecdsa_accounts.py和serenity_transactions.py;在下一篇讨论Casper的文章中,casper.se.py和bet.py将会是焦点。
账户的抽象
目前以太坊中有两种类型的账户:外部拥有的账户,由私钥控制,和合约账户,由代码控制。对于外部拥有的账户,我们指定了一种特别的数字签名算法(secp256k1椭圆曲线签名)和一个序号体系(nonce),要求每一个交易都必须包含一个比前一个交易序号大1的数字,目的是防止重放攻击(replay attacks)。我们为提高抽象程度而做的主要改动是:不再有两种不同类型的账户,而是统一为一种 - 合约账户。将会存在一个特殊的“入口”账户,0x0000,任何人都可以从这个账户发起交易。因此,协议中将不再包含签名+nonce的账户验证逻辑,用户必须用合约来保护他们自己的账户。
最简单有效的此类合约可能要属椭圆曲线数字签名验证合约了,它可以提供和现在完全一样的功能:只有拥有有效签名和序号的交易才能通过验证,而且序号在交易成功后增加1。这个合约的代码如下:
# We assume that data takes the following schema:
# bytes 0-31: v (ECDSA sig)
# bytes 32-63: r (ECDSA sig)
# bytes 64-95: s (ECDSA sig)
# bytes 96-127: sequence number (formerly called "nonce")
# bytes 128-159: gasprice
# bytes 172-191: to
# bytes 192-223: value
# bytes 224+: data
# Get the hash for transaction signing
~mstore(0, ~txexecgas())
~calldatacopy(32, 96, ~calldatasize() - 96)
~mstore(0, ~sha3(0, ~calldatasize() - 64))
~calldatacopy(32, 0, 96)
# Call ECRECOVER contract to get the sender
~call(, 0, 128, 0, 32)
# Chec exception if not
if ~mload(0) != 0x82a978b3f7d9ee9eef472ee55b42f1:
~invalid()
# Sequence number operations
with minusone = ~sub(0, 1):
with curseq = self.storage[minusone]:
# Check sequence number correctness, exception if not
if ~calldataload(96) != curseq:
~invalid()
# Increment sequence number
self.storage[minusone] = curseq + 1
# Make the sub-call and discard output
with x = ~msize():
~call(msg.gas - 50000, ~calldataload(160), ~calldataload(192), 160, ~calldatasize() - 224, x, 1000)
# Pay for gas
~mstore(0, ~calldataload(128))
~mstore(32, (~txexecgas() - msg.gas + 50000))
~call(12000, ETHER, 0, 0, 64, 0, 0)
~return(x, ~msize() - x)
这段代码就是用户账户的合约代码;如果用户要从自己的账户发送一个交易,他们会先从地址0发送一个交易到这个账户,交易数据会像上述代码所示那样包括ECDSA签名,序号,gas价格,目标地址,数额和真正的交易数据。合约代码会检查对交易gas限制和数据的签名,然后检查交易序号,如果两者都没有问题就把保存的序号加一,发送所需的消息,然后发送另一条消息支付gas费用作为结束(注意,矿工可以静态分析账户的合约代码,如果交易的账户合约最后没有支付gas可以拒绝处理)。
Serenity的这个改动有一个很重要的后果,系统中的所有交易(只要满足基本的格式)都是有效的。现阶段无效的交易在Serenity中将仅仅是没有作用(上例中的invalid是一个尚未使用的操作码,它会使程序执行立即退出)。这意味着交易被打包进区块不再是交易会被真正执行的保证,作为弥补,每一笔交易都会有一条收据记录(receipt entry),通过返回码指明它是否成功执行:0表示由于gas限制交易没有执行,1表示交易执行了但是出错,2表示交易成功执行。收据记录还可以提供更多的信息,例如交易的返回值(现在有自动日志记录)或者自己创建的日志,
这个改动最主要的好处是用户可以在账户策略这个领域自由的创新了。可能的方向包括:
比特币风格的多重签名,账户要求交易同时具有多个私钥的签名,而不是一次接收一个签名,然后把中间结果临时存放在区块链里。
其他的椭圆曲线, 包括ed25519。
更好的集成先进的加密算法,例如环状签名(ring signature), 门限签名(threshold signature), 零知识证明等等。
更先进的序号方案, 支持更高程度的并行化,让用户可以同时从一个账户发出多个交易,并且更快的把这些交易打包。想想传统的序号和位掩码(bitmask)如果结合会怎样。我们也可以通过各种机智的方法在有效性检查中利用时间戳或是区块的hash值。
基于UTXO的代币管理, 有些用户处于隐私的元应,不喜欢以太坊使用账户而不是比特币的“未使用的交易输出”(unspent transaction output, UTXO)模型来管理代币的所有权。现在你可以在以太坊中建立一个事实上基于UTXO的系统了,并且Serenity不再显式的特殊对待其中某一个。
支付方案的创新,对于某些dapp, “由合约支付费用”可能比“由使用者支付”更有用,使用者可能没有以太币。现在dapp就可以实现这个支付模型了。如果矿工能对它的代码做静态分析并确信他们可以得到报酬,矿工就会接受这种交易(本质上,我们实现了,但是是通过一种更抽象和灵活的方法)。
与“以太坊闹钟”之类的应用更好的集成,账户的检验代码不一定要检查签名,也可以检查收据的Merkle proof,或是其他账户的状态,等等。
提出这些场景是为了说明最主要的论点,通过抽象所有这些另外的机制都可以更加容易的实现,不再需要创造一个“传递层”来把信息喂给以太坊默认的签名体系。当没有应用是特殊的时候,每个应用都特殊。
一个特别有意思的结果是:在Serenity的设计下,以太坊将具有可选的量子安全性。如果你害怕NSA秘密拥有一台量子计算机,想要把自己的账户变得更安全,你随时可以个人切换使用Lamport签名。转换到PoS机制进一步巩固了安全性,即使世界上只有NSA有量子计算机他们也不能利用这一点来实施51%攻击。在以太坊的协议层唯一剩下的密码学安全假设只有SHA3的抵御碰撞(collision-resistance)的性质了。
这些改变的另一个结果是,交易数据会变得更加简单。交易将会用四个字段取代现在的九个:目标地址,数据,初始gas和初始化代码。目标地址,数据和初始gas和现在一样,“初始化代码”是一个可选用于保存目标地址账户合约创建代码的字段。
需要这个机制的原因如下。目前以太坊有一个重要的性质,是允许往一个还不存在的账户转账。为了在区块链上创建一个合约接受以太币,你并不需要事先持有任何以太币。为了在Serenity中实现这个性质,我们让账户地址能事先从它的初始化代码中推导出来,通过公式sha3(creator + initcode) % 2**160。这里creator是创建这个合约的账户(默认是地址为0的账户),而initcode就是合约的初始化代码(这段代码的运行结果会成为账户合约的代码,正如现在的CREATE一样)。因此你可以在本地先生成这段初始化代码,计算它的地址,然后让其他人往这个地址转账。然后一旦你想要从这个地址发出第一笔交易,你可以在交易里面包含这段初始化代码,它就会在真正的交易执行之前,被自动执行并创建账户(这段逻辑的实现代码在)。
区块的抽象
Serenity中将实现的另一个干净的分离是将区块(仅仅是一堆交易),状态(例如合约的存储区,代码和账户余额)和共识层完全分开。共识激励在合约内部实现,而如果你希望激励的话,共识级别的对象(例如PoW, 赌注)应该被包含在发往“共识激励管理合约”的交易中。
这应该会让你更容易用其它的共识算法 - Tendermint, , 甚至是普通的PoW - 替换掉Serenity代码中的Casper。我们非常欢迎这个方向的研究,并且希望能做到最大的灵活。
存储的抽象
目前,以太坊系统的“状态”数据实际上相当复杂,包括这些部分:
余额,代码,nonce,和账户存储区
Gas上限,难度,块高度,时间戳
最后256个块的hash值
在执行区块内代码时,需要保存交易索引,收据树(receipt tree, receipt是EVM中的一个概念)和当前消耗的gas。
这些数据结构存在于许多地方,包括块状态转移函数,状态树,区块头和前一个区块头中。在Serenity里面这些将被大幅简化:虽然许多数据仍然会存在,但他们会被转移到特殊的合约中去;因此,唯一的”“状态”将以一棵树的形式继续存在,数学上可以看作是形如{address: {key: value}}的映射。账户将是一些树,账户合约代码会被存放在主键(key)为""的地方(SSTORE不可以修改),余额会存在特别的“以太币合约”中,而序号将由每一个帐号自己决定如何保存。收据也将被转移到合约存储区,他们会被保存在一个内容在每个区块都会被覆盖的“日志合约”中。
这样代码实现中的状态对象可以极大的简化。现在只剩下一个两级的trie了。可伸缩性方面的升级可能要求增加为三级trie(分片ID, 地址,主键),这还没有确定,但即使是这样复杂性也远低于现在。
需要注意,把以太币转移进一个合约管理并不是以太币抽象的全部。事实上,一个有争议的看法是相对于现状这并不是一个很大的进步,因为为了向前兼容那些和以太币相关的操作码(带value参数的CALL,BALANCE等等)依然保留着。某种程度上说,这只是数据存放的一次重组。
未来的计划
在第二个概念原型中,我们计划让抽象更进一步。目前区块和交易级别的状态转移函数依然有相当的复杂性(例如更新收据,gas限制,交易索引,区块高度,状态根节点),我们的目标是为交易创建一个“入口”对象来处理所有这些每一个交易都需要的额外的“样板逻辑”,以及“块开始”和“块结束”的入口。理论上的终极目标,是找到一个只有一个入口点的协议,这样状态转移函数只需要从零地址发送一条包含区块内容数据的消息给入口点即可。这样做的目的是尽可能的减少客户端实现的共识关键部分(consensus-critical client implementation)的大小,把尽可能多的逻辑推到以太坊自身上去。这样即使为了达到我们对交易速度和可伸缩性的目标,我们需要采用一个接受硬分叉和一定的新复杂度的激进开发制度,也能够个确保以太坊的多重客户端形态可以持续而无需大量额外开发工作和安全审计。
长期来看,我打算继续在python上开发概念原型,Casper团队则共同改进协议的效率,并证明它的安全性和正确性。在某个时刻,这个协议将成熟到足以处理一个公开的某种形式的测试网络,其上可能会有真实的价值,为人们找出Casper的漏洞提供激励,就像一条真正的链不可避免的遭受的那样。这只是第一步,不过是非常重要的一步,它标志着我们对于权益证明和深度抽象的研究终于从谈话,白板上的数学公式和博客文章变成了能工作的代码。
这个系列的下一篇文章将会讨论Serenity的另一个旗舰特性,Casper共识算法。
Serenity阶段的第一个概念原型, 尽管能做的事情还非常有限仅仅可以用于测试,已经完成。
这里的链接贴错了:
别忘了先从 下载
多打了一个Serpent
貌似不能改评论
后方可回复
如果你还没有账号请点击这里}

我要回帖

更多关于 抽象函数 理解 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信