Erlang
是一种通用的面向并发的编程语言,它由瑞典
电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。
Erlang是运行于虚拟机
的解释性语言
,但是现在也包含有乌普萨拉大学
高性能Erlang计划(HiPE)开发的本地代码编译器
,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型
上,Erlang属于多重范型编程语言,涵盖函数式、并发式及分布式
。顺序执行的Erlang是一个及早求值, 单次赋值和动态类型的函数式编程语言。
Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适合于构建分布式,实时软并行计算系统。
使用Erlang编写出的应用运行时通常由成千上万个轻量级进程
组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅只是一两个环节,比起C程序的线程切换要高效得多得多了。
使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。
Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断的情况下更新。另外如果你需要更高效的话,字节代码也可以编译成本地代码运行。
Erlang特性:
● 并发性 - Erlang支持超大量级的并发进程,并且不需要操作系统
具有并发机制。
● 分布式 - 一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点)
● 健壮性 - Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。
● 软实时性- Erlang支持可编程的“软”实时系统
,使用了递增式垃圾收集技术。
● 热代码升级-Erlang允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新代码替换。在此过渡期间,新旧代码是共存的。
●递增式代码装载-用户能够控制代码如何被装载的细节。
●外部接口-Erlang进程与外部世界之间的通讯使用和在Erlang进程之间相同的消息传送机制。
●Fail-fast(中文译为速错),即尽可能快的暴露程序中的错误。
●面向并发的编程(COP concurrency-oriented programming)
●函数式编程
●动态类型
●及早求值或严格求值
●脚本语言
Lua
是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de
Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique
de Figueiredo所组成并于1993年开发。
其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。
Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua
有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。
LUA有如下特性:
轻量级 LUA语言的官方版本只包括一个精简的核心和最基本的库。这使得LUA体积小、启动速度快,从而适合嵌入在别的程序里。
可扩展 LUA并不象其它许多"大而全"的语言那样,包括很多功能,比如网络通讯、图形界面等。但是LUA可以很容易地被扩展:由宿主语言
(通常是C或C++)提供这些功能,LUA可以使用它们,就像是本来就内置的功能一样。
LUA还具有其它一些特性:同时支持面向过程
编程和面向对象
编程;自动内存管理
;提供一系列数据结构,包括数组
、链表、集合、字典、散列表等;语言内置正则表达式
匹配;闭包(closure);函数也可以看做一个值;提供多线程支持;等等。
Scala
有几项关键特性表明了它的面向对象的本质。例如,Scala中的每个值都是一个对象,包括基本数据类型(即布尔值、数字等)在内,连函数也是对
象。另外,类可以被子类化,而且Scala还提供了基于mixin的组合(mixin-based composition)。
与只支持单继承的语言相比,Scala具有更广泛意义上的类重用。Scala允许定义新类的时候重用“一个类中新增的成员定义(即相较于其父类的差异之处)”。Scala称之为mixin类组合。
Scala还包含了若干函数式语言的关键概念,包括高阶函数(Higher-Order Function)、局部套用(Currying)、嵌套函数(Nested Function)、序列解读(Sequence Comprehensions)等等。
Scala是静态类型的,这就允许它提供泛型类、内部类、甚至多态
方法(Polymorphic Method)。另外值得一提的是,Scala被特意设计成能够与Java和.NET互操作。Scala当前版本还不能在.NET上运行(虽然上一版可以-_-b),但按照计划将来可以在.NET上运行。
Scala可以与Java互操作。它用scalac这个编译器
把源文件编译成Java的class文件
(即在JVM上运行的字节码)。你可以从Scala中调用所有的Java类库,也同样可以从Java应用程序
中调用Scala的代码。用David Rupp的话来说,
它也可以访问现存的数之不尽的Java类库,这让(潜在地)迁移到Scala更加容易。
这让Scala得以使用为Java1.4、5.0或者6.0编写的巨量的Java类库和框
架,Scala会经常性地针对这几个版本的Java进行测试。Scala可能也可以在更早版本的Java上运行,但没有经过正式的测试。Scala以
BSD许可发布,并且数年前就已经被认为相当稳定了。
说了这么多,我们还没有回答一个问题:“为什么我要使用Scala?”Scala的设计始终贯穿着一个理念:
创造一种更好地支持组件的语言。(《The Scala Programming Language》,Donna Malayeri)
也就是说软件
应该由可重用的部件构造而成。Scala旨在提供一种编程语言,能够统一和一般化分别来自面向对象和函数式两种不同风格的关键概念。
藉着这个目标与设计,Scala得以提供一些出众的特性,包括:
* 面向对象风格
* 函数式风格
* 更高层的并发模型
Scala把Erlang风格的基于actor的并发带进了JVM。开发者现在可以利用Scala的actor模型在JVM上设计具伸缩性的并发应用程序,它会自动获得多核心处理器带来的优势,而不必依照复杂的Java线程模型来编写程序。
* 轻量级的函数语法
o 高阶
o 嵌套
o 局部套用(Currying)
o 匿名
* 与XML集成
o 可在Scala程序中直接书写XML
o 可将XML转换成Scala类
* 与Java无缝地互操作
Scala的风格和特性已经吸引了大量的开发者,比如Debasish Ghosh就觉得:
我已经把玩了Scala好一阵子,可以说我绝对享受这个语言的创新之处。
总而言之,Scala是一种函数式面向对象语言
,它融汇了许多前所未有的特性,而同时又运行于JVM之上。随着开发者对Scala的兴趣日增,以及越来越多的工具支持,无疑Scala语言将成为你手上一件必不可少的工具。
分享到:
相关推荐
No programming language produces only correct results. No programmer should start each project from scratch. Object-oriented programming is the current cure-all — although it has been around for much...
Covering a wide array of Python–related programming topics, including addressing language internals, database integration, network programming, and web services, you’ll be guided by sound ...
Guido van Rossum created the Python programming language in the late 1980s. In contrast to other popular languages such as C, C++ , Java, and C#, Python strives to provide a simple but powerful syntax...
Covering a wide array of Python–related programming topics, including addressing language internals, database integration, network programming, and web services, you’ll be guided by sound ...
Covering a wide array of Python–related programming topics, including addressing language internals, database integration, network programming, and web services, you’ll be guided by sound ...
If you like to think the Web is magic, fine--but there are many who don't like to get into a car without knowing what's under the hood. For those of you who desire a better technical understanding ...
When it comes to creating powerful and effective hacking tools, Python is the language of choice for most security analysts. But just how does the magic happen? In Black Hat Python, the latest from ...
The document then focuses specifically on the C programming language, detailing its features, advantages, and disadvantages: - **A Look at C**: An introduction to the history, design philosophy, and ...
an operating system may seem like magic: a mysterious thing that can control hardware while handling a programmer’s requests via the API of their favorite programming language. Learning how to build...
Python is a remarkably powerful and dynamic programming language that’s used in a wide variety of application domains. Some of its key distinguishing features include a very clear, readable syntax, ...
Covering a wide array of Python–related programming topics, including addressing language internals, database integration, network programming, and web services, you’ll be guided by sound ...
You will find material here about templates and namespaces, exceptions and inheritance, solid class design and design patterns, generic programming and macro magic and not just as randomized tidbits,...
Understand the basic principles of reactive programming to write asynchronous code Practically implement several important design patterns Write efficient code by executing dependency injection See ...
为了使魔镜更具个性化,查理可能还需要学习如何与API(Application Programming Interface)交互,比如获取天气数据或新闻更新。这涉及到HTTP请求、JSON解析等技能。同时,如果希望魔镜具备语音识别功能,他还需要...
Whichever camp you fall into, I assume that you know the C++ programming language already and are comfortable with basic C++ idioms such as derived classes and virtual functions. If these assumptions ...
Whichever camp you fall into, I assume that you know the C++ programming language already and are comfortable with basic C++ idioms such as derived classes and virtual functions. If these assumptions ...