微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么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的最差部分(慢)相结合的语言.

原文地址:https://www.jb51.cc/c/115111.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐