Neural Parallel Language

神經元並行計算機語言NeuralParallel Language簡稱NPL,是一個開源的高性能的通用腳本語言。NPL原型由李西峙於2004年設計,並於2005年與ParaEngine,一個分散式的3D遊戲引擎一起實現。NPL 語法兼容Lua,易學易用。NPL語言運行環境提供了核心函式類庫,可用於開發複雜的客戶端3D/2D圖形套用,高並發的伺服器端套用,並支持跨平台。

NPL語言設計目標包括:

1.面向並行與分散式計算:程式設計師不需要管理網路連結或執行緒數據同步;代碼無需修改,就可以部署到任意複雜的分散式計算機網路中。

2.運行高效,具有靈活的數據類型,代碼可動態進化,語法最簡。

3.支持3D渲染與仿真。

基本介紹

  • 軟體名稱:NPL (NeuralParallel Language) 
  • 軟體平台:Windows、Linux、Mac OS, iOS, Android等 
  • 上線時間:2004年  
  • 最近更新時間:2016年9月18日 
  • 軟體授權:GNU General Public License v2.0 
  • 軟體版本:1.0-alpha.10 
  • 作者:李西峙   
  • 實現語言:C/C++ 
  • 編程范型:多範式:腳本,指令式(過程式,基於原型,面向對象),函式式   
  • 檔案擴展名:pl 
  • 啟發語言:Lua  
  • 主要實現產品:ParaEngine, Paracraft, NPL CAD  
發展歷史,實現,特性與設計,語法,套用場景,

發展歷史

NPL原型是在2004年設計的,起源於2004年對大腦仿真的項目,當時被稱為“ parallel oriented language”。 2005年,它與分散式3D電腦遊戲引擎ParaEngine一起實現。ParaEngine3D遊戲引擎支撐了一款擁有500多萬活躍用戶的3DMMORPG 遊戲魔法哈奇, 這是NPL語言最早的套用,伺服器和客戶端都用NPL語言編寫。於2016年開始,基於ParaEngine實現了融合搭建動畫和編程為一體的少兒編程教育平台Paracraft帕拉卡。

實現

李西峙於2004年設計了NPL語言並用C/C++實現了該語言。

特性與設計

特性
  • NPL是一個開源的通用計算機程式語言。語法100%兼容Lua,有擴充。
  • NPL運行環境內置了ParaEngine遊戲引擎, 它提供了可用於3D/2D/web/伺服器套用開發的核心類庫。
  • NPL提供了豐富的C/C++ API以及大量開源的NPL腳本類庫。
  • NPL提供了單一語言的解決方案,包括開發高級互動式GUI,複雜的基於opengl/directX 3D圖形套用,高並發可擴展的Web伺服器,高性能資料庫,以及分散式軟體框架。另外,它是跨平台,高性能,可擴展,可調試的。
  • NPL語言起源於2004年對大腦仿真的項目。NPL語言中,檔案節點與連線無處不在,開發者無需關心多執行緒與網路底層邏輯就可以開發複雜的高並發網路套用。
  • NPL語言支持用戶模式下搶占與非搶占代碼,可以用單執行緒實現海量虛擬多執行緒。
  • NPL是一個弱類型腳本語言,但jit動態編譯技術使它擁有接近C++ 的性能;通過ffi或擴展接口,它可以和C/C++函式零成本互調。
為什麼要使用NPL?
如果你遇到以下任何情況(如果不是全部),你可以在NPL中編寫你的下一個大型項目:
  • 如果你喜歡真正動態的語言,如lua。
  • 如果你關心C/C++的兼容性和性能。
  • 來自C/C++世界,但尋找替代Java/C#的語言,可以處理大量的2d/3d圖形客戶端或伺服器應用程式,比C/C ++更容易。
  • 為客戶端和伺服器開發尋找腳本語言,這些語言很小且易於在Windows和其他平台上部署。
  • 尋找可以在運行時即時編譯和修改的動態語言。
  • 混合用戶模式的“搶占”和“非搶先”代碼以實現大規模並發計算。
注意:在C ++ /腳本運行時調用API通常需要上下文切換,這在計算上是昂貴的,大多數語言還涉及類型轉換(例如字元串參數),託管/非託管環境轉換(垃圾收集)等.NPL / LUA具有在所有語言中成本最低,而使用luajit,類型翻譯甚至是不必要的。因此,當您的回響應用程式的某些部分需要在C / C++中開發時,選擇NPL是理想的選擇。
設計哲學
NPL的設計基於對大腦神經元工作原理的仿真。儘管我們仍然不清楚我們的大腦精確的計算模型,但是,以下事實在我們的大腦中似乎無處不在。
  • 大腦由神經元和連線組成。
  • 數據從一個神經元流向另一個神經元:它是異步的,單向的,沒有回調。
NPL中的通信與上述相同。每個檔案都可以成為一個神經元檔案來接收來自其他神經元檔案的訊息。它們異步通信,無需回調。因此,不需要鎖定,因為沒有共享數據;使其能夠簡單快速地編寫和測試分散式算法,並在異構環境中部署軟體。

語法

NPL基本語法如控制流和基本數據結構表格等同Lua一樣。
程式代碼示例:NPL中的Hello World
在命令行中運行:npl helloworld.lua
helloworld.lua的內容是這樣的:
print("hello world");
現在,我們寫一個更複雜的helloworld。它通過將一個普通的helloworld.lua檔案與一個activate函式關聯起來,變成一個神經元檔案。該檔案可以通過其NPL地址(url)從任何NPL執行緒或遠程計算機中調用。
NPL.activate("(gl)helloworld.lua", {data="hello world!"})
local function activate()
local msg = msg;
if(msg) then
print(msg.data or "");
end
end
NPL.this(activate);
如果您的代碼具有*.npl檔案擴展名,則可以通過元編程使用或擴展NPL語法。
例如,上面的代碼可以在下面的helloworld.npl中用NPL語法編寫。
NPL.activate("(gl)helloworld.npl", {data="hello world!"})
this(msg){
if(msg) then
print(msg.data or "");
end
}

套用場景

  • 3D動畫製作
  • 3D遊戲引擎
  • 3D編程教育平台
  • CAD軟體設計
  • web伺服器

相關詞條

熱門詞條

聯絡我們