返回顶部
首页 > 资讯 > 精选 >D语言基础知识有哪些
  • 921
分享到

D语言基础知识有哪些

2023-06-16 18:06:29 921人浏览 安东尼
摘要

本篇文章给大家分享的是有关 D语言基础知识有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。引言D 语言是一门语法相当优雅的编译型语言,自 1999 年发布至今已发展了 20

本篇文章给大家分享的是有关 D语言基础知识有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

引言

D 语言是一门语法相当优雅的编译型语言,自 1999 年发布至今已发展了 20 年,它既拥有 Java 那样强大的表现力,又具有 c++ 相当的性能,本来是一门未来相当明朗的语言,但是当年因为 2.x 版本破坏性升级导致社区大量核心开发者将其放弃。

2010 年,伴随着 Andrei Alexandrescu 新书《The D Programming Language》的出版,D 语言又变得活跃起来,D 语言 2.0 的特性变得稳定,运行库与标准库的分离,解决了 D 语言 1.0 时期标准库之争的问题。

2011 ,D 语言的开发迁移到了 GitHub,在有了更好的代码管理和 bug 跟踪方式之后,参与到 D 语言编译器、运行库和标准库开发的人员也有了明显的增加。次年,D 语言 1.0 版本停止更新,开发者全力投入到 2.0 的开发。

2014 ,D 语言编译器前端代码的许可协议变更为更加宽松的 Boost 许可。在 2017 年,编译器所有代码最终都使用了 Boost 许可。在解决编译器源码许可问题之后,D 语言在开源社区中变得更加开放,并顺利合并进入了 GCC 9.x。

直到 2015 ,D 语言社区进一步恢复活力,基于包管理的构建方式开始成熟,大量的开发库开始涌现并应用到实际项目中。目前,已注册项目库达 1 千 6 百多个。

D语言基础知识有哪些

重新燃起希望的 D 语言在版本发布的规划上非常稳健,直至今日来说每两个月都可以保证一个大版本的发布。平均每个版本的开发者数量都有超过 50 个核心贡献者,最近的 2.087.0 更是达到了 62 位核心开发者的贡献。

编程语言的战争异常惨烈,本文希望通过介绍,让开发者重新来了解一下 D 语言,认识到 D 语言其实是一门能力强大的语言,并且它可以用于不同的场景,生态也在不断发展完善中。

第一部分:D 语言主要特点

D 语言是在吸取 C++ 遇到的各种教训基础上设计出来的,拥有与之类似的编程风格,许多概念与 C 或 C++ 都是相通的。不过,D 语言也有自己的一些特点,如支持闭包、匿名函数、编译时函数执行、支持垃圾回收等。具体来讲,D 语言拥有以下几个主要特点:

面向对象编程

D 语言允许定义类和接口。像 Java 一样,D 语言的继承模型是单类继承和多接口继承。所有的类都有一个根类 Object。D 语言的类和接口都是引用类型,而结构是值类型,且不允许继承。

函数式编程

D 语言像 C++ 一样,允许在类或结构外单独定义函数。它还提供了各种不可变数据类型、匿名函数和闭包、UFCS(统一函数调用语法)等特性来更好地支持函数式编程。

泛型编程

D 语言允许定义模型类型,也支持直接定义模板类和模板函数。模板允许嵌套定义,模板方法甚至允许递归调用。通过模板约束可以实现模板类型重载。模板参数支持不定个数类型。除此以外,模板参数类型还支持自动推导。

元编程

D 语言里的纯函数不会对全局变量产生任何影响,因此可以在编译时直接调用。借助 static if、static foreach、mixin 等语句,可以编写在编译时执行的代码,动态生成代码,满足快速定制应用功能的需求。

安全内存

默认支持基于垃圾回收的内存管理方式,从而让编程变得更简单,内存变得安全,程序变得更稳定。除此之外,也可以根据需要对关键的内存资源选择手动管理方式。借助 scope 语句,可以很好地控制内存资源申请和释放点。D 语言内部有一套核心的类型定义和实现,它是 D 语言的一个子集,也被称作 SafeD,用于保护内存的安全。

模块化编程

D 语言的每一个源文件都被定义为一个模块(module),源文件之间的依赖即体现了模块之间的依赖。同一目录下的多个模块可以组成一个包(package)。基于模块的代码让项目的逻辑变得更加清晰,也为项目的快速构建和编译提供了支持。

其他语言交互

D语言的ABI与C语言完全兼容,因此它也具有很好的与其他语言交互的能力,如与 C、C++ 和 Objective-C 等语言进行交互编程。D 语言甚至支持直接嵌入汇编语言,部分性能关键的代码可以直接使用汇编语言来实现。D 语言的 BetterC 特性是 D 语言的一个子集,能完全去除 GC 依赖,并以更好 C 语言的方式来代替 C 语言编程,它能胜任 C 语言做的绝大部分工作。在 windows 平台下,可以使用 COM 接口实现与其他语言的交互。

基于包的应用构建

这个不属于 D 语言本身特性,但是在 D 语言的开发生态里,这是一种很非常重要和便捷的 D 语言应用构建方式。dub 是 D 语言的应用构建工具,它可以很好地管理应用包之间的依赖关系,快速地构建出 D 语言应用。

除了上述特点,D 语言还提供了许多其他特性,如内建关联数组、单元测试、内联汇编、内嵌文档等,这些特性让 D 语言成为了一门功能强大的语言。

第二部分:与其它语言的简要对比

D 语言与 Java 相比

众所周知 Java 对工业化架构的设计非常棒,远超越 C++、golang 等语言,能与 Java 相提并论的只有 C#,在研究中我们发现 D 同样具备工业化的特性,而且不需要那么庞杂的虚拟机开发环境,D 的性能比起 Java 来说好的非常明显,而且整合 C、C++ 库的时候也非常方便,而 Java 想整合 C、C++ 就需要非常麻烦的 jni 对去接。毕竟 D 语言是名副其实的系统级开发语言,D 语言在面向对象方面并不像 Java 那样强制每个文件都是对象,而更像 C++ 那样拥有一个 main() 函数作为程序入口。

示例代码

import std.stdio;  void main()  {      writeln("Hello world!");  }

D 语言与 C++ 相比

说到性能,C++ 一直占据服务端高性能的首选,但是 D 的性能与 C++ 相比几乎打成平手,但效率可以 3~5 倍于 C++。当然 D 与 C 语言各种库整合同样方便,因为 D 语言是二进制与 C、C++ 兼容的,语法更像是 C++ 的超级升级版,D 在对 HashMap 操作时性能比 C++ 还要高,而且只要是掌握 C++ 的人可以没有任何门槛地使用 D 语言。

示例代码

import std.stdio;  void main()  {      foreach(i; 1..10)      {          writeln(i);      }  }

D 语言与 PHP 相比

PHP 是服务端脚本语言占有率最高的语言,php 的优势就是简单,无需引入什么包就可以使用语言本身的所有函数,但是也就是这样 PHP 的性能一直没有明显改进,虽然说 PHP 7.x 的出现让 PHP 的性能提升了 2.x 倍,但是那只是和非常慢的 PHP 5.x 相比而已,与编译型语言相比还是相差太多。PHP 有非常明显的短板,比如不支持多线程、长连接不友好、弱类型、跨语言 rpc 协议支持不稳定、部署需要 PHP 运行环境等,而 D 语言具备 C++ 可实现的所有功能,包括内嵌汇编,开发效率上来讲与 PHP 相比只是多了个强类型的概念,而 D 语言标准库也提供 to 方法让你非常方便地进行各种类型的转换。

示例代码

import std.stdio : writeln;  import std.conv : to;   void main()  {      int i = 10000;      string s = "Is string ";      s ~= i.to!string;    // PHP 使用点连接两个字符串,而 D 语言使用波浪线连接两个字符串      writeln(s);    // 输出结果 Is string 10000  }

D 语言可替代 C 语言

前阵子有一篇文章比较火,有一位 i3 核心开发者在文章中说到,D 才是真正替代 C 的首选语言,他认为 D 二进制与 C、C++ 完全兼容所以可直接使用这两个语言的二进制库,D 甚至可以用 dpp 项目直接 #include 语法引入 *.h 文件,作者同时也说到为什么 C 的替代者不是 Rust 和 Golang,有兴趣的同学可以自行了解原文《D as a C Replacement》。

D语言基础知识有哪些

gcc 整合 D 语言编译支持

这是一个非常大的进步,在近期发布的 gcc 9.1 大版本中整合了 DLang 全新的编译器前端也就是 gdc,现在整个社区有更多开发者对 D 项目进行推进,也有更多人在使用 D 完成之前 C/C++ 的工作。

第三部分:D 语言主要应用

作为一门支持 GC 的系统语言,D 语言已被许多公司采纳和应用,其中不乏像 Facebook、eBay 这样的大公司。D 的应用涉及了游戏、WEB 应用、GUI 应用、操作系统、编译器、嵌入式、科学计算与教育等多个领域。

游戏开发

Remedy 公司已成功地用 D 语言将一款 3A 游戏 Quantum Break 移植到了 XBox One 和 Windows 10 平台。另外,有纯 D 语言实现的 3D 游戏引擎 Dash 和 D 语言游戏开发工具库 gfm。

Web 框架

编程语言在 Web 服务端框架非常重要,有好用的框架可以让整个语言充满活力,就像 Java 有一个 spring Framework 框架,PHP 有一个 laravel 框架,python 拥有一个 Django,而 Ruby 拥有 Rails,所以既然是构建服务端应用 DLang 也同样拥有一个代表性的框架 Hunt Framework。

数据库操作

数据库操作是大部分应用项目都不可或缺的一个基本操作,操作方式主要有两种:编写 sql 脚本和 ORM

直接操作数据库的 D 语言开库有 ddbc / (Http://code.dlang.org/packages/ddbc)hunt-database 等,支持的数据库包括 MySQLpostgresql 和 SQLite 等。其中,新版本的 hunt-database 的底层驱动库已从绑定 C 语言的方式升级为了直接使用 D 语言实现,减少了对第三方库的依赖。

采用 ORM 方式的 D 语言开库有 hibernated / hunt-entity 等。其中,hunt-entity 借鉴了 Java JPA 和 spring-data-jpa 的概念,工业化程度高,操作合理并且易于维护。

微服务相关

hunt-service 是基于 grpc 协议的分布式 RPC 服务器与客户端库,很容易使用,也非常方便与 hunt-framework 整合构建微服务架构。

neton 是基于 raft 算法的分布式服务发现注册应用服务。

GUI 应用

其实 D 语言的推出比较早,所以 GTK 的整合非常完整,众所周知 gtk 官方的 vala 语言也大量借鉴了 D 的语言设计,所以 gtkd 能够非常方便的构建客户端应用,官方也有开发者推出了新的教程站点非常棒:gtkDcoding | Simple examples of how to use GtkD to build GUI applications(https://gtkdcoding.com/)

此外,纯 D 语言实现的跨平台 GUI 库 dlangui 也有不俗的表现,有一个 DLangIDE 就是基于它实现的。更多 GUI 库可以参考这里。

系统应用

在编译器方面,DMD 前端已实现自举。在操作系统方面,有 PowerNex(https://github.com/xomboverlord/xomb/tree/unborn) 与 Trinix 等系统尝试。编译器 LDC 甚至允许在更多的系统平台下进行应用开发,如支持基于 ARM 和 MIPS 架构的嵌入式系统、Android 系统等。

科学计算

现在使用 D 语言可以方便的进行科学计算,mir 是其中的佼佼者,它对多维数组计算提供了优秀的支持,性能超越了许多数值计算库,达到商业水平。

以上就是 D语言基础知识有哪些,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: D语言基础知识有哪些

本文链接: https://lsjlt.com/news/284735.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • D语言基础知识有哪些
    本篇文章给大家分享的是有关 D语言基础知识有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。引言D 语言是一门语法相当优雅的编译型语言,自 1999 年发布至今已发展了 20...
    99+
    2023-06-16
  • JavaScript语言基础知识有哪些
    这篇文章主要讲解了“JavaScript语言基础知识有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript语言基础知识有哪些”吧!了解Ja...
    99+
    2024-04-02
  • Google Go语言基础知识有哪些
    这篇文章主要讲解了“Google Go语言基础知识有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Google Go语言基础知识有哪些”吧!先来个hel...
    99+
    2024-04-02
  • Go语言基础知识点有哪些
    这篇文章主要介绍Go语言基础知识点有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Go 语言教程Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由Robert Gries...
    99+
    2023-06-20
  • Python语言常用基础知识点有哪些
    这篇文章主要讲解了“Python语言常用基础知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python语言常用基础知识点有哪些”吧!python编程中常用的12种基础知识总结:正...
    99+
    2023-06-15
  • JAVA编程语言的基础知识有哪些
    这篇文章主要介绍“JAVA编程语言的基础知识有哪些”,在日常操作中,相信很多人在JAVA编程语言的基础知识有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JAVA编程语言的基础知识有哪些”的疑惑有所帮助!...
    99+
    2023-06-17
  • R语言中Rcpp基础知识点有哪些
    这篇文章将为大家详细讲解有关R语言中Rcpp基础知识点有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 相关配置和说明由于Dirk的书Seamless R and C++ Integration ...
    99+
    2023-06-25
  • PHP基础语法知识有哪些
    本篇内容主要讲解“PHP基础语法知识有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP基础语法知识有哪些”吧!转义到PHPPHP解析引擎需要一种方法来区分PHP代码和页面中的其他元素。这...
    99+
    2023-06-04
  • JAVA编程语言的基础知识点有哪些
    本篇内容介绍了“JAVA编程语言的基础知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、面向对象的特征有哪些方面抽象:抽象就是忽...
    99+
    2023-06-17
  • c语言中指针零基础知识点有哪些
    小编给大家分享一下c语言中指针零基础知识点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.指针是什么(可能有点难理解)指针的是啥?指针实际上就是地址,地址...
    99+
    2023-06-29
  • Verilog语言数据类型基础知识点有哪些
    这篇文章主要介绍“Verilog语言数据类型基础知识点有哪些”,在日常操作中,相信很多人在Verilog语言数据类型基础知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Verilog语言数据类型基础...
    99+
    2023-07-06
  • mysql基础知识有哪些
    本篇内容介绍了“mysql基础知识有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一章 mysql的...
    99+
    2024-04-02
  • oracle基础知识有哪些
    这篇文章主要介绍“oracle基础知识有哪些”,在日常操作中,相信很多人在oracle基础知识有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”oracle基础知识有哪些”...
    99+
    2024-04-02
  • mysql有哪些基础知识
    这篇文章将为大家详细讲解有关mysql有哪些基础知识,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一:连接mysql关于mysql的下载和安装我在这里就不说了,第一步我们...
    99+
    2024-04-02
  • HTML基础知识有哪些
    今天小编给大家分享一下HTML基础知识有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
    99+
    2024-04-02
  • HTTP 基础知识有哪些
    本篇文章给大家分享的是有关HTTP 基础知识有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。HTTP 是什么HTTP是一种超文本传输协议,...
    99+
    2024-04-02
  • 有哪些CSS基础知识
    这篇文章主要介绍“有哪些CSS基础知识”,在日常操作中,相信很多人在有哪些CSS基础知识问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”有哪些CSS基础知识”的疑惑有所帮助!接...
    99+
    2024-04-02
  • canvas基础知识有哪些
    本文小编为大家详细介绍“canvas基础知识有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“canvas基础知识有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 现把...
    99+
    2024-04-02
  • React基础知识有哪些
    这篇文章主要讲解了“React基础知识有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“React基础知识有哪些”吧!一切都是组件React 应用由组件组...
    99+
    2024-04-02
  • CSS基础知识有哪些
    这篇文章主要讲解了“CSS基础知识有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS基础知识有哪些”吧!一、为什么使用div+css1、实现表现和样...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作