`
ideage
  • 浏览: 323976 次
社区版块
存档分类
最新评论

编译期或运行期程序收集(meta programming)

阅读更多
1. Phobos:

std.demangle 得到编译后的名称字符.
std.metastrings 编译期操作字符串.
std.traits 编译期类型识别.


2.运行时反射:http://flectioned.kuehne.cn/,有例子,支持最新的DMD1.007.用-g进行编译,可以动态创建对象.

3.字符串混入:

混入创建对象:
template GenStruct(char[] Name, char[] M1)
{
    const char[] GenStruct = "struct " ~ Name ~ "{ int " ~ M1 ~ "; }";
}

mixin(GenStruct!("Foo", "bar"));


编译时编译器:
------------------------------------------------------------
ctbf.d:
------------------------------------------------------------
module ctbf;

import std.cstream;
import std.stdio;

static char[] ctbf(char[] bf)
{
     char[] code = `
     byte[] mem;
     uint memptr = 0;
     mem.length = 1;
     void expand() {
         if (mem.length <= memptr) {
             mem.length = memptr + 1;
         }
     }
     `;

     foreach (c; bf) {
         switch (c) {
             case '>':
                 code ~= "memptr++; expand();\n";
                 break;

             case '<':
                 code ~= "memptr--;\n";
                 break;

             case '+':
                 code ~= "mem[memptr]++;\n";
                 break;

             case '-':
                 code ~= "mem[memptr]--;\n";
                 break;

             case '[':
                 code ~= "while (mem[memptr]) {\n";
                 break;

             case ']':
                 code ~= "}\n";
                 break;

             case '.':
                 code ~= "dout.write(cast(char) mem[memptr]);\n";
                 break;

             case ',':
                 code ~= "din.read(mem[memptr]);\n";
                 break;

             default:
         }
     }

     return code;
}

int main()
{
     mixin(ctbf(import("helloworld.bf")));
     return 0;
}
------------------------------------------------------------

------------------------------------------------------------
helloworld.bf:
------------------------------------------------------------
 >+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-]
<.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+.
------------------------------------------------------------


4.目前最强应用:
pyD:Python的D语言接口,通过pyD,Python可以使用D编译的对象.D也可以使用Python的程序.
主页:http://dsource.org/projects/pyd
pyD博客http://kirkmcdonald.blogspot.com/

DDL:D语言的动态库.不支持最新的DMD(新版还在开发中)
主页:http://dsource.org/projects/ddl

DLLWrapper: 国人LiWei新作,包装DLL的.即将加入Tango!!
主页:http://oldrev.iteye.com/blog/55371

还有一个没有写的:Meta,pyD,HessianD,DDL都依赖的库.
http://dsource.org/projects/meta




2009.3.2日修改

分享到:
评论

相关推荐

    meta-programming简介

    元编程(Meta-programming)是一种高级的编程技巧,它允许程序员在编译时进行计算,而不是在运行时。这种技术最初在C++中通过模板元编程(Template Meta-programming)得到广泛的应用,使得C++不仅仅是一种面向对象...

    使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0

    ### 使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0 #### Hadoop 2.x 版本变化及依赖分析 在Hadoop 2.x版本中,相较于早期版本,其架构和依赖库有了明显的变化。在早期版本如1.x中,所有的依赖都集中在`...

    小程序反编译脚本下载,从此小程序源码就是囊中取物了

    标题中的“小程序反编译脚本下载”指的是利用特定的工具或脚本来解析已经编译的小程序二进制文件,将其还原为源代码的形式,便于我们研究、学习或者进行逆向工程。这个过程对于开发者而言,可以帮助他们理解他人的...

    解决VS2010编译的程序在XP不能运行的问题

    解决 VS2010 编译的程序在 ...解决 VS2010 编译的程序在 XP 不能运行的问题可以通过使用静态库或选择合适的运行库来实现。在实际开发中,我们需要根据实际情况选择合适的解决方法,以确保程序能在目标系统上稳定运行。

    linux驱动编译与运行-驱动程序

    ### Linux驱动编译与运行详解 #### 一、理解Linux驱动程序 Linux驱动程序是操作系统与硬件设备之间的桥梁,负责管理硬件资源并提供相应的服务。它们通常被编写为内核模块,可以动态加载或卸载,以适应系统需求的...

    在Linux下编译并运行C程序

    ### 在Linux下编译并运行C程序 #### 环境准备与编译器安装 在开始编写并编译C/C++程序之前,确保已经安装了必要的编译工具。Linux系统通常内置或提供了多种编译工具,其中最常用的是GCC (GNU Compiler Collection)...

    微信小程序反编译脚本!

    首先,微信小程序的前端代码通常是以.wxml(WXML:微信小程序标记语言)和.wxss(WXSS:微信小程序样式语言)的形式存在,这些文件在编译后被加密并打包成.jsbundle文件,用于在微信小程序运行时加载。由于微信官方...

    linux驱动程序编译以及应用程序编译

    应用程序编译是指将应用程序源代码编译成可执行文件,以便在 Linux 系统上运行。使用 arm-linux-gcc 编译器,可以将应用程序源代码编译成目标文件,然后链接成可执行文件。 在编译应用程序时,可以使用 -c 选项只...

    Sublime Text 3编译运行 CC++ 程序

    ### Sublime Text 3 编译运行 C/C++ 程序 #### 一、准备工作 为了能够在Sublime Text 3上顺利地编译并运行C/C++程序,我们需要完成以下准备工作: 1. **下载安装Sublime Text 3**: - 作者使用的是由流风清音...

    Meta Programming Ruby

    ### Meta Programming Ruby:深入理解Ruby元编程 #### 核心概念与原理 《Meta Programming Ruby》这本书由Paolo Perrotta编写,旨在帮助读者深入了解Ruby语言的元编程特性及其强大功能。通过本书的学习,读者可以...

    在VC下编译运行MiniGUI程序

    经过 配置minigui可以在 visual studio 下运行

    网页运行exe程序 如何真正实现让网页运行exe程序

    ### 网页运行exe程序:技术实现与安全考量 #### 一、引言 在互联网发展的早期阶段,用户有时需要在网页上执行特定的本地应用程序(如.exe文件)。这通常通过浏览器插件或ActiveX控件来实现。然而,随着现代Web标准...

    小程序反编译工具包

    【小程序反编译工具包】是一个专为开发者和研究人员设计的实用工具,它允许用户对微信小程序进行反编译操作,以查看其源代码、理解内部逻辑或进行逆向工程研究。这个压缩包包含了所有必要的组件,解压后即可直接使用...

    Mastering Embedded Linux Programming_LinuxProgramming_MasteringL

    《Mastering Embedded Linux Programming》是一本深入探讨嵌入式Linux编程的专业书籍,旨在帮助开发者掌握在Linux环境下开发高效、可靠的应用程序的技能。通过学习本书,读者将能够理解嵌入式Linux系统的架构,掌握...

    windows上运行Qt程序所需的dll文件

    在Windows平台上运行Qt应用程序时,有时会遇到依赖于特定DLL(动态链接库)文件的问题。这些DLL文件是程序运行所必需的,因为它们...为了保证程序的稳定性和兼容性,记得总是提供与应用程序编译时版本相匹配的DLL文件。

    CCS-2.2 如何运行一个程序 CCS-2.2 如何运行一个程序

    本文详细介绍了如何使用CCS-2.2来运行一个程序,包括安装CCS-2.2、配置编译选项以及编译生成可执行文件等步骤。通过这些步骤,开发者可以轻松地将自己的代码转换为能够在目标平台上运行的程序。对于初学者来说,掌握...

    清除unity中的meta文件

    在清理过程中,确保你了解哪些.meta文件是与关键资产关联的,以免删除后影响到项目运行。此外,清理完成后,最好重新导入项目,以使Unity更新其内部数据库,避免可能出现的导入问题。 总的来说,定期清理Unity的....

    如何将MATLAB程序编译成独立可执行的程序知识.pdf

    ### 如何将MATLAB程序编译成独立可...通过以上步骤,不仅可以将MATLAB程序编译成独立的可执行程序,还能确保在未安装MATLAB的计算机上正常运行,并且解决了常见的DOS黑屏问题,极大地提高了程序的可用性和用户体验。

    微信小程序反编译工具wxappUnpacker

    `wxappUnpacker`是一款专门针对微信小程序的反编译工具,它可以帮助开发者或逆向工程师分析、理解和修改微信小程序的原始代码。 首先,我们要理解微信小程序的编译过程。在开发过程中,开发者编写的是JS、WXML(XML...

Global site tag (gtag.js) - Google Analytics