标签: code-generation

为什么没有GWT-和脚本#式框架成为主导?

使用GWT,我们可以用Java编写代码并将其转换为JavaScript代码.使用Script#,我们可以用C#编写代码并将其转换为JavaScript代码.听起来GWT和Script#将使网络开发人员免受痛苦的痛苦.那么,为什么这些工具没有占主导地位?为什么还有人专门写javascript代码?

javascript gwt code-generation script#

8
推荐指数
4
解决办法
1564
查看次数

有没有什么可以使T4代码更干净...干净?

我有一个相当复杂的东西塞进T4模板.基本上我采取类似的东西

{= foo =}更多文字...

并将其转换为类(视图),如下所示:

public class MyView
{
  public string foo{get;set;}
  public string Write()
  {
    return foo+@" more text...";
  }
}
Run Code Online (Sandbox Code Playgroud)

生成的代码当然要复杂得多.无论如何,T4模板现在超过600行代码,并且真正变得难以管理.我认为主要问题是混合代码和"内容"(即静态代码).我不确定如何干净地解决这个问题(当然不会影响生成的代码).我也没有看到任何可行的单元测试我的T4代码的方法,除了简单地测试它的T4执行错误.当然,似乎几乎不可能测试它生成的代码.

我可以使用任何"模型 - 视图"类型的框架或技术来使我的T4模板代码更干净吗?

c# t4 refactoring unit-testing code-generation

8
推荐指数
2
解决办法
605
查看次数

如何在保存时在eclipse中运行注释处理器

目前我在eclipse中为一个项目生成带有注释处理器的文件

Right click on project > Run As > Maven Clean
Right click on project > Run As > Maven install
Run Code Online (Sandbox Code Playgroud)

这非常耗时.如何设置eclipse以使其在保存时运行注释处理器?

我有"自动构建"功能集,但它似乎忽略了注释处理器.BTW我正在使用m2e apt插件"自动配置JDT APT激活".

eclipse code-generation save maven annotation-processing

8
推荐指数
1
解决办法
2130
查看次数

基于单元测试以生成的代码编写的程序

当我在进行测试驱动开发时,我思考是否可以通过基于测试的生成代码完全开发出假设程序.即是否有能力让生成器专门创建代码来传递测试.编程语言的未来只是编写测试吗?

tdd unit-testing code-generation

8
推荐指数
1
解决办法
709
查看次数

FreeMarker:使用宏时保持标识

我正在使用FreeMarker模板引擎从Web服务的抽象描述中生成一些php类.我的问题是,当我在FreeMarker模板中调用一个宏时,宏在宏调用之前插入没有左手空格的文本.

exampleTemplate.ftl:

<?php
    class ${class.name} {
        <@docAsComment class.doc/>

        <#list class.fields as field>
        $${field.name};
        </#list>
        <#-- ... -->
    }
?>

<#macro docAsComment doc>
/*
<#if doc.title != "">
* ${doc.title}
</#if>
<#list doc.content as content>
<#if content != ""> * ${content}</#if>
</#list>
*/
</#macro>
Run Code Online (Sandbox Code Playgroud)

这将生成如下内容:

<?php
    class foo {
/*
 * foo
 * bar foo, bla
 */          

    $a;
    $b;
    }
?>
Run Code Online (Sandbox Code Playgroud)

一种解决方案是,将前导空格作为参数提交给宏,但这使得模板更难以理解.有更好的解决方案吗?

java code-generation freemarker

8
推荐指数
1
解决办法
2373
查看次数

如何在Haskell中使用部分顺序对列表进行排序?

我有一个使用语句块的程序EDSL.

尽管语句之间可能存在依赖关系,但这些语句没有按特定顺序添加到块中.

但是,在编译EDSL期间,我需要确保语句按依赖顺序排序,例如

B := A
C := B
E := D
Run Code Online (Sandbox Code Playgroud)

由于并非所有语句都具有依赖性,因此没有总顺序(例如,E := D上面是独立的,可以放在任何地方).没有循环依赖关系,因此列表排序应该是可能的.

我试图通过使用Data.List.sortBy和定义Ordering哪些将返回EQ意味着语句没有依赖性来破解解决方案.这适用于一些示例,但不适用于一般情况,例如,订购以下内容无效:

C := B                           B := A
D := C    = should produce =>    C := B
B := A                           D := C
Run Code Online (Sandbox Code Playgroud)

这是因为默认排序插入排序并且只确保插入的项目小于或等于下一个.

我已经在互联网上搜索了Poset实现,但没有找到任何适用的东西:

altfloat:Data.Poset定义Ordering = LT | GT | EQ | NC(NC非可比的),这是好的,但所提供的sort呈NaN样不具有可比性的项目,只是抛出他们离开.

logfloat:Data.Number.PartialOrd类似于上面的除了用途Maybe Ordering,我没有在包中的任何地方看到排序功能.

Math.Combinatorics.Poset我还没弄清楚如何使用它或它是否适用.

下面是一个包含绑定和非绑定语句的最小示例.非biniding语句的顺序很重要,并且它们必须保持原始顺序(即排序需要与没有依赖关系的语句保持稳定).

我希望有一个简单的解决方案,而不使用完整的依赖图...

module Stmts where …
Run Code Online (Sandbox Code Playgroud)

sorting haskell code-generation poset

8
推荐指数
1
解决办法
1082
查看次数

是否有可能在纯Rust宏中编写像`print!`这样复杂的东西?

我开始学习Rust宏,但文档有些限制.哪个好 - 我猜他们是专家.虽然我可以进行基本的代码生成,特性的实现等等,但是一些内置的宏似乎远不止于此,例如各种打印宏,它们检查字符串文字并将其用于代码扩展.

我查看了源代码print!,它调用了另一个名为的宏format_args.不幸的是,这似乎并没有构建在"纯Rust"中,评论只是说"内置编译器".

是否可以编写像print!纯Rust宏一样复杂的东西?如果是这样,它会怎么做?

我实际上对构建"编译时间"感兴趣 - 基本上将某些固定字符串识别为在编译时修复的"关键字".这可能是高性能的(可能)但主要是我只对代码生成感兴趣.

code-generation rust rust-macros

8
推荐指数
1
解决办法
225
查看次数

生成F#代码

T4是C#/ VB.NET的"官方"代码生成引擎.但F#不支持它(这是从四月开始,但我找不到任何新的提及).那么生成F#代码的好方法是什么?

编辑:

我想在F#中实现2-3个手指树.我已经在C#中实现了它们,所以这应该是一个很好的比较.树的"数字"和节点可以表示为数组,因此

type 't FingerTree = Empty | Single of 't | Deep of 't array * (('t FingerTree) array) lazy * 't array
Run Code Online (Sandbox Code Playgroud)

但是,这些数组的最大大小非常小,所以很高兴

type 't Digit = Digit1 of 't | Digit2 of 't*'t | Digit3 of 't*'t*'t | Digit4 of 't*'t*'t*'t
type 't Node = Node2 of 't FingerTree * 't FingerTree | Node3 of 't FingerTree * 't FingerTree * 't FingerTree 
type 't FingerTree = Empty | Single of …
Run Code Online (Sandbox Code Playgroud)

t4 f# code-generation code-templates

7
推荐指数
3
解决办法
2318
查看次数

为x86处理器生成程序集

我目前正在通过Andrew Appel的Java中的现代编译器实现工作,我正处于建立低级中间表示的地步.

最初,我决定瞄准JVM并忽略所有低级机器的东西,但为了学习我不太了解的事情,我已经改变了主意.这会改变我的IR,因为以JVM为目标允许我(或多或少)挥动我的手来进行方法调用或构建对象.

Appel书没有详细介绍任何特定的机器架构,所以我想知道在哪里可以找到我需要知道的更远的东西.

我现在知道的事情我需要知道的是:

  • 使用哪个指令集.我有两台可以开发的笔记本电脑; 两者都有Core 2 Duo处理器.我目前的理解是x86处理器大多使用相同的指令集,但它们并非完全相同.

  • 操作系统是否影响编译的代码生成步骤,或者它是否完全依赖于处理器.例如,我知道生成在32位与64位平台上运行的代码有所不同.

  • 如何组织堆栈帧等.何时使用寄存器与在堆栈上放置参数,调用者保存与被调用者保存,所有这些.我曾经想过这将与指令集一起描述,但到目前为止我还没有在任何地方看到这个特定的信息.也许我在这里误解了什么?

完全欢迎链接到资源以代替答案.

compiler-construction x86 assembly code-generation

7
推荐指数
1
解决办法
634
查看次数

简单的CRUD生成

这就是我所拥有的:

  • 一个实体关系模式,以Doctrine 2.0为模型(在PHP中);
  • 生成的数据库,在MySQL服务器上.

这就是我要的:

数据库的一个非常基本的CRUD Web界面,允许我(你猜对了!)创建,读取,更新和删除记录,并为实体和关系而不是记录实现CRUD操作提供额外的功劳.

现在,我自己编写Web应用程序很糟糕(读:我很懒).是否有任何选项可以从MySQL数据库或一组Doctrine实体生成CRUD Web应用程序?


  1. 我愿意停止使用PHP(因此重写JPA,Ruby ActiveRecord等实体),但不是MySQL.
  2. 我看到了很多类似的问题:但是,大多数问题的答案都是在PHP代码中提供CRUD操作,或者建议使用Doctrine.
  3. 一个答案,如"没有这样的工具,不要懒惰"也将不胜感激.

php code-generation crud doctrine-orm

7
推荐指数
1
解决办法
4801
查看次数