【一】通过四个版本的 Hello Word 初识D语言

  对于D语言,相信很多朋友还没听说过,因为它还不够流行,跟出自名门的一些语言比起来也没有名气,不过这并不影响我对它的偏爱,我就是这样的一种人,我喜欢的女孩子一定是知己型,而不会因为她外表,出身,学历,工作等产生偏见,如果您和我一样相信您也会喜欢上D语言,作为一个工作上目前几乎用不到的语言还是很值得学习,就像是跟你结婚的人未必是你最喜欢的人(做人留一线,见后好 xx 嘛,\(^o^)/ )

好了,进入正题,本文将使用四个版本的Hello Word程序向还不了解D语言,有兴趣学习新语言的朋友们展示D语言的基本外观和基本的系统编程能力,以做抛砖引玉

版本一:使用D标准库——phobos

import std.stdio;

void main()
{
    writeln("Hello ", "World");
}

版本二:使用C标准库

extern(C) int puts(const char *);

void main()
{
    puts("Hello World\n".ptr);
}

版本三:使用系统调用

extern(C) int write(int fildes, const void *buf, size_t nbyte);

void main()
{
    write(1, "hello world\n".ptr, 12);
}

版本四:被C调用

D 代码(hello.d)

import std.stdio;

extern(C) void hello()
{
    writeln("Hello World");
}

C代码(hello.c)

void hello();

int main()
{
    rt_init(); // 初始化D runtime以支持D中的高级特性,如果没有用到可以省略
    hello();
    // ...
    rt_term(); // 释放 D runtime 资源,需与rt_init 配对
}

编译方法:

$ dmd -c hello.d

$ gcc -o hello hello.o hello.c -lphobos2

$ ./hello

Hello World

D与C是二进制兼容的,但并不兼容源码,所以编译时要使用二进制文件,另外不要忘记链接 libphobos2 这个库,如果你懂C那不需要我啰嗦原因了

这四个小程序初步展示了D语言的外观,以及每一个系统编程语言必需要做到的与C的交互性,在这点上C++可以无缝的实现与C的互调,D相比C++多了两个函数调用,在实现项目中,多了两个函数调用的编码成本几乎可以忽略,相比Go的方式和Rust的FFI要舒服的多,看上去也很自

有的朋友可以注意到了,D代码跟C++很像,没错,它非常的C like,但这只是冰山一角,还有很多高级特性这里没有体现出来,在后续的文章中会详细介绍

时间: 2024-10-18 01:11:08

【一】通过四个版本的 Hello Word 初识D语言的相关文章

通过Hello Word 初识D语言

操作系统:Linux 编译器:gdc 在本文中,将使用三种方法实现Hello Word,分别使用D标准库,C标准库,和系统调用,以展示D语言的基本外观和系统编程能力,仅做抛砖引玉,至于语言方面的知识在后面的文章中会详细介绍 使用D标准库 writeln 函数版本 import std.stdio; void main() {     writeln("Hello ", "World!"); } 使用C标准库 puts 函数 extern(C) int puts(co

Word中的语言选项问题

事情的一切起因,都是由于我的电脑操作系统是英文的,如果你的操作系统是windows 中文版,请自觉忽略. 前几天,在改论文,发现论文要求标题是黑体三号,但是我找了半天 始终发现字号一栏只有阿拉伯数字,没有中文的字号 还有一个问题,段落首行用空格缩进的时候,每次缩进半个字符的距离,让我很郁闷 俗话说,知之为知之,不知百度知,查了下资料,发现这都是因为word里面的语言选项导致的,解决方法如下:选择文件.选项.语言.中文,设为默认,选择是 问题解决,OK

Notepad++最新版本介绍!支持全部编辑语言(Java、HTML、Python等)

Notepad++最新版本介绍!支持全部编辑语言(Java.HTML.Python等) Notepad++介绍 Notepad++是经常用的一个编辑软件,对于我这样的技术白菜来说,有这么个神器真是方便多了,Notepad++界面简洁明了,而且可以定制界面,又支持多国语言,是站长们的得力助手.免费.开源.绿色,对中文支持的很好,并有完整的中文化接口及支援多国语言撰写的功能(UTF8 技术).Notepad++内置支持多达27种语法高亮度显示(包括各种常见的源代码.脚本,能够很好地支持 .nfo 文

Leetcode:LRUCache四个版本实现

题目 Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set. get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.s

UNIX网络编程卷1 回射服务器程序 TCP服务器程序设计范式 四个版本

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 这是一个简单的回射服务器程序.它将客户发送的数据读入缓冲区并回射其中内容 下面我会介绍同一个使用 TCP 协议的回射服务器程序的几个不同版本,分别是 fork 版本.select 版本.poll 版本.多线程版本 fork 版本:为每一个客户连接派生(fork) 一个子进程用来处理客户请求 /** * TCP/IPv4 协议相关 * **/ #include "unp.h" in

git学习(四)----版本跳转

git log .git reflog .git reset Git版本跳转: 想实现版本跳转,需要先了解Git的版本的标记,也就是通过这个唯一的标记能定位一个版本,也就是commit id. 这个commit id是个挺长的字符串,因为它是通过SHA-1计算出来.(这个字符串就跟你硬盘里的某些磁力链接挺像的,嘿嘿嘿!),因为git是分布式的,所以每个人电脑上都有完整代码,如果你更新了别人文件到本机上了,他提交的commit id是简单的自增数字(1,2,3....),就有可能会和你本机上的co

纯JAVA环境获取APK信息(包名,版本,版本号,大小,权限...),纯JAVA语言编写PC端获取APK信息

纯JAVA环境获取APK信息:包名,版本,版本号,大小,权限... 纯Java环境获取APK信息需要两个包:AXMLPrinter2.jar 跟jdom.jar,用于反编译XML和解析XML的 项目目录 这个类是获取APK信息的 public class ApkUtil { private static final Namespace NS = Namespace.getNamespace("http://schemas.android.com/apk/res/android"); @

C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 基于数据库资源的多语言实现

以前的开发平台里,是用xml语言包实现了多语言功能,现在新的平台里进行了调整,把多语言包资源放在数据库表里实现了. 我们系统预留了多语言的配置全局变量.可以通过配置这个参数达到切换多语言的目的 我们在选项管理里增加一个多语言选择的选项目,然后有哪些语言资源就加上去 下面的表是多语言的数据库设计表结构 下面图是多语言的数据库里的资源设置情况 这个是多语言的设置管理界面参考 下面是多语言的管理窗体位置 多语言例子程序参考: /// <summary> /// 获取多语言 /// </summ

初识C语言 (四)

分支结构 if语句 C语言中的分支结构语句中的if条件语句,简单if语句的基本结构如下: 其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句. 其过程可表示为下图 实例: if(results == 100) //results为所考成绩 { printf("%s\n", "买玩具"); } 注释:if()后面没有分号,直接写() if-else语句 简单的if-else语句的基本结构如下: 其语义是:如果表达式的值为真,则执行代码块1,否则执行代码块