为什么编程语言关不掉select"features"

Why can't programming language turn off select "features"

随着编程多年来的发展(从汇编程序到高级语言),越来越多的功能(垃圾收集、异常、动态类型) 已作为标准添加到某些语言中。是否有可能创建一种高级语言,默认情况下所有功能都打开,并且一旦程序 运行s 也是如此,那么能够有选择地 在代码中打开功能 ,或者有一些代码被隔离,这样他们就不会使用这些功能。也许将抽象语法树中的分支修改为静态类型,而不是动态类型;编译,而不是解释。

有没有什么编程语言既可以作为动态的也可以作为静态的,还可以有选择地关闭垃圾回收,通过释放使用过的对象,甚至禁用异常处理,一直到运行-time 仅包含类似 c 的构造,或上述任何构造?

对于一种语言来完成你所要求的,它必须被构建为支持两种备选方案:垃圾收集和手动内存管理或静态和动态类型并使两个世界互操作。

换句话说,你所说的只是 "turn off A",实际上是 "design A, design B, design transitioning between A and B"。因此,这样做将需要大量额外的设计和实现工作,这会使语言更加复杂,最终语言可能会变成 "worst of both worlds".

现在,支持您提到的两种功能组合的语言确实存在,但形式有限:

  • C# 通常是一种静态类型语言,但它也有 dynamic 关键字,允许您为某些变量切换到动态类型。这主要是为了与动态语言进行互操作,在实践中使用不多。

  • C++/CLI 是一种支持手动管理内存(* 指针,new 分配和 delete 释放)和垃圾收集的语言内存(^ 指针,gcnew 分配)。它主要用于 C++ 代码和 .Net 代码之间的互操作,在实践中并未广泛使用。

您可能已经注意到这里的一个主题:在这两种情况下,feature/language 都是为了连接两个世界而创建的,但并没有获得太大的吸引力。