写点什么

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

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

关注

评论

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

Linux之whereis命令

入门小站

Linux

学习方法

Tiger

28天写作

DataPipeline正式加入中国信通院数据库应用创新实验室!

DataPipeline数见科技

数据库 中间件 数据融合 数据管理 信通院

[架构实战营]模块4作业

Vincent

「架构实战营」

什么是 DID 身份,为什么需要 DID

Rayjun

区块链 did

🍃【Spring专题】「开发实战」Spring Security与JWT实现权限管控以及登录认证指南

码界西柚

spring spring security springsecurity 12月日更

模块八-设计消息队列存储消息数据的 MySQL 表格

deng

架构实战营

一文搞懂ReentrantLock的公平锁和非公平锁

Ayue、

ReentrantLock 公平锁 非公平锁

区块链在电动车产业中的角色

CECBC

Trino应用Iceberg Catalog写入数据原理分析

漫长的白日梦

数据湖 iceberg trino

全链路压测系列(三):技术改造和测试验证

老张

性能测试 全链路压测

24《重学JAVA》--多线程(一)

杨鹏Geek

Java25周年 28天写作 12月日更

华为技术专家深度解析Redis惰性删除原理

JavaEdge

12月日更

如何设置Fiddler来拦截Java代码发送的HTTP请求,进行各种问题排查

汪子熙

HTTP fiddler 28天写作 网络抓包 12月日更

在线JSON转Go Struct工具

入门小站

工具

架构训练营 week3 学习总结

红莲疾风

「架构实战营」

元宇宙100讲-0x009

hackstoic

元宇宙

Linux 命令 man 全知全会

hedzr

Linux less man man-pages

全链路压测系列(二):方案调研和项目立项

老张

性能测试 全链路压测

Gin-Vue-Admin 使用 gin+vue 进行极速开发的全栈开发基础平台【gva 第二节】

坚果

28天写作 Vue 3 Go 语言 12月日更

性能基础之理解Linux系统平均负载和CPU使用率

zuozewei

Linux 性能测试 计算机原理 12月日更

架构训练营 -- 模块四

LJK

#架构训练营

MySQL的死锁系列- 锁的类型以及加锁原理

程序员历小冰

MySQL 死锁 28天写作 12月日更

所谓默契,最不靠谱(25/28)

赵新龙

28天写作

PassJava 开源 (七) :Spring Cloud 整合 OpenFeign 实现声明式远程调用

悟空聊架构

28天写作 passjava 悟空聊架构 12月日更 openfeign

全链路压测系列(一):认识全链路压测

老张

性能测试 全链路压测

元宇宙100讲-0x008

hackstoic

元宇宙

再见 Typora!这个开源的 Markdown 编辑器爱了!

JackTian

程序员 写作 Typora 编辑器 markdown编辑器

微服务划分的思考

无心水

微服务 微服务架构 SpringCloud 注册中心 微服务划分

微服务架构 | 怎样解决超大附件分片上传?

李尚智

微服务架构 springboot 断点续传 SpringCloud 大文件断点续传

给弟弟的信第24封|盲目的努力没有用

大菠萝

28天写作

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