【二】进一步了解D语言之学前必备
从上一篇文件初步认识了D语言的基本外观,接下来这篇文件带大家来进一步认识一下D语言,为以后的学习打好基础
一、D语言是编译型语言
这意味着使用D语言编写的程序的性能是有保障的
二、D语言支持哪些平台
D语言支持目前主流的平台,Windows、Linux、FreeBSD,OS X
三、D语言的编译器有哪些
DMD(官方编译器)
GDC(GCC 家族)
LDC(基于LLVM)
DMD 是官方编译器,是支持D语言版本最新的,其它两个编译器对新版本的支持紧随其后
关于如果选择编译器的一点建议
如果是Linux平台,建议选择GDC,但是尽量不要选择各发型版本软件仓库的版本,因为通常版本支持比较老,GDC在Linux下依赖比较少,DMD相对比较多,不过开发的话这些依赖几乎每个系统都能满足
其它平台尽量选择DMD,如果是学习这这几个编译器都玩玩也挺好
D语言的好用的IDE有哪些
支持D语言的IDE很多,我用过的有4个:
VisualD(Visual Studoi 的插件,注意,免费版不支持插件,需要会用专业版)
DDT(Eclipse 插件,支持DUB,目前也是我正在使用的,因为我是Mac系统,选择比较少,而且也挺好用的)
Code::Blocks(支持D语言)
KDevelop(KDE环境下主要的IDE,支持D语言,比较有特点,Linux下值得一用)
如果配置D语言环境
D语言环境几乎不需要配置,只要安装一个上面介绍的三个编译器之一即可,具体使用请参考每个编译器的使用说明
D语言能做什么
Win、Linux、Mac、FreeBSD下运行的程序都能做,系统程序和应用程序都可以,Mac下当然以Obj-C为主,D语言开发Mac程序需要调用C接口,也就是Obj-C的runtime,如果开发Windows窗口程序可以直接调用API,也可以使用一些开源的库,也可以用来开发Web应用,总之,D很全能,也很现代,开发效率不比脚本慢
四、D语言使用了GC,这样不会影响性能吗
几乎所有的开发者都认为GC是低效的,实际上这是对GC的一个误解,因为其它带GC的语言的实现多数是不可控的,D语言的GC是可控的,这就是说你可以选择何时回收内存,合适把内存还给操作系统,以及禁用GC的自动内存管理,然而GC很多时候是比手动内存管理要高效的,因为手动内存管理对malloc和free的使用通常为了不导致内存泄漏的问题,需要按照一些约定使用,而约定的方式可能导致频繁的malloc/free 的调用,这样的性能比起集中管理是要慢的,如果在某些应用中GC真的导致了性能问题D是允许你禁用GC的自动管理的,而且允许使用C标准库中的malloc/free 手动管理,如果你对手动内存管理有自信的话。所以不用担心D语言在内存管理方面的性能问题
五、D语言的特性非常丰富
D的设计借鉴了很多语言的特性,比如函数式语言,动态脚本语言,契约编程,对并发的支持,简单已用泛型编程等,从这些特性上看,D语言不是一个简单的语言,不是一个通过简单学习就能掌握的语言,但比C++的学习曲线要低的多,和Java,C#这类语言的学习成本差不多
六、D语言的源文件有何限制
D的源文件必须使用UTF-8、UTF-16、UTF-32进行编码,支持带BOM的文件,支持以#!开始的指令
D语言把源文件称为模块,而将包含D语言源文件的目录(相对路径,根为编译器的工作目录)称为包,通过import 导入其它模块
D语言除了借鉴其它语言比较好的设计外还有没有比较有特色的语言结构
D的接口(interface)支持 final方法
D的运算符重载支持静态方法,就是说运算符可以作用在类上,不只是作用于对象
D语言源文件支持 shell的#! 解释器指令,也就是说可以做为脚本使用(但是实现是先全部编译后再运行,不过行为上和脚本是一样的,用起来像是源文件直接执行了一样,在很大程度上可以取代脚本)
D的对象可以指定在栈上分配内存,这意味着可以在离开作用域时即自动回收内存,而不必等待GC
D的编译时计算能力非常强,这对程序运行速度的提升是巨大的,因为很多计算在运行时是不必要的,而且这还可以带来很多的灵活性,如可以在编译期间动态的生成代码,比如可以在编译时将带有特殊语法的HTML模板转换成D代码,而不必在运行时动态的去解释
D目前有哪些弱势
不够流行,没有商业利益驱动
无论哪个领域,D语言都不是必须的,但可能是更好的选择
D开源项目还不够多,目前github上大约有六千多个项目
D在国内发展受限,中文资料少,且较老,有些资源需要翻墙
D语言很复杂(当然比C++还是要简单的),几乎包罗万象,不是一个在短时间内就能掌握的语言,学习成本相对较高,这点也是不利于普及的因素之一
学习D语言的理由
D足够强大,大多数情况下,有D就够了
D在语法上并不标新立异,非常的C like
本文出自 “李云兴的博客” 博客,请务必保留此出处http://quetzal.blog.51cto.com/3313934/1633423
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。