【发布时间】:2013-10-30 16:24:14
【问题描述】:
我阅读了有关 Ada.Finalization.Controlled 的信息,当时我正在寻找在范围退出时自动调用用户定义过程的可能性,以实现 RAII 范式,如 c++ 中用于资源管理的一般,而不仅仅是为了记忆。
我发现要获得这种自动范围退出调用,您必须从标准库中扩展一个类型。库的那部分是否由编译器和语言定义专门处理?或者该功能在技术上通常是可用的,但良好实践的原因决定了库组件的使用?
我现在想知道,Ada 语言语义是否“依赖”于标准库?
我不确定术语,所以让我详细说明一下。
我的意思是在 Ada 语言和 Ada.Finalization.Controlled 之间是否存在关系,类似于 Java 中的 for(x:y) 循环如何“依赖”java.lang.Iterable,或者字符串如何似乎只是一个类,但对 operator+ 和文字有特殊处理。
我发现:
语言
语言
语言
正常。
其中箭头表示射击方(库,应用程序)的行为不能在不参考或解释被指方(语言)的情况下解释,即它“依赖”它,但被指方(语言)可以自己解释。此外,拍摄方面的所有内容(库、应用程序)都可以替换,而不会改变语言语义或破坏任何东西。
在我看来,Ada 和 Java 都与它们的标准库有“循环”关系。
语言 标准库
或者更确切地说:
整个语言
语言功能 X --> 库组件 Y
但如上所述,该库组件已经依赖于其他语言功能。
(在我看来,可以通过将该部分从库中移动到仅在语言中来消除这种情况,即语言可以“吞噬该库组件的语义”并且会出现干净的情况。 )
所以我的问题是:
我上面的解释是愚蠢的还是无意义的,还是只有语言纯粹主义者才关心的东西?
这不是问题的(潜在)来源吗?
Ada.Finalization.Controlled 是否涉及这种关系?
Ada 标准库的任何(其他)组件是否从编译器和语言定义中得到特殊处理?
【问题讨论】:
标签: programming-languages ada circular-dependency standard-library