Loading AI tools
来自维基百科,自由的百科全书
Factor是Slava Pestov建立的堆疊導向程式語言。Factor是動態型別的並擁有自動主記憶體管理,還有強力的元程式設計特徵。語言有一個單一的實現,特徵包括自宿主的最佳化編譯器和一個整合式開發環境。Factor發行包括一個大型的標準庫。
Slava Pestov在2003年建立Factor作為電動遊戲的手稿語言[2]。最初的實現,現在稱為JFactor,是用Java實現的並執行在Java虛擬機器上。儘管在語法方面早期的語言表面上類似現代的Factor,現代的語言在實踐方面是非常不同的,並且當前實現更加快速。
Factor是動態型別的、函數式和物件導向的程式語言。代碼可以圍繞叫做單詞的小型過程來構造。在典型的代碼中,這些過程一般1–3行長,多於7行長的過程是非常少見的。在其他程式語言中習慣上表達為一個過程的某個東西,在Factor中可以寫為多個單詞[3]。
每個單詞接受固定數目的實際參數並有固定數目的返回值。給單詞的實際參數被傳遞到資料棧上,使用逆波蘭表示法。這個堆疊只用來組織到單詞的呼叫,並非用作資料結構。在Factor中以類似於Forth中堆疊的方式使用堆疊;因此它們都被當作是堆疊語言。例如,下面的代碼片段列印「hello world」到當前輸出流:
"hello world" print
print
是在io
詞彙表中的一個單詞,它從堆疊接受一個字串而不返回東西。它列印這個字串到當前輸出流(預設的是終端或圖形收聽器)[3]。
階乘函式,在Factor中可以用如下方式實現:
: factorial ( n -- n! ) dup 1 > [ [1,b] product ] [ drop 1 ] if
不是所有資料都必須只通過堆疊來傳遞。詞法作用域的局部變數,在過程內可用作臨時變數來儲存和訪問。動態作用域的變數被用於在過程呼叫之間傳遞東西而不使用堆疊。例如,當前輸入和輸出流被儲存在動態作用域的變數中[3]。
Factor強調靈活性和擴充語言的能力[3]。有宏系統,還有對Factor語法的任意擴充。Factor的語法經常被擴充來允許新類型的單詞定義和用於資料結構的新類型的文字。它還被用在XML庫中提供生成XML的文字語法。例如,下列單詞接受一個字串並產生一個XML文件對象,它是強調這個字串的一個HTML文件:
: make-html ( string -- xml )
dup
<XML
<html>
<head><title><-></title></head>
<body><h1><-></h1></body>
</html>
XML> ;
單詞dup
重複在堆疊上的頂部元素。<->
表示將來自堆疊的一個專案填入XML文件的指定部份。
Factor包括一個大型的標準庫,完全用本語言寫成。包括有:
Factor內建了外界函式介面,允許同C、Objective-C和Fortran程式進行通訊。還支援執行用GLSL書寫的著色器並與之通訊[3][9]。
Factor是用Factor和C++實現的。它最初自舉於早期的Java實現。現在,解析器和最佳化編譯器都用本語言書寫。語言的特定的基礎部分是用C++實現的,比如垃圾回收器和特定原始操作(primitive)。
Factor使用基於映像的模型,類似於很多Smalltalk實現,這裡編譯的代碼和資料都儲存在映像之中[10]。要編譯一個程式,這個程式被裝載入一個映像並儲存這個映像。一個特殊工具輔助建立最小映像來執行一個特定程式的過程,包裝這個結果進入可以被部署為一個獨立應用的某個東西中[3][11]。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.