标签: code-generation

代码生成是不是很糟糕?

这是一个主观问题.

最近我一直在努力学习NHibernate.它的问题至少是2倍:

  1. 映射需要手动编码的xml文件
  2. 需要手动编码的实体类

虽然NHibernate是一个很棒的框架,但是需要编写映射文件并创建模仿数据库表的实体类是很难写的.有一些工具可以缓解这个问题,例如Castle ActiveRecord或NHibernate Fluent.

但是,尽管这些工具可以减少代码重复问题,但仍然需要编写一些重复代码,或者必须添加一些装饰属性.我现在正在尝试一些代码生成工具,它允许我直接从数据库生成映射文件和实体类.对我来说,这是一项更省力的任务.

你怎么看?

nhibernate code-generation

25
推荐指数
2
解决办法
3531
查看次数

Java反射:如何在运行时覆盖或生成方法?

在普通Java中,可以在运行时以编程方式覆盖类的方法(甚至创建新方法)?

即使我在编译时知道类,我希望能够这样做.

我在运行时重写的意思是:

abstract class MyClass{
  public void myMethod();
}

class Overrider extends MyClass{
  @Override
  public void myMethod(){}
}

class Injector{
  public static void myMethod(){ // STATIC !!!
    // do actual stuff
  }
}

// some magic code goes here
Overrider altered = doMagic(
    MyClass.class, Overrider.class, Injector.class);
Run Code Online (Sandbox Code Playgroud)

现在,这个调用......

altered.myMethod();
Run Code Online (Sandbox Code Playgroud)

...将调用Injector.myMethod()而不是Overrider.myMethod().

Injector.myMethod()是静态的,因为在执行"magic"之后,它会从不同的类实例(它是Overrider)调用,(因此我们阻止它访问本地字段).

java reflection code-generation runtime

25
推荐指数
4
解决办法
3万
查看次数

图形有限状态机编辑器

我正在寻找一个复杂的图形FSM编辑器,它可以以一个记录良好的输出格式导出模型,如SCXML或类似的.

任何人都可以推荐我一个工具吗?

code-generation fsm

24
推荐指数
4
解决办法
4万
查看次数

T4代:VsNamespaceSuggestion()从哪里拉?

有人知道,在.tt文件中,code.VsNamespaceSuggestion()从哪里获取其命名空间?

我遇到了一个问题,我必须更改解决方案的命名空间,我发誓我已经改变了它(文件夹名称,文件名,项目名称,项目属性,程序集信息等).但是当.tt文件运行时,它总是将旧命名空间放回其生成的类中.我被告知它来自EF模型,但我没有看到任何显示命名空间(在设计器/属性中或通过在NotePad中打开.edmx文件).

有什么想法吗?对于hack,我只是在下一行中使用我想要的命名空间覆盖它:

string namespaceName = code.VsNamespaceSuggestion();
namespaceName = "Desired.Namespace"; //HACK:
Run Code Online (Sandbox Code Playgroud)

c# t4 code-generation entity-framework

24
推荐指数
1
解决办法
3790
查看次数

Python代码生成器

我希望能够在给定AST描述的情况下执行python的代码生成.

我已经对C进行了静态分析,并在python中构建了AST访问者,所以我觉得操作语法树相对比较舒服,但我之前从未尝试过代码生成,并且正在尝试确定生成python代码的最佳实践.

具体来说,我喜欢关于如何自动完成代码生成的指针,或者指向可以使这个任务变得更简单的指向python的库的任何指针.

我的最终目标是尝试类似于csmith或工具的东西,使python代码符合PEP8.

python code-generation abstract-syntax-tree

24
推荐指数
2
解决办法
9566
查看次数

我应该如何对代码生成器进行单元测试?

这是一个我知道的难题和开放式问题,但我想我会把它扔到地板上,看看是否有人有任何有趣的建议.

我已经开发出一种码生成器,其将我们Python接口我们的C++代码(通过SWIG生成),并产生以暴露此作为Web服务所需的代码.当我开发这个代码时,我使用TDD做到了,但我发现我的测试很脆弱.因为每个测试基本上是想验证的输入给定码位(这恰好是一个C++头)我得到的输出给定码位我写了一个小引擎,从XML输入文件读取测试定义和生成测试来自这些期望的案例.

问题是我害怕进入修改代码.那个单元测试自己的事实是:复杂的,b:脆弱的.

因此,我正在尝试考虑解决这个问题的替代方法,并且让我感到震惊,我可能会以错误的方式解决它.也许我需要更多地关注结果,IE:我生成的代码实际运行并执行我想要的代码,而不是代码看起来像我想要的那样.

有没有人有任何类似于他们想要分享的东西的经历?

c++ python swig unit-testing code-generation

23
推荐指数
2
解决办法
6083
查看次数

在程序集中编写JIT编译器

我用C编写了一个虚拟机,它对非JIT VM有很好的性能,但我想学习一些新东西,并提高性能.我当前的实现只是使用一个开关从VM字节码转换为指令,并将其编译为跳转表.就像我说的那样,它的性能不错,但是我遇到了一个只能用JIT编译器克服的障碍.

不久前我已经问了一个关于自我修改代码的类似问题,但我开始意识到我并没有问正确的问题.

所以我的目标是为这个C虚拟机编写一个JIT编译器,我想在x86汇编中完成它.(我使用NASM作为我的汇编程序)我不太确定如何去做这个.我对汇编感到满意,并且我已经查看了一些自我修改的代码示例,但我还没有弄清楚如何进行代码生成.

到目前为止,我的主要部分是使用我的参数将指令复制到可执行的内存块.我知道我可以在NASM中标记某一行,并使用静态参数从该地址复制整行,但这不是非常动态的,并且不适用于JIT编译器.我需要能够解释字节码中的指令,将其复制到可执行内存,解释第一个参数,将其复制到内存,然后解释第二个参数,并将其复制到内存中.

我已经了解了几个可以简化这项任务的库,比如GNU闪电,甚至是LLVM.但是,在使用外部资源之前,我想首先手动编写,以了解它是如何工作的.

这个社区可以提供任何资源或示例来帮助我开始这项任务吗?一个简单的例子显示了两个或三个指令,例如"add"和"mov"用于生成可执行代码,带有参数,动态地,在内存中,会产生奇迹.

c assembly jit code-generation self-modifying

23
推荐指数
2
解决办法
5232
查看次数

我可以在不使用编译器的情况下使用clang获得C/C++代码的XML AST转储吗?

我设法使用cmake和visual studio 10成功编译了用于Windows的窗口.我想获得一个XML文件作为源代码的AST表示.有一个选项可以在linux(ubuntu)下使用gcc提供结果,但是在windows框中不起作用:

clang -cc1 -ast-print-xml source.c
Run Code Online (Sandbox Code Playgroud)

但是,这是调用编译阶段(我想避免).挖掘源代码并没有帮助我,因为我很吵.我可以通过使用以下方法设法生成AST的二进制版本:

clang -emit-ast source.c
Run Code Online (Sandbox Code Playgroud)

不幸的是,这种格式不能直接用于解析.是否有一些现有方法直接生成XML树而不是clang中的二进制树?

目标是在.NET环境中的其他工具中使用XML表示,因此我需要围绕本机clang lib进行一些包装以访问二进制AST.如果有人已经为.NET编写了一些二进制clang AST解析器,可能还有第三种选择吗?

如果clang前端生成的AST与编译阶段生成的AST不相等,我是否可能会遗漏这些内容.

xml code-generation clang abstract-syntax-tree

23
推荐指数
1
解决办法
1万
查看次数

在Haskell中为另一种语言生成代码

我想在Haskell中为另一种语言生成代码,但我对如何解决这个问题感到困惑.我正在寻找Haskell中语言的抽象和优雅表示,这对代码生成也很有用.有问题的语言是InstallScript(语言参考指南的链接).有人可以提供关于如何捕获Haskell类型中的InstallScript中使用的语言结构的提示(可能有示例吗?),还是指向类似项目的灵感?

haskell code-generation installscript

23
推荐指数
1
解决办法
3556
查看次数

如何查看v8生成的机器代码?

有谁知道我怎么能看到v8从Javascript生成的实际机器代码?我已经到了这里Script::Compile(),src/api.cc但我无法弄清楚从哪里去.

javascript code-generation v8

22
推荐指数
4
解决办法
8893
查看次数