最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

能否取締C#?成為現(xiàn)代化設(shè)計的GUI解決方案,深度開源社區(qū)公布其自研編程語言 Unilang

2022-11-07 08:22 作者:AidiLi  | 我要投稿

深度開源社區(qū)之前已經(jīng)在 Github 和 gitee 公布了旗下自研編程語言 ——Unilang,同時還包括相關(guān)解釋器,講解了 Unilang 文檔和參考實現(xiàn)方式。

官方在庫中的描述是“新編程語言”,是“為適應(yīng)更有效和靈活開發(fā)桌面環(huán)境應(yīng)用的提出的通用目的編程語言項目”,旨在更好地幫助當(dāng)前桌面應(yīng)用開發(fā)者,宿主環(huán)境為 MSYS2 MinGW32 和 Linux。

據(jù)介紹,深度團隊由于?C / C++、ECMAScript 等最流行的一些標(biāo)準(zhǔn)化語言具有沉重的歷史包袱,且不具有足夠擴展語言自身的能力以兼顧其需求;Dart 等專為類似方案設(shè)計的語言在一些基本設(shè)計上的決策(如依賴全局 GC )使之無法完全適合一些重要場景;其它的一些通用目的語言,如?Rust?和?Go?,并沒有配套提出 GUI 解決方案。

因此,他們希望在能滿足需求的基礎(chǔ)上,帶來一種新的語言,使它能以更深刻的方式真正地實現(xiàn)通用性 —— 通過減少為個別問題領(lǐng)域準(zhǔn)備的原生的特設(shè)的 (ad-hoc)?特性,而以更普遍的基本特性集取而代之的方式。

Unilang 是為了統(tǒng)籌解決現(xiàn)有不足的新的方案中的語言部分,主要特色有:

作為動態(tài)語言,提供相對其它語言更強的語言層次上的可擴展性。

通過用戶定制語言的功能,可以有效限制非預(yù)期的動態(tài)特性,最終得到和大多數(shù)靜態(tài)語言接近的開發(fā)體驗上的優(yōu)勢,同時避免靜態(tài)語言核心規(guī)則帶來的不便。

允許在已部署 Unilang 程序的環(huán)境中通過添加庫補全現(xiàn)有語言特性,而不需要重新部署工具鏈的實現(xiàn)。

提供一個基礎(chǔ)語言,并以庫的形式擴展這個語言而得到實用的特性集。庫預(yù)期由本項目和用戶提供。

大多數(shù)語言中需要修改語言核心規(guī)則提供的特性,在 Unilang 中預(yù)期只需要用戶使用 Unilang 語言編寫的庫解決,例如靜態(tài)類型檢查可以通過用戶程序提供。

類似 C 和 C++ 而不同于?Java?,不明確要求或假定翻譯和執(zhí)行的具體形式。實現(xiàn)使用編譯、解釋和何種映像格式加載等實現(xiàn)細(xì)節(jié)對核心語言規(guī)則透明。

不預(yù)設(shè)如 C 和 C++ 那樣明確的翻譯階段 (phases of translation)?。不需要單獨階段展開的宏 —— 配合支持一等環(huán)境的函數(shù)即可取代宏。

支持同像性 (homoiconicity)?,允許代碼即數(shù)據(jù) (code as data) 的方式編程。

函數(shù)是一等對象 (first-class object)?。

環(huán)境 (environment)?對變量綁定具有所有權(quán)。支持作為一等對象的一等環(huán)境 (first-class environment)?。

支持類似 C++ 的對象模型和(當(dāng)前不被檢查的)不安全所有權(quán)語義。

和 C# 或 Rust 等不同,不提供一種特設(shè)的?unsafe?關(guān)鍵字標(biāo)記“不安全”的代碼段落,最基礎(chǔ)的特性默認(rèn)是“不安全”的。

安全性并非由語言唯一地定義,允許用戶通過擴展類型系統(tǒng)等方式實現(xiàn)自定義的不同種和程度的安全性。

不要求全局 GC ,同時語言的一個子集允許和 C++ 同等層次的“不安全”但能確保確定性的資源分配。

沒有原生提供針對不安全操作的靜態(tài)檢查,但是語言的可擴展性允許直接實現(xiàn)類型系統(tǒng)或者自動證明更強的內(nèi)存安全。未來可能作為庫一并提供。

語言規(guī)則仍然允許引入依賴 GC 的互操作。特別地,允許引入多個非全局的 GC 示例。

支持正式意義上的?PTC?,而不需要用戶程序內(nèi)對棧溢出等未定義行為進行變通。

主流語言中,沒有依賴全局 GC 的語言實現(xiàn)都沒有提供類似的保證。

使用隱式的潛在類型 (latent typing)?而非顯式的清單類型 (manifest typing)?。

在擴展前,作為實現(xiàn)細(xì)節(jié),已允許蘊含類型推斷 (type inference)?消除一些類型檢查而不影響程序語義。

允許用戶程序擴展類型標(biāo)注 (type annotation)?的語法和相關(guān)檢查。

這自然地避免用戶擴展的類型系統(tǒng)和原生規(guī)則沖突,而保持可擴展性。

表達(dá)式和 C++ 類似但略有不同的值類別 (value category)?;但和 C++ 不同,不是靜態(tài)確定的表達(dá)式的屬性,而是跟隨對象的動態(tài)元數(shù)據(jù)。

類似 C++ 的?const?類型限定符,通過左值引用的對象允許標(biāo)記為不可修改(只讀),而不是如 Rust 等語言默認(rèn)約定值不可變 (immutable)?。

類似 C++ 的消亡值 (xvalue)?,通過左值引用的對象允許標(biāo)記唯一,而允許其中的資源被轉(zhuǎn)移。

原理?以上代表性的選型決策中,一個共通的方法是比較不同方向的擴展之間的技術(shù)可行性 —— 并選取容易擴展的選項。否則,即便可行,也有許多本應(yīng)避免的無效的工作。

因此,語言首先要求 PTC 以使其實現(xiàn)有足夠的可用性,而不鼓勵嵌套的不可靠的實現(xiàn)。

注意對 PTC 不可靠的實現(xiàn)方式在其它方面仍可能很成功(如翻譯 ECMAScript 方言的?Babel?)。因此,大多數(shù)其它特性并沒有(也不需要有)如 PTC 需要基本規(guī)則明確擔(dān)保的地位。

因此,語言首先排除對全局 GC 的依賴。

例如,用?unsafe?等特設(shè)語法標(biāo)記“不安全”的語言中,通常會放棄語言定義的任意安全保證,而不能選擇保留其中的一部分。即便忽略這個問題,語言也缺乏機制允許用戶提供更嚴(yán)格的保證。

再如,默認(rèn)不可變的數(shù)據(jù)結(jié)構(gòu)雖然能保證?const correctness?這樣的“正確性”(一種保持被限定的不可變性質(zhì)不被丟棄的類型安全性 (type safety)),卻忽略對“不可變”的定義描述不充分而不能讓用戶程序擴展的問題 —— 很多情形下,不可變僅僅需要是一種等價關(guān)系,而并非不可修改。

因此,基礎(chǔ)語言默認(rèn)是不安全的。

若語言允許用戶表達(dá)“一些具有不同表示的值被視為等價”,則優(yōu)化的適應(yīng)性會自然地擴展。

這蘊含不可變性只有一種,除非修改類型系統(tǒng)設(shè)計,放棄原有的不可變定義并重新引入類似 C++?const?的限定符機制(“更困難”的情形)。

這里用?const_cast?這樣的不安全轉(zhuǎn)換取消?const?引入的類型安全保證并自行假定不會破壞不可變性,是個無奈的變通(“更困難”的情形,且無法恢復(fù)類型安全性而效果更差)。

這可能導(dǎo)致具體的不可修改性被濫用,例如 C++ 標(biāo)準(zhǔn)庫關(guān)聯(lián)容器的鍵類型實際上不需要符合 C++ 的?const?,因為鍵的不可變確切地由比較關(guān)系導(dǎo)出的等價關(guān)系定義,但類型系統(tǒng)無法區(qū)別兩種情形。這過度地限制了鍵上的本應(yīng)允許的操作。

默認(rèn)不可變的類型系統(tǒng),如 Rust 的設(shè)計,則更根本地在類型組合構(gòu)造上阻止了擴展的方向。

這也限制了現(xiàn)有的實現(xiàn)的常量傳播 (const propagation)?的優(yōu)化范圍,因為原則上這里的“常量”只關(guān)心替換能保持變換前后的語義等價性 (semantic-preserving) ,而不在意具體的值是否相等。

因此,基礎(chǔ)語言中的對象默認(rèn)可變。

因此,基礎(chǔ)語言首先被設(shè)計為動態(tài)語言。

設(shè)計一個靜態(tài)語言,然后添加一些規(guī)則把它偽裝成具有足夠動態(tài)特性的動態(tài)語言,遠(yuǎn)遠(yuǎn)難于在動態(tài)語言上添加規(guī)則而得到靜態(tài)語言的特性集。

從一個標(biāo)記放棄某種保證的上下文中添加證明恢復(fù)某種保證(且不和其它保證沖突),比從一個已知不具有保證的上下文添加證明以確保保證更困難。

在一個已經(jīng)要求全局 GC 的語言中排除 GC ,遠(yuǎn)遠(yuǎn)難于在不依賴 GC 的語言規(guī)則基礎(chǔ)上添加和 GC 交互的能力(特別是 GC 允許用戶定制時)。

在一個沒有 PTC 保證的語言實現(xiàn)中添加擴展基本是不可行的,除非重新實現(xiàn)最核心的求值規(guī)則在內(nèi)的邏輯(例如,再添加一個執(zhí)行引擎)。

和 C++ 具有良好的互操作性。

當(dāng)前解釋器(運行時)使用 C++ 實現(xiàn)。

結(jié)合對象模型,能確保 Unilang 對象和 C++ 對象的對應(yīng)。

語言綁定主要關(guān)注已知 ABI 的 C / C++ API 。

為保持通用性,Unilang 不內(nèi)建提供 GUI 功能,而通過庫提供相關(guān) API 。當(dāng)前計劃中,Unilang 將會支持基于 Qt 的綁定的庫,以便銜接過渡現(xiàn)有的一些桌面應(yīng)用項目。Unilang 的語言設(shè)計保持足夠的抽象能力和可擴展性,允許在未來直接實現(xiàn) GUI 框架。


能否取締C#?成為現(xiàn)代化設(shè)計的GUI解決方案,深度開源社區(qū)公布其自研編程語言 Unilang的評論 (共 條)

分享到微博請遵守國家法律
安乡县| 金山区| 西充县| 连云港市| 边坝县| 濮阳县| 满城县| 石柱| 洱源县| 北京市| 孟村| 石屏县| 浦江县| 沙河市| 长垣县| 景宁| 濮阳市| 大石桥市| 平阳县| 定结县| 卢龙县| 客服| 荣成市| 武邑县| 盘锦市| 仙游县| 即墨市| 丽江市| 雷州市| 武安市| 页游| 东城区| 宜州市| 建昌县| 平江县| 灌云县| 大丰市| 霍邱县| 临潭县| 西安市| 邹平县|