是否有面向对象的语言允许对对象进行低级访问?

时间:2016-12-01 18:24:11

标签: oop programming-languages

我在这个问题中寻找的语言应该具有以下特征:

  • 编译为机器代码,
  • 具有C ++风格的OOP设计(可能仅限于单类继承),
  • 理想情况下来自C家族(非要求),
  • 允许处理单元化堆栈分配的对象,
  • 允许直接调用构造函数和析构函数作为函数,包括控制如何,何时以及是否调用超类构造函数/析构函数,
  • 允许对虚拟表和RTTI数据进行直接读/写访问,
  • 理想情况下不区分静态和非静态成员函数(后者只是公开接受this的另一个参数),
  • 可选:允许在异常期间进行流量控制(例如,调用析构函数和转发堆栈展开)。

斜体中的三个点在C ++中发生在幕后并且试图干扰它们会导致未定义的行为,尽管在通常的实现中它们非常简单。其他一些人反对其原则。当然,这是有充分理由的,但总而言之,它只是一种设计选择。为什么我对一种不会因设计而模糊不清的语言感兴趣:

  • 可以动态创建子类,Java-anonymous-class样式(例如,创建基类的实例,但用自己的函数指针替换一些虚函数而不需要定义新类),
  • 可以设计自己更快但语义相同的版本,例如动态类型转换,考虑到编译器无法知道的合同或假设,
  • 可以使用现有机制在运行时为他们的类(允许RTTI)提供人类可读的名称,
  • 可以存储额外的"多态"与对象一样的数据,如虚拟非功能成员,
  • 学生可以更直接地理解继承,类型识别等的内部工作。

当然,人们可以继续使用C语言,但我的观点是语言 实际上是面向对象的,默认情况下会执行所有" magic"除非实际需要额外的灵活性,否则对用户来说是正确的。用户负责处理由于玩不好而造成的情况。

是否存在任何此类语言(可能不明确)?如果不是,最接近的匹配是什么,它们满足哪些条件?

1 个答案:

答案 0 :(得分:2)

大多数现代语言故意避免给程序员太多低级别的功能,因为这往往会产生昂贵且难以维护的代码。

话虽这么说,虽然我不知道任何与您正在寻找的语言完全匹配的语言,但我能想到的最接近的语言是一种古老但非常强大的语言,称为Forth。虽然它的原始设计并没有包含面向对象的结构,但已经对语言进行了扩展以支持这一点。与大多数语言不同,Forth可以将程序员汇编语言级别的功能与高级开发概念(例如函数式编程和面向对象的继承)自由地混合在一起。但是,它与C语言系列非常不同,因此除非您已经熟悉它,否则在您能够有效使用它之前需要进行一些研究。

Forth是一种非常强大的语言,您可以在语言本身中设计自己的面向对象机制,设计任何继承,封装或任何其他面向对象的原则。您也可以根据需要将其设置为自动或手动,例如,选择是否自动调用超类构造函数。

这可能对你没什么帮助,因为你可能正在寻找更多类似C语言的东西。我能想到的另一件事是高级汇编语言,也许是一种类似于nasm的语言,在预处理器中内置了大量的合成糖。