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

Oop 是否有一种面向对象的语言允许对对象进行低级访问?,oop,programming-languages,Oop,Programming Languages,我在这个问题上寻找的语言应该具有以下特点: 编译成机器代码 具有C++风格的OOP设计(可能仅限于单类继承) 最好是来自C系列(不是要求) 允许处理单元化堆栈分配的对象 允许将构造函数和析构函数作为函数直接调用,包括控制如何、何时以及是否调用超类构造函数/析构函数 允许对虚拟表和RTTI数据进行直接读/写访问 理想情况下,不区分静态成员函数和非静态成员函数(后者只会为this公开接受另一个参数) 可选:允许在异常期间进行流控制(例如,调用析构函数和转发堆栈展开) P>斜体中的三个点在C++

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

  • 编译成机器代码
  • 具有C++风格的OOP设计(可能仅限于单类继承)
  • 最好是来自C系列(不是要求)
  • 允许处理单元化堆栈分配的对象
  • 允许将构造函数和析构函数作为函数直接调用,包括控制如何、何时以及是否调用超类构造函数/析构函数
  • 允许对虚拟表和RTTI数据进行直接读/写访问
  • 理想情况下,不区分静态成员函数和非静态成员函数(后者只会为
    this
    公开接受另一个参数)
  • 可选:允许在异常期间进行流控制(例如,调用析构函数和转发堆栈展开)
<> P>斜体中的三个点在C++中发生在幕后并试图干扰它们导致不明确的行为,尽管在通常的实现中它们是非常简单的。还有一些人反对它的原则。当然,这是有充分理由的,但总而言之,这只是一种设计选择。为什么我对一种不会因为设计而模糊它们的语言感兴趣:

  • 可以动态创建Java匿名类样式的子类(例如,创建基类的实例,但用自己的函数指针替换某些虚拟函数,而无需定义新类)
  • 考虑到编译器不知道的契约或假设,可以设计自己的更快但语义等价的版本,例如动态类型转换
  • 可以使用现有机制在运行时为其类(允许RTTI的类)提供人类可读的名称
  • 可以使用对象存储其他“多态”数据,如虚拟非功能成员
  • 学生可以更直接地理解继承、类型识别等的内部工作原理
当然,我们可以只使用C语言,但我的观点是,该语言实际上是面向对象的,并且默认情况下会为用户正确地执行所有“魔术”,除非实际需要额外的灵活性。这将是用户的责任,以处理情况,他们所造成的不玩好


有没有这样的语言(可能是晦涩难懂的)?如果没有,最接近的匹配是什么?它们满足哪些条件?

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

话虽如此,尽管我不知道有哪种语言能精确地匹配你所要寻找的,但我能想到的最接近的语言是一种古老但非常强大的语言。尽管它最初的设计不包括面向对象的结构,但已经对该语言进行了扩展以支持这一点。与大多数语言不同,Forth在赋予程序员汇编语言级别的能力时,可以将高级开发概念(如函数式编程和面向对象继承)自由混合在一起。但是,它与C语言家族非常不同,因此,除非您已经熟悉它,否则需要进行一些研究才能有效地使用它

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


不过,这可能对您帮助不大,因为您可能正在寻找更多类似C的语言。我能想到的另一件事是一种高级汇编语言,可能是一种类似nasm的语言,在预处理器中内置了大量的语法糖

你熟悉放置新的,是吗?你可以用C++手动完成斜体字。当然,JGEDPASTIE,但是这只是部分的。例如,它不会让您保持对象未初始化。@nwp您不能不调用UB。标准甚至不定义VTABLE的存在。到目前为止,最接近的匹配是C++。下一个最接近的可能是D。听起来太棒了!C族只是一个软需求,我对此没有问题。好吧,一种强大到可以在其中实现OOP(然后立即使用抽象)的语言似乎是一个明显的赢家!我需要读一些关于Gforth的书,但我看不到更多的答案。我读到的内容令人信服。