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, -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)                           = ?  

 

时间: 2025-01-24 08:33:30

DLang 编译实验的相关文章

VC++6.0编译实验数据处理程序设计

问题描述 我毕业设计要编译个实验数据处理程序,要求能对异常数据进行剔除,以及曲线拟合==,请问有没高手帮忙,给个代码,或者给个思路,我现在好着急,要交初稿了

开源项目:windows下使用MinGW+msys编译ffmpeg

本文参考了网络上的不少文章,但由于版本环境的问题参考文章并不能直接指导编译,本文吸收多方经验,并在自己多次编译实验的基础上写成,欢迎转载,请注名出处.    FFmpeg是在Linux平台下开发的,但它同样可以在其它操作系统环境中编译运行,本文介绍的就是在windows下编译FFmpeg.一 编译准备    您最好新建一个目录专门用来保存以下下载的文件.1 下载 MinGW 和 MSYS    MinGW(Minimalist GNU on Windows):一个可自由使用和自由发布的Windo

windows 下使用 MinGW + msys 编译 ffmpeg

本文参考了网络上的不少文章,但由于版本环境的问题参考文章并不能直接指导编译,本文吸收多方经验,并在自己多次编译实验的基础上写成,欢迎转载,请注名出处.    FFmpeg是在Linux平台下开发的,但它同样可以在其它操作系统环境中编译运行,本文介绍的就是在windows下编译FFmpeg.一 编译准备    您最好新建一个目录专门用来保存以下下载的文件.1 下载 MinGW 和 MSYS    MinGW(Minimalist GNU on Windows):一个可自由使用和自由发布的Windo

Linux0.11内核剖析--内核体系结构

一个完整可用的操作系统主要由 4 部分组成:硬件.操作系统内核.操作系统服务和用户应用程序,如下图所示: 用户应用程序是指那些字处理程序. Internet 浏览器程序或用户自行编制的各种应用程序: 操作系统服务程序是指那些向用户所提供的服务被看作是操作系统的部分功能的程序. 在 Linux 操作系统上,这些程序包括 X 窗口系统. shell 命令解释系统以及那些内核编程接口等系统程序:操作系统内核程序即是本书所感兴趣的部分,它主要用于对硬件资源的抽象和访问调度. Linux 内核的主要用途就

Linux系统小技巧(6):刀锋组合-strace和wireshark工具

首先声明下,此处wireshark,可以替换为tcpdump.同样,strace偶尔也可以替换为ltrace,只要熟悉库函数就好. wireshark和strace,对于黑客而言,都是工具箱中的必备工具.有过排查和诊断经历的工程师,谁没有抓包和分析包的经历呢? 相对而言,strace的名气要小一些,毕竟有意愿.有能力追踪并且能够分析进程执行路径的不多.而且常见的系统调用也有二三十个. 系统调用如此强力,why? 让我们先明确下为什么strace工具颇具威力,看图 虽然Linux已经足够复杂,而且

《编译原理实践与指导教程》——1.2 实验指导

1.2 实验指导 词法分析和语法分析这两块,可以说是在整个编译器当中被自动化得最好的部分.也就是说即使没有任何的理论基础,在掌握了工具的用法之后,也可以在短时间内做出功能很全很棒的词法分析程序和语法分析程序.当然这并不意味着,词法分析和语法分析部分的理论基础并不重要.恰恰相反,这一部分被认为是计算机理论在工程实践中最成功的应用之一,对它的介绍也是编译理论课中的重点.但本节指导内容的重点不在于理论而在于工具的使用. 本节指导内容将分别介绍词法分析工具GNU Flex和语法分析工具GNU Bison

《编译原理实践与指导教程》——1.1 实验内容

1.1 实验内容 1.1.1 实验要求程序要能够查出C––源代码中可能包含的下述几类错误:1)词法错误(错误类型A):出现C––词法中未定义的字符以及任何不符合C––词法单元定义的字符:2)语法错误(错误类型B).除此之外,程序可以选择完成以下部分或全部要求:1)要求1.1:识别八进制数和十六进制数.若输入文件中包含符合词法定义的八进制数(如0123)和十六进制数(如0x3F),程序需要得出相应的词法单元:若输入文件中包含不符合词法定义的八进制数(如09)和十六进制数(如0x1G),程序需要给出

编译原理实验1-词法分析

#include<stdio.h> #include<stdlib.h> #include<string.h> #define KEYWORDEND "waiting for your expanding" typedef struct { int typenum; char *word; } WORD; char input[255]; char token[255]=""; int pinput; int ptoken; ch

编译原理实验2-递归下降分析法

#include <stdio.h> #include <string.h> #include <stdlib.h> char prog[80],token[8]; char ch; int syn=-1,p,t; void scanner(); void statement(); void expression_r(); void term(); void factor(); void getcha() { ch=prog[p++]; } void getbc() {