为什么C需要语言修改才能“管理”?

为什么不能编写一个管理什么需要在C代码中管理的编译器(即使它“CLR兼容”)?

也许有一些妥协,就像在某些情况下禁止void指针等等.但所有这些额外的关键字等.这些添加需要解决的问题是什么?

我有一些方面的想法,什么可能难以解决,但一个很好的坚实的解释将高度赞赏!

解决方法

到目前为止,我不得不反对这些答案.

解决的主要问题是,C编译器会创建适合于非常恶劣环境的代码.即使是现代的cpu也不了解虚拟功能,地狱甚至功能也是一个伸展. cpu真的不在意,解决堆栈的异常处理代码在任何功能之外. cpu处理指令序列,具有跳转和返回.功能当然没有cpu名称.

因此,支持函数概念所需的一切都由编译器放在这里.例如. vtables只是正确大小的数组,具有来自cpu视角的正确值. __func__结束为字符串表中的字节序列,最后一个字节为00.

现在,没有什么可以说目标环境是愚蠢的.你绝对可以定位到JVM.再次,编译器必须填写本来不提供的内容.没有原始记忆?然后分配一个大字节数组,并使用它.没有指针?只需使用整数索引到该大字节数组.

主要的问题是C程序看起来与主机环境相当无法识别. JVM并不愚蠢,它知道函数,但它希望它们是类成员.它不期望他们拥有<和>在他们的名字.你可以规避这个,但是你最终得到的基本上就是名字.与今天的名称不一样,这种名称变化不适用于C连接器,而是用于智能环境.所以,它的反射引擎可能会确信有一个类c _plus__plus与成员函数__namespace_std__for_each__arguments_int_pointer_int_pointer_function_address,这仍然是一个很好的例子.我不想知道如果你有一个std ::地图的字符串来反转迭代器会发生什么.

一般来说,其他方式其实很容易. C语言中几乎所有抽象的其他语言都可以被按摩.垃圾收集?今天C已经被允许了,所以你可以支持这个void *.

我还没有解决的一件事是表演.在大字节数组中模拟原始内存?这不会很快,特别是如果你把它们加倍.你可以玩很多的技巧,使它更快,但在哪个价格?你可能不会得到商业上可行的产品.事实上,您可能会使用将C(最常见的实现依赖行为)的最坏部分与VM的最差部分(慢)相结合的语言.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...