Lush手冊——第一章 簡介

簡介

本章將展現Lush及其能力與特性。 程序員

1.1 Lush展現

    Lush是一門面向對象的編程語言,是爲對大規模數值運算與圖形化應用感興趣的研究人員、實驗人員和工程師設計的。Lush用於如下場景,即想要將高級的、弱類型的解釋性語言的靈活性,強類型的、本地編譯型的語言的高效性,還有與C、C++等語言編寫的代碼容易結合這些特性組合在一塊兒。 正則表達式

    在與解釋型語言(如Python、Perl、Matlab、S+甚至BASIC)和使用編譯型語言(例如C語言)結合的相關工程上,Lush的優點尤爲意義重大。經過使用Lush,咱們將得到解釋型和編譯型編程世界裏的最好的部分,並最終合而爲一: 算法

  1. 一個擁有簡單的類Lisp語法的、帶鬆散類型的、帶垃圾回收機制的、動態做用域的解釋型語言;
  2. 一個帶有類Lisp語法的、帶有強類型、詞法做用域的編譯型語言;
  3. C語言能夠自由地混合到Lush代碼裏,該Lush代碼能夠是一段單獨的程序或者一個單獨的函數。

這聽起來有點複雜,其實否則。事實上,Lush的設計原則就是易學易用。 數據庫

Lush的主要特徵有如下幾點: 編程

  • 一個整潔的、簡單的和易學的類Lisp語法;
  • 一個很是高效的本地編譯器(由C語言實現);
  • 一個與C函數與庫對接的容易的方式,聯通對用其它語言編寫的對象文件的強大的動態加載能力;
  • 自由地將Lisp代碼與C代碼混合到一個函數裏能力;
  • 一個包含向量、矩陣和張量操做的強大的集合;
  • 一個龐大的數值方法庫,包括GSL、LAPACK和BLAS;
  • 一個圖形方法的擴展集(包括一個面向對象的GUI工具包和針對OpenGL和SDL的接口);
  • 聲音和視頻抓取(經過ALSA和Video4Linux);
  • 一個影像和信號處理方法庫;
  • 一些針對機器學習、神經網絡和統計估計的庫。

    這麼一個集靈活性、高效性和擴展性於一身的組合,使得Lush成爲針對人工智能、生物信息學、計算機視覺、數據挖掘、影像處理、機器學習、信號處理和統計學研究和開發的理想平臺。其運行速度與可擴展的庫使得它在不少領域獲得試用,好比實時音頻、影像和視頻處理。一些用戶將它做爲萬能腳本語言,還有一個將它做爲主開發語言引入到工做中。一些用戶用Lush開發2D或3D遊戲而被知曉。還有一些用戶甚至用Lush開發用於嵌入式處理器的商業軟件。 網絡

    與Matlab相比,Lush是一個真正的面嚮對象語言,它具備數據結構、類型矩陣、簡單的語法和一個本地編譯器。與Python相比,Lush有一個高效的本地編譯器(編譯過的數值代碼與C同樣快),而且提供函數式編程範式。在Lush裏,容易地調用C庫和自由地混合C與Lisp代碼的能力也是獨一無二的。 數據結構

    若是你有以下需求,那麼Lush就是爲你準備的: 機器學習

  • 想要一門簡單的解釋型語言,它能夠快速實踐你的想法,或實現高效數值運算,或編寫基於GUI應用的原型程序;
  • 用C編寫了一個軟件,並想從一個簡單的解釋型的腳本語言調用它;
  • 本身寫了一個腳本語言解釋器,想要讓它成爲一個充分擴展的編程語言;
  • 使用一個解釋型的類腳本語言,好比Perl、Matlab、Mathematics、Tcl、Python或BASIC,想讓編譯器產生高效的代碼,而且易於調用C方法;
  • 使用腳本語言編寫程序,就像前邊提到的那些語言,而後據此想要產生輕便的、脫機的應用;
  • 或者想要爲你的工程使用兩種語言的組合:用於底層實現的高效的、可編譯的、只包含基本元素的語言,例如C\C++,還有用語上層實現和用戶接口的語言,它們是解釋型的、帶有智能內存管理的弱類型的語言,好比Lisp。

    不少軟件工程,尤爲是研究性的項目,都須要兩種語言:用於實現底層或者有計算功能的可擴展函數,好比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的)上。

1.2 特性

    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和一些讀寫矩陣的函數,經過使用這些函數,大規模矩陣能夠映射到虛擬地址空間中,而不須要明確地加載到內存中,這就容許對很是大的數據庫的高效訪問。

1.3 庫

    在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(音頻錄製與播放)。

1.4 應用領域

    對於多種應用來講,Lush都是一個好工具。起初,Lush的開發是做爲一個用來實驗和開發機器學習、神經網絡和模式識別應用的環境,可是通過幾年的發展,它已經成長爲一個成熟的語言和快速開發環境。

    關於Lush的使用狀況,這裏有一些實例:

  • 一個用於神經網絡和機器學習實驗的模擬環境
  • 一個用於數值計算、信號處理、影像處理、統計估計等等的類Matlab原型工具
  • 一個用於軟件工程的控制/腳本語言
  • 一個用於大型應用的調試器和分析工具
  • 一個用於GUI應用的快速原型工具
  • 一個用於快速hack的腳本語言

    下邊是使用Lush完成的研究項目的一個小型子集:

  • 數量龐大的手寫識別項目
  • 神經網絡、機器學習和統計估計的不少項目
  • 數據挖掘、錯誤探測和數據庫行銷項目
  • 圖像處理研究

    一些成熟的商業應用也是用Lush構建的,包括:

  • 一個完整的支票金額讀取器,如今它被組合到NCR公司的自動出納機和大型結算室的支票讀取機上(Lush產生的代碼運行在DSP板上)。這是極其的複雜代碼段(60000行Lush Lisp代碼自動地轉換爲C代碼
  • 一個用於DjVu影像壓縮系統的前景/背景分段模塊的早期版本
  • 一個神經網絡模擬器和神經網絡訓練工具
  • 一個帶手寫識別功能的筆觸數據輸入系統

1.5 實現

    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編譯器)。

1.6 歷史

    Lush是SN系統的直接後代,該系統本來是由Leon Bottou和Yann LeCun開發的,它是某個神經網路模擬器的終端機。自從1987年,人們不斷地開發出各類SN的系統,在法國,有些被Neuristique S.A.以商業方式售賣,事實上,它已發展成爲一個成熟的原型環境和開發環境。

    AT&T貝爾實驗室、而後是AT&T實驗室和NEC研究院等的版本開發,已經用來構建不少成功的件數和產品,最著名的有:

  • 世界上不少銀行使用的用來自動讀取指標的手寫識別系統。事實上,一些NCR製造(能夠讀取支票)的ATM機就在嵌入式DSP主板上運行這編譯後的SN代碼
  • DjVu影像壓縮系統的原型
  • 從1988年開始,由AT&T卡飯的,多的數不清的機器學習算法,包括進化神經網路的LeNet族和支持向量機(SVM)算法的早期實現

    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的各個前身的家族圖譜書:

1.7 Lush表明什麼?

    Lush應該表明「Lisp Universal SHell」(Lisp通用解釋器)或者一些相似的東西。可是英語詞典告訴咱們另外一個故事。根據世紀大詞典1914版的說法,Lush在英語裏有4個主要的意思:

    對於咱們中的一些人,Lush固然看起來是新鮮的、華麗的、有趣的、有活力的、靈活的、成熟的和使人激動不已的。

    對其餘人,它看起來多是不活躍的、沒有活力的和值得懷疑的。

    怎麼看由你。

相關文章
相關標籤/搜索