如果您没有查看C++规范,而是分析现有C++编译器的行为(通过检查源代码和使用示例输入进行测试),并使用您对C++的了解来创建一个新的编译器,该怎么办?它是实现编程语言的好方法吗?这种方法的可能缺点是什么?
发布于 2013-12-14 05:23:02
在行业中,这种情况时有发生--这是逆向工程。在这种情况下,编译器是一个黑匣子(您不知道它是如何做的),但是您对它的输入和输出有一些了解。然后,您可以创建一个对输入执行相同操作的新程序,以获得相同的输出。
一般来说,如果您有规范,这不是一个很好的方法,但是在某些情况下,您需要找到您无法控制的系统的内部工作,这是一个非常有效的实践。例如,您可能遗漏了重要的实现细节和不总是出现在代码中但在规范文档中非常清楚的角落案例。
发布于 2013-12-14 05:07:54
在我看来,你的问题听起来非常类似“如果我们不使用蓝图,而是通过观察其他桥梁,结合我们过去在一堆桥上行驶和行走的经验,来设计一座桥呢?”
..。我一步也不会踩到用这种方法建造的桥梁上。
有说明是有原因的。人们花费大量的时间和精力来生成那些100+到1000+页面文档,以便确定每个特性和每个功能,理想情况下,在决定某个特性应该如何工作时不会留下任何含糊之处。
从本质上说,这些规范是编程语言的蓝图。没有他们,语言就会像我刚才提到的那座假想的桥梁一样好。
发布于 2013-12-14 05:46:06
是的,你可以逆向工程一个编译器。举个例子,微软反向设计了最初的JavaScript (也许是livescript)编译器。
为什么这一般都很糟糕?考虑一下JS到底发生了什么,微软几乎完全复制了JavaScript,甚至是bug。这意味着,每个真正不应该出现的实现怪癖现在都成为了它们版本的一部分。事实上,在随后的标准化过程中,MS强迫这些错误中的一些进入标准*!在您的示例中,您会发现几乎不可能反向工程C++/C,实现定义的行为/未定义的行为非常猖獗!您将无法区分标准、未定义和不正确的行为。这将导致您的实现不合格且过于复杂。
有可能,是的。明智的,不。
*并随后将资金投入打字稿,试图纠正其中的一些错误
https://softwareengineering.stackexchange.com/questions/221339
复制相似问题