【问题标题】:Programming language with these criteria具有这些标准的编程语言
【发布时间】:2011-11-19 06:10:16
【问题描述】:

我需要一种编程语言(最好是可编写脚本并具有 JIT 会更好,但这两个不是必需的),这将允许这样的事情(示例):

object
{
     id;
     new();
     destroy();
}

info
{
     descr;
}

event inherit object, info
{
     trigger; //has id, descr, trigger
}

anon_event inherit event
{
     - decr; //removes descr property, therefore anon_event has id, trigger, but NO descr  
}

特别好,它还可以:

  • 在创建时自动生成 id(new()),
  • 允许指定读取哪些属性(成员)为 public、private、const
  • 为公共属性自动生成 getter/setter(const 的 getter),
  • 为 getter/setter 提供日志记录/回调功能,
  • 允许在属性上选择(selectallprop(descr) 将选择所有具有 descr 属性的实例)和在类型上 selectalltype(event) 将选择所有事件和 anon_events,即使成员不同,
  • 允许运行时继承、添加/删除属性;

我认为这足以大致了解我正在寻找哪种语言。基本上,它是一个基于或从另一个角度看没有共同祖先的多重继承的组件(作为组件成员的属性列表)。

感谢您的提示

【问题讨论】:

  • 你的例子对我来说毫无意义。也许你应该解释你想要什么。
  • anon_event 的实例没有descr 成员(anon_event foo; foo.descr -> "desc" 导致错误,selectallprop(descr) 不会在返回的列表中返回 foo)。
  • 另一个例子,这次来自现实。考虑一下人类:一些属性很常见:哺乳动物,呼吸空气,一些属性很常见:两条手臂,两条腿,一个头。以后不必称某人为人类,但以前现在是。无法列举一个人的所有属性。这是不可能的,因为基因型突变导致表型不断变化。因此,一个对象必须是一种人类,但在运行时(进化)期间会失去/获得属性。在漫长的进化过程中,甚至必要的属性也可能会进化。

标签: dynamic programming-languages properties components


【解决方案1】:

您的要求将 (1) 违反 Liskov 替换原则,这是面向对象编程的一个重要原则,并且 (2) 在实践中几乎不可能使用,因为从类中删除任意成员将非常通常会导致非编译或非功能代码,因为同一类中的其他成员大部分时间都依赖于那些已删除的成员。

所以我的意思是:这整件事是个坏主意。

【讨论】:

  • 感谢您的回答。在我的想法中,我的对象确实(不应该)代表一个特定的类/对象类型,而是一个组件(属性的持有者),为了方便起见,它应该是可继承的。我不希望它的行为应该像真正的 OOP 那样受到限制。我认为,VM 可以跟踪组件的所有属性和类型,例如对无效访问产生异常。因此 selectallprop 将有助于限制这种情况。只有当它具有这样的属性、函数或者是某个类的类型时,才会访问对象。
猜你喜欢
  • 2022-01-06
  • 1970-01-01
  • 2018-09-09
  • 2016-02-29
  • 1970-01-01
  • 2011-05-02
  • 2010-09-17
  • 1970-01-01
  • 2011-02-21
相关资源
最近更新 更多