ch1-编码与程序设计语言原理-201721913555131_第1页
ch1-编码与程序设计语言原理-201721913555131_第2页
ch1-编码与程序设计语言原理-201721913555131_第3页
ch1-编码与程序设计语言原理-201721913555131_第4页
ch1-编码与程序设计语言原理-201721913555131_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Ch1编码与程序设计语言原理

王超EmbeddedSystemLabSpring2017本章提纲编码程序设计语言的原理与基本概念编码编码是最原始的程序设计语言编码出现要远远早于计算机和程序常见的编码形式摩尔斯码字符编码ASCII,Unicode,UTF-8,GB2312拼音、五笔二进制编码条形码与二维码量子编码DNA编码摩尔斯编码摩尔斯发明的的有线电报摩尔斯电码的演变马可尼的无线电报机1901年,马可尼首次成功地实现了横跨大西洋的无线电通信可以由任何能够产生可控长短脉冲的装置发送,解码不需要使用专门设备,适合小功率通信摩尔斯电码的优势A·

—J·

—S·

·

·1·

—[.]·

·

·

—[:]—

·

·

·B—

·

·

·K—

·

—T—2·

·

—[,]—

·

·

—[;]—

·

·

·C—

·

·L·

·

·U·

·

—3·

·

·

—[?]·

·

·

·[=]—

·

·

·

—D—

·

·M—

—V·

·

·

—4·

·

·

·

—[']·

·[+]·

·

·E·N—

·W·

—5·

·

·

·

·[!]—

·

·

—[-]—

·

·

·

·

—F·

·

·O—

—X—

·

·

—6—

·

·

·

·[/]—

·

·

·[_]·

·

·

—G—

·P·

·Y—

·

—7—

·

·

·[(]—

·

·["]·

·

·

·H·

·

·

·Q—

·

—Z—

·

·8—

·

·[)]—

·

·

—[$]·

·

·

·

·

—I·

·R·

·0—

—9—

·[&]·

·

·

·[@]·

·

·摩尔斯电码摩尔斯电码-二叉树点“嘀”长度为1个单位,划“哒”长度为3个单位同一字母中点划间隔为1个单位同一词中字母间隔为3个单位词与词间隔为7个单位摩尔斯电码的时间控制QRA你台的名称是什么?QRV你准备好了吗?QRP要我降低发信机功率吗?QTH你的地理位置在?QRS要我发得慢一些吗?QSB我的信号有衰落吗?QRT要我停止拍发吗?QSL你能确认联络吗?QRU你有什么发给我吗?QRZ谁在叫我?QRM你受到他台干扰吗?QSA我的信号强度怎样?QRN你受到天电干扰吗?QSY要我改用别的频率拍发吗?Q简语与宏定义称呼:U(你)/UR(你的)/OM(老朋友)/YL(女士)问候:GM(早上好)/GA(下午好)/GE(晚上好)状况:RST(信号报告)/RIG(设备)/ANT(天线)/PWR(功率)/WX(天气)/OP(操作员)其它:DE(这里是)/R(收到)/K(发送结束)/TNX(Thanks)/TU(Thankyou)/CLG(呼叫)/VY(非常)/PSE(请)/NW(现在)/SOS(紧急呼救)/73(Bestregards)/88(Loveandkisses)发送摩尔斯电码的工具—电键手键美式(平头)键簧较软苏式(圆头)键簧较硬半自动键自动键单桨自动键(扫拨键)

双桨自动键特别的手键布莱叶盲文编码布莱叶编码的历史路易斯·布莱叶1809年出生于法国,1852去世ValentinHaüy(1745—1822),巴黎学校的创始人,发明了一种将字母凸印以供触摸阅读的方法。法国陆军上尉CharlesBarbier在1819年发明了一种夜间文字的书写体系,使用厚纸板上有规律凸起的点划来供士兵们在夜间无声地传递口信。布莱叶在上述原理基础上进行改进,1823年创建了布莱叶编码系统布莱叶编码的编码格式共64种编码格式数字、字母和标点符号—都被编码成局限在2×3小格中一个或多个凸起的点。字母和数字的表示方法字母:例子:数字:例子:布莱叶编码扩展(宏定义)二级布莱叶编码条形码与二维码条形码和二维码条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。PDF417码QR码UniversalProductCode条形码的解码条形码的解码第一个数字(在这里是0)被称为数字系统字符,0的意思是说这是一个规范的条形码。如果是具有不同重量的货物(像肉类或其他商品),这个数字是2;订单、票券的UPC编码的第一个数字通常是5。紧接着的5个数字是制造商代码。再后面的5个数字(01251)是该公司的某种产品的编号。最后的数字(这里是7)称作模校验字符,这个字符可用来进行另外一种错误检验。条形码校验为了解释校验字符是怎样工作的,将前11个数字(是05100001251)各用一个字母来代替:ABCDEFGHIJK然后,计算下式的值:3×(A+C+E+G+I+K)+(B+D+F+H+J)3×(0+1+0+0+2+1)+(5+0+0+1+5)=3×4+11=23从紧挨它并大于等于它的一个10的整倍数中减去它,其结果称为模校验字符。紧挨23并大于等于23的一个10的整倍数是30,故:30-23=7这就是印在外包装上并以UPC(UniversalProductCode)形式编码的模校验字符,这是一种冗余措施。如果扫描仪计算出来的模校验结果和UPC中编码中的校验字不一致,计算机就不能将这个UPC作为一个有效值接收。二进制与逻辑门

需要复习的背景知识计算机组成原理二进制、八进制、十进制、十六进制的转换与、或、非、同或、异或、或非、与非全加器、半加器、反向器原码、反码、补码锁存器、触发器扩充的2的各次幂的表不同进制之间的转换常见的逻辑门与、或、非、与非、或非、与或非、异或、同或量子编码

量子编码量子计算是利用量子力学来大幅度加速计算,微软,谷歌,英特尔和IBM投入了数千万美元,通过不同的量子位技术来实现一台实用的量子计算机。量子计算机处理的信息是以量子位的形式存储的,每个量子位可以使1或0或这两个状态的叠加,因此可以表示比传统的二进制更多的数据。它有望解决人类一些最复杂的问题。它得到了亚马逊创始人兼CEOJeffBezos、NASA和CIA的支持。每一台造价10,000,000美元并且在零下459度下运行。而且没人知道它究竟是怎样工作的。量子计算机/article/1554/16/1204/07/C7E3H6A7001687H3.htmlIBM使用格型架构(latticearchitecture)的5量子位处理器,其可以扩展成更大更强的量子计算机和1950年代早期的计算机一样,今天的量子计算机要占据一整个实验室量子计算的研究硬件加拿大的D-Wave公司首先实现了16个超导量子比特的量子计算机,可以提高优化问题的效率。谷歌和IBM都是用超导量子技术来实现计算设备。英特尔投资荷兰代尔夫特理工大学的量子技术研究项目QuTech,使用“硅原子点”技术,通过向纯硅中加入电子造出的人造原子,微波控制电子的量子态。微软选择基于非阿贝尔任意子的拓扑量子比特,电子通过半导体结构时会出现准离子,他们交叉路径可以用来编写量子信息,可以减少错误修正比特数量,还需要进一步验证其是否存在。ionQ的ChrisMonroe坚持囚禁离子技术,并在马里兰大学的实验室客服对离子控制的挑战。超导量子位(superconductingqubits)囚禁离子(trappedions)量子计算的研究软件微软联合加州大学圣芭芭拉分校StationQ实验室,Redmod的QuArC团队Intel-荷兰戴尔福特理工大学的QuTech实验室普渡大学的StationQPurdue实验室马里兰大学,悉尼大学,哥本哈根大学的QDev实验室谷歌与加州大学圣芭芭拉分校JohnM.Martinis团队合作利用超导体建立量子计算机IBM的沃森实验室耶鲁大学Schoelkopf实验室NASA量子人工智能实验室中科院量子信息重点实验室等团队均在关注量子计算领域。目标应用加解密将两个大素数(万位以上)相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,计算机需要处理几千年。2001年,IBM使用一台7量子位的量子计算机求解了15的因子3和52012年,一个研究团队求解了21的因子。然后到了2014年,一种被称为极小化算法(minimizationalgorithm)的前沿方法成功求解了56,153的因子。仿真IBM开放量子计算仿真平台/qstage/DNA编码

DNA编码与基因测序通过检测DNA,并通过测序技术,与目标DNA进行对比。为什么测序?疾病检测预防与治疗人工培育工作流程测序(Sanger法)测序与匹配与目标串进行比对(串匹配算法)基因变异,允许误差(灵敏度)技术发展-成本降低/sequencingcostsdata/目前主要挑战性问题计算和存储的增长速度与数据规模难以匹配Thecancergenome,MichaelR.Stratton,PeterJ.Campbell&P.AndrewFutreal,Nature458,719-724(9April2009)数据规模增长速度:2年10倍存储增长速度:2年4倍处理器增长速度:18个月2倍作业1、复习二进制、八进制、十进制、十六进制之间的互相转换2、复习逻辑门和移位等操作的物理结构与操作原理3、调研QR二维码的识别过程4、阅读量子计算机和DNA测序的相关文献或者论文程序设计语言原理本章内容程序设计语言的发展计算模型和语言范型语言:标准和实现语言的开发和标准化新趋势程序设计语言的发展程序是计算机科学技术领域最基本最核心的概念,有计算机就必须有程序,有描述程序的手段和方式,即,必须有描述程序的程序设计语言硬件计算机,就是机器语言程序的执行器(解释器)计算机硬件只能处理二进制形式的程序(机器语言程序)。如

MIPS机器语言:用欧几里得算法求GCD的程序机器语言,人很难阅读、理解、使用使用机器开发程序的成本高昂,耗时巨大,容易出错,难以检查,依赖于具体计算机,移植困难程序设计语言的发展为解决程序的易写和可读性,人们发展了符号形式的汇编语言。例每条指令都很容易理解,容易书写和阅读仍用与机器语言直接对应的简单线性形式。没有高级结构,不支持程序的高级组织,大型程序难以理解和开发,移植性差MIPS汇编语言:GCD程序Top10编程语言TIOBE指数走势(2002-2016)2016-12月编程语言排行榜TOP20为什么有这么多语言计算机的应用领域丰富多彩不同领域、不同具体应用对于合适的语言有不同要求一种语言无法最好地满足所有应用的需要语言设计的许多方面有很多选择不同的设计选择通常是各有各的优点和缺点常常是“鱼和熊掌不可兼得”新应用领域和应用需求不断出现不同领域(任务)有特殊的功能或描述方式的要求为满足新需要,人们常常设计出新的语言如网络、实时应用、图形用户界面,业务处理等为什么有这么多语言硬件发展,例如速度、容量、并行机、RISC等有些过去认为“奢侈”的特征,由于有助于软件系统的开发者,慢慢变成必备的特征(如GC)例:近来多核多处理器系统正在快速发展,要求新的编程方式和技术,将推动语言里支持并行程序设计的特征的大发展安迪-比尔定律程序技术发展,如结构化程序设计(结构化程序设计语言)面向对象的程序设计(面向对象的语言)脚本技术,等应用的驱动和牵引程序设计语言的发展计算模型和语言范型语言:标准和实现语言的开发和标准化新趋势计算模型和语言范型形成许多程序设计语言的另一重要原因:对计算过程可以有多种不同看法,由此产生了不同的计算模型(范型,Paradigms)基于不同计算范型产生了不同的语言类(语言范型)。主要范型有:过程式范型(Procedural,或称命令式,Imperative):把计算看成一系列操作的执行,基本计算元素是一组基本操作。计算在一个环境里进行,操作的效果就是改变环境的状态:语言提供一组基本操作和一组描述组合操作的手段,提供的抽象手段是定义新操作(定义过程)。过程实现大步的状态变换写程序就是描述操作执行的顺序过程,描述状态和状态的变化常规语言,如C,Pascal,Fortran等,都是命令式语言计算模型和语言范型函数式范型(Functional):把计算看成对数据的函数变换,一个计算就是一系列函数变换基本计算元素是一组基本函数,语言提供各种函数组合机制(复合、函数选择),抽象手段是定义新函数(允许递归定义)最早的函数式语言是JohnMcCarthy开发的Lisp。目前最重要的函数式语言包括CommonLisp,Scheme,ML和Haskell等。Scheme例子Scheme语言是LISP语言的一个方言(或说成变种),它诞生于1975年的MIT。可以采用Guile(GNU‘sextensionlanguage)。Guile是GNU工程的一个项目,它是GNU扩展语言库,它也是Scheme语言的一个具体实现。变量定义(definea100)(set!a“xyz")Lambda关键字来定义过程(defineadd5(lambda(x)(+x5)))(add51)=>5(definesquare(lambda(x)(*xx)))过程的嵌套定义(definefix(lambda(xyz)(defineadd(lambda(ab)(+ab)))(-x(addyz))))(display(fix1002030))Scheme代码的结构顺序结构if结构Case结构递归(begin(display"Helloworld!");输出"Helloworld!"(newline));换行(if(=x0)(display"iszero")(display"notzero"))(case(*23)((2357)'prime)((14689)'composite))参考Lisp和Scheme相关语言教程,结论:语法简洁、效率高(definefactoral(lambda(x)(if(<=x1)1(*x(factoral(-x1))))))语言范型面向对象的范型(Object-Oriented)把计算看成是一批独立对象相互作用的效果。OO语言提供描述(定义)对象及其行为的机制以及描述对象之间相互作用的机制比较纯的OO语言Smalltalk,Java等基于类的语言,程序中定义类,对象是类的实例JavaScript,是基于对象的语言,通过原型概念定义新的类似对象其他支持OO概念和编程方法的语言包括C++,Ada95等语言范型说明式语言(Declarative),包括逻辑式语言(Logical)关系式语言(Relational)基于限制的语言(Constraint)基本想法是只描述需要做什么,不描述怎样做例如:可能是只描述被计算对象之间的逻辑关系;或者描述问题的解应该满足的条件约束语言的实现通过很复杂机制提供一种通用的计算过程,它能根据具体“程序”的说明性描述产生出所需的结果例:逻辑式语言Prolog;数据库查询语言Datalog近年很受重视的ConstraintLanguage和ConstraintProgrammingProlog例子Prolog(ProgramminginLogic的缩写)是一种逻辑编程语言。它建立在逻辑学的理论基础之上,最初被运用于自然语言等研究领域。例:father(a,b).a是b的父亲father(c,d).c是d的父亲brother(a,c).a和c是兄弟关系uncle(X,Y):-brother(X,Z),father(Z,Y).?-uncle(a,U).问题:a是谁的叔叔?(U=?)求解过程第一步,uncle(a,U)与事实逐个匹配,不成功第二步,与规则头部匹配,有{a/X,U/Y}转换成两个子问题brother(a,Z),father(Z,U)brother(a,Z)与事实匹配,得到{c/Z}代入第二个子问题,有father(c,U),与事实匹配,得到{d/U},即U=d,解是:a是d的叔叔father(a,b).a是b的父亲father(c,d).c是d的父亲brother(a,c).a和c是兄弟关系uncle(X,Y):-brother(X,Z),father(Z,Y).语言范型脚本语言(ScriptingLanguage),从操作系统命令语言和文本处理语言发展起来的一类语言。通常:提供一批高级数据结构,提供灵活的变量、函数、对象等机制采用解释方式实现,使用灵活方便许多脚本语言提供了高级的文本处理功能代表性的Shell,Bash,Python,Perl,Tcl/Tk等。其他语言:文本描述语言Postscript,也是一种完整的程序设计语言仪器控制语言Forth,是一种完整的基于栈的程序设计语言硬件描述语言

Verilog和VHDL……程序设计语言的发展计算模型和语言范型语言:标准和实现语言的开发和标准化新趋势语言:标准和实现要弄清某个语言写的程序的意义,我们应该怎么做?问题:什么定义了一个程序设计语言?将程序输入计算机,编译后试运行,看结果参考语言的标准文本(或称语言规范),它定义了语言的语法形式(合法程序的形式)形式合法的程序结构的语义明确说明“规范”对某些东西未予定义参考广泛使用的实现,作为帮助理解的辅助工具同一语言可能有若干标准文本。如:C++1998,2010语言:标准和实现一个语言的规范文本常常没有把该语言的一切问题都定义清楚,而是留下一些不加定义的事项。为什么出现这种情况?例:C语言未规定函数参数的求值顺序,二元运算符运算对象的求值顺序。除可能是语言设计者的失误外,许多不完全是有意的,目的是:使语言处理程序(例如编译器)的开发者有更大的工作空间,使之能选择最适合实际运行环境的实现方式为使定义的程序设计语言具有更好的普遍适应性,能适应不同计算机体系结构,容易在不同计算机上实现为目标程序的优化提供更多可能性规范的不完全性,有可能导致同一个程序在不同实现上(如gcc/VC/…)的行为不同。影响用该语言写出的程序的可移植性(提示:应尽可能写不依赖于具体实现特征的程序,或将可能有依赖性的代码局部化)增加了学习和掌握语言的负担语言:标准和实现例外:Java语言规范几乎把所有的东西都规定清楚。例如各种数据的二进制表示方式、表达式求值顺序的各个方面,等等这样做的优点和缺点:提高了程序的可移植性(一次书写处处使用)提高了程序的安全性限制了新实现方式和新实现技术的应用限制了目标代码优化的可能性一些机器可能不适合Java语言的具体需求,因此难以高效实现Java影响用Java写出的程序的效率语言:标准和实现语言的实现根据某语言的标准文本开发的语言处理系统,称为该语言的一个实现早期的一个语言实现只是一个语言处理程序(例如编译器)今天,语言的实现已经发展为一类规模巨大的软件系统,通常包括:语言的处理器。使用该语言写出的程序可以在计算机上执行程序开发工具。如编辑器、调试器、代码浏览工具、代码检查工具、代码优化工具、模拟运行工具等等标准库和丰富的增强库C++的一个实现,就是根据C++标准做的一个处理C++程序的软件系统,例如:BorlandC++系统,GCC系统,VisualC系统等;同一个实现还可能有许多不同版本(例如VisualC6.0-VisualStudio2016)《Borland传奇》语言:标准和实现语言的实现可能与标准不同:语言规范中所有未明确定义的东西,实现时都必须确定(可任意选择)可能对语言规范做一些扩充(扩充语法、语义、库等)可能没有实现语言规范的一些特征可能对某些特征的实现是错误的一个语言可能有一些不同的实现,每个实现可能有多个不同版本不同实现可以都符合语言标准,但相互之间又存在许多差异(不兼容)不同实现可能采用不同的技术,尤其是可能采用不同程度的优化。因此在程序加工速度和程序执行效率方面都可能有很大差异具体语言实现需要考虑:尽可能地利用硬件和平台软件的功能和特点为所在平台上的应用系统开发提供方便提纲程序设计语言的发展计算模型和语言范型语言:标准和实现语言的开发和标准化新趋势语言的开发和标准化语言开发的初始阶段:一个人或一个设计组,根据对实际程序设计所需的一批基本要素的考虑,提出有关语言的基本构想,定义该语言的语法形式和语义实现一个语言处理系统,使这个语言能实际用于程序设计通过一些人的使用和反馈,修改完善语言的设计少数比较成功的语言可能进入下面阶段:将语言的处理系统提供给更大范围的用户,并得到更多反馈除语言设计者(拥有者)外的其他人参与该语言实现的研究和开发,并引起软件产业界的注意,形成语言实现的产品和用户社区受到标准化组织的注意,成立相应标准化小组(公司语言版权问题)经过认真的标准化工作,产生语言的标准化文本参考:《C++语言的设计和演化》,中译本:机械工业2002语言的开发和标准化语言标准化的主要工作:严格检查语言中的各种结构,严格定义它们的形式和意义根据客观情况的需要,考虑加入新特征并给出严格定义处理语言中各方面的一致性问题考虑并确定语言中过时的旧特征,明确说明这些特征将逐步被淘汰标准化通常是一个很困难的过程,其中一个困难是遗产问题:与标准化前的版本或者前一个标准化版本的向后兼容问题大的改变,可能使许多已有程序变得不再合法,招致老用户的反对不改变,语言就可能由于逐渐过时而被淘汰Fortran的几次标准化(尤其是Fortran90),Ada95的标准化,都特别明显地反应了这些问题。C++也做了两次标准化(1998,2010)语言的实现:抽象机器一部计算机就是连接起来的一组硬件器件其作用是实现机器语言程序描述的计算过程使用者可以不关心其内部实现,只关心其机器语言(指令形式和意义)即使具体的硬件变了,只要它们提供的机器语言不变,使用方式没变,以前的程序都仍然可以用因此:机器语言可以看作计算机硬件的“抽象”。一种机器语言对应一类计算机,或说对应于一种“抽象计算机”。如X86机器语言一种高级语言也可以看作是一种抽象“计算机”的机器语言例:C语言,可以看作能直接执行C程序的高级“计算机”的“机器语言”该“计算机”提供了C语言的各种基本的和高级的数据结构能执行C语言的各种基本计算,基本操作和控制结构计算机的抽象层次问题与软硬件等效性语言的实现语言的实现牵涉到两种抽象机器(两种语言):需要实现的程序语言定义了一台抽象机某种现存的准备用于运行程序的计算机也定义了一台抽象机实现一种语言,就是在一台抽象机上做出另一台抽象机,用一台已有的抽象机去模拟另一需要实现的抽象机的行为(扮演另一不同的抽象机)通用图灵机的存在性以及图灵论题说明:在抽象机A上实现抽象机B,就是希望基于A执行用B的语言写的程序如何在抽象机A上实现抽象机B?存在哪些可能的技术路线?实现:方式常见的说法是(高级)语言的实现有两种方式,编译和解释。编译:把源程序编译为机器语言目标程序后执行解释:在目标机器上实现一个源语言的解释器,由这个解释器直接解释执行源语言程序(它实际上实现了另一部抽象机)实现:方式语言实现方式多种多样,纯粹的编译或纯粹的解释只是两个极端C语言的常见实现方式可以认为是比较纯粹的编译方式脚本语言(JavaScript、VBScript、Perl、Python、Ruby、MATLAB、BASIC)实现,采用的基本上是纯粹的解释方式实现:LispLisp的基本实现方式:先把源程序翻译成一种内部形式(类似于语法树的数据结构)由解释器解释这种内部形式(遍历数据结构,实现程序所描述的行为)许多Lisp系统的翻译器比较简单(翻译较浅)这只是一种常见的基本实现方式目前也有许多Lisp系统采用更复杂的实现方式,例如采用即时编译(Just-In-TimeCompilation)即动态编译(DynamicCompilation)技术实现:JavaJava的基本实现方式与Lisp类似,但所用的中间表示(字节码,bytecode)更接近计算机(翻译较深),而且有外部存储形式(独立存在)由于Java已成为软件开发的一种主流语言,Java程序的执行效率受到特别重视,人们用了许多技术来提高执行效率(这些技术都是早在函数式语言领域开发的)即时编译(JIT):在装载字节码程序时,即时地将程序编译为运行所在的机器的本地代码程序,而后直接执行(由硬件直接解释)Hotspot和动态编译:为避免即时编译带来大的开销,开始时直接解释执行并监视执行情况,如果发现热点(如频繁执行的循环、频繁调用的函数),就动态编译这部分代码,生成本地代码实现:C++第一个C++实现(B.Stroustrup)用一个编译器把C++源程序编译为标准C语言程序,而后就可以用任何C编译器实现这个C++编译器做完全的语法和静态语义检查,如果完成第一个编译,得到的C程序是没有错误的现在许多试验性语言和实现采用把C语言作为编译器目标的技术B.Stroustrup在《C++语言的设计和演化》里仔细讨论了这种实现许多计算机(特别是一些CISC机器)采用微程序结构硬件提供一套微指令,对外提供的机器指令集通过一组微程序实现,由一个硬件的微程序解释器解释执行在这种机器上,编译器生成的结果并不是硬件可直接执行的微代码,而是CPU的硬件解释器实现的外部代码,由硬件解释器解释执行,也可能用编译器直接实现微代码实现程序功能的实现通常可以分为两个阶段:静态处理阶段(static),在程序本身开始执行前的处理。通常包括:翻译阶段(编译):对源程序做各种检查(语法检查,类型检查等)和变换,将其转变为某种适宜动态执行的形式连接阶段(可能):构造出可动态运行的程序形式装载阶段(可能):把可运行程序装入运行环境,必要的处理动态执行阶段(run-time),指程序的实际运行期间例:若变量x的(绝对或相对)位置可静态确定,运行中就可以直接访问。若不能静态确定,运行中每次访问都要查表,效率就比较低语言的“编译实现”:在静态阶段完成尽可能多的处理工作,对源程序做深入的分析和变换,生成的目标形式通常与源程序差异巨大实现编译实现:源程序只处理一次,可任意次执行;运行效率高,可通过深度优化而尽量利用运行平台的特点;目标程序运行时不需要复杂的运行系统支持编译耗时;源程序的许多信息在编译时舍弃;灵活性差(编译时把许多变量固定);对程序开发的支持比较复杂解释实现:可以提供更大的灵活性(例如程序可以动态变化);源程序的信息可用;比较容易实现功能强大的程序开发系统可能要反复检查分析程序的信息,导致较低执行效率;难做程序优化有些语言或语言特征难以编译实现常规语言(如C/Fortran)的主要设计目标之一就是有效的编译实现一些程序开发环境结合了这两方面,在开发时解释执行,发布前编译语法、语义和语用:简述语法:规定合法程序的形式,常用某种形式化描述,如范式等语法描述方式清晰定义语言中各种结构的形式。(编译原理课程的内容)上下文关系通常用自然语言说明,例如:变量要先定义后使用,表达式里的变量应该与运算符的类型匹配。这类规定也被称为静态语义,编译器可以检查有关规则。这方面最重要的是“类型检查”语义:规定合法的程序(各种程序结构)的意义,即程序执行时所产生的效果。语言手册中用尽可能严格的自然语言叙述。形式语义学:研究如何用严格的形式化的方式,定义程序设计语言的语义,进而也就定义了所有程序的语义。(计算机系的研究生课)语用:程序设计技术,具体语言的使用技术和惯用法等。这些不是语言规范规定的,但语言的设计中隐含了对这些方面的许多考虑。(程序设计技术,程序设计方法学,设计模式等等)可参考陈意云老师的编译原理和程序设计语言理论课程/~yiyun/语言的设计目标及其演化早期语言设计中最主要的考虑是易用性(与机器和汇编语言比较)和高效实现,特别关注程序能翻译成高效执行的代码,因为这样才可能被接受(如Fortran等)。随着计算机变得越来越快,效率问题虽然还是很重要,但重要性已大大下降。易用性方面的考虑仍非常明显:提高程序设计工作的效率帮助人们提高程序(软件)的质量,可靠性设法支持某些高级的软件设计技术语言的最主要作用是用于描述所需要的计算过程。为此需要:清晰简洁的形式(例子:C,Pascal)清晰简单的语义(易理解,易验证)可读性(人容易阅读理解,计算机也容易处理)语言设计:目标演化随着程序设计语言的发展,语言的设计目标也发生了很大变化语言的初始设计目标就是更方便地为计算机写程序后来人们认识到,程序设计语言也是人的工具,用于描述算法、交流算法,用于服务于交流、教学和科研的需要随着计算机应用发展,程序变得越来越复杂,开发程序变成代价高昂的工作。为支持复杂程序开发,提高开发工作的效率,语言设计有了许多新目标:1,支持对基本语言的扩充,提供各种扩充定义和抽象机制过程、函数定义机制,扩充语言的基本操作数据类型定义机制(及OO机制),扩充数据描述方式和功能例:C++在语言机制扩充方面有许多考虑(如运算符重载)可扩充语言(ExtendableLanguages),允许程序形式的改变(Lisp)语言设计:目标演化2,提供支持复杂程序所需的高级组织的机制,支持大型程序开发模块机制(信息隔离和屏蔽)支持分别编译的机制,支持程序的物理组织3,支持软件重用,包括软件中的部分的重用支持通用的基本程序库。Pascal失败之处之一就是忽略了库的开发。C,C++和Java的设计都特别考虑了对库的支持。许多新语言定义了功能非常丰富的标准程序库支持库开发:库是最基本的重用方式。是否支持库开发,决定了语言能否大范围使用。支持用户和第三方供应商开发各种扩充的和专用的库语言设计:通用和专用常规程序语言是通用的(generalpurposelanguages),设计目标是支持所有可能的程序的开发工作随着应用的发展,程序变得越来越复杂,程序的规模越来越大。直接在基本语言机制的基础上描述特殊的功能也变得越来越困难在常规语言的基础上支持专门用途的可能方式:扩充常规语言,增加特殊的服务于专门用途的机制。这方面的例子:

数据库查询,图形用户界面,异常处理等等利用常规语言的扩充机制,开发支持特殊使用领域的程序库,实例:

扩充的标准库(如Java和许多脚本语言),支持平台开发的扩充库,各种第三方软件商提供的库在常规语言里支持专门应用,受到基本语言的描述方式的限制。处理复杂问题的一种途径是使用专门的描述方式,设计提供特殊的专门用途语言。复习-编码常见的编码形式摩尔斯码(编码表示-二叉树)盲文码(64种码文)二进制编码(二、八、十、十六进制转换)条形码(解码过程)量子编码DNA编码如何设计一个简单的编码和解码系统?二进制:高低、强弱、深浅、多进制:音乐、图画程序设计语言程序设计语言的发展机器语言->汇编语言->高级语言计算模型和语言范型过程式: C函数式: Scheme(语法例子)面向对象: Java逻辑式: Prolog(例子)程序设计语言语言:标准和实现翻译和解释纯编译C纯解释脚本语言编译+解释Java-Lisp即时编译和动态编译优化微程序优化语言设计:实例不同设计目标导致了不同的语言设计:Fortran:高效的大规模数值计算Lisp:灵活的符号表达式处理,数据与程序的统一Pascal:结构化程序设计,教学,清晰的基本程序设计概念C:系统程序设计,低级操作与高级语言结构的结合Smalltalk:概念的统一性和最小化,面向对象C++:复杂的系统程序设计,低级机制与高

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论