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

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

概述为什么不能编写一个管理什么需要在C代码中管理的编译器(即使它“CLR兼容”)? 也许有一些妥协,就像在某些情况下禁止void指针等等.但所有这些额外的关键字等.这些添加需要解决的问题是什么? 我有一些方面的想法,什么可能难以解决,但一个很好的坚实的解释将高度赞赏! 到目前为止,我不得不反对这些答案. 要解决的主要问题是,C编译器会创建适合于非常恶劣环境的代码.即使是现代的CPU也不了解虚拟功能,地 为什么不能编写一个管理什么需要在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需要语言修改才能“管理”?全部内容,希望文章能够帮你解决为什么C需要语言修改才能“管理”?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1235692.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存