Falcon
Falcon 程式語言(英語:The Falcon Programming Language), 閣稱Falcon P . L .、Falconpl抑是Falcon,是一个開源、多範程式語言,其設計佮推廣由 Giancarlo Niccolai 領導。
歷史
Haste 佇二空空二年編寫一个小型項目,用實現一小型虛擬機,你彼个項目是足緊的發展 Falcon 語言。二空空八年,這个語言以開源項目的方式成做 Ubuntu 的附加軟體,並且人包括佇 Kross。
核心
和關注於一个編程風格無仝款的範式(paradigm), Falcon 佇咧一个簡單的框殼(framework)里融合幾種無仝款的風格。佇實現級別上,Falcon 是「服務概念」驅動,當做一个單一个工具予人用時指令碼 ia̋n-jín 予人看做一个服務指令碼,模組佮內嵌的應用。
Hello Falcon
就算講有各種形式的基本 I / O,一个 " hello world "(全世界朋友你好!)例使用 _ fast print _ ( 快速列印 ) :
` ` ` > " Hello World ! " ` ` `
Unicode 支援,下跤是一个國際化例的介紹:
` ` ` / / International class ; name and street class 鋪排 ( なまえ , Straße ) / / set class name and street address नाम=なまえ شَارِع=Straße / / Say who am I ! function 言 え ! ( ) > @ " I am $ ( self . नाम ) from " , self . شَارِع end end / / all the people of the world ! 民族=[ 鋪排 ( " 高田 Friederich " , " 臺灣 " ) , 鋪排 ( " Smith Σωκράτης " , " Cantù " ) , 鋪排 ( " Stanisław Lec " , " południow " ) ] ` ` `
` ` ` for garçon in 民族:garçon . 言 え ! ( ) ` ` `
資料類型
- Nil-The _ nil _ 關鍵字,一个空值 .
- Integer-一个六十四个元的整數值 .
- Numeric-一个 IEEE 六十四位元浮點值 .
- Range-一組上限,下限佮步長 .
- MemBuf-Raw 記持體來緩衝,每一个位址是一个無符號的一 , 二 , 三 , 抑是四位元組整數 .
- Function-函式(可憐呼叫實體).
- String-無定長的 UNICODE 字元序列 ( 毋過𪜶有法度做位元組緩衝予人使用 ) .
- Array-無定長的元素序列 .
- Dictionary-無定長有序鍵 / 值對的集合;鍵能是任何 Falcon 元素 .
- Object-來源於類別的實例或者單一的非類物件 .
- Class-會當建立實例的類,實體 .
- Method-實例的不變部份,使用函式的形式關聯 .
範式
Falcon 融合六種 _ 主流 _ 編程範式。
- 程序式(procedural)
- 函數式(functional)
- 物件導向(object oriented)
- 面向原形物件(prototype OOP)
- 訊息導向(message oriented)
- 格化的編程(tabular programming)
程序式
程序式編程通過典型的函式聲明和呼叫被支援。每一个函式支援隱式變數參數呼叫佮占位參數(Positional Parameters)號名參數(Named Parameters)。 提供一套程序風格的語句(如 for , while , if , switch 語句)。
下跤,一个完整的程序程式,突出一部份佇咧Falcon里用來減少一寡編程任務中原生的 pre-body-post(頭前-本體-後置)處理的困擾的設計理念
` ` ` function sayList ( saying ) for elem in saying > > elem formiddle : > > " " forlast : > " ! " end end ` ` `
` ` ` sayList ( List ( " Have " , " a " , " nice " , " day " ) ) ` ` `
函數式
Falcon 有一个稱為 Sigma-reductor 的求值 ia̋n-jín,伊允准程式人員編寫純函數式程式,看起來佮用 Lisp 無啥物無仝。混合式編程風格允准佇函數式語句序列使用無仝的範式(比如講 OOP 抑是程序化), 或者是佇無仝的程序化方式期間內底使用函數式求值。
函數式語句序列被描述做標準語言陣列;交叉無仝的求值佮佇咧 Sigma-reduction 求值方式期間這攏意味著語句序列能被程式本身建立,審查佮被動態修改。下跤的例咧列表迴箍呼叫 _ late binding _ 修改一个指定變數的參照。
` ` ` pnext=[ printl ,'"', & value ,'"'] ` ` `
` ` ` dolist ( function ( p ) ; seq . value=p ; eval ( seq ) ; end , [" Have " , " a " , " nice " , " day "] ) ` ` `
若是𪜶第一个成員變數是一个家己叫元素,標準陣列做為函式被呼叫,像下跤的比如講。
` ` ` [printl " Prompt > "] ( " Real data to print " ) ` ` `
仝一个級別函數式語句序列(我若頂懸比如講)會當予人做儲存的呼叫來照定義處理,並且一改性分配予一个變數,𪜶佇語意上等仝款一个函式符號。
函數式的範式包含一个 _ out of band _ 元素標記。元素能接收一个通過語言運算子佮函式被測試的 _ oob _ 特徵標記,並且當咧函數式語句序列當中移動的時指明一个特殊含義的值。比如講,足濟函數式迴圈,如 _ floop _ 和 _ times _,會當重新來開始執行迴圈,抑是按包含的函式倒轉去的無論 _ 一 _ 抑是 _ 零 _ 的 out of band 就斷去。_ map _ 函式通過一个對映函式轉換一个陣列中的所有值,如果伊是一个 _ nil _ out of band 共忽略倒轉來(共伊擲挕捒); 通過這个方法會當佇咧某所執行對映佮過濾。
物件導向
通過類,一个繼承模型,靜態類別成員,屬性初始化佮實例構造器,Falcon 程式語言提供一个 OOP 範式。佇咧上濟一个潛在的父類別是予人反射做原生資料的條件下支援直接接。儉取基礎類別成員予人支援。
實例的結構是固定佮不變的,但是因為 Falcon 函數式特質,函式看起去就是一種特定種類的資料,伊會動態設定實例成員做無格式資料抑是函式(所以變成𪜶的方法)。
Falcon 支援單一个物件,可能是 classless 抑是爸類別衍生,佇虛擬機器執行主指令碼進前實例化佮被準備。佇咧可能牽涉著程式模組一个佇咧其他的物件的時陣,實例消除順序由 Falcon 連結器追蹤以確保單一物件的適當的初初初。
通過函數式語句序列類別實例會當予人建立,如實例化的一个類在語意上等於呼叫伊的符號,所以,對一个第一个元素是一个類的函數式語句序列求值,伊有建立一个實例的效果。
Falcon 的 OOP 模型完整支援運算子加載,伊允准伊的建立一个針對數學和邏輯的擁有指定的行為運算是的類。
面向原形物件
原型 OOP 比 OOP 閣較簡單,猶毋過伊去的概念。實例全是 classless,𪜶的結構會當予動態改變。Falcon 語言字典(排列好的鍵 / 值集合)會當包含函式,彼陣字典會用得予 _ 祝福 _,通知語言𪜶做 classless 實例予人處理,並且使用 _ 點存取符 _ 使𪜶的值作為屬性抑是方法予人處理。佇下跤的例,一个字典變做一个物件:
` ` ` dict=bless ( ['state'=> 零 ,'incme'=> function ( ) ; self . state + + ; end ] ) dict . incme ( ) > dict . state / / will print'一' ` ` `
簡單咧發揮結束的陣列。
` ` ` array=[一 , 二 , 三] array . showMe=function ( ) for item in self > item end end ` ` `
` ` ` array . showMe ( ) ` ` `
訊息導向
做一个訊息予廣播的訊息導向編程允准間接呼叫一个或者閣較濟註冊的監聽器。訊息的內容是任意的並且會使包含任何語言元素,包括但是無限制佗一个建立實例的類,函式序列抑是表示。監聽器毋是完整接受訊息佮執行𪜶,就是通過有次序的撇步分享佇構建中的一个訊息的通用應答。訊息會當放送佮包含一个即時的應答或者是會當予人儉佇環境用來接收佮處理閣較濟後來者(佇咧Falcon里被稱做 _ 斷言 _)。
訊息導向編程有一个佇虛擬機器里的直接介面,來關於擴充原生模組佮躉入去應用會相送來作用。比如講,一个多執行緒應用可能擲予虛擬機器是無仝的執行緒訊息的,為著佇咧指令碼級別上序列處理佮小可仔放送直接來自指令碼的處理解決方案。
格化
格式的編程會當看做是一種 OOP 編程的特殊擴充,一个類通過一个格予人講,𪜶的列是屬性,每一途是一个實例。無仝款做伙保持全部實例,允准逐个實例影響父表周圍的行,關於表的修改被動態反射著逐个實例。
表格提供一个方法來佇有限選擇的集合之間選擇行為,抑是混合行為並合併𪜶,提供模糊邏輯 ia̋n-jín。如每一途,實質上的一个 Falcon 陣列,會當包括表中資料佮邏輯抑是私有邏輯(通過陣列縖結), 佇表格里一个通過全域選擇邏輯選擇的實體會當提供專門的處理能力。
特性
綴著多範的編程,Falcon為編程人員呈現濟項多樣的特色。
模板檔案
通過預處理符號< ? . . ? >抑是講< ? fal . . ? >,Falcon允准指令碼成做文字文件的一部份,、。儲存為 " . ftd " 的指令碼予人做為一个文字檔案來處理並且佇拄著其中一个預處理符號進前簡單輸出。下跤的 _ . ftd _ 例內底包括其中的指令碼予人執行:
` ` ` You called this script with < ? print ( args . len ( ) ) ? > parameters . ` ` `
FTD 檔案會當通過標準 Falcon 指令碼予人整合到到糜糜應用,咧動態模板(FTD 檔案)中的是表現邏輯,應用邏輯被儲存佇咧 Falcon 模組。
FTD 檔案會當予人用來驅動態網站,一寡流行的網頁侍服器(當前的 Apache 二), 有直接分析佮執行 " . fal " 和 " . ftd " 指令碼的模組,提供整合到網頁侍服器 ia̋n-jín 的一个 API。用 CGI 指令碼也通使用動態 FTD 頁面。
異常
Falcon由 _ raise _ , _ try _ 和 _ catch _ 語句支援錯誤處理。raise 語句話跋任何 Falcon 元素,包括講 Nil,numbers , strings , objects 等咧。庫函式佮擴充模組將通常引發錯誤類別的實例,抑是衍生自伊的實例。
catch 語句能揣取任何類型的元素,一个某一種的類型(如 string(字捾)抑是 interger(整數)),抑是某一種類別的實例。揣的類被按層次組織,所以伊會當像下跤的例仝款是共閣較濟一般性錯誤處理(_ TypeError _ 是一个衍生自 _ Error _ 類別館):
` ` ` try . . . code that can raise . . . catch TypeError in error . . . if we mixed up types . . . catch Error in error . . . another generic error . . . catch StringType in error . . . an explicit raise " something " was issued . . . catch in error . . . no idea of what has been raised . end ` ` `
catch 語句內底的 _ in _ 子句是可選的(這意味著錯誤會使失覺察家己)。
_ catch _ 語句模仿 _ select _ 語句,會當被用一个飼出的類型抑是轉向。
可1875入執行的時陣
使用會當連結執行的時庫 _ libfalcon _,Falcon予設計去可1875入去佮可能延伸去其他的系統的。
文件生成器
Falcon裝載一个整合的文件系統,叫做 _ faldoc _,是特別設計來提供會當維護的文件的 Falcon 基礎庫(是原生 C + + 代碼抑是講用 Falcon 編寫的模組)。
虛擬檔案系統
所有發生佇 ia̋n-jín 抑是虛擬機器(指令碼執行器)級數的 I / O 操作被委派予一个中央虛擬檔案系統組件(centralized Virtual Filesystem Provider), 外部模組或者是可1875入去的應用裝置被允准動態註冊。訂閱的虛擬檔案系統抽象 I / O 操作若 kha-tá-lok-guh 讀取,建立檔案佮拍開流,通過 URI 會當佇咧指令碼內部定址。這會當予伊對任何 VFS(如網路資源抑是壓縮加密的檔案)咧讀模組或者是拍開資源,通過第三方模組閣通過1875入去 ia̋n-jín 的應用程式會當包含特殊的虛擬位置的支援。
並行支援
佇咧更新到零交八 . x 版本,_ Threading _ 模組提供指令碼完整濟執行緒。執行緒模型是 _ 面向代理(agent oriented)_,跨執行緒的資料需要通過幾種會當共享機制明確地共享。每一个執行緒執行一个無仝的虛擬機器,分離的執行發生佇其內部任何操作(若糞埽回收)。 這允准有效的並列處理佮佇指令碼開發者控制之外的零競爭。
協同處理
Falcon來支援准並行協同處理。協同處理是講通過虛擬機器佇仝一个時間片抑是佇咧空閒時間內底執行代碼。𪜶支援一个接近佇完整執行緒模組的閣較輕量級的閣行處理,通過無仝的協同處理允准程式的全域資料完全可見。除了每一个協同處理的合作,(若佇排程讀的進前每一个協同處理必須檢查資料會當用性)。
元編譯器
'_ Falcon _ 編譯器有一个支援宏展開的元編譯器,佇一个標準編譯器中元編譯器由 Falcon 虛擬機器驅動;自元編譯器生成的輸出被傳送到語言的語法破析器親像伊是原始代碼的一部份。使用\ [. . . \]登出序列,通過列印伊會動態記錄被編譯的程式內容。
` ` ` \ [printl ( " printl ('Hello world') " ) \] ` ` `
_ macro _ 關鍵字提供一个簡單的轉到編譯時元程式設計的 _ 語法糖仔(candy-grammar)_ 介面。
原生國際化
用一字首'i'的字串被認為是一个輸出(國際化)字捾。佇一个模組內底通過使用 _ directive _ 語句聲明使用的語言,伊會當指示佗一字串用啥物自然語言編寫,像下跤的比如講:
` ` ` directive lang=fr _ FR / / uses 五 characters ISO language code ` ` `
` ` ` > i " Bonjour à tout le monde ! " ` ` `
一个命令列的工具 _ fallc _ 去予人輸出'i'字攕甲 XML 定義檔案,會當做枋模來支援翻譯到無仝款的語言。
咧讀模組的時陣一个已經翻譯的字元表被應用著模組。
特色
完整地支援模組化編程,Falcon裝載著 _ 特色(Feathers)_,標準模組套件。_ 特色(Feathers)_ 模組當前包括:
- 編譯器-反射型編譯器佮動態外掛程式引導器。
- 組態分析器-完成設定檔分析支援。
- MXML-非常快速佮簡潔的 _ 細粒子 _ XML 分析器(相容 XML 一垺零)。
- 正規表示式-PCRE 七 . x 相容正規表示式庫介面。
- 通訊端(Socket)-BSD 通訊捀跨平台網路支援。
- ZLib-簡潔的壓縮程式介面。
實現
核心 VM 和官方模組,(包括特色模組和社群提供支援的模組)攏是用 C + + 編寫。一寡非常底層的模組和 ia̋n-jín 元素是用 C 和組譯編寫。
可用資源
佇咧 Mac OS X 和 MS-Windows 系統上 Falcon 通過安裝程式釋出,構建佮安裝是一个清楚的過程,抑是佇各種開源系統如 Linux 抑是 OpenSolaris 上通過自構建原始碼包。
佇後者系統頂懸,_ Falcon 程式語言 _ 通常支援各種發行版本並保持更新的,其中有:
- Ubuntu
- Fedora
- Gentoo
- Slackware
- Arch Linux
佇基於 Solaris 系統的發行版本上通過 Blastwave 專案佮 OpenSolaris 系統的(英文)[AuroraUX http : / / en . wikipedia . org / wiki / AuroraUX] 發行版本 Falcon 程式語言會當用的。
參考
外部連結
- Falcon 網站
- 文件
- Falcon community wiki
- Falcon community 論壇
- linuxjournal 上的相關文章
- 發表佇咧 Free Software Magazine