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

编译期或运行期程序收集(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日修改

分享到:
评论

相关推荐

    java编译和运行

    JRE是运行已编译Java程序的必备组件,而JDK则增加了编译器和其他开发工具。 在Java编程中,开发者通常使用`javac`编译器将源代码(.java文件)编译为字节码(.class文件)。例如,如果有一个名为`Hello.java`的...

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

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

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

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

    编译原理 递归下降语法分析程序(代码+说明文档)

    在编译原理中,递归下降语法分析程序是一种基于自顶向下分析方法的解析技术,它主要用于理解程序源代码的结构并将其转化为抽象语法树(AST)。本资源包含了一个递归下降语法分析程序的实现,以及相关的说明文档,...

    源程序和编译好的程序

    编译后的程序通常不需要依赖源代码,可以直接在兼容的硬件上运行,提高了执行效率。 在Windows环境下,编译器如Visual Studio的MSVC或GCC的MinGW等,会生成.exe文件,这就是我们所说的可执行程序。通过调试编译后的...

    微信小程序反编译工具

    2.观看 wxapkg\小程序反编译全套\视频教程-解包流程 教学视屏 3.是否有分包处理方式不同,经过测试,目前还没有不能反编译的小程序 4.即使小程序有N个分包也能反编译,工具包里自带典型小程序 5.获取 wxapkg 包请...

    vc2019编译能在windows xp下运行的程序

    然而,通过特定的配置和设置,开发者可以使用Visual Studio 2019来编译能在Windows XP系统上运行的程序。以下是一些关于如何实现这一目标的关键知识点: 1. **兼容性设置**: - 在创建新项目时,选择一个与Windows...

    将VF程序编译成独立运行程序[汇编].pdf

    在Visual FoxPro (VF)开发环境中,将程序编译成独立运行的程序是实现软件部署的关键步骤。这个过程涉及到创建项目、管理项目以及编译和连编项目来生成可执行文件(EXE)。以下是详细的知识点说明: 1. **项目与项目...

    Dev-C++ 编译多文件程序的方法&安装使用教程

    多文件程序编译 在 Dev-C++ 中,我们可以使用项目文件来管理多文件程序。以下是步骤: 1. 创建一个新项目,选择项目类型为“空白项目”。 2. 添加文件,选择“添加文件”,然后选择要添加的文件。 3. 编译项目,...

    微信小程序反编译工具,操作简单

    微信小程序反编译工具,操作简单。电脑打开微信小程序操作一遍,然后在Applet中找到__APP__.wxapkg。把附件放入__APP__.wxapkg一个文件夹内,在此文件夹地址栏中运行cmd,输入unveilr.exe __APP__.wxapkg即可完成反...

    Meta Programming Ruby

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

    在DOS环境下(cmd)编译及运行java程序教程

    在DOS环境下(CMD)编译和运行Java程序是学习Java编程的基础技能之一。这个过程主要涉及以下几个步骤: 1. **启动DOS命令行**:首先,你需要打开DOS命令行窗口。这可以通过点击“开始”菜单,选择“运行”,然后...

    proteus中直接编译C程序

    本软件是为了使Proteus软件能直接编译汇编语言和C语言而设计的。 使用方法:当选择源文件后...如果编译出错的话,那很有可能你的程序有语法错误,请用Keil C或Medwin仔细调试程序。 作者声明:版权所有,原创权所有

    java软件的安装和运行程序的方法

    这篇文章将指导您如何安装和运行 Java 软件,检查 JDK 是否安装成功,并使用 JCreator 和命令提示符编译和运行 Java 程序。 一、Java 软件的安装 要安装 Java 软件,需要下载 j2sdk_5_0 安装程序,然后双击运行...

    获取微信小程序源代码反编译微信小程序说明(这里是电脑微信访问微信小程序记录)

    1 node.js 运行环境 2 反编译的脚本 3 小程序包解密工具 获取小程序包: C:\Users\yourname\Documents\WeChat Files\Applet\018fd*****\****.wxapkg 请看wechatMiniAppReverse-main里面说明,装好node.js环境后...

    VB6.0反编译程序

    VB6.0反编译程序是一款专为Visual Basic 6.0设计的工具,它能够帮助开发者或逆向工程人员解析已经编译的VB6.0应用程序,还原出原始的Visual Basic源代码。这对于理解已有的VB6.0程序的工作原理、修复bug或者进行二次...

    使用VC+VA编写_编译_运行_调试linux程序的方案(多图)

    使用VC+VA编写_编译_运行_调试linux程序的方案(多图) 教程,可以指导方便得在windows下编写程序,使用远程Linux系统编译调试 大多数使用sourceinsight + securecrt的程序员可能会需要这个

    VC程序的反编译工具depends2.2_x86

    Depends2.2_x86是一款专为VC程序设计的反编译工具,它能帮助开发者分析和调试程序对各种动态链接库(DLL)的依赖性,从而解决运行时错误和兼容性问题。下面我们将详细探讨Depends2.2_x86的功能、使用方法以及其在...

    C# wpf 动态编译简单代码

    在C#编程环境中,WPF(Windows Presentation Foundation)是一种用于构建桌面应用程序的UI框架,而动态编译则是C#的一项强大功能,允许程序在运行时编译和执行代码。这篇教程将带你了解如何在WPF应用中实现动态编译...

    VC++6.0中如何编译运行及调试C语言程序.doc

    在VC++6.0环境下编译、运行和调试C语言程序,通常涉及几个关键步骤。这个过程对于初学者来说可能有些复杂,但熟悉后会变得非常直观。以下是详细的操作指南: 1. **启动VC++6.0**:首先打开安装在计算机上的Visual ...

Global site tag (gtag.js) - Google Analytics