Questions tagged «language-design»

7
为什么在垃圾收集语言中普遍缺少对象析构函数范式?
寻找有关垃圾收集语言设计决策的见解。也许语言专家可以启发我?我来自C ++背景,所以这个领域令我感到困惑。 似乎几乎所有具有OOPy对象支持的现代垃圾收集语言(如Ruby,Javascript / ES6 / ES7,Actionscript,Lua等)都完全省略了析构函数/定型化范例。Python似乎是唯一使用它的class __del__()方法。为什么是这样?在具有自动垃圾收集的语言中,语言是否存在功能/理论上的限制,从而无法在对象上有效实现析构函数/完成方法? 我发现非常缺乏这些语言将内存视为唯一值得管理的资源。套接字,文件句柄,应用程序状态如何?由于无法实现自定义逻辑以清除对象最终确定中的非内存资源和状态,因此我需要使用自定义myObject.destroy()样式调用来填充我的应用程序,将清除逻辑置于“类”之外,破坏尝试的封装,并降级我的应用程序由于人为错误而导致资源泄漏,而不是由gc自动处理。 什么是语言设计决策,这些决策导致这些语言无法对对象处理执行任何自定义逻辑?我必须想象有一个很好的理由。我想更好地理解导致这些语言不支持对象销毁/完成的技术和理论决策。 更新: 也许更好的方式表达我的问题: 为什么一种语言会具有带有类或类结构以及自定义实例化(构造函数)的对象实例的内置概念,却完全省略了销毁/最终确定功能?提供自动垃圾收集的语言似乎是支持对象销毁/完成的主要候选方法,因为他们知道当不再使用某个对象时会100%确定。但是,其中大多数语言都不支持它。 我认为在这种情况下可能永远不会调用析构函数,因为那将是核心内存泄漏,gcs旨在避免这种情况。我可以看到一个可能的论点是,直到将来某个不确定的时间,析构函数/ finalizer才会被调用,但这并没有阻止Java或Python支持该功能。 不支持任何形式的对象完成的核心语言设计原因是什么?

3
可视化编程工具,为什么不直接与AST一起使用?
我已经找到了一些开源的可视化编程工具,例如Blockly和friends,以及在Github托管的其他项目,但是找不到直接与抽象语法树配合使用的工具。 这是为什么? 我之所以问是因为,一旦我发现那里的每个编译器在编译过程中都有一个阶段,它将源代码解析为AST,对我来说很明显,某些可视化编程工具可以利用这一点为程序员提供方法直接以视觉方式编辑AST,还可以进行从源到节点图的往返,然后在需要时再次返回源。 例如,人们可能认为,从JavaScript AST Visualizer到实际的JavaSript可视化编程工具,两者之间并没有太大的区别。 那么,我想念什么?

4
同时具有“空”和“也许”的概念是否有意义?
在C#中为Web API创建客户端时,我遇到了一个问题,该问题null是它代表两个不同的东西: 一无所有,例如foo可能有也可能没有bar 未知:默认情况下,API响应仅包含属性的子集,您必须指出所需的其他属性。因此,未知表示未从API请求该属性。 经过一番搜索,我发现了Maybe(或Option)类型,它在功能语言中的用法以及如何通过迫使用户考虑可能缺少值的方式来“解决” null取消引用问题。然而,所有的资源,我遇到谈到更换空与可能。我确实找到了三值逻辑的一些提及,但是我并不完全理解它,而且多数时候提到这是在“这是一件坏事”的背景下。 我现在想知道将null和Maybe的概念分别表示未知和什么都不有意义。这是我读过的三值逻辑,还是别的名字?还是在Maybe中嵌套Maybe的预期方式?

3
通过推断类型自动向下转换
在Java中,必须显式转换以向下转换变量 public class Fruit{} // parent class public class Apple extends Fruit{} // child class public static void main(String args[]) { // An implicit upcast Fruit parent = new Apple(); // An explicit downcast to Apple Apple child = (Apple)parent; } 除了Java不执行任何类型推断的事实外,是否还有其他原因可以满足此要求? 使用新语言实现自动向下转换是否存在任何“陷阱”? 例如: Apple child = parent; // no …

1
属于头等公民
来自C ++背景,我不明白为什么一个人需要作为一等公民的类型/类型表达式?我知道支持该功能的唯一语言是Aldor。 是否有人拥有有关头等公民的类型的文献或知道其有用性的一些原因?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.