本章将展现Lush及其能力与特性。 程序员
Lush是一门面向对象的编程语言,是为对大规模数值运算与图形化应用感兴趣的研究人员、实验人员和工程师设计的。Lush用于如下场景,即想要将高级的、弱类型的解释性语言的灵活性,强类型的、本地编译型的语言的高效性,还有与C、C++等语言编写的代码容易结合这些特性组合在一块儿。 正则表达式
在与解释型语言(如Python、Perl、Matlab、S+甚至BASIC)和使用编译型语言(例如C语言)结合的相关工程上,Lush的优点尤为意义重大。经过使用Lush,咱们将得到解释型和编译型编程世界里的最好的部分,并最终合而为一: 算法
这听起来有点复杂,其实否则。事实上,Lush的设计原则就是易学易用。 数据库
Lush的主要特征有如下几点: 编程
这么一个集灵活性、高效性和扩展性于一身的组合,使得Lush成为针对人工智能、生物信息学、计算机视觉、数据挖掘、影像处理、机器学习、信号处理和统计学研究和开发的理想平台。其运行速度与可扩展的库使得它在不少领域获得试用,好比实时音频、影像和视频处理。一些用户将它做为万能脚本语言,还有一个将它做为主开发语言引入到工做中。一些用户用Lush开发2D或3D游戏而被知晓。还有一些用户甚至用Lush开发用于嵌入式处理器的商业软件。 网络
与Matlab相比,Lush是一个真正的面向对象语言,它具备数据结构、类型矩阵、简单的语法和一个本地编译器。与Python相比,Lush有一个高效的本地编译器(编译过的数值代码与C同样快),而且提供函数式编程范式。在Lush里,容易地调用C库和自由地混合C与Lisp代码的能力也是独一无二的。 数据结构
若是你有以下需求,那么Lush就是为你准备的: 机器学习
不少软件工程,尤为是研究性的项目,都须要两种语言:用于实现底层或者有计算功能的可扩展函数,好比C\C++;还有就是用于顶层控制的、脚本化的、实验性质的和具备修补功能的灵活的语言,这样的语言多数是解释型语言。流行的面向研究的解释型语言,好比说Matlab,有一点低效,又不多或没有复杂数据结构支持,不提供完备的面向对象编程的能力,缺乏与C及其它编译型语言的简单接口功能。 socket
Lush的语法是简单的Lisp形式,若是"Lisp"这个字给你不寒而栗的感受,那么请注意它的方言Lush实现是极其简单易学的,Lush多是现有可用的语法里最简单的。大多数学习了Lush的科学家,工程师和软件开发人员均可以在几天内熟练地使用它,尽管他们之前没有接触过lisp。真的,Lush很是简单。实际上,Lush已经用于教授儿童编程! 编程语言
Lush编译器有一些有趣的特性(还有一些限制)。它的主要的优点是它能够产生很是高效的C代码,它是使用全部考虑的机器里可用的最好的C编译器编译的。
Lush当前运行于各类Unix平台上,包括Linux/x86,Solaris和SGI/Irix;它也能够运行于Mac OS X和Windows(安装了Cygwin的)上。
Lush是一个由C编写,围绕紧凑、轻便和有意简单的Lisp解释器。它有全部的经常使用功能和结构,这些在正经的面象对象语言里都有,好比传统的句式,循环,局部变量,函数,宏,对象,类,方法和继承。除此以外,Lush还提供了大量的用于处理列表、字符串(包括正则表达式匹配和替换)、矢量、矩阵和张量的函数。
Lush与1980年代中期的某些lisp至关类似,好比Le_Lisp和UCI_Lisp。Lush明显比Common Lisp简单,与Scheme差异较大。
Lush有一些不一样寻常的特性,它们是转换为C的编译器、动态加载器和与现存的C函数和已经实现的C库的便利的接口,其中一个最不一样寻常的特性就是其提供的在一个单独的函数内交叉混合C与Lisp源码的能力。
Lush的矢量与矩阵操做引擎也很是强大和高效,这使得它在计算强度极高的数值和信号与图像处理方面的应用很是理想。这些函数包含对矢量、矩阵和张量高达8维的操做,能够进行建立、改变大小和转换。一些基本的矩阵操做,好比说标量操做(对矩阵上的全部元素)、内积、外积、转置、高度优化的1维与2维卷积等都包含其中。Lush提供的迭代操做符能够得到矩阵的任意元素而不须要开销较大的边界检查。
做为一门面向对象语言,Lush提供了定义和编译类的功能,这里的类是由槽和方法组成的,对于派生类还包含从其父类继承来的槽和方法(与C++语法类似)。
Lush包含了Lisp狂们熟悉的全部的函数。它们有:list函数、list迭代符、物理列表操做符(矢量、矩阵、张量等)、宏、剪切宏和符号操做符等等。大多数临时用户宁愿远离比这些更复杂的操做符。
Lush提供了一些易用的图形函数来绘制直线、多边形、矩形、图像和带颜色的文本,这些函数带自动刷新和双缓冲功能(针对简单的动画)。图形能够绘制到X视窗系统中,也能够绘制到PostScript文件里。Lush提供的底层的绘图函数能够用来构建高级功能,好比说函数绘图。
Lush还有一个很是简洁和易用的面象对象的GUI生成器,叫作Oger,它使用上面提到的底层绘图函数,彻底使用Lisp语言编写的。包含对按钮、滑块、单选按钮、菜单、字符串编辑器等等的预约义类。Oger包含一个用来在窗体里放置对象的自动化机制,所以极大地简化了GUI程序的设计与实现,简单的GUI程序能够在极短的时间内编写完成,而且很是简洁。
针对输入与输出,Lush提供了两个模块。一个模块是面象Lisp的函数集,容许容易地进行ASCII数据、lisp表达式、lisp对象和矩阵的输入输出,还有一些特别吸引人的东西,好比说管道和socket;另外一个模块从根本上提供了对标准C语言I/O库的访问,包括fopen、popen、fprintf、fscanf、fgetc、fputc、fgets和一些读写矩阵的函数,经过使用这些函数,大规模矩阵能够映射到虚拟地址空间中,而不须要明确地加载到内存中,这就容许对很是大的数据库的高效访问。
在Lush里,对于用户来讲,有大量的库和实用函数集合可用,它们中有些使用Lisp编写的,有些是由C编写的而后接口到Lush中,还有一些是已经植入到Lush中的预存库。
对于倾向于数值应用的朋友,Lush有一个针对GNU Scientfic Library(GSL)、LAPACK和BLAS现行代数库的完整的接口。这给予Lush访问一个可扩展的数值和统计函数集(事实上有几千个函数)的能力。
拥有对工业标准OpenGL库的完整接口,使得Lush可以建立3D图形和动画,该接口自己包括对GLUT、OpenGLU和OpenRM(场景制图渲染引擎)的接口。该特性使得Lush成为编写可交互虚拟现实应用和计算机游戏的优秀平台。
Lush提供接口的另外一个库是Simple Directmedia Layer(SDL)视频游戏API,它由一个高级库进行功能加强,该库容许简易的舞台控制和可移动屏幕对象,该屏幕对象是带像素精度级别碰撞检测的。该库与Lush的简单语法组合,是开发简单视频游戏和儿童编程教育的理想方法。
还有一个图像处理库是受用户支配的,这个库的函数能够用来装载、保存、改变大小和采样、卷积、滤波和分析图像。数学形态学操做,好比联通量分析、距离变换、腐蚀和膨胀,对于黑白影像都是可用的。为了使用Video4Linux API容易地抓取视频,还包含了相关的类与函数。
还有一个包含在Lush里的库,它提供了图的功能,容许语法树和有限元状态机结构,图转导和组合,viterbi搜索算法。
Lush还包含一个用来进行基于梯度的机器学习的可扩展库,这里的基于梯度的机器学习包括神经网络、径向基函数、支持向量机(SVM)和一些其余算法。该库基于一个富有创新精神的面向对象设计,该设计会促进从多学习机和合做学习机训练到大型学习机的构造。使用该库的商用光识别系统已经创建完毕。
此外,Lush还提供了各类多媒体库接口,包括Video4Linux(视频抓取)和ALSA(音频录制与播放)。
对于多种应用来讲,Lush都是一个好工具。起初,Lush的开发是做为一个用来实验和开发机器学习、神经网络和模式识别应用的环境,可是通过几年的发展,它已经成长为一个成熟的语言和快速开发环境。
关于Lush的使用状况,这里有一些实例:
下边是使用Lush完成的研究项目的一个小型子集:
一些成熟的商业应用也是用Lush构建的,包括:
Lush编程语言已经做为Lisp的一个变种而被实现。
在软件工业发展的某些时间段里,有时人们将Lisp理解为本质上是学术兴趣的怪物,它的理论计算机科学遗产也会让人引发对Lisp的常见误解,好比人们认为它效率低而且难学。那为何咱们选择Lisp呢?缘由是与常见的偏见相反的,Lisp很是易学,还很灵活、高效和便利。Lisp有很是简单、整洁和灵活的语法,这个语法多是咱们学过的最简单的语法(相反的,Per是另外一个极端)。咱们教授C开发者使用Lush的经历是他们在几天内就能够熟练使用Lush。脚本语言的设计者常常会犯一些错误,不只在语言功能设计上,还有在他们语言语法的设计上,相关的例子包括Matlab、Mathematica、S+,还有一些其它语言,为何有Lisp这样好的语法存在咱们还要法宠一个新的呢?Lish就是这样的一门语言,它是Lisp的一个面向对象版本的方言,它将全部精力集中于易用和高效上,应用场景是数值操做(这与不少Lisp的传统实现时不一样的),尽量贴近这样的效果,即不费什么力气就能够与现存的C编写的代码对接。
另外一个jin仅Lisp才有的优点是Lisp是一门可编程的编程语言。在Lisp里,程序仅仅是一个数据结构,程序员能够建立或操做这种结构,就像操做数据同样。换句话说,Lisp程序能够建立其它Lisp程序,该特性容许用户(不只是语言设计者)无限制地扩展语言自己。该特性也使编写语法转化、自优化程序、编译器、自动微分器等等程序成为可能。大多数用户都将远离编写这些程序的工做,可是他们仍会在这些领域得益于他人的工做成果(好比CLush编译器)。
Lush是SN系统的直接后代,该系统本来是由Leon Bottou和Yann LeCun开发的,它是某个神经网路模拟器的终端机。自从1987年,人们不断地开发出各类SN的系统,在法国,有些被Neuristique S.A.以商业方式售卖,事实上,它已发展成为一个成熟的原型环境和开发环境。
AT&T贝尔实验室、而后是AT&T实验室和NEC研究院等的版本开发,已经用来构建不少成功的件数和产品,最著名的有:
SN主要在AT&T贝尔实验室内部使用,用于不少研究项目,包括机器学习、模式识别和影像处理。可是它的各类前身是用在AT&T实验室、朗讯科技(Lucent)、萨克生物研究院(the Salk Institute)、多伦多大学、蒙特利尔大学、加利福尼亚大学伯克利分校,还有不少其余研究机构。SN的商业版本用在一些大型公司,做为原型工具使用:发过汤姆逊半导体公司、法国国家航天航空研究中心、.....
贡献者有:Leon Bottou、Yann LeCun,Jie Huang Fu、Patrice Simard、Yoshua Bengio、Jean Bourrelly、Patrick Haffner、Pascal Vincent、Sergey loffe等等。
2001年,AT&T和Neuristique在GPL许可证下发布了各自的版本,容许Lush的开发与发行。Yann LeCun、Leon Bzottou和Jie Huang-Fu在NEC研究院完成了将SN变为Lush的工做。
下边是SN和Lush的各个前身的家族图谱书:
Lush应该表明“Lisp Universal SHell”(Lisp通用解释器)或者一些相似的东西。可是英语词典告诉咱们另外一个故事。根据世纪大词典1914版的说法,Lush在英语里有4个主要的意思:
对于咱们中的一些人,Lush固然看起来是新鲜的、华丽的、有趣的、有活力的、灵活的、成熟的和使人激动不已的。
对其余人,它看起来多是不活跃的、没有活力的和值得怀疑的。
怎么看由你。