当前位置: 首页 > 科技观察

重新认识D编程语言——基础

时间:2023-03-21 10:26:14 科技观察

简介D语言是一种语法非常优雅的编译型语言。从1999年发布至今,已经发展了20年,不仅有Java强大的表现力,还有C++可观的性能,本来是一门前途无量的语言,却因为2.x版本的破坏性升级那一年,社区大量核心开发者放弃了它。2010年,随着AndreiAlexandrescu新书《The D Programming Language》的出版,D语言再次活跃起来。D语言2.0的特性趋于稳定,运行时库和标准库的分离解决了D语言1.0时期的标准库之争。问题。2011年将D语言的开发迁移到Github。随着更好的代码管理和错误跟踪方法,参与D语言编译器、运行时库和标准库开发的人数也显着增加。次年,D语言1.0版本停止更新,开发人员全力投入2.0的开发。2014年,D编译器前端代码的许可协议更改为更加宽松的Boost许可。2017年,编译器终于对所有代码使用了Boost许可证。在解决了编译器源码许可问题后,D语言在开源社区更加开放,并成功合并到GCC9.x中。直到2015年,D语言社区进一步复兴,基于包管理的构建方式开始走向成熟,大量的开发库开始涌现并应用到实际项目中。目前,已有1600多个注册项目。D语言的重燃希望在版本发布的规划上非常稳定。到目前为止,每两个月可以发布一个大版本。平均每个版本的开发者人数超过50个核心贡献者,最新的2.087.0已经达到62个核心开发者。编程语言之战异常激烈。本文希望通过介绍让开发者重新认识D语言,认识到D语言其实是一门强大的语言,可以在不同的场景中使用,生态也在不断发展完善。中间。第1部分:D语言的主要特点D语言是在吸收了C++中遇到的各种教训的基础上设计的,具有相似的编程风格,许多概念与C或C++相同。不过,D语言也有自己的一些特点,比如支持闭包、匿名函数、编译期函数执行、支持垃圾回收等。具体来说,D语言有以下主要特点:面向对象程序设计D语言允许定义类和接口。和Java一样,D语言的继承模型是单类继承和多接口继承。所有类都有一个根类对象。D语言中的类和接口是引用类型,而结构是值类型,不允许继承。函数式编程D与C++一样,允许独立于类或结构定义函数。它还提供了各种不可变数据类型、匿名函数和闭包、UFCS(统一函数调用语法)等特性,更好地支持函数式编程。泛型编程D语言允许定义模型类型,也支持直接定义模板类和模板函数。模板允许嵌套定义,模板方法甚至允许递归调用。通过模板约束可以实现模板类型重载。模板参数支持不定类型。另外,模板参数类型支持自动推导。元编程D语言中的纯函数对全局变量没有任何影响,因此可以在编译时直接调用。借助staticif、staticforeach、mixin等语句,可以编写编译时执行的代码,动态生成代码,满足快速定制应用功能的需要。安全内存默认支持基于垃圾回收的内存管理,让编程更简单,内存更安全,程序更稳定。此外,您还可以根据需要选择手动管理关键内存资源的方式。通过作用域语句,可以精细地控制内存资源的申请和释放点。D语言中有一套核心类型定义和实现。它是D语言的一个子集,也称为SafeD,用于保护内存的安全。模块化编程D语言中每个源文件都被定义为一个模块,源文件之间的依赖关系反映了模块之间的依赖关系。同一目录下的多个模块可以组成一个包。基于模块的代码使得项目的逻辑更加清晰,也为项目的快速构建和编译提供了支持。与其他语言的交互D语言的ABI完全兼容C语言,因此它也有很好的与其他语言交互的能力,比如与C、C++、等语言的交互编程目标-C。D语言甚至支持直接嵌入汇编语言,一些对性能要求很高的代码可以直接用汇编语言实现。D语言的BetterC特性是D语言的一个子集,可以完全去除GC依赖,用更好的C语言方式代替C语言编程。它可以完成大部分由C语言完成的工作。Windows平台下,可以使用COM接口实现与其他语言的交互。基于包的应用程序构建并不是D语言本身的特性,但在D语言的开发生态中,这是构建D语言应用程序的一种非常重要和便捷的方式。dub是D语言的应用构建工具,可以很好的管理应用包之间的依赖关系,快速构建D语言应用。除了上述特性外,D语言还提供了很多其他的特性,如内置关联数组、单元测试、内联汇编、内联文档等,使D语言成为一门强大的语言。第2部分:与其他语言的简要比较。D语言与Java的对比。众所周知,Java非常擅长设计工业架构,远超C++、Golang等语言。只有C#可以和Java相提并论。在研究中我们发现D也已经工业化了,不需要那么复杂的虚拟机开发环境。D的性能明显优于Java,集成C和C++库也很方便,而Java需要很麻烦的jnipair才能接。毕竟D语言是名副其实的系统级开发语言。在面向对象方面,D语言并没有像Java那样强制每个文件都是一个对象,而是像C++一样有一个main()函数作为程序入口。示例代码importstd.stdio;voidmain(){writeln("Helloworld!");}D语言与C++??的对比在性能方面,C++一直是服务器端高性能的首选,但是D语言的性能几乎与C++Tie相当,但效率可以是C++的3~5倍。当然,集成D和C语言的各种库也很方便,因为D语言二进制兼容C和C++,语法更像是C++的超级升级版。D在hashMap操作上的性能甚至高于C++,而且只要是掌握了C++的人都可以毫无门槛的使用D语言。示例代码importstd.stdio;voidmain(){foreach(i;1..10){writeln(i);}}与PHP相比,PHP是服务器端脚本语言中占有率最高的语言。PHP的优点是简单,不需要引入任何包就可以使用语言本身的所有功能,但是PHP的性能并没有明显的提升。PHP7.x的出现虽然让PHP的性能提升了2.x倍,但也只是和速度很慢的PHP5.x相比,离编译型语言还有很远的距离。PHP有非常明显的缺点,比如不支持多线程、长连接不友好、弱类型、跨语言RPC协议支持不稳定、部署需要PHP运行环境等等,而C++能实现的功能D语言都有,包括嵌入式汇编,在开发效率上,与PHP相比,只有强类型概念,D语言标准库还提供了to方法,让你可以很方便的进行各种类型的转换。示例代码importstd.stdio:writeln;importstd.conv:to;voidmain(){inti=10000;strings="Isstring";s~=i.to!string;//PHP用点连接两个字符串,D语言用波浪线连接两个字符串writeln(s);//outputresultIsstring10000}D语言可以替代C语言。是真正替代C的首选语言,他认为D二进制完全兼容C和C++,所以可以直接使用这两种语言的二进制库。D甚至可以使用dpp工程直接导入*.h文件,使用#include语法。作者也说了为什么C的替代不是Rust和Golang,有兴趣的同学可以自行了解原文《D as a C Replacement》。gcc集成了D语言编译支持。这是一个非常大的进步。在最近发布的gcc9.1版本中,集成了DLang新的编译器前端,即gdc。现在整个社区有更多的开发者在推动D项目,也有更多的人在用D做以前的C/C++工作。第三部分:D语言主要作为支持GC的系统语言。D语言已经被很多公司采用和应用,包括像Facebook和eBay这样的大公司。D的应用涉及游戏、Web应用、GUI应用、操作系统、编译器、嵌入式、科学计算和教育等众多领域。游戏开发商Remedy已经用D语言成功地将3A级游戏《量子破碎》移植到XBoxOne和Windows10平台。此外,还有纯D语言实现的3D游戏引擎Dash和D语言游戏开发工具库gfm。Web框架编程语言在Web服务器框架中非常重要。一个好用的框架可以让整个语言充满活力,就像Java有SpringFramework框架,PHP有laravel框架,Python有Django,Ruby有Rails,所以既然是构建服务端应用,DLang也有一个代表性的框架,HuntFramework。数据库操作数据库操作是大多数应用项目不可或缺的基础操作。主要有两种操作方式:编写SQL脚本和ORM。有ddbc/(http://code.dlang.org/packages/ddbc)hunt-database等直接操作数据库的D语言开放库,支持的数据库有MySQL、PostgreSQL、SQLite。其中新版hunt-database的底层驱动库由绑定C语言升级为直接使用D语言,减少了对第三方库的依赖。D语言中有采用ORM方式的hibernated/hunt-entity库。其中hunt-entity借鉴了JavaJPA和spring-data-jpa的概念,产业化程度高,运行合理,维护方便。微服务相关的hunt-service是一个基于gRPC协议的分布式RPC服务端和客户端库。使用简单,与hunt-framework集成构建微服务架构非常方便。neton是一个基于raft算法的分布式服务发现注册应用服务。事实上,D语言针对GUI应用推出的比较早,所以对GTK的集成是非常完整的。众所周知,gtk官方的vala语言也大量借鉴了D的语言设计,因此gtkd可以轻松构建客户端应用程序。官方开发者也推出了新的教程网站很好:gtkDcoding|如何使用GtkD构建GUI应用程序的简单示例(https://gtkdcoding.com/)另外,纯D语言实现的跨平台GUI库dlangui也有不错的性能,有一个DLangIDE是基于它。可以在此处找到更多GUI库。系统应用在编译器方面,DMD前端已经被引导。操作系统方面,有PowerNex(https://github.com/xombooverlord/xomb/tree/unborn)、Trinix等系统可以尝试。CompilerLDC甚至允许在更多的系统平台上进行应用开发,比如支持基于ARM和MIPS架构的嵌入式系统、Android系统等。科学计算现在很容易使用D语言进行科学计算,mir是其中的佼佼者。对多维数组计算提供了极好的支持,性能超越众多数值计算库,达到商用水平。结束语简单来说,D语言是一种在各个领域都具有优势的编程语言,其目前的生态也在不断发展。本文希望通过简单的介绍,让开发者重新认识D语言。如果你还不了解D语言,希望你在阅读本文后对它产生兴趣;如果你以前听说过D语言,那么在阅读本文后,希望你能重新认识它;如果您对Web开发感兴趣,请继续关注本系列下一篇Web应用文章。