一直在寻找一个可以编译运行又有脚本语言便利性的语言。

我要的是编译后可以到处运行(相同OS),我非常讨厌,很多语言,还需要在OS 安装一个环境才能运行

如:Java

D语言是由Digital Mars公司开发的编程语言,起因是为了改进C++。它与C二进制兼容(不完全),可编译为本地码,有GC也可手动管理内存,语法上借鉴多种语言,模板则在C++的基础上做了相当大的扩充。D 语言既有 C 语言的强大威力,又有 Python 和 Ruby 的开发效率。它是一种集垃圾回收、手工内存操作、契约式设计、高级模板技术、内嵌汇编、内置单元测试、Mixin 风格多继承、类 Java 包管理机制、内置同步机制、内建基本运行时信息的系统级编程语言。

我做了一下测试,D语言满足我的需求

安装

Java代码  
  1. $ wget http://ftp.digitalmars.com/dmd_2.057-0_amd64.deb
  2. $ sudo apt-get install libc6-dev
  3. $ sudo dpkg -i dmd_2.057-0_amd64.deb
C代码  
  1. $ cat hello.d
  2. #!/usr/bin/rdmd
  3. import std.stdio;
  4. void main() {
  5. writeln("Hello, world!");
  6. }
C代码  
  1. $ ./hello.d
  2. Hello, world!

编译测试

Java代码  
  1. $ dmd hello.d
  2. $ dmd hello.d
  3. Hello, world!

将编译后的hello文件复制到其他机器上(注:没有安装dmd环境,一台全新安装CentOS 5.6 的机器)

Java代码  
  1. scp hello root@172.16.1.3:/tmp
  2. ssh root@172.16.1.3
  3. cd /tmp
  4. ./hello
Java代码  
  1. Hello,world!

在新机器上运行成功,表示D语言使用的是GLibc 库,不依赖dmd环境,也可能是静态编译,将dmd 速要的库编译进了hello文件

Java代码  
  1. $ strace ./hello
  2. execve("./hello", ["./hello"], [/* 20 vars */]) = 0
  3. brk(0)                                  = 0x12fc000
  4. access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
  5. mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa6436de000
  6. access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
  7. open("/etc/ld.so.cache", O_RDONLY)      = 3
  8. fstat(3, {st_mode=S_IFREG|0644, st_size=33668, ...}) = 0
  9. mmap(NULL, 33668, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fa6436d5000
  10. close(3)                                = 0
  11. access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
  12. open("/lib/libpthread.so.0", O_RDONLY)  = 3
  13. 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
  14. fstat(3, {st_mode=S_IFREG|0755, st_size=135745, ...}) = 0
  15. mmap(NULL, 2212736, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa6432a4000
  16. mprotect(0x7fa6432bc000, 2093056, PROT_NONE) = 0
  17. mmap(0x7fa6434bb000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17000) = 0x7fa6434bb000
  18. mmap(0x7fa6434bd000, 13184, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fa6434bd000
  19. close(3)                                = 0
  20. access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
  21. open("/lib/libm.so.6", O_RDONLY)        = 3
  22. 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
  23. fstat(3, {st_mode=S_IFREG|0644, st_size=534832, ...}) = 0
  24. mmap(NULL, 2629864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa643021000
  25. mprotect(0x7fa6430a3000, 2093056, PROT_NONE) = 0
  26. mmap(0x7fa6432a2000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x81000) = 0x7fa6432a2000
  27. close(3)                                = 0
  28. access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
  29. open("/lib/librt.so.1", O_RDONLY)       = 3
  30. 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
  31. fstat(3, {st_mode=S_IFREG|0644, st_size=31744, ...}) = 0
  32. mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa6436d4000
  33. mmap(NULL, 2128848, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa642e19000
  34. mprotect(0x7fa642e20000, 2093056, PROT_NONE) = 0
  35. mmap(0x7fa64301f000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7fa64301f000
  36. close(3)                                = 0
  37. access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
  38. open("/lib/libc.so.6", O_RDONLY)        = 3
  39. 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
  40. fstat(3, {st_mode=S_IFREG|0755, st_size=1572232, ...}) = 0
  41. mmap(NULL, 3680296, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa642a96000
  42. mprotect(0x7fa642c10000, 2093056, PROT_NONE) = 0
  43. mmap(0x7fa642e0f000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x179000) = 0x7fa642e0f000
  44. mmap(0x7fa642e14000, 18472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fa642e14000
  45. close(3)                                = 0
  46. mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa6436d3000
  47. mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa6436d1000
  48. arch_prctl(ARCH_SET_FS, 0x7fa6436d19c0) = 0
  49. mprotect(0x7fa642e0f000, 16384, PROT_READ) = 0
  50. mprotect(0x7fa64301f000, 4096, PROT_READ) = 0
  51. mprotect(0x7fa6432a2000, 4096, PROT_READ) = 0
  52. mprotect(0x7fa6434bb000, 4096, PROT_READ) = 0
  53. mprotect(0x686000, 4096, PROT_READ)     = 0
  54. mprotect(0x7fa6436e0000, 4096, PROT_READ) = 0
  55. munmap(0x7fa6436d5000, 33668)           = 0
  56. set_tid_address(0x7fa6436d1c90)         = 31762
  57. set_robust_list(0x7fa6436d1ca0, 0x18)   = 0
  58. futex(0x7fffcc6c236c, FUTEX_WAKE_PRIVATE, 1) = 0
  59. futex(0x7fffcc6c236c, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, 7fa6436d19c0) = -1 EAGAIN (Resource temporarily unavailable)
  60. rt_sigaction(SIGRTMIN, {0x7fa6432a9870, [], SA_RESTORER|SA_SIGINFO, 0x7fa6432b38f0}, NULL, 8) = 0
  61. rt_sigaction(SIGRT_1, {0x7fa6432a9900, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7fa6432b38f0}, NULL, 8) = 0
  62. rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
  63. getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
  64. brk(0)                                  = 0x12fc000
  65. brk(0x131d000)                          = 0x131d000
  66. rt_sigaction(SIGUSR1, {0x465cac, ~[RTMIN RT_1], SA_RESTORER|SA_RESTART, 0x7fa6432b38f0}, NULL, 8) = 0
  67. rt_sigaction(SIGUSR2, {0x465dcc, ~[RTMIN RT_1], SA_RESTORER, 0x7fa6432b38f0}, NULL, 8) = 0
  68. mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa6435d1000
  69. clock_getres(CLOCK_MONOTONIC, {0, 1})   = 0
  70. sched_getparam(31762, { 0 })            = 0
  71. sched_getscheduler(31762)               = 0 (SCHED_OTHER)
  72. sched_get_priority_min(SCHED_OTHER)     = 0
  73. sched_get_priority_max(SCHED_OTHER)     = 0
  74. open("/etc/localtime", O_RDONLY)        = 3
  75. fstat(3, {st_mode=S_IFREG|0644, st_size=447, ...}) = 0
  76. fstat(3, {st_mode=S_IFREG|0644, st_size=447, ...}) = 0
  77. mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa6436dd000
  78. 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
  79. lseek(3, -261, SEEK_CUR)                = 186
  80. 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
  81. close(3)                                = 0
  82. munmap(0x7fa6436dd000, 4096)            = 0
  83. rt_sigaction(SIGSEGV, {0x44cb08, ~[RTMIN RT_1], SA_RESTORER|SA_RESETHAND|SA_SIGINFO, 0x7fa6432b38f0}, {SIG_DFL, [], 0}, 8) = 0
  84. rt_sigaction(SIGBUS, {0x44cb08, ~[RTMIN RT_1], SA_RESTORER|SA_RESETHAND|SA_SIGINFO, 0x7fa6432b38f0}, {SIG_DFL, [], 0}, 8) = 0
  85. rt_sigaction(SIGSEGV, {SIG_DFL, [], SA_RESTORER, 0x7fa6432b38f0}, NULL, 8) = 0
  86. rt_sigaction(SIGBUS, {SIG_DFL, [], SA_RESTORER, 0x7fa6432b38f0}, NULL, 8) = 0
  87. fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
  88. mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa6436dd000
  89. write(1, "Hello, world!\n", 14Hello, world!
  90. )         = 14
  91. munmap(0x7fa6435d1000, 1048576)         = 0
  92. exit_group(0)                           = ?

DLang 编译实验相关推荐

  1. 编译实验(三)目标代码生成

    通过词法分析,语法分析,语义分析,最后产生了四元式.而代码生成则是通过四元式来完成.我们先从简单开始做起. 编译实验项目下载链接:http://download.csdn.net/download/s ...

  2. 编译实验(一)词法分析

    编译原理课程即将结束,开始了在校中最麻烦的实验,编译实验......同在一个系,其他班的编译实验分成好几块,简短的文法, 完成一些小功能,就我们班的老师,撂下一句话:参考书本,把编译器实现了,可以一组 ...

  3. 编译linux源码报错,记录一次Linux内核源码编译实验

    记录一次Linux内核源码编译实验 文章目录 记录一次Linux内核源码编译实验 0. 实验环境 1. 选择.下载内核源码 2. 安装必要的依赖软件以及性能要求 3. 解压.配置和编译内核源码 3.1 ...

  4. linux编译内核实验,实验六 Linux内核编译实验.doc

    实验六 Linux内核编译 讲师:杨行 [实验目的] 1.掌握Linux内核编译 2.了解Linux内核Makefile 3.了解Linux内核Kbuild系统 [实验原理] 网站可以下载标准内核文件 ...

  5. 深入理解 ASP.NET 动态控件 (Part 5 - 编译实验)

    这次的文章是一个小小的动手实验,你需要准备好Visual Studio 2005或者Visual Studio 2008,以及最新版本的Reflector.通过这次的实验,你将对ASPX与C#代码如何 ...

  6. 编译实验 lr c语言代码,编译原理-实验5-LR(1)分析法

    <编译原理-实验5-LR(1)分析法>由会员分享,可在线阅读,更多相关<编译原理-实验5-LR(1)分析法(6页珍藏版)>请在人人文库网上搜索. 1.编译原理实验报告项目名称 ...

  7. 编译实验三--生成中间代码

    一.实验目的 通过语法制导或翻译模式生成中间代码. 二.实验环境 ①开发语言:java ②开发环境:jdk1.8 三.功能描述 理解并应用课本的语法制导定义. 在自底向上语法分析基础上设计语义规则(语 ...

  8. 编译实验(二)语法/语义分析

    源代码下载链接:http://download.csdn.net/download/supersmart_dong/10224159 通过词法分析,我们成功得到了一个完整的token 文件以及符号表, ...

  9. C++:编译实验之递归下降分析器

    一.实验目的 1.加深对递归下降分析法一种自顶向下的语法分析方法的理解. 2.根据文法的产生式规则消除左递归,提取公共左因子构造出相应的递归下降分析器. 二.实验内容 根据课堂讲授的形式化算法,编制程 ...

  10. C++:编译实验之LR分析器

    实验目的 (1)掌握有限自动机这一数学模型的结构和理论,并深刻理解下推自动机在LR分析法中的应用(即LR分析器). (2)掌握LR分析法的思想,学会特定分析表的构造方法,利用给出的分析表进行LR分析. ...

最新文章

  1. 如何在C ++中从容器中删除元素
  2. 【Binder 机制】AIDL 分析 ( 创建 Service 服务 | 绑定 Service 远程服务 )
  3. 深度学习笔记5:Building Deep Networks for Classification
  4. GPU 内存的分级综述(gpu memory hierarchy)
  5. python_45_目录编程
  6. Exynos4412 ADC 设备驱动开发
  7. 工作193:vue.runtime.esm.js?2b0e:619 [Vue warn]: <transition-group> children must be keyed: <ElTag>
  8. Qt工作笔记-在ListWidget中单线程检索数据
  9. directshow-faac编码
  10. 隐藏html文本节点,javascript-D3-仅显示/隐藏单击节点的文本
  11. wdr5600 虚拟服务器,TP-Link WDR5600路由器端口映射设置教程
  12. Angular——Angular 教程
  13. python when库_python 库收集
  14. 通信电子电路实验(三)——高频电容反馈型LC振荡器的设计与仿真
  15. 神经网络在线和离线的区别,神经网络网站
  16. Windows Edge 下载软件被检测到病毒无法下载
  17. oa 触发器导出流程html,哪些配套产品帮南京OA画龙点睛
  18. 命名时取代基优先顺序_烷烃的系统命名
  19. Local declaration of 'XXX' hides instance variable
  20. ISO 14229、ISO 15765、ISO 11898的区别

热门文章

  1. html与python_Python和显示HTML
  2. APP视频播放异常,非APP层导致异常基础排查
  3. TC118AH单通道内置MOS单通道直流无刷马达驱动IC
  4. 智能家居 mysql_智能家居 数据库设计
  5. Halcon 第四章『图像特征和提取』◆第3节:基于图像的纹理特征|灰度共生矩阵
  6. faster rcnn:towards real-time object detection with region proposal network
  7. 人类dna信息量_如果有一个人的DNA序列等遗传信息数据,理论上能否克隆出这个人?需多少MB(兆字节)的信息量?...
  8. LTE网络CQI机制
  9. SpringBoot集成RabbitMQ实现消息重试机制,消息重试3次失败后写入死信队列,消息重试3次失败后入库
  10. Kotlin:Outdated Kotlin Runtime问题修复