0

由於編程經過多年的發展(從彙編到高級語言),越來越多的功能(垃圾收集,異常,動態類型)已添加作爲某些語言的標準。是否有可能創建一個默認情況下啓動所有功能的高級語言,並且一旦程序也運行,然後能夠選擇代碼中的轉彎特徵,或者將代碼段隔離這樣他們就不會使用這些功能。也許修改抽象語法樹中的分支是靜態類型的,而不是動態的;編譯,而不是解釋。爲什麼不能編程語言關選擇「功能」

是否有任何編程語言可以用作動態和靜態,還可以選擇性地開啓垃圾收集,釋放使用的對象,甚至直到禁用異常處理,一直到運行時組成只有c類似的構造,或上述任何提及?

+0

語言只是一種語言。它的*實現*決定了它的行爲或不行爲。相同的語言可以被解釋*或*編譯,因爲引用的Python很好地演示了。 Python也恰好支持任意註釋,可用於靜態類型檢查,實質上是靜態類型。 – deceze

+0

對於我來說,一門語言包含很多東西,比如語法,實現(功能),社區(共享資源和代碼有多少)。編譯器對我來說是功能的一部分。 – RFVenter

回答

1

對於一種語言來做你在問什麼,它必須建立以支持兩種替代方案:垃圾收集和手動內存管理或靜態和動態類型,並使兩個世界互操作。

換句話說,你所說的只是「關掉A」,實際上是「設計A,設計B,設計在A和B之間轉換」。因此,這樣做會是一項額外的設計和實施工作,它會使語言更加複雜,語言可能最終成爲「兩全其美」。

現在,支持你所提到的確實存在的特徵的結合,在有限的形式語言:

  • C#通常是靜態類型語言,但它也有dynamic關鍵字,它允許你切換到某些變量的動態輸入。這主要是爲了與動態語言進行互操作,並且在實踐中用處不大。

  • C++/CLI是可同時支持手動管理存儲器,(*指針,new分配和delete解除分配)和垃圾回收存儲器(^指針,gcnew分配)的語言。它主要用於C++代碼和.Net代碼之間的互操作,在實際中並未廣泛使用。

你可能已經注意到這裏一個主題:在這兩種情況下,該功能/語言的建立是爲了彌合兩個世界,但並沒有獲得太多的牽引力。