发现C++/CLI是发现新大陆了吗?
最近事情不多,想学点什么新东西了。最近几个月Facebook的F8炒得很火,吸引我看了看他们的Application是什么样子的,应该怎么开发。看完之后,自己不太感兴趣,因为自己要建Server,比较麻烦。然后,随便找找发现了C++/CLI。原来微软在2005年就推出了这门算是新的语言吧,以前只是知道有managed C++,评价不高,C++/CLI是它的改进版本。随便了解了一下,感觉这门语言还是很吸引我的。原因很简单,就是它的强大混合编程的能力。它可以调用.NET, MFC, Windows API。目前的测试开发语言主要是C#。一直以来自己都认为C#是最适合自己的测试开发工具了,因为用C++开发测试程序不太现实,至少不能作为主要的开发语言。VB,Java什么的是我一直都讨厌的,其他script的什么的,功能都太弱了。唯有C#是除了C++以外最强大的快速开发工具。可是,用C#开发里边就存在了一个不可逃避的问题,就是调API的艰难。很多时候,我们都会碰到.NET不能完成的功能,尤其是偏系统一类的测试。那么我们就需要用Windows API来实现,可是C#调API的方式使我选择了逃避,或者说放弃。心里想,必要的时候就用C++吧,可是还真没用过。(这也就是测试人员的灵活性了,呵呵)大概一天的时间都是看别人对C++/CLI的评论,使用心得什么的。感觉大部分人都是批评的态度,少数人喜欢和支持。说真的,自己也能理解C++程序员对它的看法。首先,它新增加的关键字确实让人不习惯,看起来,用起来都觉得怪怪的。其次,大部分C++程序员开发的项目都不需要用到.NET吧?至少目前应该是这样,很多人还在VC6下边编程。既然用不到它,就不会体会它的好处,那么就真的只有不好了。少数人喜欢它就是因为它强大的能力。目前来看,还真的没有其他语言从功能上说能与它相提并论。另外一点就是,从资料上来看,目前使用这门语言的人很少。因此我也很犹豫到底应不应该学习和使用它。
在疑惑中对它进行了学习,感想如下。
1。想真正的掌握好这门语言既需要C++的知识,又需要.NET的知识。正如一些人所说,学习它的难度要高于C++和C#。当然我是说真正的掌握,你可以用它只做C++程序,或者只做.NET程序,那就跟单独学C++或者C#的难度一样了。因为,大部分C++程序员侧重于底层,C#程序员侧重于上层,使得纯C++/C#程序员转向C++/CLI都需要一定的时间,不会轻易上手。当然对C++程序员来说会更简单一些,毕竟.NET还是比较容易掌握的(前提是他们能有心,耐心学习)。另外,如果同时具备了C++和C#的知识和经验,上手C++/CLI还是会很快的。比如我学了一天就可以上手了。
2。功能的确强大,.NET, MFC, API通吃。我装的VS2008 express 版本不支持MFC, 不过.NET+API真的就足够对付任何工作了。
3。语法没有想象中的那么不可接受。首先,它增加的关键字其实并不多,大概10几个吧,很容易学习和掌握。其次,很多关键字你也可以完全不用的,比如ref struct, value struct可以完全不用。value class 我觉得也没什么太大用。ref class就足够了。这样的话,虽然是4个关键字,可是对你来说就只是一个。再次,这里边真的有一个习惯问题, */^, using/using spacename, ./->, new/gcnew 这些东西你很快就应该能够适应。
4。和C#的比较。C#的语法还是简洁许多,也更自然。如果纯做.NET程序,目前来看没有必要非用C++/CLI。可是如果需要调用API的话,C++/CLI给你带来的方便性还是要大于语法的繁琐。因为语法可以去适应,习惯。功能的强大可是可遇而不可求的东西呀。所以,个人认为做测试程序,C++/CLI还是一个不错的选择,能够更广阔的设计我们的test case。
5。关于C++/CLI的未来。未来真的很难说,一看市场的需求,二要看微软的支持。目前来看,C++多用于系统,驱动方面。C#用于应用方面。相信未来的一段时间都会维持在这种状态中。C++/CLI给我们带来的是C++,C#混合编程。可是市场上有多少产品的开发需要这种混合编程呢?目前来看很少,就算有,有些公司就单独用C++,C#来做,再集成起来也是解决的一种方法。另一方面,C++程序员和C#程序员分的很开,没有适合用这种语言的中间状态的程序员。如果没有产品,没有程序员的支持,很难说能有什么太好的前途。不过我想C#加上C++/CLI的解决方案还是要比C#加上纯C++的解决方案更合适,合理一些。如果不嫌弃C++/CLI的语法,单独用它也可以完全的解决。现在来看,C++/CLI的阻力最大来自于它的语法了,如果语法简洁了,在.NET领域会有不少人用,从而引起它的流行,而在系统领域也得到一定的应用。个人认为,using space可以就改为using, *,^合并为*,由编译器智能判断是传统指针还是引用指针,new和gcnew也合并,编译器智能判断是应该在普通堆还是在托管堆上建立。如果这样的话,我想就没什么人会拒绝接受它了。
个人来说, C++/CLI还是极大的提高了我写测试程序的能力,我还是抱着积极的态度去采用它。这也避免我长期用C#而疏远了C++。用好C++/CLI就等于用好了三门语言。 经常发现有网友说不知道该i学些什么.如果你真的不知道的话,也可以来学学C++/CLI,大家一起交流。 C#维护起来比C++还是方便许多(做测试程序毕竟不是做产品,效率高适用就OK)
微软会全力在OS级别推CLR环境,它的企业产品BizTalk Server等等据说会迁移到C#上
[ 本帖最后由 shanxi 于 2007-8-8 10:01 编辑 ] 如果C#能完成你要测试的所有任务当然没问题,如果不能完成呢?
当然都是看个人的项目情况。大部分来讲C#足够了。
C++/CLI是CLR上最底层的编程语言,学习它会学习很多底层的知识,加深对CLR及操作系统的理解。
应用层现在很多是C#来做的,可是系统层还是C/C++。总是搞C#对系统构造了解就很有限了。
当然都是看个人,很多人没兴趣搞系统层就算了,止步到C#也无可厚非。 对了说C#维护起来比C++方便许多,这个没错。
可是我们现在讨论的不是C++/CLI吗?
我也说过了用C++开发测试程序不太现实,可是C++/CLI却完全不同。我觉得维护起来应该更简单。当然是对于写测试程序来说的。
首先,测试程序一般不会太过复杂,如果真的要写很复杂的测试程序,可要好好考虑是否值得,是否合算。
其次,C#调API是非常麻烦的,你用C++/CLI一行代码就完成了,C#可能要几十行,甚至上百行才能完成。代码多了,维护自然就麻烦一些了。
再次,你可以完全写跟C#一模一样的代码,需要调用API的时候再用native C++,这种程序结构这也极大的简化了C#程序。
因此,我觉得对于测试程序来说,C++/CLI做的维护起来应该更简单才对。
当然里面有一点,就是要调API,不然的话,C#的语法肯定要更简单些。 你也说了你目前的兴趣点是OS底层,为什么你不去看linux kernel呢?那样不更深入?
纯粹从语法角度来讲,当你看到一个函数库最底层的代码后,下面还有编译器实现,汇编等知识点。
每种语言都有它擅长的方面。
不过现在能交叉运行的跨语言环境正不断出现。
比如:
1.Mainsoft能在JVM中运行.NET,它的原理是交叉编译引擎将.NET Framework生成的Microsoft Intermediate Language(MSIL)交叉编译成Java的字节代码。然后基于Java的.NET Framework实现即可支持应用程序运行于Java平台之上。不但如此,Visual Studio扩展还能够允许开发者在Java EE平台上编写、编译、部署以及调试Web或服务器应用程序。 因为代码的交叉编译发生于字节码级别,所以其过程并不需要源文件转换——这就意味着开发者仍旧可以使用Visual Studio.Net作为他们可移植程序的开发环境。
2.旨在增强基于JVM虚拟机的语言间进行交互的项目Java语言运行时(Java Language Runtime,JLR),JLR将集中基于JVM虚拟机语言的通用编码,并且会减少在JRuby、Jython、Groovy及其它相关语言之上的重复性工作。
3.微软的CLR仍在发展和完善,尤其是对动态语言的支持。
[ 本帖最后由 shanxi 于 2007-8-8 12:04 编辑 ] 好像已经跑题了。
我不是说我的兴趣点是OS底层,我还没到那个程度呢。我是说如果测试程序需要调用Windows API的时候,C++/CLI是很好的选择。就这么一个简单的意思。
我是搞Windows的,为什么要看Linux kernel呢?我是搞测试的,不是搞底层开发的。因此,我的思路还是从测试的角度来说的。
当然对于搞测试的来说,编译器,汇编都是需要有一定知识的。可是这好像与用C++/CLI来开发测试程序没什么关系呀?应该属于另外的话题了吧?
每种语言都有它擅长的方面肯定没错呀。这也是我为什么说C++/CLI适合写需要调用API的测试程序,这个应该没什么争论吧?
我觉得那几个例子好像也跟C++/CLI没什么关系吧?能说明C++/CLI什么呢?好,还是不好?
任何语言都在发展和完善中,即使C++也不例外,不然怎么会出现C++/CLI呢?当然了,你也可以说C++/CLI还不够完善,毕竟历史短。可是,如果能解决你的问题,没有理由去拒绝吧?
比如,现在你的测试程序需要调一些API,你怎么做?用C#的interop机制?用C++,还是用C++/CLI?
当然了,如果你的测试工作不需要跟系统API打交道,你也可以完全忽略我的文章。我也说过了C#就够用了。 跑题了,我上面说的主要是动态语言。 http://www.infoq.com/cn/news/2007/07/mainsoft cleverman 总能带来有趣的东西~~ sdlkfj2 我以后可能会很少写测试文章了,主要写开发方面的文章了。
这里可能很少有人感兴趣。我就不占版面了。
有时间可以去我的blog看吧,如果有兴趣的话。 楼上两位应该都是从开发转测试的,这里很多是毕业从测试做起的,比如我,做了3年黑合了,工作中偶尔用电shell,perl已经不错了,如cleverman所说,未来大公司彻底取消黑合测试之后我们怎么办呢,只能去做外包了吗? 大公司外包是趋势呀。
这个趋势搞得老外都不好找工作了。呵呵。
现在美国大学生都很少学计算机了。 sdlkfj3 外包外包了 。日包最是好,比较有钱。
http://bbs.51testing.com/images/common/sigline.gif
51.com.cn相片在线电视剧劲舞团经验表vagaa视频电影校内网代码校内网代码outlook设置北京seo
页:
[1]