DLang 编译实验
一直在寻找一个可以编译运行又有脚本语言便利性的语言。
我要的是编译后可以到处运行(相同OS),我非常讨厌,很多语言,还需要在OS 安装一个环境才能运行
如:Java
D语言是由Digital Mars公司开发的编程语言,起因是为了改进C++。它与C二进制兼容(不完全),可编译为本地码,有GC也可手动管理内存,语法上借鉴多种语言,模板则在C++的基础上做了相当大的扩充。D 语言既有 C 语言的强大威力,又有 Python 和 Ruby 的开发效率。它是一种集垃圾回收、手工内存操作、契约式设计、高级模板技术、内嵌汇编、内置单元测试、Mixin 风格多继承、类 Java 包管理机制、内置同步机制、内建基本运行时信息的系统级编程语言。
我做了一下测试,D语言满足我的需求
安装
- $ wget http://ftp.digitalmars.com/dmd_2.057-0_amd64.deb
- $ sudo apt-get install libc6-dev
- $ sudo dpkg -i dmd_2.057-0_amd64.deb
- $ cat hello.d
- #!/usr/bin/rdmd
- import std.stdio;
- void main() {
- writeln("Hello, world!");
- }
- $ ./hello.d
- Hello, world!
编译测试
- $ dmd hello.d
- $ dmd hello.d
- Hello, world!
将编译后的hello文件复制到其他机器上(注:没有安装dmd环境,一台全新安装CentOS 5.6 的机器)
- scp hello root@172.16.1.3:/tmp
- ssh root@172.16.1.3
- cd /tmp
- ./hello
- Hello,world!
在新机器上运行成功,表示D语言使用的是GLibc 库,不依赖dmd环境,也可能是静态编译,将dmd 速要的库编译进了hello文件
- $ strace ./hello
- execve("./hello", ["./hello"], [/* 20 vars */]) = 0
- brk(0) = 0x12fc000
- access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
- mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa6436de000
- access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
- open("/etc/ld.so.cache", O_RDONLY) = 3
- fstat(3, {st_mode=S_IFREG|0644, st_size=33668, ...}) = 0
- mmap(NULL, 33668, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fa6436d5000
- close(3) = 0
- access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
- open("/lib/libpthread.so.0", O_RDONLY) = 3
- read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360Y\0\0\0\0\0\0"..., 832) = 832
- fstat(3, {st_mode=S_IFREG|0755, st_size=135745, ...}) = 0
- mmap(NULL, 2212736, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa6432a4000
- mprotect(0x7fa6432bc000, 2093056, PROT_NONE) = 0
- mmap(0x7fa6434bb000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17000) = 0x7fa6434bb000
- mmap(0x7fa6434bd000, 13184, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fa6434bd000
- close(3) = 0
- access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
- open("/lib/libm.so.6", O_RDONLY) = 3
- read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360>\0\0\0\0\0\0"..., 832) = 832
- fstat(3, {st_mode=S_IFREG|0644, st_size=534832, ...}) = 0
- mmap(NULL, 2629864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa643021000
- mprotect(0x7fa6430a3000, 2093056, PROT_NONE) = 0
- mmap(0x7fa6432a2000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x81000) = 0x7fa6432a2000
- close(3) = 0
- access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
- open("/lib/librt.so.1", O_RDONLY) = 3
- read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220!\0\0\0\0\0\0"..., 832) = 832
- fstat(3, {st_mode=S_IFREG|0644, st_size=31744, ...}) = 0
- mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa6436d4000
- mmap(NULL, 2128848, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa642e19000
- mprotect(0x7fa642e20000, 2093056, PROT_NONE) = 0
- mmap(0x7fa64301f000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7fa64301f000
- close(3) = 0
- access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
- open("/lib/libc.so.6", O_RDONLY) = 3
- read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\355\1\0\0\0\0\0"..., 832) = 832
- fstat(3, {st_mode=S_IFREG|0755, st_size=1572232, ...}) = 0
- mmap(NULL, 3680296, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa642a96000
- mprotect(0x7fa642c10000, 2093056, PROT_NONE) = 0
- mmap(0x7fa642e0f000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x179000) = 0x7fa642e0f000
- mmap(0x7fa642e14000, 18472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fa642e14000
- close(3) = 0
- mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa6436d3000
- mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa6436d1000
- arch_prctl(ARCH_SET_FS, 0x7fa6436d19c0) = 0
- mprotect(0x7fa642e0f000, 16384, PROT_READ) = 0
- mprotect(0x7fa64301f000, 4096, PROT_READ) = 0
- mprotect(0x7fa6432a2000, 4096, PROT_READ) = 0
- mprotect(0x7fa6434bb000, 4096, PROT_READ) = 0
- mprotect(0x686000, 4096, PROT_READ) = 0
- mprotect(0x7fa6436e0000, 4096, PROT_READ) = 0
- munmap(0x7fa6436d5000, 33668) = 0
- set_tid_address(0x7fa6436d1c90) = 31762
- set_robust_list(0x7fa6436d1ca0, 0x18) = 0
- futex(0x7fffcc6c236c, FUTEX_WAKE_PRIVATE, 1) = 0
- futex(0x7fffcc6c236c, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, 7fa6436d19c0) = -1 EAGAIN (Resource temporarily unavailable)
- rt_sigaction(SIGRTMIN, {0x7fa6432a9870, [], SA_RESTORER|SA_SIGINFO, 0x7fa6432b38f0}, NULL, 8) = 0
- rt_sigaction(SIGRT_1, {0x7fa6432a9900, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7fa6432b38f0}, NULL, 8) = 0
- rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
- getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
- brk(0) = 0x12fc000
- brk(0x131d000) = 0x131d000
- rt_sigaction(SIGUSR1, {0x465cac, ~[RTMIN RT_1], SA_RESTORER|SA_RESTART, 0x7fa6432b38f0}, NULL, 8) = 0
- rt_sigaction(SIGUSR2, {0x465dcc, ~[RTMIN RT_1], SA_RESTORER, 0x7fa6432b38f0}, NULL, 8) = 0
- mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa6435d1000
- clock_getres(CLOCK_MONOTONIC, {0, 1}) = 0
- sched_getparam(31762, { 0 }) = 0
- sched_getscheduler(31762) = 0 (SCHED_OTHER)
- sched_get_priority_min(SCHED_OTHER) = 0
- sched_get_priority_max(SCHED_OTHER) = 0
- open("/etc/localtime", O_RDONLY) = 3
- fstat(3, {st_mode=S_IFREG|0644, st_size=447, ...}) = 0
- fstat(3, {st_mode=S_IFREG|0644, st_size=447, ...}) = 0
- mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa6436dd000
- read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\5\0\0\0\0"..., 4096) = 447
- lseek(3, -261, SEEK_CUR) = 186
- read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\5\0\0\0\0"..., 4096) = 261
- close(3) = 0
- munmap(0x7fa6436dd000, 4096) = 0
- rt_sigaction(SIGSEGV, {0x44cb08, ~[RTMIN RT_1], SA_RESTORER|SA_RESETHAND|SA_SIGINFO, 0x7fa6432b38f0}, {SIG_DFL, [], 0}, 8) = 0
- rt_sigaction(SIGBUS, {0x44cb08, ~[RTMIN RT_1], SA_RESTORER|SA_RESETHAND|SA_SIGINFO, 0x7fa6432b38f0}, {SIG_DFL, [], 0}, 8) = 0
- rt_sigaction(SIGSEGV, {SIG_DFL, [], SA_RESTORER, 0x7fa6432b38f0}, NULL, 8) = 0
- rt_sigaction(SIGBUS, {SIG_DFL, [], SA_RESTORER, 0x7fa6432b38f0}, NULL, 8) = 0
- fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
- mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa6436dd000
- write(1, "Hello, world!\n", 14Hello, world!
- ) = 14
- munmap(0x7fa6435d1000, 1048576) = 0
- exit_group(0) = ?
DLang 编译实验相关推荐
- 编译实验(三)目标代码生成
通过词法分析,语法分析,语义分析,最后产生了四元式.而代码生成则是通过四元式来完成.我们先从简单开始做起. 编译实验项目下载链接:http://download.csdn.net/download/s ...
- 编译实验(一)词法分析
编译原理课程即将结束,开始了在校中最麻烦的实验,编译实验......同在一个系,其他班的编译实验分成好几块,简短的文法, 完成一些小功能,就我们班的老师,撂下一句话:参考书本,把编译器实现了,可以一组 ...
- 编译linux源码报错,记录一次Linux内核源码编译实验
记录一次Linux内核源码编译实验 文章目录 记录一次Linux内核源码编译实验 0. 实验环境 1. 选择.下载内核源码 2. 安装必要的依赖软件以及性能要求 3. 解压.配置和编译内核源码 3.1 ...
- linux编译内核实验,实验六 Linux内核编译实验.doc
实验六 Linux内核编译 讲师:杨行 [实验目的] 1.掌握Linux内核编译 2.了解Linux内核Makefile 3.了解Linux内核Kbuild系统 [实验原理] 网站可以下载标准内核文件 ...
- 深入理解 ASP.NET 动态控件 (Part 5 - 编译实验)
这次的文章是一个小小的动手实验,你需要准备好Visual Studio 2005或者Visual Studio 2008,以及最新版本的Reflector.通过这次的实验,你将对ASPX与C#代码如何 ...
- 编译实验 lr c语言代码,编译原理-实验5-LR(1)分析法
<编译原理-实验5-LR(1)分析法>由会员分享,可在线阅读,更多相关<编译原理-实验5-LR(1)分析法(6页珍藏版)>请在人人文库网上搜索. 1.编译原理实验报告项目名称 ...
- 编译实验三--生成中间代码
一.实验目的 通过语法制导或翻译模式生成中间代码. 二.实验环境 ①开发语言:java ②开发环境:jdk1.8 三.功能描述 理解并应用课本的语法制导定义. 在自底向上语法分析基础上设计语义规则(语 ...
- 编译实验(二)语法/语义分析
源代码下载链接:http://download.csdn.net/download/supersmart_dong/10224159 通过词法分析,我们成功得到了一个完整的token 文件以及符号表, ...
- C++:编译实验之递归下降分析器
一.实验目的 1.加深对递归下降分析法一种自顶向下的语法分析方法的理解. 2.根据文法的产生式规则消除左递归,提取公共左因子构造出相应的递归下降分析器. 二.实验内容 根据课堂讲授的形式化算法,编制程 ...
- C++:编译实验之LR分析器
实验目的 (1)掌握有限自动机这一数学模型的结构和理论,并深刻理解下推自动机在LR分析法中的应用(即LR分析器). (2)掌握LR分析法的思想,学会特定分析表的构造方法,利用给出的分析表进行LR分析. ...
最新文章
- 如何在C ++中从容器中删除元素
- 【Binder 机制】AIDL 分析 ( 创建 Service 服务 | 绑定 Service 远程服务 )
- 深度学习笔记5:Building Deep Networks for Classification
- GPU 内存的分级综述(gpu memory hierarchy)
- python_45_目录编程
- Exynos4412 ADC 设备驱动开发
- 工作193:vue.runtime.esm.js?2b0e:619 [Vue warn]: <transition-group> children must be keyed: <ElTag>
- Qt工作笔记-在ListWidget中单线程检索数据
- directshow-faac编码
- 隐藏html文本节点,javascript-D3-仅显示/隐藏单击节点的文本
- wdr5600 虚拟服务器,TP-Link WDR5600路由器端口映射设置教程
- Angular——Angular 教程
- python when库_python 库收集
- 通信电子电路实验(三)——高频电容反馈型LC振荡器的设计与仿真
- 神经网络在线和离线的区别,神经网络网站
- Windows Edge 下载软件被检测到病毒无法下载
- oa 触发器导出流程html,哪些配套产品帮南京OA画龙点睛
- 命名时取代基优先顺序_烷烃的系统命名
- Local declaration of 'XXX' hides instance variable
- ISO 14229、ISO 15765、ISO 11898的区别
热门文章
- html与python_Python和显示HTML
- APP视频播放异常,非APP层导致异常基础排查
- TC118AH单通道内置MOS单通道直流无刷马达驱动IC
- 智能家居 mysql_智能家居 数据库设计
- Halcon 第四章『图像特征和提取』◆第3节:基于图像的纹理特征|灰度共生矩阵
- faster rcnn:towards real-time object detection with region proposal network
- 人类dna信息量_如果有一个人的DNA序列等遗传信息数据,理论上能否克隆出这个人?需多少MB(兆字节)的信息量?...
- LTE网络CQI机制
- SpringBoot集成RabbitMQ实现消息重试机制,消息重试3次失败后写入死信队列,消息重试3次失败后入库
- Kotlin:Outdated Kotlin Runtime问题修复