淘客熙熙

主题:【文摘】C/C++圣战! -- aircobra

共:💬26 🌺3 新:
分页树展主题 · 全看首页 上页
/ 2
下页 末页
                    • 家园 其实也没有什么可争的

                      说到底是windows和unix/linux阵营之战。

                    • 家园 这只是表面现象吧

                      .NET 和 Java 看上去很象,底层根本就不是一回事吧。

                      • 家园 底层我觉的真是一回事。一个是JVM,一个是CLR.

                        Java Vitual Machine 和.NET的Common Runtim 工作原理简直惊人的相似。(bytecode 对 MSIL, 同样的Garbage collection, automatic boxing/unboxing, generics, interface, RMI 对 Remoting, JSP 对 ASP.NET,g等等等等)

                        微软的.net就是前Visual J++的队伍开发的。因为微软输掉了官司,不能使用Java了,所以搞出了C#和.NET。

                        Java是One language, many platforms。.NET是one platform,many languages。两者在实现细节上有不少不同之处。

                        当然,微软的东西要Carry COM,所以不像Java那么Clean.不过Java 1.5也越来越复杂了,有点迷失了。

                        • 家园 JVM和CLR是很不一样的,尽管都是虚拟机

                          最初的C#几乎就是微软的Java,但是C# 2.0应该说比Java 1.5要强一些了。

                          微软和Sun的OO理念不太一样,Sun更多地倾向Pure OO,而微软则比较倾向C++这类实用的OO。

                          • 家园 C#比JAVA更象C++。比如C#保留了指针,C#的delegate也更象C++

                            的function pointer,而不是java的interface.

                            .Net比java要麻烦的多,主要是和已有的COM/DCOM, COM+,Windows Natice Services要有互操作性,包袱很大。

                            在具体的implemetation上,JVM和CLR有不少不同之处。比如Hotspot和MS的JIT就不同,heap的管理上也不太一样。但我认为.NET和java的共性远大于分歧。(COM和java是彻头彻尾的不一样)。

                            希望老兄就IT方面能多写些一些文章。在下很乐意和你交流。

                            • 家园 C#里没有指针。

                              否则,Garbage Collection的实现就很困难。

                              delegate类似function pointer,但不是

                              指针。

                              • 家园 .Net下面的Garbage Collection和Java的不太一样

                                Java没有析构函数,完全依靠Garbage Collection来回收资源;其实这也是JNI的命门所在,因为这里恰恰是Java和外界沟通的通道,涉及了外界资源的释放问题。而.Net因为涉及的资源比较复杂,完全使用Garbage Collection是不现实的,因此需要析构函数来完成非.Net资源的释放。

                                C#下面的指针使用是受限制的,而Delegate起到了函数指针的作用。在这一点上,我觉得微软做得不好,干脆彻底实现delegate pattern不就得了,那样更彻底一些,反正.Net Framework里面已经使用了不少的patterns。读.Net Framework Documents的家伙一定要精通Design Patterns这本书,否则会很难过的。

                              • 家园 你说的是微软的C#吗?这里是指针(pointer)的使用说明。

                                http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csspec/html/vclrfcsharpspec_A_2.asp

                                C#的指针在Unsafe Block中使用,叫Unsafe code

                                The core C# language, as defined in the preceding chapters, differs notably from C and C++ in its omission of pointers as a data type. Instead, C# provides references and the ability to create objects that are managed by a garbage collector. This design, coupled with other features, makes C# a much safer language than C or C++. In the core C# language it is simply not possible to have an uninitialized variable, a "dangling" pointer, or an expression that indexes an array beyond its bounds. Whole categories of bugs that routinely plague C and C++ programs are thus eliminated.

                                While practically every pointer type construct in C or C++ has a reference type counterpart in C#, nonetheless, there are situations where access to pointer types becomes a necessity. For example, interfacing with the underlying operating system, accessing a memory-mapped device, or implementing a time-critical algorithm may not be possible or practical without access to pointers. To address this need, C# provides the ability to write unsafe code.

                                In unsafe code it is possible to declare and operate on pointers, to perform conversions between pointers and integral types, to take the address of variables, and so forth. In a sense, writing unsafe code is much like writing C code within a C# program.

                                Unsafe code is in fact a "safe" feature from the perspective of both developers and users. Unsafe code must be clearly marked with the modifier unsafe, so developers can't possibly use unsafe features accidentally, and the execution engine works to ensure that unsafe code cannot be executed in an untrusted environment.

                                顺便看一个小例子

                                using System;

                                class Test

                                {

                                static int value = 20;

                                unsafe static void F(out int* pi1, ref int* pi2) {

                                int i = 10;

                                pi1 = &i;

                                fixed (int* pj = &value) {

                                // ...

                                pi2 = pj;

                                }

                                }

                                static void Main() {

                                int i = 10;

                                unsafe {

                                int* px1;

                                int* px2 = &i;

                                F(out px1, ref px2);

                                Console.WriteLine("*px1 = {0}, *px2 = {1}",

                                *px1, *px2); // undefined behavior

                                }

                                }

                                }

                            • 家园 的确如此

                              Java比较缓慢的原因一个是它的JVM,一个是它的过分OO,而.Net的CLR的性能要明显好于JVM,而C#的倾向于C++也给它的性能优势增色不少。

                              去年年底,我曾经针对同样的Data Mining算法分别用C++、C#和Java来实现以比较它们的性能,发现C++自然是最好的,C#差一些,但是距离不是很大,而Java就太差了。那个实现使用的数据有百万笔交易、平均交易涉及货品种类大约四十,数据总量一百五十兆,使用内存大约五百兆,在一台内存一G的Windows XP Pro上运行,HotSpot使用了服务器选项,内存给到了768M。

                              您说得对,C#的delegate更象C++的function pointer,而不是Design Patterns里面的delegate;Java的interface只是类的公共对外接口,以利于多态,和delegate没有关系。

                              其实Java也需要和宿主操作系统的交流,JNI就是为这个目的设计的。网上也有一些从Java访问COM的类库。

                              COM和Java自然是两类东西,但是COM+和J2EE的结构倒是有互相抄袭之嫌。

                              说到generic programming,Java 1.5依循的是C++ templete的预编译路子,这样就不需要对JVM的修改,至少对Beta版是这样的;而.Net诸语言是通过扩充CTS/CLR来实现的,好处是可以做到Component一级的templete复用,缺点是CTS/CLR的兼容性,至少目前我手里没有能够反编译.Net Framework 1.2的工具。

分页树展主题 · 全看首页 上页
/ 2
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河