1
12
到目前为止,我不得不不同意这些答案。 要理解的主要问题是C++编译器创建适合于非常愚蠢的环境的代码。即使是一个现代的CPU也不知道虚拟函数,地狱,甚至函数都是一个延伸。例如,cpu并不关心用于释放堆栈的异常处理代码是否在任何函数之外。CPU处理指令序列,有跳跃和返回。就CPU而言,函数当然没有名称。
因此,支持函数概念所需的一切都由编译器放在那里。例如,vtable只是具有正确大小的数组,从cpu的角度来看具有正确的值。
现在,没有什么能说明目标环境 一定要哑口无言 . 你完全可以瞄准jvm。同样,编译器必须填写本机没有提供的内容。没有原始内存?然后分配一个大字节数组并使用它。没有原始指针?只需在大字节数组中使用整数索引。
主要的问题是,C++程序看起来很难从宿主环境中识别出来。jvm并不愚蠢,它知道函数,但它希望它们是类成员。不希望他们有
总的来说,另一种方法其实要容易得多。几乎所有其他语言的抽象都可以在C++中进行按摩。垃圾收集?这在C++中已经被允许了,所以你甚至可以支持它。
有一件事我还没有提到,那就是表现。在大字节数组中模拟原始内存?这不会很快,特别是如果你投双打的话。你可以玩很多把戏来加快速度,但价格是多少?你可能得不到商业上可行的产品。事实上,您可能会遇到一种语言,它将C++最坏的部分(很多不寻常的实现依赖行为)与VM(慢速)的最坏部分结合起来。 |
2
4
现有的正确代码,即按照C++标准编写的代码,不能不经意地改变其行为。 |
3
3
很好,c++/CLI主要是托管和非托管代码之间的黏合剂。因此,你需要有能力混合混乱的非管理概念。您需要能够在同一代码中分配托管和非托管对象,因此无法绕过单独的关键字。 |
4
3
为什么你不能编译本地C++代码来引导CLR? 是的,你猜对了,会有太多的妥协,这会使它毫无用处。我只举三个例子… 1)模板:C++支持它们,CLR不(泛型不同)。 所以你不能在代码中使用stl,boost等。 2)多重继承:用C++支持,不支持CLI。 您甚至不能使用标准iostream类和派生类(如stringstream、fstream),它们都继承自istream和ostream。 几乎所有的代码都无法编译,甚至无法实现标准库。 3.)垃圾收集: 大多数C++应用程序都是手动管理内存(使用智能指针等),CLR具有自动内存管理功能。 因此,C++风格的“新”和“删除”将与“GCNew”不兼容,使得现有的C++代码对于新编译器来说是无用的。 如果你必须根除所有重要的特性,甚至是标准库,并且没有现有的代码可以编译…那又有什么意义呢? |
5
2
首先,“简单C++”和“托管C++”的区别是有意的,因为Mc++的目的之一是在现有的C++代码和CLR之间提供一个桥梁。 其次,有太多的C++特性不适合CLR模型。多重继承,模板,指针算法…如果不划清界限,程序员将注定在编译和运行时都会面临神秘的错误。 |
6
1
我认为这是因为在C++中添加托管代码特性会使C++速度变慢,编译器变得更加复杂。所以C++会失去它最初设计的东西。C++的一个优点就是它是一种很好的语言,它的级别很低,但也有一些可移植性。这可能是C++标准委员会计划让它保持下去的原因。无论如何,我不认为C++可以被完全“托管”,因为这意味着用C++编写的程序需要一个VM来执行。如果是这样的话,为什么不直接使用C++/CLI呢? |
7
1
Qt framework 差不多是这样。也就是说,它有智能指针,当它们指向的对象被破坏时,会自动设置为空。 它仍然是一个原生C++,经过MOC(元对象编译器)解析。 |
8
0
是的,我想C++可以被管理。但是.net需要 重写 对于C++并没有偏向于BASIC。在同一屋檐下有多种语言。某些功能必须要去。这是VB.NET或C++.NET之间的选择,VB.NET被选中。有趣的是,我听说c比vb.net更受欢迎(尽管我两者都不用!). |
9
0
.NET CLR要求在运行时不知道的任何地方都不能存在对托管对象的引用,除非对象被固定;良好的性能要求对象尽可能少被固定。由于.NETCLR无法理解所有在C++中可用的数据结构,因此在这样的结构中不必对托管对象进行引用。可以使用“普通”C++代码与.NET代码交互,而不需要对C++语言进行任何更改,但是C++代码可以将任何类型的引用引用到任何.NET对象的唯一方法是在.NET端上有一些代码为每个对象分配某个句柄,并保持一个S。与句柄关联的对象的静态表。想要操纵对象的C++代码就必须要求.NET包装器对句柄所标识的对象执行一些操作。添加新语法使编译器能够识别.NET框架需要了解的对象类型,并对它们实施必要的限制。 |
10
-1
首先要考虑的是
每一件事
必须执行的事项列表
|
11
-1
我同意五锤!如果我离开Java和其他管理语言,那不是毫无用处的:那就是对计算机进行完全控制,访问内存管理内存,控制计算机如何运行我的代码,与C库(如Lua)集成。 如果我松了这个灵活性,那么我就离开C++,回到C,如果C也被管理了,那么我会去汇编程序。 托管语言对于所有游戏平台/复杂程序来说都是最糟糕的,因为它们将您限制在无法直接访问硬件的沙箱中,并且比编译语言慢得多。 C++的主要目的一直是性能。它是大型游戏的最佳语言之一。没有这种语言的表演,很多游戏就不存在了! |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |