是否存在允许对对象进行低级访问的面向对象语言?
Is there an object-oriented language that allows low-level access to objects?
我在这个问题中寻找的语言应该具有以下特征:
- 编译为机器码,
- 具有 C++ 风格的 OOP 设计(可能仅限于单一 class 继承),
- 理想情况下来自 C 家族(不是必需的),
- 允许处理单元化的堆栈分配对象,
- 允许直接调用构造函数和析构函数作为函数, 包括控制如何、何时以及是否调用 superclass constructor/destructor,
- 允许直接read/write访问虚拟table和RTTI数据,
- 理想情况下不区分静态和非静态成员函数(后者会公然接受
this
的一个参数),
- 可选:允许在异常期间进行流控制(例如,调用析构函数和转发堆栈展开)。
斜体的三点发生在幕后的 C++ 中,试图干扰它们会导致未定义的行为,尽管在常见的实现中它们非常简单。还有一些人反对它的原则。当然,这是有充分理由的,但总而言之,这只是一种设计选择。为什么我对一种不会在设计上掩盖它们的语言感兴趣:
- 可以动态创建子classes,Java-anonymous-class 风格(例如,创建基础 class 的实例,但替换一些具有自己的函数指针的虚函数,无需定义新的 class),
- 可以设计自己的更快但语义等效的版本,例如动态类型转换,同时考虑编译器无法知道的契约或假设,
- 人们可以使用现有机制在 运行 时提供他们的 classes(允许 RTTI 的)人类可读的名称,
- 可以用对象存储额外的 "polymorphic" 数据,例如虚拟非函数成员,
- 学生可以更直接地理解继承、类型识别等内部工作原理
当然,可以只使用 C,但我的观点是 语言 实际上是面向对象的,默认情况下会完成所有 "magic"除非实际上需要额外的灵活性,否则对用户来说是正确的。用户有责任处理因玩得不好而造成的情况。
是否存在任何此类语言(可能晦涩难懂)?如果不是,最接近的匹配项是什么?它们满足哪些条件?
大多数现代语言都刻意避免赋予程序员过多的底层权力,因为这往往会创建昂贵且难以维护的代码。
话虽这么说,虽然我不知道有什么语言可以精确匹配您正在寻找的东西,但我能想到的最接近的是一种古老但非常强大的语言,叫做 Forth。虽然它的原始设计不包括面向对象的结构,但已经对语言进行了扩展以支持这一点。与大多数语言不同,Forth 可以毫无问题地赋予程序员汇编语言级别的能力,让他们自由地混合高级开发概念,例如函数式编程和面向对象的继承。但是,它与 C 语言家族有很大不同,因此除非您已经熟悉它,否则在您能够有效地使用它之前需要进行一些学习。
Forth 是一种如此强大的语言,您可以从字面上在语言本身中设计自己的面向对象机制,设计任何继承、封装或您想要拥有的任何其他面向对象的原则。您也可以根据需要将其设置为自动或手动,例如,选择是否自动调用超级 class 构造函数。
这可能对您帮助不大,因为您可能正在寻找更多类似 C 的语言。我唯一能想到的另一件事是高级汇编语言,可能是一种类似于 nasm 的语言,在预处理器中内置了大量语法糖。
我在这个问题中寻找的语言应该具有以下特征:
- 编译为机器码,
- 具有 C++ 风格的 OOP 设计(可能仅限于单一 class 继承),
- 理想情况下来自 C 家族(不是必需的),
- 允许处理单元化的堆栈分配对象,
- 允许直接调用构造函数和析构函数作为函数, 包括控制如何、何时以及是否调用 superclass constructor/destructor,
- 允许直接read/write访问虚拟table和RTTI数据,
- 理想情况下不区分静态和非静态成员函数(后者会公然接受
this
的一个参数), - 可选:允许在异常期间进行流控制(例如,调用析构函数和转发堆栈展开)。
斜体的三点发生在幕后的 C++ 中,试图干扰它们会导致未定义的行为,尽管在常见的实现中它们非常简单。还有一些人反对它的原则。当然,这是有充分理由的,但总而言之,这只是一种设计选择。为什么我对一种不会在设计上掩盖它们的语言感兴趣:
- 可以动态创建子classes,Java-anonymous-class 风格(例如,创建基础 class 的实例,但替换一些具有自己的函数指针的虚函数,无需定义新的 class),
- 可以设计自己的更快但语义等效的版本,例如动态类型转换,同时考虑编译器无法知道的契约或假设,
- 人们可以使用现有机制在 运行 时提供他们的 classes(允许 RTTI 的)人类可读的名称,
- 可以用对象存储额外的 "polymorphic" 数据,例如虚拟非函数成员,
- 学生可以更直接地理解继承、类型识别等内部工作原理
当然,可以只使用 C,但我的观点是 语言 实际上是面向对象的,默认情况下会完成所有 "magic"除非实际上需要额外的灵活性,否则对用户来说是正确的。用户有责任处理因玩得不好而造成的情况。
是否存在任何此类语言(可能晦涩难懂)?如果不是,最接近的匹配项是什么?它们满足哪些条件?
大多数现代语言都刻意避免赋予程序员过多的底层权力,因为这往往会创建昂贵且难以维护的代码。
话虽这么说,虽然我不知道有什么语言可以精确匹配您正在寻找的东西,但我能想到的最接近的是一种古老但非常强大的语言,叫做 Forth。虽然它的原始设计不包括面向对象的结构,但已经对语言进行了扩展以支持这一点。与大多数语言不同,Forth 可以毫无问题地赋予程序员汇编语言级别的能力,让他们自由地混合高级开发概念,例如函数式编程和面向对象的继承。但是,它与 C 语言家族有很大不同,因此除非您已经熟悉它,否则在您能够有效地使用它之前需要进行一些学习。
Forth 是一种如此强大的语言,您可以从字面上在语言本身中设计自己的面向对象机制,设计任何继承、封装或您想要拥有的任何其他面向对象的原则。您也可以根据需要将其设置为自动或手动,例如,选择是否自动调用超级 class 构造函数。
这可能对您帮助不大,因为您可能正在寻找更多类似 C 的语言。我唯一能想到的另一件事是高级汇编语言,可能是一种类似于 nasm 的语言,在预处理器中内置了大量语法糖。