`
oldrev
  • 浏览: 234289 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

更好的C++——给C++使用者的D语言简介

阅读更多

作为 C++ 狂热的粉丝,你在多年使用C++的过程中是否有过以下症状:

  1. Boost 和 STL 真不错,但是编译太慢,让我想砸电脑!
  2. 我讨厌一个程序写两次,干嘛要头文件?编译器不会自动提取声明吗?
  3. 经常有大师教导你不要用宏,但是现实是没有那个程序不用!
  4. 我从来不喜欢指针,但我也不想失去它
  5. 我想要垃圾回收!!!
  6. C++的元编程真酷,我也想试试,但我是凡人。
  7. 多继承、虚继承太复杂,我想要 interface,但是有能保持多继承的威力。
  8. 羡慕 C# 的Property、delegate...?
  9. 大师们说要用RAII,但是我觉得麻烦,为清理个资源居然要写个临时类?
  10. ...


如果以上问题你都回答Y,那么,我建议你去看看D语言(www.digitalmars.com/d/)医生,他将为你开出以下处方:

  1. DMD/GDC D语言编译器编译速度飞快,用再多的模板也不成问题,一个 几MB代码的程序的编译也可以在分秒内完成。
  2. D语言提供了模块(module)和包(package)的概念,一个模块就是一个源文件,一个包就是一个磁盘目录,解决了程序的物理架构问题。更妙的是,编译器能自动提取所有声明和接口,完全没有 C/C++ 头文件的麻烦。
  3. D语言没有C/C++中的文本宏,这下你该高兴了吧?而且很快 D语言2.0 Alpha 版本中将提供基于抽象语法树(AST)的宏,让你能在一致的语言环境中操纵甚至自定义语法。
  4. D的许多特性大大减少了指针的需要,比如与C#/Java 类似类默认就是引用类型,D也有内置动态数组。但是 D也保留了指针,因为你需要解决现实世界的问题。
  5. D拥有内置的GC,但是你也可以重在类的 new 操作符来避开GC。D 也不是虚拟机语言,而是像 C++ 一样着眼于大规模高性能的系统和应用程序。
  6. D 的模板与元编程(这是“与”,因为D的元编程不仅限于使用模板)是面向凡人的,远比C++的易于学习使用,但是功能强于 C++,甚至可以在编译时执行函数。
  7. D拥有一切现代面向对象语言的要素:interface, abstract class, final class...,为了解决 interface + 单继承的不足,D 提供了模板混入(template mix-in)特性,没错,天上不会掉馅饼,但是可能会掉红宝石。
  8. D 拥有恐怕是世界上最简单的 Property 功能,比如:
    D 代码
     
    1. class Foo{   
    2.   int c;   

    3.   int count() {
    4.     return c;
    5.   }

    6.   void count(int n) {
    7.     c = n;
    8.   }
    9. }   
    现在类Foo 的成员函数 count 可以像一个真正的属性一样地被访问: int x = foo.count; 或者 foo.count = 123;
  9. D 的 delegate 强于C#,完全由编译器内部支持,而不是如C++般笨拙、低效的手写代码。D 甚至允许完全的匿名 delegate: void delegate() d = { printf("Hi D!\n")};
  10. scope 是C#中 using 的加强版,实践 RAII 手法从此变得轻松愉快。
  11. C++ 界大牛人 Andrei Alexandrescu 参与了核心语言设计,加上经验丰富的编译器作者和一大堆活跃的开发者,D 的前途光明。


D 是一门很年轻很有前途的语言,虽然现在还不算成熟,但是目前的 1.0 稳定版已经拥有了超越 C++0x 标准的特性。就像D的设计和实现者 Walter Bright 说的,看看它的文档,你自己决定吧!

分享到:
评论
30 楼 DavidL 2007-10-02  
我越来越不喜欢做程序了,因为我发现做程序的,绝多数都是不识时务的人!
嗯,我是不识时务的人。

但不一定是所有人,虽然我看到的也有很多人。

总之,自以为聪明的都在写程序
29 楼 mathgl 2007-10-01  
我越来越不喜欢做程序了,因为我发现做程序的,绝多数都是不识时务的人!

这个因果关系 相当没有意义可言
重新抽样
28 楼 tomqyp 2007-10-01  
我建议喜欢争的人看看有多少高手参与了这样的争论(我不是所以我参与了:))为什么?因为没有意义,各种工具的各项性能参数都有是有据可查的,当一个人担当重任掌握着一个重大项目的决策权时,选择什么样的工具,我想正确的做法肯定是参考比较这些工具的各项性能参数,和实际测试结果,而不是听一两个人的一家之言。高手之所以称为高手不光是因为知识掌握的程度,更因为高手分析问题是全面分析问题所涉及的知识面,而不是仅凭自己所知道的一些知识点。

当自己的知识也从点汇集到面时,并且也掌握了正确的分析问题的方法,回头再去看看自己说的话,也许会有不同的感受。

另外,我觉得,在议论自己所不了解的知识时闹了笑话被人不客气的指出时,应该抱着感谢别人态度,这才正确的学习方法,不要为了面子而放弃真理。
27 楼 Colorful 2007-10-01  
还是就此打住吧。
上次我就没敢继续讨论下去。

再怎么说,Delphi已经是过去时了。它不能做到与时俱进,走下坡路是必然的。

不过,说实话,我在C#里面看到了Delphi的影子。
26 楼 stealdream 2007-10-01  
想想还是回了这个帖子,不想回是因为我们不应该把时间浪费在这种问题的争论上,因为这种问题只会引发更多的争论,但却总是得不到一个认人更明确的结果,而回帖是因为我确实是一个好争论的人,不吐不快。

CBC 当然不会是中国人民建设银行,我敲错了,是指的BCB

我并不是过份追求执行效率的人,我也写不出有多么高执行效率的代码,虽然我也认为这不是什么大不了的,但就是有人要拿Delphi的执行效率和其他语方做比较啊,主要是有和他做比较的同类语言(Java 跑个百十来个客户端的服务器就要上百万的服务器主机可就没听到多少人批评他跑得慢,注意哦,无形中,Java的这个缺点却能创造更多的效益,不要老以技术角度去看待事物)。我说 Delphi的基础类(不仅仅指 TObject,还有各种容器,列表等)很糟这一点我以为大家都会有同感,难道不是吗?不过大型的公司有精力和财力开发自己的类库(挑剔的人不知道会不会说叫我去改造 TObject,反正我没这个能力),当然另当别论,但是我们首先要明确的一点是Delphi与VCL肯定不完美,新诞生的语言和框架,肯定有比Delphi、VCL更高明之处,何必把自己深深的陷在Delphi里喃,如果是这样,楼上的朋友也不会来到这里发表观点。说我不了解Delphi,不了解VCL,我也承认。记得曾有人说过认识Delphi的三个阶段:1:惊奇并喜欢;2:发现他的不足;3:再次找到他的魅力,能根据他的特点找到解决方案(这一点是肯定的,有很多第三方组件都不是只提供给Delphi的,典型的如Indy,针对不同的语言有不同的版本,是不是就能说明他们能根据语言的特点开发适合这个语言的版本,而并没有听到他们并抱怨某个语言比哪个语言不好,至少我没听他们说)。可能我就处在第二个阶段吧,如果楼上的还从未发现他的不足...

想想 Delphi 横行了这么多年,应该有很多了不起的工程,但走到现在,即使这些工程有多么的了不起,也可能到了快要推翻重来的时候了。

不要用“没有过时的工具,只有过时的人”这样的大道理来打压人,我越来越不喜欢做程序了,因为我发现做程序的,绝多数都是不识时务的人!

尽管写再多不好听的话,我却没有半点想要诋毁别人的意思,就事论事!
25 楼 zlxym 2007-09-28  
引用
不想再引起这种无畏的争论,不管怎样,Delphi 对我来说都以是一个过时的工具,尽管我还会用他,靠他养活。要说 Delphi 的代码质量高那只是针对代码局部来说的,比如哪句话Delphi的汇编码是如何如何的比C++的汇编码好了,但是整体呢?不要忘了Delphi的局部变量申请方式,Delphi的对象在堆中分配的方式,等等,不要以为写两句话的测试程序就能说明一切,那是在唬人。VCL是比MFC好,从封装的角度来看,还有TObject 实现的比MFC更好的消息映射,我认为仅此而以。如果须要大量的低层代码,又何必选择 Delphi 呢?Delphi有非常糟糕的基础类,即不够高效,也不方便,也不够丰富。

Borland 总是在制造不伦不类的产品,永远跟在别人屁股后面推车还要糟人骂,Delphi 如此,CBC如此,JB也如此,据说现在人家又有 Delphi.net 了,垃圾!就没有一个完全属于自己的或者说彻头彻尾变革的产品,似乎这是他走向败落的更有力的原因吧!

模式没有语言之分:你在C和汇编下能运用模式?运用模式至少还得面向对向吧!

    CBC为何物,没听说过,应该是BCB吧。连产品名字都搞不清楚,都敢如此大肆批评,阁下真牛。
    你说的底层代码是哪些?我们的电力负荷主站系统完全用Delphi开发,可以同时管理5000台以上的终端设备,随时进行数据交换,现在已经运行了一年多了,也没见出过什么问题。
我们现在的管理系统最多时有7000多台工作站进行在线事务处理,由15台应用服务器分担负荷,不算大系统,中系统算了吧。
    我不知道你为什么对Delphi有如此多的不满,VCL怎么会限制你对模式的应用?如果这样,说明你对Delphi的了解还不够。要用好它,既要有高层的眼光,也要对它的底层细节有相当的理解,这样你做出来的程序,才可能达到你预期的要求。Delphi运行效率低?没觉得,只要是编译型语言,整体上运行效率不会有太大的差别,20%都算多的,而且程序的最终运行效率,更大程度上取决于写程序的人。
    没有过时的工具,只有过时的人。
24 楼 oldrev 2007-09-27  
引用

liukl     6 小时前

一个二进制版的java,没多大前途。毕竟有那么多C++、Java的现有程序、库、经验可以继承,何必为了一点点炫耀而轻易选择。


不知您从何处看到了“炫耀”之意?
23 楼 侯风玄黄 2007-09-27  
怎么优秀,有空了解一下啊
22 楼 liukl 2007-09-27  
一个二进制版的java,没多大前途。毕竟有那么多C++、Java的现有程序、库、经验可以继承,何必为了一点点炫耀而轻易选择。
21 楼 saaya 2007-09-15  
20 楼 DavidL 2007-09-15  
在Delphi中想抽象代码的确需要点功夫。。。没有模板的确是个痛苦的事情。。。不过不可否认Delphi的VCL还是很优秀的。TObject也不至于是很糟糕的基础类吧?
然而Delphi最让我不满的是没有内置的容器库。引进一个凑或者用就勉强度日吧。。
Delphi本身不是什么太坏的东西,所以说它好说它不好都可以,争论就没必要了
19 楼 stealdream 2007-09-15  
不想再引起这种无畏的争论,不管怎样,Delphi 对我来说都以是一个过时的工具,尽管我还会用他,靠他养活。要说 Delphi 的代码质量高那只是针对代码局部来说的,比如哪句话Delphi的汇编码是如何如何的比C++的汇编码好了,但是整体呢?不要忘了Delphi的局部变量申请方式,Delphi的对象在堆中分配的方式,等等,不要以为写两句话的测试程序就能说明一切,那是在唬人。VCL是比MFC好,从封装的角度来看,还有TObject 实现的比MFC更好的消息映射,我认为仅此而以。如果须要大量的低层代码,又何必选择 Delphi 呢?Delphi有非常糟糕的基础类,即不够高效,也不方便,也不够丰富。

Borland 总是在制造不伦不类的产品,永远跟在别人屁股后面推车还要糟人骂,Delphi 如此,CBC如此,JB也如此,据说现在人家又有 Delphi.net 了,垃圾!就没有一个完全属于自己的或者说彻头彻尾变革的产品,似乎这是他走向败落的更有力的原因吧!

模式没有语言之分:你在C和汇编下能运用模式?运用模式至少还得面向对向吧!
18 楼 oldrev 2007-09-15  
我以前尝试过 C++Builder4/6,恐怖的 AV 错误经常发生,而且程序还能继续运行....
17 楼 Colorful 2007-09-15  
@stealdream
有些同意,有些不敢苟同,呵呵。
Delphi完全是Borland一手毁灭的。
Delphi的代码生成质量很高,运行效率也不低。我记得前人有过这方面测试,至少不比C++ Builder差。
VCL的设计应该说要比MFC漂亮吧。
而且你可以完全采用Win32 API自己来设计满足对性能苛刻的要求。
实际上VCL和MFC都是对Win32 API的上层封装。

当年的传奇客户端很能说明问题。

只是Microsoft挖墙脚,才使得Borland无力再修改Delphi编译器。以至于后面的版本Bug频出。

Delphi 2005不要说是大工程,连小工程也应付不了。

PS:模式应用可不分高层底层,也无语言之分。
16 楼 tomqyp 2007-09-15  
呵呵 一说Borland我就想到了oldrev
15 楼 stealdream 2007-09-15  
Delphi 我已经用了 4 年了

我想我的感受不会比你少,并没有否认Delphi是一门优秀的语言,我也没有用Delphi做过多大的项目,但也却实不知道Delphi做的大项目究竟有多大。项目的大小本身就没有什么明确的界限,要看不同的恒量方式,但我说 Delphi 是开发小工程语言是有理由的:

大工程通常会有较多的用户数,或处理大量的数据,则肯定要考虑运行效率和稳定性,这点Delphi肯定没优势,因为如果要进行大量的低层开发的话,Delphi肯定不是这个公司这个工程的首选,C++或VC++可以更好的完成,而且大工程通常会有较大的资金,不会因为过度考虑成本而选择开发效率高而运行效率低的 Delphi。

4年时间也不算少,已经累计了很多对Delphi的不满,Delphi 的IDE是强大,但强大得不是地方,我上面说的 Delphi IDE 及整个 VCL限制了模式的运用,而对于高层编程,模式的运用是对我来说无法抵挡的魅力
14 楼 Colorful 2007-09-14  
引用
千万不要有Delphi那样的IDE,否则这个语言的前途渺茫,Delphi的工作方式不适于模式的运用,再好的程序员一旦习惯了按他的方式工作,该名程序员就报销了,对于大的软件来说界面本来也不是什么障碍,所以 Delphi 在人们心目中就成了永远的小工程、快速开发工具,不希望D语言也伦为这种语言!!!

扯淡!
且不说任何IDE均是辅助开发的工具。
Delphi是小工程的工具?
工作原因,我用了这门语言几个月,我认为Delphi相当优秀,只是成也Borland,败也Borland。Borland在与Microsoft竞争下决策失误,而且IDE Bug不断才自毁前程。
Delphi的前身Pascal结构相当严谨,在C之前,它可是最火的语言。
而且Delphi IDE在3,4,5,6,7都是相当成功的。

VB以前被称为玩具语言,借着.NET,现在VB.NET不也咸鱼翻身,跻身一流之列。
13 楼 stealdream 2007-09-14  
引用
是啊,如果D语言有个像delphi那样的IDE就爽呆了...


千万不要有Delphi那样的IDE,否则这个语言的前途渺茫,Delphi的工作方式不适于模式的运用,再好的程序员一旦习惯了按他的方式工作,该名程序员就报销了,对于大的软件来说界面本来也不是什么障碍,所以 Delphi 在人们心目中就成了永远的小工程、快速开发工具,不希望D语言也伦为这种语言!!!

刚把 Eclipse 的 Descent 插件装好了,现在写D语言的感觉不知好了多少倍速,不过没有代码提示,是没装好还是现在还没有完成这个功能啊?
12 楼 player7 2007-09-14  
是啊,如果D语言有个像delphi那样的IDE就爽呆了...
11 楼 tomqyp 2007-09-14  
引用
希望D语言早日走上正途,现在关注他的人太少了,现在他还只是个玩具

用来做一些普通的桌面应用开发完全够了,如果放在VB和delphi的时代,现在的D完全可以派上大用场了.

相关推荐

    c++————————笔记

    根据提供的文档内容,我们可以归纳出一系列关于C++的重要知识点,这些知识点主要涵盖了C++的基础语法、数据类型、内存管理、程序...随着经验的积累,还可以深入学习更多高级特性,以便更好地应对实际项目中的复杂问题。

    c++教程——中英对译

    本教程“C++教程——中英对译”专为那些希望学习C++但英语水平有限的学习者设计,提供了方便的语言对照,帮助理解复杂的编程概念。 C++语言的核心特性包括面向对象编程(Object-Oriented Programming, OOP)、泛型...

    数据结构与程序设计—— C++描述(高等教育出版社)

    通过阅读和实践这些代码,学习者可以更好地理解和掌握书中的理论知识,并将其转化为实际编程技能。 总的来说,《数据结构与程序设计——C++描述》是一本全面而深入的教材,涵盖了数据结构的基础知识和C++实现,对于...

    面向对象的程序设计语言——C++课件 第二版(陈志泊 )

    面向对象的程序设计语言,如C++,是一种强大的工具,用于构建复杂且可扩展的软件系统。...通过深入学习和实践,开发者可以更好地理解和应用面向对象的编程思想,从而在软件开发领域中提升自己的专业技能。

    C++版推箱子——初学者练手

    《C++版推箱子——初学者练手》 推箱子是一款经典的逻辑益智游戏,源自日本,以其简单直观的操作和高难度的策略性受到玩家喜爱。在这个项目中,我们将使用C++编程语言在Visual Studio 2008环境下实现一个推箱子游戏...

    C++课设——简单的宿舍管理系统

    【C++课设——简单的宿舍管理系统】是一个针对初学者的编程实践项目,旨在帮助学习者掌握C++语言和数据库管理的基础知识。这个系统利用C++实现了对宿舍信息的管理,结合了SQL Server 2005数据库进行数据存储,同时...

    数据结构算法与应用——C++语言描述英文原版

    书中使用C++语言进行描述,使得读者能够更好地理解和实现这些概念。 1. 数据结构:数据结构是组织和管理数据的方式,它影响着算法的效率和程序的设计。本书涵盖了基础和高级数据结构,如线性表(数组和链表)、栈...

    c++实训教程——C++

    面向对象编程使得代码更加模块化,通过类和对象的概念,可以更好地模拟现实世界的问题。泛型编程则允许编写不依赖特定数据类型的代码,增强了代码的复用性。过程化编程是C++的早期核心,强调函数的使用和程序流程的...

    C++语言程序设计——实训教程

    《C++语言程序设计——实训教程》是一本专为初学者和在校大学生设计的实践导向教程,旨在通过实例和练习帮助读者深入理解C++编程语言。C++是一种强大的、通用的编程语言,它继承了C语言的高效性,并引入了面向对象...

    《汇编语言与计算机体系结构——使用C++和Java》H1软件

    《汇编语言与计算机体系结构——使用C++和Java》是一部深入探讨计算机底层运作机制的教材,适合对计算机系统有浓厚兴趣或者从事相关工作的专业人士。该书通过C++和Java这两种高级编程语言,帮助读者理解汇编语言以及...

    《数据结构——C++实现》(第二版)课本源代码

    《数据结构——C++实现》(第二版)是一本经典的计算机科学教材,专注于介绍各种数据结构及其在C++编程语言中的实现。这本书的核心是通过实际的代码示例帮助读者理解和掌握数据结构的基本概念,这对于任何想要深入...

    低效的C++真是这样吗——C++的效率分析

    在刚开始,C++可以简单的作为一个更好的C使用:正如一些C编程者用C++编译器运行代码进行质量检验。这也表明,转向使用C++所带来的利弊并不是绝对的:正如本文所述,你可以选择一些对应用有用的C++功能,而不要其他功能...

    c++ 学习经典教材 ————易学C++

    鉴于此,本书旨在帮助学生克服基础薄弱的问题,通过逐步引导,让学生更好地理解C++编程的核心概念。 ### 4. 学习C++的方法与步骤 - **部分内容**:强调学习C++是一个渐进的过程,要求学生在学习过程中注重精深而非...

    C++基础讲义——4

    通过上述知识点的梳理,我们可以看到《C++基础讲义——4》这部分内容主要聚焦于通过实际项目(学生成绩管理系统)来教授C++语言的基础应用技巧。从问题的定义、解决方案的设计到具体的编码实现,本课程为学习者提供...

    AD与DA转换——基于C++语言编写

    通过C++编程实现这些转换,学生不仅能学习到数字信号处理的基础理论,还能提升编程能力,更好地理解数字世界与现实世界的交互。在“ADDA实验”中,学生将有机会亲自动手,体验从理论到实践的全过程。

    汇编语言与计算机体系结构-使用C++和java(书中源码及相关课件和资料)

    在使用C++和Java进行编程时,理解汇编语言可以帮助我们更好地理解编译器的工作方式。C++和Java都是高级语言,它们会被编译成汇编代码,然后转化为机器码。了解汇编语言可以提升对编译器优化的理解,例如函数内联、...

    C++基础讲义——2

    根据给定文件的信息,我们可以提炼出以下关于C++的...通过对这些核心概念的理解,学习者可以更好地设计和编写高效、可靠的C++程序。此外,通过学习如何正确使用断言和分析时间复杂度,可以进一步提高程序的质量和性能。

Global site tag (gtag.js) - Google Analytics