我正在研究OOP语言的编译器设计与传统命令式语言有何不同。 我希望一些话题可以带我上路,如果您愿意,可以向他们解释。

例如。 我发现类型表的构建方式有所不同。

===============>>#1 票数:1 已采纳

在探讨“编译器设计”之前,我认为需要解决“语言设计”这一更基本的问题。

语言应该是静态键入吗? 动态输入? 早/晚绑定或组合? 支持泛型? 推论是目标吗? 类型应该是封闭的还是开放的? 子类型应该如何工作? (是否应该完全允许隐式子类型?)协方差? 矛盾? 单继承? MI? 具有特质的SI? 显式成员选择? 原型(也就是说,甚至应该有“类”和“实例”的概念吗?)是否应使用主格或基于成员签名键入? 单派还是多派? 成员是作为头等公民或通过消息传递吗? 类型与类相同吗? “值”和“引用”类型之间有区别吗? 等等等等,而这只是一个很大的冰山的一角。

  ask by Shawn Mclean translate from so

未解决问题?本站智能推荐:

1回复

面向对象语言的编译器中的符号表范围

我正在为C ++子集的编译器建立符号表。 我的问题是如何处理对象范围。 我的意思是,在像Pascal这样的普通语言中,我们应该为每个范围创建一个符号表。 但是对于C ++,我应该考虑对象的方法和属性的另一种方法吗? 问候。
3回复

编译器中的控制反转

有没有人在编译器实现中实际使用过控制容器的转换? 我知道从设计上来说,编译器需要非常快,但是我一直对IoC / DI如何影响编程语言(热插拔语法)的构造感到好奇。
1回复

编译器如何编译虚拟/重写方法

我正在开发针对面向对象语言的编译器,该语言针对我编写的虚拟机,我将其用作跨平台抽象层。 我对继承方法的工作方式感到困惑。 可以说我有以下几行C#代码。 现在这将输出'Dis be mah object'。 如果我调用regularMethod,但编译后的代码实际上会执行以下操作:
1回复

构建编译器面向对象

我正在为我班上的一个项目工作。 我正在使用Flex(lex)和Bison(YACC)和C构建编译器。我只做了一些语义分析,但我一直在思考如何实现面向对象的部分。 也就是说,我如何处理类,重载,多态和遗产。 我似乎无法在谷歌上发现一些有用的东西,而龙书的水平太低了。 我的意思是过于专注
1回复

编译器是否优化这部分代码(常量获取器)?

我有以下类定义: 具有const getter( foo->isActive() )的类的工作速度是否比foo->m_active (如果它将是公共的)更快? 我试图查看反汇编的代码,但没有发现任何有趣的东西。 在哪里可以阅读有关const getter和set
9回复

是否有更现代的OO版“让我们构建一个编译器”? [关闭]

是否有更现代的,可能是面向对象的,相当于Jack Crenshaw的“ Let's Build a Compiler ”系列? 不久前,我偶然发现了“ 让我们构建一个编译器 ”,并且无法抗拒编写一些代码。 我在C#中编写了一个递归下降的C编译器,输出.NET CIL。 “写一次,到处泄
3回复

OOP访问修饰符:编译时或运行时

我听说Access Modifiers Public, Private and Protected只是一些Compiler Stuff,它们实际上并不存在于已编译的二进制代码中 。 现在我想知道它是多少是正确的? 如果它是正确的,是否意味着在运行时二进制代码中不存在封装 ? 因此,如果
1回复

使用DSL的传统编译器开发的Eclipse Modeling Framework的其他功能是什么?

我想了解Eclipse Modeling Framework( EMF )关于DSL的传统编译器开发的补充功能。 我清楚地了解到,EMF开发流程通常从元模型的定义(或标准化模型的重用;如UML)开始,但是似乎与编译器中AST定义的活动(以00语言表示)相差无几。民俗学。 由于异构技术,这
4回复

生产编译器如何在流控制上实现析构函数处理

长话短说 - 我正在编写一个编译器,并且达到了OOP功能,我面临着涉及处理析构函数的两难问题。 基本上我有两个选择: 1 - 将所有析构函数放在程序中该点需要调用的对象上。 这个选项听起来像是性能友好且简单但会使代码膨胀,因为根据控制流程,某些析构函数可以多次复制。 2 -
8回复

为什么几乎所有的OO语言都编译为字节码?

在我所知道的面向对象语言中,除了C ++和Objective-C之外,几乎所有语言都编译为在某种虚拟机上运行的字节码。 为什么有这么多不同的语言在编译成字节码时,而不是机器码? 在princible中是否可以使用高级内存管理的OOP语言编译为机器代码? 编辑:我知道多平台支持通常是这种