2016-12-01 73 views
-3

我寻找这一问题的语言应该具有以下特点:是否有一种允许对对象进行低级别访问的面向对象的语言?

  • 编译为机器码,
  • 有C++ - 风格的面向对象设计(可能受限于单类继承),
  • 最好是从C系列(不要求),
  • 允许处理未初始化堆栈分配的对象,
  • 允许构造和析构函数为, INC的直接通话泸定控制如何,何时以及所有超类的构造函数/析构函数是否在被调用时,
  • 允许直接读/写访问虚拟表和RTTI数据,
  • 理想不是静态的和非静态区分成员函数(后者只会公开接受另一个参数this),
  • 可选:在异常期间允许流量控制(例如,调用析构函数和转发堆栈展开)。

斜体的三点出现在C++的幕后,试图干涉它们会导致未定义的行为,尽管在常见的实现中它们非常简单。其他一些人反对其原则。当然,这是有原因的,但总的来说,这只是一个设计选择。为什么我感兴趣的一门语言不通过设计掩盖他们:

  • 人们可以在飞行中,Java的匿名类样式创建的子类(例如,创建一个基类的实例,但更换一些带有自己函数指针的虚拟函数,而不需要定义一个新类),
  • 可以设计自己更快但语义上等同的版本,例如动态类型转换
  • 可以使用现有机制在运行时给他们的类(允许RTTI)提供人类可读的名称,
  • 一个可以存储附加的“多态”数据与对象,如虚拟非功能的构件,
  • 学生可以更直接地了解继承,类型标识,等等

当然的内部工作,人们可以只留在C中,但我的意思是,语言实际上是面向对象的,默认情况下会为用户正确执行所有“魔术”,除非实际需要额外的灵活性。用户有责任处理由于玩得不好而造成的情况。

是否存在这样的语言(可能是模糊的)?如果不是,最接近的匹配是什么以及它们满足哪些条件?

+0

你*的*熟悉安置新,是吗? – jaggedSpire

+0

您可以手动在C++中执行斜体。 – nwp

+0

@jaggedSpire当然,但只有去的方式的一部分。例如。它不会让你离开未初始化的对象。 –

回答

2

大多数现代语言刻意避免给程序员太多的低级别的权力,因为这往往会造成代码昂贵且难以维护。

话虽这么说,但我不知道精确匹配,任何语言,你在找什么,我能想到的最接近的是第四所谓的老,但非常强大的语言。虽然它的原创设计并未包含面向对象的结构,但为了支持这种语言,扩展了该语言。与大多数语言,福斯没有问题给程序员汇编语言级的功率与高水平发展的概念,如函数式编程和面向对象的继承随意混合。然而,它与C语言家族有很大不同,所以除非你已经熟悉它,否则在你能够有效地使用它之前需要做一些研究。

第四就是这样一个强大的语言,你可以从字面上设计自己的面向对象的机制,在语言本身,无论继承,封装,或任何其他面向对象的,你想有原则的工程。您也可以将其设置为自动或手动,例如,选择是否自动调用超类构造函数。

这可能不会帮助你太多,但因为你可能寻找更喜欢的语言是C的。我唯一能想到的其他事情是高级汇编语言,也许是一种类似于nasm的语言,在预处理器中内置了大量的合成糖。

+0

这听起来很神奇! C族只是一个软性要求,我没有问题。 –

+0

好吧,一种足够强大的语言可以实现** OOP(然后立即使用抽象)似乎是一个明显的赢家!我需要对Gforth进行一些阅读,但是现在我没有看到更多的答案。我在Forth上读到的内容令人信服。 –

相关问题