《玩转D语言系列》一、通过四个版本的 Hello Word 初识D语言
对于D语言,相信很多朋友还没听说过,因为它还不够流行,跟出自名门的一些语言比起来也没有名气,不过这并不影响我对它的偏爱,我就是这样的一种人,我喜欢的女孩子一定是知己型,而不会因为她外表,出身,学历,工作等产生偏见,如果您和我一样相信您也会喜欢上D语言,作为一个工作上目前几乎用不到的语言还是很值得学习,就像是跟你结婚的人未必是你最喜欢的人(做人留一线,见后好 xx 嘛,\(^o^)/ )
好了,进入正题,本文将使用四个版本的Hello Word程序向还不了解D语言,有兴趣学习新语言的朋友们展示D语言的基本外观和基本的系统编程能力,以做抛砖引玉
版本一:使用D标准库——phobos
import std.stdio; void main()
{
writeln("Hello World");
}
版本二:使用C标准库
import core.stdc.stdio; void main()
{
puts("hello world");
}
版本三:使用系统调用
import core.sys.posix.unistd; void main()
{
write(STDOUT_FILENO, "hello world\n".ptr, );
}
版本四:被C调用
D 代码(hello.d)
import std.stdio; extern(C) void hello()
{
writeln("Hello World");
}
C代码(hello.c)
void hello();
void rt_init();
void rt_term(); int main()
{
rt_init(); // 初始化D runtime以支持D中的高级特性,如果没有用到可以省略
hello();
// ...
rt_term(); // 释放 D runtime 资源,需与rt_init 配对
return 0;
}
此被C调用程序的编译方法:
$ 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,但这只是冰山一角,还有很多高级特性这里没有体现出来,在后续的文章中会详细介绍
《玩转D语言系列》一、通过四个版本的 Hello Word 初识D语言的更多相关文章
- 《玩转D语言系列》三、轻松大跃进,把它当C语言先用起来
前面说过,本系列文章的前提是您懂C语言,懂面向对象中的一些概念,如果没有任何变成基础,从零开始学习D语言将是一个漫长的过程,因为很多概念都要重新诠释,让一个没有基础的人经过漫长的学习过程,然后还找不到 ...
- 玩转大数据系列之Apache Pig高级技能之函数编程(六)
原创不易,转载请务必注明,原创地址,谢谢配合! http://qindongliang.iteye.com/ Pig系列的学习文档,希望对大家有用,感谢关注散仙! Apache Pig的前世今生 Ap ...
- 玩转Windows服务系列——使用Boost.Application快速构建Windows服务
玩转Windows服务系列——创建Windows服务一文中,介绍了如何快速使用VS构建一个Windows服务.Debug.Release版本的注册和卸载,及其原理和服务运行.停止流程浅析分别介绍了Wi ...
- 玩转Windows服务系列——Debug、Release版本的注册和卸载,及其原理
Windows服务Debug版本 注册 Services.exe -regserver 卸载 Services.exe -unregserver Windows服务Release版本 注册 Servi ...
- 玩转Windows服务系列——创建Windows服务
创建Windows服务的项目 新建项目->C++语言->ATL->ATL项目->服务(EXE) 这样就创建了一个Windows服务项目. 生成的解决方案包含两个项目:Servi ...
- 完毕port(CompletionPort)具体解释 - 手把手教你玩转网络编程系列之三
手把手叫你玩转网络编程系列之三 完毕port(Completion Port)具体解释 ...
- 玩转Windows服务系列——创建Windows服务
原文:玩转Windows服务系列——创建Windows服务 创建Windows服务的项目 新建项目->C++语言->ATL->ATL项目->服务(EXE) 这样就创建了一个Wi ...
- 玩转Windows服务系列——Debug、Release版本的注册和卸载,及其原理
原文:玩转Windows服务系列——Debug.Release版本的注册和卸载,及其原理 Windows服务Debug版本 注册 Services.exe -regserver 卸载 Services ...
- wing带你玩转自定义view系列(2) 简单模仿qq未读消息去除效果
上一篇介绍了贝塞尔曲线的简单应用 仿360内存清理效果 这一篇带来一个 两条贝塞尔曲线的应用 : 仿qq未读消息去除效果. 转载请注明出处:http://blog.csdn.net/wingicho ...
随机推荐
- ZooKeeper学习总结 第二篇:ZooKeeper深入探讨(转载)
其实zookeeper系列的学习总结很早就写完了,这段时间在准备找工作的事情,就一直没有更新了.下边给大家送上,文中如有不恰当的地方,欢迎给予指证,不胜感谢!. 1. 数据模型 1.1. 只适合存储小 ...
- Qt中新建类构造函数的初始化参数列表
使用Qt-creator自动生成一个窗体应用程序时会自动创建一个新的类,我的程序中名为MyDialog,类的定义为: #ifndef MYDIALOG_H #define MYDIALOG_H #in ...
- (转)完全用GNU/Linux工作 by 王珢
完全用GNU/Linux工作 王珢 (看完这篇博文,非常喜欢王珢的这篇博客,也我坚定了学gnu/linux的决心,并努力去按照国外的计算机思维模式去学习编程提高自己.看完这篇文章令我热血沸腾 ...
- 使用CallableStatement的用法
package Test; import java.sql.*; public class Test7 { public static void main(String[] args) { Conne ...
- C#中的简单工厂和单例
下面首先来说说简单工厂 举个例子: 首先是父类 public abstract class Pizza { public abstract string Info(); } } 子类 public c ...
- 学习笔记_springmvc返回值、数据写到页面、表单提交、ajax、重定向
数据写到页面 后台往前台传数据 TestController添加 /** * 方法的返回值采用ModelAndView, new ModelAndView("index", map ...
- 【RabbitMQ】Publish/Subscribe
Publish/Subscribe 在上一节我们创建了一个work queue.背后的设想为每个任务被分发给明确的消费者.这节内容我们将做一些完全不同的事情 -- 我们将发送一条消息给多个消费者.这种 ...
- Rails--抛出异常
begin ... rescue Exception => e ... end
- js 表单验证控制代码大全
js表单验证控制代码大全 关键字:js验证表单大全,用JS控制表单提交 ,javascript提交表单:目录:1:js 字符串长度限制.判断字符长度 .js限制输入.限制不能输入.textarea 长 ...
- select case巧用 oracle
在做报表的时候,经常会用到分段统计数据,这时候,case就比较有用了: 小例子: SELECT sh.dc_code, g.bg_code, TO_CHAR ( ...