2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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:505557
用户头像

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

关注

评论

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

从0开始创建小程序

小恺

7月月更

牛客java选择题每日打卡Day8

京与旧铺

7月月更

抖音或将推出独立种草社区平台:会不会成为第二个小红书

石头IT视角

架构实战营模块 6 作业

Roy

架构实战营

张平安:加快云上数字创新,共建产业智慧生态

华为云开发者联盟

云计算 后端 SaaS 华为云

SchedulX V1.4.0及SaaS版发布,免费体验降本增效高级功能!

星汉未来

DevOps 运维 k8s IT FinOps

企业中台建设新路径——低代码平台

力软低代码开发平台

从解析HTML开始,破解页面渲染时间长难题

华为云开发者联盟

html 前端 web开发 网页

企业数字化转型,低代码是“趋势”还是“陷阱”?

云智慧AIOps社区

大前端 低代码 云开发

java零基础入门-Scanner类

喵手

Java’ 7月月更

Web开发小妙招:巧用ThreadLocal规避层层传值

华为云开发者联盟

Java 前端 web开发

1500万员工轻松管理,云原生数据库GaussDB让HR办公更高效

华为云开发者联盟

数据库 后端

HAVE FUN | “飞船计划”活动最新进展

SOFAStack

微服务架构 开源软件 新手引导

Flutter3.0了,小程序不止于移动应用跨端运行

Speedoooo

flutter 小程序 移动开发 小程序容器 跨端运行

小程序能运行在自有App中,且实现直播和连麦?

Speedoooo

小程序 直播 移动开发 小程序容器 连麦

当 Knative 遇见 WebAssembly

阿里巴巴中间件

阿里云 容器 云原生 Knative WebAssenbly

解密函数计算异步任务能力之「任务的状态及生命周期管理」

阿里巴巴中间件

阿里云 中间件 异步 函数计算

阿里云易立:云原生如何破解企业降本提效难题?

阿里巴巴中间件

阿里云 架构 云原生

“去虚向实”大潮下,百度智能云向实而生

科技新知

【写给初发论文的人】撰写综述性科技论文常见问题

左手の明天

论文阅读 论文 论文写作 研究论文 论文撰写

组织实战攻防演练的5个阶段

穿过生命散发芬芳

攻防演练 7月月更

offer如何选择该考虑哪些因素

KEY.L

7月月更

云原生混部最后一道防线:节点水位线设计

阿里巴巴中间件

阿里云 云原生 中间件 混部

阿里云中间件开源往事

阿里巴巴中间件

阿里云 开源 中间件

leetcode 53. Maximum Subarray 最大子数组和(中等)

okokabcd

LeetCode 动态规划 数据结构与算法

ServiceMesh主要解决的三大痛点

阿泽🧸

Service Mesh 7月月更

华为小米互“抄作业”

科技新知

枚举通用接口&枚举使用规范

靠谱的程序员

枚举 企业应用 企业级应用

Linux 下的传统 IPC 通信原理

北洋

Andriod 7月月更

【刷题记录】2. 两数相加

WangNing

7月月更

用头像模仿天狗食月

急需上岸的小谢

7月月更

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