把握行业变革关键节点,12 月 19 日 - 20 日,AICon北京站即将重磅启幕! 了解详情
写点什么

D 语言和 Visual D 简介

  • 2011-05-26
  • 本文字数:1054 字

    阅读完需:约 3 分钟

D 语言是一种由 Digital Mars 公司创造的系统编程语言,它专注于“把 C 和 C++ 的能力和高性能与先进的语言——像 Ruby 和 Python——的高生产力结合起来。” 尽管它仍然是一种静态类型的语言,可以直接编译成本地代码,而且语法看起来与 Java 或者 C#非常类似,但是它做出了很多有意义的改进。

这些改进包括明确地支持惰性参数。当我们使用关键字“lazy”标记一个形参时,就意味着相关的实参会被赋值 0 次或者多次。这与 Haskell 之类的语言不同,它会延迟对实参赋值 0 次或者 1 次,但不会再多。

为了保证程序的正确性,特别是在并行以及多线程的领域中的正确性,D 语言支持把“immutable”和“const”作为一等概念。和 C++ 不同的是,在 D 语言中的 immutable 和 const 修饰符是可传递的。如果我们用 immutable 标记了一个变量,那么不但不能对其进行变更,也不能变更通过它所能够访问的任何变量。const 关键字的工作方式和 immutable 类似,不过特定的对象还是可以通过 non-const 的引用来修改变量的值。

D 语言还包括了很多来自于其它语言的流行特性。例如,它拥有 for-each 循环、字符串转换、数组分片、闭包、try-catch-finally 块,以及值类型和引用类型的分离等等。同时,它还考虑到了直接对内存的访问,80 位的浮点型数字、结构成员排列控制以及内联程序集。

通常,因为安全性,把源代码转换为本地代码会付出高昂的代价。C 和 C++ 是最容易受到类似于缓冲区溢出之类的编码错误影响的,其它大多数本地语言也都一样。D 语言通过既在编译时又在运行时执行数组边界检查来避免这些问题。同样,非零长度的数组的内容会自动初始化为它们的默认值。

关于内存管理,D 语言和.NET 非常类似。默认情况下,引用类型会存储在垃圾回收堆中,而值类型或者会存储在堆栈中,或者存储在其它对象中。D 语言也可是分配堆栈来存储引用类型,但这不可避免要使用指向它们的指针。和.NET 一样,你还可以让指针指向非托管的内存。让这些彼此分离非常重要,因为很多你能够在非托管的指针上能够执行的操作,在托管指针上执行是不安全的。

对于能够使用非快捷版 Visual Studio 的开发者来说,有一个项目叫做 Visual D,它提供了 Visual Studio 插件。Lloyd 在一篇文章中介绍了如何在你的环境中安装Visual D

当前D 语言有四种实现。 Digital Mars 公司为 Windows、Linux、OS X 和 FreeBSD 提供了免费的编译器。还有一种 Gnu D 编译器,它是构建在 gcc 之上的。而 LLVM 也发布了他们的 D 语言编译器的 beta 版本,最后还有针对.NET 的部分实现

查看英文原文: An Introduction to D and Visual D

2011-05-26 06:505594
用户头像

发布了 340 篇内容, 共 145.8 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

LinkedHashMap 源码分析-访问

zarmnosaj

5月月更

多个平台显示IP地址:如何看待互联网实名制

石头IT视角

上证数据可视化分析展示-数据分析学习笔记-2

清林情报分析师

数据分析 学习笔记 数据处理 证券 上市公司

AiTalk创始人梁宇淇:镜像连接虚拟与现实的纽带

阿里云弹性计算

vr XR 数字人

DNS解析过程

工程师日月

5月月更

中科曙光加入OpenCloudOS操作系统社区,携手共建应用生态体系

TencentOS

Java Core「5」自定义注解编程

Samson

学习笔记 5月月更 Java core

内网穿透的实现原理(附源码)

风斩断晚霞

Java Go 网络编程 Netty 内网穿透

LabVIEW实现Modbus通信

不脱发的程序猿

LabVIEW Modbus 串口通信 VISA 工业通信

OpenCloudOS 云原生演进之路

TencentOS

英特尔宣布加入OpenCloudOS操作系统社区

TencentOS

虎符Hoo重点布局合规 打造安全稳定交易环境

区块链前沿News

国际化 Hoo 合规

阿里云“大算力”支持嬴彻自动驾驶仿真提速 20 倍

阿里巴巴云原生

阿里云 容器 云原生 ACK 客户案例

寻找智能精灵:出海与创新时代的开发者之需

脑极体

JavaScript获取元素的宽高

空城机

JavaScript 5月月更

LabVIEW使用移位寄存器计算平均值

不脱发的程序猿

LabVIEW 移位寄存器计算平均值 移位寄存器

LabVIEW操作鼠标滚轮放大/缩小图像

不脱发的程序猿

图像处理 LabVIEW 鼠标滚轮来放大和缩小图片

勇往直前,做全能开发者,华为伙伴暨开发者大会2022精彩活动正式解锁!

华为云开发者联盟

云计算 量子计算

密码学系列之:使用openssl创建私有CA

程序那些事

密码学 程序那些事 5月月更

经典递归 - 青蛙跳台阶问题

芒果酱

递归 C语言 5月月更

基线监控:基于依赖关系的全链路智能监控报警

字节跳动数据平台

监控 SLA 基线检查

Go Web 编程入门:中间件

宇宙之一粟

中间件 Go web 5月月更

十二、云原生安全趋势

穿过生命散发芬芳

云原生安全 5月月更

flask框架关于静态文件及其模板生成

恒山其若陋兮

5月月更

搜狐全员遭诈骗,暴露哪些问题?

Authing

身份云 信息 统一身份认证 mfa

LabVIEW虚拟数字示波器

不脱发的程序猿

数据采集 LabVIEW 虚拟示波器 信号发生VI

Netty实战-实现内网穿透(一)

风斩断晚霞

Java Go Netty 内网穿透

中兴通讯宣布加入OpenCloudOS操作系统社区,为自主操作系统做出重要贡献

TencentOS

全国超市区域分布分析-数据分析学习笔记-1

清林情报分析师

数据分析 学习笔记 数据处理 数据可视化 知识图谱

【LeetCode】括号的分数Java题解

Albert

LeetCode 5月月更

D语言和Visual D简介_Java_Jonathan Allen_InfoQ精选文章