精华内容
下载资源
问答
  • 形式语义描述对于编程语言的设计,推理和标准化具有重要意义,并且在编译器的优化中起着重要的作用。 但是,与四十多年来对各种语义框架的研究所付出的努力相比,它们的实际应用无疑令人沮丧。 这项调查回顾了编程...
  • 元数据编程,在jdk1.5... 这其实代表着将编程语言语义提高了一个层次,比如,某些数据需要"持久保存",是一个应用层的基本要求,代表一个应用层的基本语义,但对应的编程语言,没有一个能实现这个功能的关键字或操作
    元数据编程,在jdk1.5叫Annotation,在ms叫属性化编程。只需要在普通类前面加上Annotation或Attribute,就可以得到想要的特性,比如O/R mapping,比如将一个类变成COM组件,等等。 这其实代表着将编程语言的语义提高了一个层次,比如,某些数据需要"持久保存",是一个应用层的基本要求,代表一个应用层的基本语义,但对应的编程语言,没有一个能实现这个功能的关键字或操作符,这些关键字、操作符构成了编程语言的语义层次,于是我们不得不编写大量代码来实现这个功能。另外一个例子,为实现一个COM组件我们不得不编码实现各种接口,也是一样的道理。现在,"元数据"将将编程语言的语义提高到了应用的层次,通过@Entity,@Remot,或[coclass]这些元数据,我们可以在代码里相当简单、对应地表达出应用层的语义了! 就是说, 元数据编程将语言的语义提高到需求的层次,编程语言将可以非常直接地表达出需求了!
    展开全文
  • 之前一直不懂什么是semantics (语言), syntax (句法) 和grammar (语法),也不懂environment (context 上下文)到底指的是什么。 现在先简单讲下在自然语言下这些都代表了...而语义是指句子符合语法后所表达的意思
    之前一直不懂什么是semantics (语义), syntax (句法) 和grammar (语法),也不懂environment (context 上下文)到底指的是什么。 现在先简单讲下在自然语言下这些都代表了个啥。syntax和grammer是语法,即句子或者短语的组成规则,规定了什么样的句子或者短语是合法的句子或短语。一个句子由主谓宾构成即最基本的语法。而语义是指句子符合语法后所表达的意思。符合语法的句子不代表有合适的意思/意义。如 『苹果 操 牛』这句话 复合基本语法,但没有表达任何实际意义,我们无法理解苹果是怎么能操牛的(什么你能理解?!那你牛逼。。)。对于编程语言也是同样道理,在用parser得到合法的abstract
     syntax tree后,我们想要理解这段程序所表达的含义是什么,也就是分析它的目的和行为,而这就是PL中的semantics。再说白点,semantics是一种抽象,我们在后面会发现operational semantics基本是个精简C语言,那我们为什么需要『C语言』来解释C语言呢?这是有历史原因的,C语言和罗马城一样不是一下子就有的。在C之前还是汇编的时代,那时候的汇编为了适应底层的硬件实现,还带了许多诸如出入程序栈,在寄存器之间移动这样的底层实现细节。C语言抽象了这些细节们解放了程序员。operational
     semantics也是同理,它抽象了语言的琐屑和实现细节(无论对象是高级语言还是汇编),类似于高级语言,用来解释程序是如何运行的。举个例子,在C代码中我们写的a + b是C的合法句法,它代表的意义即a 加上 b, 也就是说翻译过来同样是a + b,。但这俩a + b完全是俩码事了,后者翻译自前者,是前者的抽象。 
    
    展开全文
  • 介绍编程语言语义的结构化,可操作的方法。
  • 编程语言

    2017-01-06 17:24:00
    编程语言的描述一般分为语法和语义,语法是说明编程语言中哪些文字和字符的组合方式是正确的,语义则是对编程的解释。编程语言俗称“计算机语言”,总的来说可分为汇编语言、机器语言、高级语言三类。 二、语言种类...

    一、什么是编程语言

    编程语言(Programming language)是用来定义计算机程序的形式语言,是一种被标准化的交流技巧,用来向计算机发出指令。编程语言的描述一般分为语法和语义,语法是说明编程语言中哪些文字和字符的组合方式是正确的,语义则是对编程的解释。编程语言俗称“计算机语言”,总的来说可分为汇编语言、机器语言、高级语言三类。

    二、语言种类

    (1)汇编语言:直接对硬件进行操作,指令采用了英文缩写的标识符,更容易识别和记忆。汇编程序通常分为三类:指令、伪指令、宏指令。    优点:源程序经汇编生成的可执行文件不仅比较小,而且执行速度快。     缺点:汇编源程序一般比较冗长、复杂、容易出错。

    (2)机器语言:用二进制代码0和1描述的指令称为机器指令,全部机器指令的结合构成计算机的机器语言,用机器语言编程的程序称为目标程序。只有目标程序才能被计算机直接识别和执行。

    (3)高级语言:和汇编语言相比,它不但将许多条相关的机器指令合成单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大化了程序上的指令。高级语言所编制的程序不能被计算机直接识别,必须经过转化才能被识别,按转换方式可分为两种。

    a、解释类:执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器翻译“代码”翻译成目标代码(机器语言),一边执行。       优点:方式比较灵活,可以动态调整,修改应用程序。        缺点:效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器。    

    b、编译类:编译是指在应用源程序之前,就将程序源代码“翻译”成目标代码(机器语言)。      优点:其目标程序可脱离其语言环境独立执行,使用比较方便、效率较高。        缺点:应用程序一旦需要修改,必须先修改源代码,再重新编译成新的目标文件才能执行,只有目标文件没有源代码,修改很不方便。   

    三、常见语言

    1、c语言

    C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。

    2、Java

    Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人pc、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

    3、c#

    c#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言,是微软公司于2000年6月发布的一种新的编程语言。c#看起来与Java有着惊人的相似,包括了诸如单一继承、界面、与Java几乎同样的语法,和编译成中间代码再运行的过程。但c#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM是直接集成的,而且它是微软公司.NET Fwindows网络框架的主角。

    4、Basic

    BASIC是一种设计给初学者使用的程序设计语言,是一种直译式的编程语言,在完成编写后不须经由编译及链接等手续即可执行,但如果需要单独执行时仍然需要将其建立成执行档。

    5、c++

    c++是一种使用非常广泛的计算机编程语言,是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象设计程序、范性程序设计等多种程序设计风格。

    6、PHP

    PHP是一种那个免费的强大的服务器端脚本语言,主要目标是允许网络开发成员快速编写动态页面。还适用于网络开发并可嵌入HTML中使用,非常受web开发者的欢迎。

    7、Javascript

    javascript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言,同时也是一种广泛用于客户端web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。它也可以用在游戏开发,编写左面应用程序等方面

    8、pascal

    pascal是一种计算机通用的高级程序设计语言。语法严谨,层次分明,程序易写,具有很强的可读性,是第一个结构化的编程语言。

    9、AAuto

    AAuto是专用于桌面软件快速开发的新一代混合型编程语言,具有动态语言轻便、灵活、快速开发的特性,而且又可以同时支持静态类型开发,像静态语言那样使用。

    10、Objective-c

    Objective-c是一种通用、高级、面向对象的编程语言。它拓展了标准的ANSI C编程语言,将Smalltalk式的消息传递机制加入搭到ANSI C中。

    11、Python

    Python是一种高级的服务器脚本语言,使用于网站和移动APP开发。Python语言的可读性和紧凑的语法简单易学,相比较其他语言,开发者可以使用更少的代码来表达一个概念。

    12、Ruby

    Ruby是一种为简单快捷的面向对象编程而创的脚本语言,可用于网站和移动APP的开发。开源web应用框架——Ruby on Rails就是使用Ruby语言编写的。

    13、SQL

    SQL(Structured Query Language),一种编程语言,用于数据库中的标准数据查询语言,IBN公司最早使用在其开发的数据库系统中。

    四、编程语言的发展趋势

     1、面向对象程序设计以及数据抽象在现代设计思想中占有很重要的地位,未来语言的发展不再是单纯的语言标准,将会以一种完全面向对象,更易表达现实世界,更易为人编写,其使用将不再只是专业的编程人员,人们完全可以用定制真实生活中一项工作流程的简单方式来完成编程。

    2、计算机语言发展的特性

    (1)简单性:提供最基本的方法来完成指定的任务,只需要理解一些基本的概念,就可以用它编写出适合各种情况的应用程序。

    (2)面向对象:提供简单的类机制以及动态的接口模型。对象中的封装状态变量以及相应的方法,实现了模块化和信息隐藏;提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法。,实现代码的复用。

    (3)安全性:用于网络、分布环境下有安全机制保证。

    (4)平台无关性:与平台无关的特性使程序可以方便地被移植到网络上的不同机器、不同平台。

     

    转载于:https://www.cnblogs.com/cddWeb/p/6257116.html

    展开全文
  • 编程语言的进化

    2019-07-27 17:44:17
    早上读到了一篇文章《Lisp的永恒之道》这一篇文章解决了我一直以来对Lisp编程语言的疑惑,加深了对DSL(领域编程语言),...最早的编程语言是卡带,也就是机器语言,这种语言没有语义和语法,操作符和数据混合在一起...

    早上读到了一篇文章《Lisp的永恒之道》 这一篇文章解决了我一直以来对Lisp编程语言的疑惑,加深了对DSL(领域编程语言),同时对编程语言的理解也越来越深入。写一篇文章的目的就是从主要编程语言的进化来看看编程语言发展的过程以及背后的设计哲学,当然,这个只是我自己的认识,如果有不足之处,请博友指教。

    机器语言

    最早的编程语言是卡带,也就是机器语言,这种语言没有语义和语法,操作符和数据混合在一起,偏向于具体的设备,依赖觉得硬件。

     

    汇编语言

    随后,汇编语言就出现了,汇编语言定义了基本的语法结构,定义了操作符和数据类型,但是汇编语言还是针对特定的硬件编程,比如cpu,我记得大学的时候学习的就是8086汇编语言程序设计,这个就是针对intel 8086cpu的编程语言而设计,如果cpu是80386,那么就必须在对80386的cpu进行编程,可移植性非常差。如果针对每一个cpu就要重新写整一套代码,那么将会是多么复杂的事情,困难度不可想象。

     

    C语言

    对于汇编语言的问题,主要要解决跨硬件平台,那么怎么解决这个问题了,对啦,添加一个抽象层,这个就是硬件抽象层,它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。相当于提供统一的api 比如C语言printf函数,打印字符串,由于每个终端设备的类型和型号都不一样,需要在适配到每个终端设备上,那么通过一个终端虚拟硬件,由它进行各个终端差异的屏蔽,提供统一的对外接口,有点类似适配器模式。用C语言写出来的程序。虽然这样简化了操作硬件的这种复杂行,但是直接写操作虚拟硬件的代码也是很苦逼的事情,这样就出现了系统内核,用来提供更高一层的抽象,所以C语言操作硬件的函数都会调用系统内核,由系统内核再去调用具体的虚拟终端设备。这个就和特定的操作系统有关了,C语言编译器编译出来的代码就和操作系统进行关联。所以C语言程序很难做到跨操作系统平台,因为每个操作系统都提供私有函数,并且编译出来的二进制代码也是不一样的,跨平台基本不可能。

     

    高级语言:java,.net

    为了解决C语言的跨平台的问题,可以考虑再在操作系统这一层添加一个抽象。那么就出现了java和.net这样的编程语言。java通过实现一个jvm虚拟机,屏蔽了各个操作系统的差异,同时定义了一个标准的目标代码(class文件),只要class文件满足jcp定义的规范,就可以被jvm执行。这就解决了两个问题,目标代码格式固定,这个平台都一样,函数调用都一样,都和jvm打交道。这样就实现了跨越操作系统平台。但是还存在一个问题,jvm的实现只能够获取各个操作系统公共的部分进行抽象,但是有一些操作系统私有的个性化是无法屏蔽的,只能通过开通一个小后门,让开发者能够开发基于操作系统的native实现。

     

    DSL领域编程语言

    好了,编程语言发展到这一层,已经非常高级了,对于开发者来说,已经够简单了。不需要硬件只是,不需要懂操作系统知识。如果在继续发展会怎么样,对啦,是不是可以跨越编程语言。还有,编程语言一般都是语法和语义绑定在一起的,比如 int c = a + b 这一条赋值语句,我们知道要把 a 和 b相加 赋予 c ,相当于知道语法,就知道语义了,那么是不是可以把语义 和 语法 分开 ?

    语义:  define c  = add(b,c) 或者 <opteration name="add" result="c"><param="a,b"/></opteration>

    那么转化为 java语言 就是 int  c = a + b; 转化为javasrpit var c = a + b 等等

    相当于what 和 how 分开,就是说 我要做什么 和 我怎么做 这一层在区分开来。目前我们使用的比较多的就是maven

     

     

    maven通过自己的一套语义,定义了整个构建的过程。我只定义了怎么做,通过xml这一套语法来定义,但是具体怎么做我通过一个解释层来实现,同时也可以用不同的语言,可能在java平台上,我用java语言来实现,在.net平台,我用.net来实现。

    其中大名顶顶的 facebook的 Thrift框架就是这种设计思想,通过自己定义的一套语言,定了一个分布式服务框架,通过自己的解释器,把自己定义的解释成为不同的语言实现。

    但是由于领域语言的语义定义的规则和模式都不一样,对于每个不同的领域,都有自己的DSL,比如是ant,我就必须学习一下整个ant的规则,比如maven也需要重新开始学习。

    目前很多语言转化服务,比如目前把java写的语言转化为obejct-c和windows的云服务,原理和上面类似,应该都是先转化为一套中间语言,然后转化成为各个实际的特性语言。

     

    未来想象

    随着DSL语言的快速发展,我在想 未来是不是会把DSL也统一起来,定义一套通用的规则和规范,找出每个领域特性部分,进行抽象,形成一种统一的开发语言。比如web编程,只需要web方面的DSL语言就可以了,不需要在学习python,php,jsp,asp等等,在数据库操作方面也一样,不需要在了解各个平台具体连接数据库的方式以及代码实现,用统一的数据操作DSL就可以了。这个想法比较大,也是扯扯淡的,不过还是希望未来的某一天,编程语言会统一,不过现在越来越有这个趋势了,各个语言都在添加其他语言的特性,增强自己的特性,以后各个语言都变的越来越类似,功能也越来越雷同,唯一需要考虑的是语言性能问题,但是随着硬件的发展,除非某一个特定的领域,大部分应用在语言层面的性能应该会忽略。

     

    通过编程语言的进化,起始发现背后的思想都是一样的,原话我忘记是怎么说的,大概意思是:任何两个系统之间的复杂性,都可以通过添加一个抽象层要屏蔽。整个编程语言的进化也都说明了这个问题。

    转载于:https://www.cnblogs.com/aigongsi/archive/2012/09/28/2706604.html

    展开全文
  •    即一串代码只可有一种执行方式,在语义上和逻辑上不能有歧义,这同时也是所有编程语言所要遵守的最高准则。   1.2具体体现      1.2.1运算符的优先级与结合性       - 优先级是为了解决语句运算中...
  • 相反,事后设计的用于操纵XML的标准语言JavaScript与XML相比,构成了完全不相关的语义和语法。 操纵Escher电路的Escher程序和操纵XMLJavaScript程序之间的类比并非偶然。 实际上,Escher Runtime是我们对新的...
  • 本节书摘来自异步社区出版社《C++面向对象高效编程(第2版)》一书中的第4章,第4.6节,作者: 【美】Kayshav Dattatri,更多...在C++中,绝大多数的复制操作都由语言隐式调用(当对象按值传递或按值返回时)。当通...
  • happens-before规则和as-if-serial语义先行发生原则(happens-before)什么是happens-beforehappens-before规则示例as-if-serial语义总结 先行发生原则(happens-before) 我们知道,在Java内存模型中,如果要确保有序性...
  • go语言类型系统 类型系统,顾名思义是指一个语言的类型体系结构,一个...类型系统是描述这些内容在一个语言是如何关联的,Go语言中的大多数类型都是值语义,并且都可以包含对应的操作方法,在需要的时候,你可以给任...
  • 8. (go语言)面向对象编程

    多人点赞 2020-06-14 10:04:15
    面向对象编程8.1概述8.2 匿名组合8.2.1 匿名字段8.2.2 初始化8.2.3 成员的操作8.4.2 同名字段8.2.5 其它匿名字段8.2.5.1 非结构体类型8.2.5.2 结构体指针类型8.3 方法8.3.1 概述8.3.2 为类型添加方法8.3.2.1 基础...
  • 在java语言里,总有一些名词看语义跟本不明白是啥玩意儿,也就总有部分面试官拿着这样的词来忽悠面试者,以此来找优越感,其实理解清楚了,这些词也就唬不住人了。 synchronized是悲观锁,这种线程一旦得到锁,其他...
  • 语义的需要

    2010-03-19 09:16:00
     语义就是语言的意义,在电脑编程方面来说就是对内存操作及机器指令执行的解释。它表现出程序编写人逻辑思维的清晰与否,不仅仅应用在电脑编程方面,还可往社会上推,也就是所谓的权责明确。就系统设计员的角度来说...
  • 它是一种零配置服务,使用与单播域名系统(DNS)基本相同的编程接口,数据包格式和操作语义。 虽然Stuart Cheshire将mDNS设计为独立协议,但它可以与标准DNS服务器协同工作。 mDNS协议发布为RFC6762使用IP多播用户...
  • Java 锁的内存语义

    2019-12-18 08:05:04
    专栏原创出处:github-源笔记文件 ,github-源码 ,转载请附上原文...在几乎所有的支持多线程编程模型的语言中,基本上都提供了与互斥信号量对应的概念,在 Java 中我们称之为锁。 锁的内存语义分析 本文将借助 Ree...
  • KGOL: 知识网格操作语言

    千次阅读 2004-08-01 16:17:00
    KGOL: 知识网格操作语言诸葛海 刘洁 摘要 本文介绍知识网格操作语言KGOL的设计和实现,该语言不仅能为Internet用户提供访问和管理知识资源的友好界面,还能为应用程序开发者提供编程环境,实现对全球分布的知识资源...
  • week1 编程基础   数字,用算法结合数字的表达式,数字类的比较方式,逻辑表达式的布尔运算...编程语言定义就语法和语义,将计算的想法翻译为机械步骤。   低级编程语言: 输入低级代码>检查器进行处理(低级代
  • 容错语义 使用数据集和数据帧的API 创建流数据框架和流数据集 流数据帧/数据集的模式推断和分区 流式数据帧/数据集的操作 基本操作-选择,投影,汇总 事件时间窗口操作 处理后期数据和加水印 加盟运营 流...
  • java并发编程

    2016-09-14 22:02:18
    在指令的设计和执行上遵循串行编程模型,即根据机器语言语义以串行方式执行命令。大多操作系统以线程为基本的调度单位。线程会带来的问题如下: 1.安全性 安全性的含义是“永远不发生糟糕的事情”。 在没有充足...
  • 论程序语义的重要性

    千次阅读 2005-01-07 13:34:00
    语义就是语言的意义,在电脑编程方面来说就是对内存操作及机器指令执行的解释。它表现出程序编写人逻辑思维的清晰与否,不仅仅应用在电脑编程方面,还可往社会上推,也就是所谓的权责明确。就系统设计员的角度来说...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 245
精华内容 98
关键字:

编程语言操作语义