值得你学习了解!揭秘九大前沿编程语言

如今,对于编程语言而言,提供一个丰富的开放式源代码,函数库以及框架为基础语言是用户关注的重点。在一些特定项目情况下,市场主流编程语言尽管有大量资源提供,但并不能有效解决用户的特定问题,用户不得不去寻找适合的语言。通过一些编程语言可以提供额外的功能,帮助代码运行速度更快,摈弃无休止的调整和优化。

以下九种语言应该是每个程序员所关注的技术。它们并不是最好的编程语言,有些甚至仅仅在专门项目应用上提供帮助。但这九种编程语言具备上升空间,是值得每一个开发人员研究和学习,或许有一天这些语言成为你的项目必不可少的。

Erlang语言:提供实时系统功能

Erlang是由瑞典电信设备制造商爱立信所辖的计算机科学研究室开发,目的是可以应付大规模开发活动的程序设计语言和运行环境。Erlang于1987年发布正式版本,erlang是函数式语言,提供了9个9的稳定性和超高并发并发性能,于1998年发表开放源代码版本。

Erlang是运作于虚拟机的解释型语言,在程序设计范型上,Erlang属于多重范型编程语言,涵盖函数式、并行及分布式。循序运行的Erlang是一个及早求值,单次赋值和动态类型的函数式编程语言。特别是在实时系统应用上,如移动电话交换机计费系统。

GO语言:简单、动态

Go语言是谷歌2009发布源编程语言,专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。

编译后Go代码的运行速度与C语言非常接近,而且编译速度非常快,就像在使用一个交互式语言。现有编程语言均未专门对多核处理器进行优化。Go就是谷歌工程师为这类程序编写的一种语言。它不是针对编程初学者设计的,但学习使用它也不是非常困难。Go支持面向对象,而且具有真正的封装和反射 等功能,可以被用于网络服务器、存储系统和数据库中。

Groovy语言: Java编程的精华

Groovy是用于Java虚拟机的一种敏捷的动态语言,作为一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。Groovy语言提供程序员来编写简单的程序,充分利用现有的Java代码的能力。

构建在强大的Java语言之上并添加了从Python,Ruby和Smalltalk等语言中诸多特征,例如动态类型转换、闭包和元编程支持。不仅如此,紧密联系到Java JA件,Groovy的代码运行像一个动态类型的脚本语言,可全面进入到静态类型的Java对象的数据。

Ocaml语言:复杂数据层次“魔术师”

OCaml最早称为Objective Caml,是Caml编程语言的主要实现,开发工具包含交互式顶层解释器,字节码编译器以及最优本地代码编译器。Ocaml有一个巨大标准库,使得可以像Python或者Perl语言一样可以方便地开发各种应用程序。

对于程序员来说,OCaml由编程语言社区努力推广,并提供有目标的支持,自动内存管理和设备的便携性。目前可从苹果的App Store获下载OCaml应用程序。通过OCaml语言的应用特性,可以建立一个教代数的网站。

CoffeeScript:JS转译语言

CoffeeScript并非一种语言,受到Ruby、Python与Haskell等语言的启发,增强了JavaScript的简洁性与可读性的转译器。同时新增更复杂的功能,例如列表内涵、模式匹配等。使用CoffeeScript可以体会编程泛型的表达方式,减少逗号、括弧这些只是增强表达能力的一些副作用。

Scala语言:运行JVM上函数程序

Scala运行在JVM上,兼容现有的Java程序,集成面向对象编程和函数式编程的各种特性。Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化。Scala的case class及其内置的模式匹配相当于函数式编程语言中常用的代数类型。

Scala还包含了若干函数式语言的关键概念,包括高阶函数(Higher-Order Function)、局部套用(Currying)、嵌套函数(Nested Function)、序列解读(Sequence Comprehensions)等。Scala是静态类型的,这就允许它提供泛型类、内部类、甚至多态方法(Polymorphic Method)。另外值得一提的是,Scala被特意设计成能够与Java和.NET互操作。

Dart语言:非JS的JavaScript

Dart从设计之初就为配合现代web整体运作而考虑,开发团队也在持续改进Dart向JavaScript转换的快速编译器。JavaScript适用于为网页新增基本的交互性,但如果面对成千上万行代码弱点显而易见。谷歌设计Dart这门新语言的缘由,Dart与 JavaScipt双管齐下,用于优化Web编程开发。

Dart与JavaScript相似,用到了类似于C语言的语法和关键词。最明显的区别在于JavaScript是一种基于原型的编程语言,而Dart和C++、Java类似,需要使用类和接口来声明对象。开发人员可以选用Dart来声明静态类型的变量,与JavaScript相比,HTML5开发者们尝试一下Dart语言在WEB编写代码的速度上更胜一筹。

Haskell语言:简单纯粹的函数编程

对于有20年的发展,Haskell语言是一种标准化的,通用纯函数式编程语言,有非限定性语义和强静态类型。作为函数式编程语言,主要控制结构是函数,具有“证明即程序、命题为类型”的特征。社区在宣传时一直是将其定位为一门通用程序设计语言的。Haskell是一种程序语言。特别是多态类型,懒惰的,纯的函数式语言,与大多数其它编程语言不同。 该语言被命名为Haskell Brooks Curry。它是以数学逻辑为基础的函数式语言,基于lambda演算。

Julia语言

Julia语言:更快速度的Python

科学计算传统上需要最高的性能,但是领域内的专家们在日常工作中更多的会选择慢一些的动态语言。现代语言设计和编译器技术使目标成为可能:最大化的消除性能抉择和为原型设计(prototyping)提供一个富有成效的单一环境并且足够有效率的来运用性能加强的应用。面向科学计算的高性能动态高级程序设计语言,像Python般通用Julia编程语言扮演这个角色:灵活的动态语言,科学和数值计算方面的优异表现,以及比得上传统静态类型语言的优异性能。

Julia的特性包括可选的输入,多重分派(Multiple dispatch)和优异性能,实现了使用类型推断和JIT(just-in-time)编译,使用LLVM执行。它采用多范式的,命令式的特征组合,函数化的并且面向对象的编程方式。同时Julia保持了MATLAB在高水平数值计算方面的轻松表现,但突破在一般编程上的局限,不仅建立在数学编程语言上的血统,而且借鉴了流行的动态语言如Lisp, Perl, Python, Lua和Ruby的优点。

PLC编程入门,先来认识6种编程语言

传统的PLC编程语言只有两种,指令表(IL)及梯形图(LD),有的称梯形逻辑图(LLD)。而今为便于各类型的工程技术人员都能使用PLC,PLC厂商都增加了它的编程语言。国际电工组织也制定与几次修订了PLC编程语言国际标准。并在1993年做了全面修订后称之为IEC 61131-3的修订版。我国在1995年11月发布了GB/T 15969-1/2/3/4标准,与IEC 61131-1/2/3/4等同。该标准推荐了6种编程语言,除了指令表及结构化文本(ST)为文字语言,还有梯形图、功能块图(FBD)、连续功能图(CFC)及顺序功能图(SFC)等图形语言。

目前,IEC 61131-3编程语言不仅用于PLC,而且还用于集散型控制系统、工业控制计算机、数控系统和远程终端单元。

由于这个标准的建立是在PLC已广泛使用之后,加上它不是强制性标准,所以,有些老的PLC厂商还是在原来语言的基础上做了扩展,并没有完全采用这个标准。再就是,即使语言相同,但细节还是有不少差异。

倒是国产PLC,如和利时公司的LM、LK系列机,是在有了标准之后才开发的,能全面采用这个标准。再就是ABB公司的PLC也使用标准规定的6中语言编程。

下面就给大家简要介绍一番:

指令表(IL)

指令表语言是PLC编程最基本的语言。但是,用它编的程序,可读性较差,目前已不常用。故不在此做介绍。

结构化文本语言(ST)

ST语言与BASIC语言、PASCAL语言或C语言等类似。它没有单一的指令,只有由一组指令构成的含义完整的各种语句。具体语句有赋值语句、条件语句、选择语句、循环语句及其他语句(EXIT语句、RETURN语句、功能块调用语句等)。

不同品牌PLC的ST语言所提供的函数、运算符可能略有不同。

ST语言功能比图形语言强,但不如图形语言直观,目前用的还不大普及。如欧姆龙PLC只是在自编功能块的程序中才可使用它。

同样为ST语言,各PLC厂商的细节不完全一样。

梯形图(LD)

梯形图来源于美国,是一种基于梯级的图形符号布尔语言。

梯形图语言与电气原理图相对应,与原有继电器逻辑控制技术相一致。与原有的继电器逻辑控制技术不同的是,梯形图中的功率流不是实际意义的电流,内部的继电器也不是实际存在的继电器。

梯形图的左母线好像电气原理图的电源线一样,一般不直接与输出类指令(相当于电气原理图的负载)相连,中间总要有能建立逻辑条件的一些指令(相当于电气原理图的控制元件)。但有的PLC也允许这么做。

用梯形图符号编的PLC程序,很像电气原理图。如上图所示。图b为施耐德公司Naza PLC用的梯形图。

下图所示为与IL语言程序对应的梯形图程序

关于梯形图的文章有很多,在此不再赘述,本公众号以前也发过几篇文章,大家可以去看一看:

关于PLC梯形图,你想知道都在这里!

想短时间内掌握西门子PLC梯形图的编程方法就一定要看这篇文章!

学PLC必看:看懂电动机控制系统中PLC梯形图和语句表

PLC常用的基本控制电路及梯形图

功能块图(FBD)

FBD语言(一种对应于逻辑电路的图形语言),与电子线路图中的信号流图非常相似。FBD广泛地用于过程控制。

FBD语言是以功能模块为单位,描述控制功能。特别是控制规模较大、控制关系较复杂的系统,用它表达将更为方便。

目前,PLC厂商推出一些高功能及高性能的硬件模块的同时,多提供与其有关的功能块图程序,这为用户使用这些硬件及进行编程提供了很大方便。

FBD语言占用内存较大,执行时间较长,因此,这种语言多只在大、中型可编程序控制器和集散控制系统的编程和组态中采用。

连续功能图(CFC)

CFC与FBD类似,也是按需要选用种种功能块。所不同的是,它更灵活,块的位置可任意摆放,特别有信号反馈时,画起来更方便。

为了块的执行有明确的顺序,它的每个块的右上角都标有序号。但在实际表达时,这个标号也可选择不显示。

FBD及CFC语言在DCS系统编程中用得较多。此外,由于这两种语言差别不大,有时,仅使用FBD语言。因而,有的也把IEC 61131-3自动化编程语言说成5种。

顺序功能图(SFC)

SFC语言以描述控制程序的顺序为特征,以图形方式,简单、清楚地描述系统的所有现象,并能对系统中存有的像死锁、不安全等反常现象进行分析和建模,并可在此基础上编程。所以,得到了广泛的应用。

其实,SFC语言仅仅是一种组织程序的图形化方式。其实际使用要与其它语言配合,否则无法实现其功能。所以,严格地讲,它不能算是完整的编程语言。

1.组成

步(Step)

用方框表示,分有初始步、活动步、不活动(休止)步三种。一个步是否为活动步,即是否处于激活状态,则取决于上一步及与其相应的转移。

动作(Action)

动作是步的组成部分,一个步含有一个或多个动作,用一个附加在步上的矩形框来表示。每一动作中的程序代码都可以用IEC的任一语言如ST、FBD、LD或IL来编写。每一动作还有一个修饰词(Qualifier),用来确定步激活时其动作什么时候执行或终止。

有向连线

从上到下、从左到右的步间连线。也可用加箭头做非上下、左右的步间连线。

转移

在有向连线上的垂直短线。与转移相关的逻辑条件,用文字、布尔代数表达式、图形符号标注在转移短线旁。

2.SFC转移规则

步的转移指的是有向连线相连的前后步激活状态的转换。

步间转移的规则是:

①步间的转移逻辑条件为真;

②被转移步的前一步是活动的。

不满足此两条件,将不转移。

为了启动顺序功能流程图程序的执行,总是要指定一个初始步,其标志为S0,是程序运行开始时被激活的那个步。有个这个初始步,则随着相应转移逻辑条件满足,流程图中步的激活状态将逐步转换,直至最后一步被激活,或根据有向线指定路线不停地循环转换。

3.SFC主要形式

根据结构的不同,可分为以下几种形式:单序列控制、并行序列控制、分支结构序列、转移序列等。

下图所示为一段SFC语言编写的程序。

同样称SFC语言,但有的是合乎标准的,如欧姆龙CJ2所用的,其Action有以上修饰词。有的没有,使用时要看具体软件的说明。

本文选自《PLC实用编程指南 第3版》

编后语

盘点世界上奇怪的 6 种编程语言

当世界正朝着编程语言更易于使用和学习的方向发展时,有一群富有创造力的、喜欢摆弄抽象概念的人创造了一些奇怪的编程语言。它们显然违背了一般原则,只是为了好玩。

本文最初发布于 Level Up Coding 博客,经原作者授权由 InfoQ 中文站翻译并分享。

这些编程语言让我知道,不是世界上的每一件事都必须有用,也不是我们个人做的每一件事都应该有用,希望你觉得这是篇有趣的文章。

以下是这 6 种有史以来最怪异、最不切实际的语言。

这是谷歌上最难搜索的语言之一,绝对是我的最爱。///是一种极简主义语言,它只包含一个操作——/source/replacement/形式的字符串替换。这种语言非常有限,但是一些聪明的程序员能够将字符串替换操作转换为完全可以工作的程序,循环并输出数据。这是一个简单的“Hello, world!”程序:

复制代码

甚至还有一个用///编写的复杂程序。以下是斐波那契序列的实现代码:

复制代码

Glass 是由 Gregor Richards 开发的一种深奥的编程语言。它将非常不直观的后缀表示法与重量级的面向对象结合在一起,需要对主堆栈及面向对象结构做大量的处理。其他语言没有这样实现的,这使得它非常独特。

下面是“99瓶啤酒”程序的示例代码:

复制代码

Chicken 不仅是语言的名称,还是语言中唯一允许的关键字!重复次数和行数决定了所要执行的操作码。下面是一个示例程序。你能猜到它的作用吗?

虽然代码很多,但它只是打印“Chicken Power!”感兴趣的话,可以在这里试一下。

复制代码

有趣的事实:Befunge 被认为是第一种基于 ASCII 的二维通用编程语言。

它是一种二维编程语言。代码放在固定大小的代码区里,代码区中的每个单元格都可以保存代码或数据,程序可以用代码或数据替换其中的任何一个单元格。

解释器从左上角单元格开始,不断向右执行。你可以用特定的方向指令来控制解释器的方向。例如,下面是一个无限循环:

复制代码

下面是一个“Hello, world!”:

复制代码

阶乘也很简单:

复制代码

Piet 是一种编程语言,使用这种语言编写的程序看起来像是抽象画的位图。这种语言是以彼埃·蒙德里安(Piet Mondrian)的名字命名的。Piet 程序的基本构建块是色块,它支持 20 种不同的颜色,有一些实现还支持更多的颜色。编译是由一个“指针”引导的,它在图像周围移动,从一个连续的彩色区域移动到下一个彩色区域。这里提供了多个实例。

使用Piet编写的“Hello world!”程序

程序开头的角色列表声明了多个堆栈,它们的名字很自然,比如“Romeo”和“Juliet”。这些角色开始相互对话,操纵彼此最上面的值,相互压入和弹出,进行 I/O 操作。角间也可以相互提问,以条件语句的形式。总的来说,该编程模型与汇编语言非常相似,但要冗长得多。

下面是一个迷你示例,大致上展示了简化版的 Hello World。

复制代码

原文链接:

https://levelup.gitconnected.com/6-weirdest-programming-languages-in-the-world-70aae95b709

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。