DLang 编译实验

简介:

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

我要的是编译后可以到处运行(相同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.   
  4. $ 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, -10) = 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, 30) = 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, 30) = 0x7fa6432a4000  
  16. mprotect(0x7fa6432bc0002093056, PROT_NONE) = 0  
  17. mmap(0x7fa6434bb0008192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 30x17000) = 0x7fa6434bb000  
  18. mmap(0x7fa6434bd00013184, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -10) = 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, 30) = 0x7fa643021000  
  25. mprotect(0x7fa6430a30002093056, PROT_NONE) = 0  
  26. mmap(0x7fa6432a20008192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 30x81000) = 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, -10) = 0x7fa6436d4000  
  33. mmap(NULL, 2128848, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 30) = 0x7fa642e19000  
  34. mprotect(0x7fa642e200002093056, PROT_NONE) = 0  
  35. mmap(0x7fa64301f0008192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 30x6000) = 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, 30) = 0x7fa642a96000  
  42. mprotect(0x7fa642c100002093056, PROT_NONE) = 0  
  43. mmap(0x7fa642e0f00020480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 30x179000) = 0x7fa642e0f000  
  44. mmap(0x7fa642e1400018472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -10) = 0x7fa642e14000  
  45. close(3)                                = 0  
  46. mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -10) = 0x7fa6436d3000  
  47. mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -10) = 0x7fa6436d1000  
  48. arch_prctl(ARCH_SET_FS, 0x7fa6436d19c0) = 0  
  49. mprotect(0x7fa642e0f00016384, PROT_READ) = 0  
  50. mprotect(0x7fa64301f0004096, PROT_READ) = 0  
  51. mprotect(0x7fa6432a20004096, PROT_READ) = 0  
  52. mprotect(0x7fa6434bb0004096, PROT_READ) = 0  
  53. mprotect(0x6860004096, PROT_READ)     = 0  
  54. mprotect(0x7fa6436e00004096, PROT_READ) = 0  
  55. munmap(0x7fa6436d500033668)           = 0  
  56. set_tid_address(0x7fa6436d1c90)         = 31762  
  57. set_robust_list(0x7fa6436d1ca00x18)   = 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, -10) = 0x7fa6435d1000  
  69. clock_getres(CLOCK_MONOTONIC, {01})   = 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, -10) = 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(0x7fa6436dd0004096)            = 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(1360), ...}) = 0  
  88. mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -10) = 0x7fa6436dd000  
  89. write(1"Hello, world!\n", 14Hello, world!  
  90. )         = 14  
  91. munmap(0x7fa6435d10001048576)         = 0  
  92. exit_group(0)                           = ?  
 
目录
相关文章
|
3月前
|
存储 编译器 程序员
程序环境和预处理
程序环境和预处理
50 0
|
3月前
|
存储 编译器 程序员
【程序环境与预处理玩转指南】(上)
【程序环境与预处理玩转指南】
|
3月前
【程序环境与预处理玩转指南】(中)
【程序环境与预处理玩转指南】
|
3月前
|
编译器 Linux C++
【程序环境与预处理玩转指南】(下)
【程序环境与预处理玩转指南】
|
8月前
|
存储 编译器 程序员
【C】程序环境和预处理
在ANSI C的任何一种实现中,存在两个不同的环境。
|
8月前
|
编译器 Linux C++
【程序环境与预处理】(二)
【程序环境与预处理】(二)
54 0
|
4月前
|
存储 自然语言处理 编译器
程序环境+预处理
程序环境+预处理
49 0
|
4月前
|
存储 自然语言处理 编译器
|
6月前
|
编译器
【预处理和程序环境】
【预处理和程序环境】
30 0
|
9月前
|
存储 自然语言处理 编译器
程序环境和预处理超详细讲解(上)
程序环境和预处理超详细讲解

热门文章

最新文章

相关实验场景

更多