V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Hanggi
V2EX  ›  程序员

你们在实际工作中用过哪些代码自动生成技术?

  •  
  •   Hanggi · 2020-10-26 10:46:07 +08:00 · 6443 次点击
    这是一个创建于 1489 天前的主题,其中的信息可能已经有所发展或是发生改变。

    感觉越来越多的项目在使用代码自动生成技术。

    Dart 用 bult_value 自动生成 JSON 数据解析代码, Angular 为了简化自身概念的复杂提供了大量生成组建或模块的方法, 很多 Java 工程也在使用逆向工程技术直接生成一个模块再进行修改。

    感觉代码自动生成已经成为提高效率的重要手段,你们都用过哪些 code generation 技术?

    42 条回复    2020-10-27 16:24:58 +08:00
    37Y37
        1
    37Y37  
       2020-10-26 11:02:15 +08:00
    woodensail
        2
    woodensail  
       2020-10-26 11:04:59 +08:00
    自己用 python 写的,逆向数据库生成从 moda-dtol-dao-service-controller 的全流程增删改查 java 代码。
    EscYezi
        3
    EscYezi  
       2020-10-26 13:18:20 +08:00 via iPhone
    mybatis generator
    yizmaoaa
        4
    yizmaoaa  
       2020-10-26 13:18:52 +08:00
    Kotlin Kapt 生成过类似 Record 的那种数据库操作的.....

    Vert.x 项目的 CodeGen,Vert.x 的多语言都是使用 CodeGen 生成的 API 。。
    monsterxx03
        5
    monsterxx03  
       2020-10-26 13:21:54 +08:00   ❤️ 1
    用 yacc 做一个 sql 子集
    eason1874
        6
    eason1874  
       2020-10-26 13:33:13 +08:00
    好像只做过一些循环展开
    lemonTreeTop
        7
    lemonTreeTop  
       2020-10-26 13:55:03 +08:00
    用 ftl 算不算🤗
    hccsoul
        8
    hccsoul  
       2020-10-26 13:57:30 +08:00 via iPhone
    人人开源
    wysnylc
        9
    wysnylc  
       2020-10-26 14:38:42 +08:00
    idea get/set
    wmhx
        10
    wmhx  
       2020-10-26 14:48:50 +08:00
    我见过最早的代码生成器 rapid-framework , 已经是非常好用了, 只是有些时日不更新了, 作者也不知道干啥去了.
    tikazyq
        11
    tikazyq  
       2020-10-26 15:00:21 +08:00
    crawlab 中的可配置爬虫就是用 golang 来生成的 scrapy 爬虫[doge]

    其实吧,从广义来看,将高级语言编译成底层语言或机器码,也可以算做是 code generation 。在 js 中 code generation 多了去了,各种 ts 、vue 、jsx 转原生 js,现代前端基本就是建立在 code generation 上的。为什么会需要 code generation,因为需要抽象、复用、提升代码效率,KISS 原则是编写代码的基本要领。
    iseki
        12
    iseki  
       2020-10-26 15:17:42 +08:00
    vert.x 自带的 Service codegen 有点简陋(?) 所以自己做了一个
    momocraft
        13
    momocraft  
       2020-10-26 15:18:59 +08:00
    protobuf/grpc
    openapi
    各种宏
    isir1234
        14
    isir1234  
       2020-10-26 15:19:38 +08:00   ❤️ 1
    魔改了一下 start.spring.io, 根据 sql 生成 domain, mapper, service, controller

    http://start.jiangy.me/
    Sapp
        15
    Sapp  
       2020-10-26 15:23:30 +08:00
    根据接口文档自动生成 typescript 的 interface 和调接口的函数
    ReinerShir
        16
    ReinerShir  
       2020-10-26 15:26:26 +08:00
    同 2 楼,目前能想到自动生成的东西也就这些
    qwerthhusn
        17
    qwerthhusn  
       2020-10-26 16:17:21 +08:00
    WSDL 生成 Stub
    coderxy
        18
    coderxy  
       2020-10-26 16:27:56 +08:00
    grpc 的 protoc-gen 插件
    lawler
        19
    lawler  
       2020-10-26 16:28:46 +08:00   ❤️ 1
    说个认知。需要代码生成的系统(库),一定是不够抽象的系统(库)。
    可生成,意味着可模板化 -> 可抽象 -> 可动态(配置)。

    我有些自己的库,当要完成一些常用(常见)的功能时,直接调参数就能达到我想要的功能,不需要编程。
    DoctorCat
        20
    DoctorCat  
       2020-10-26 17:43:19 +08:00
    @woodensail 兄弟牛逼, 能否开源出来白嫖一下子?
    Takamine
        21
    Takamine  
       2020-10-26 17:46:00 +08:00 via Android
    用 python 写的直接读 excel 生成 Java 文件。_(:з」∠)_
    zunceng
        22
    zunceng  
       2020-10-26 17:53:15 +08:00
    简单点的 template 复杂的上 ast
    EdwardXia
        23
    EdwardXia  
       2020-10-26 17:53:44 +08:00
    @DoctorCat 哈哈哈哈哈哈问出了我想问的
    SaigyoujiYuyuko
        24
    SaigyoujiYuyuko  
       2020-10-26 17:57:29 +08:00
    getter setter constructor (
    Asuka0947
        25
    Asuka0947  
       2020-10-26 17:57:39 +08:00
    jpa 算吗?
    bleepbloop
        26
    bleepbloop  
       2020-10-26 18:04:03 +08:00
    flask-admin, flask-graphql, grpc, openapi, orm......
    DoctorCat
        27
    DoctorCat  
       2020-10-26 18:04:20 +08:00
    anltr 生成一套简单的规则语言算么。btw 我突然想起了 thrift 的 code generation 过程…
    ho121
        28
    ho121  
       2020-10-26 18:24:52 +08:00 via Android
    excel
    changwei
        29
    changwei  
       2020-10-26 18:40:06 +08:00 via Android
    我用 idea 的 file template,自动生成一些脚手架代码(比如 react 里面的 with router,redux 的 connect,我改好文件模板以后,新建 tsx 文件会自动包裹好这些 hoc 高阶组件然后 export )
    loshine1992
        30
    loshine1992  
       2020-10-26 18:48:01 +08:00
    Android apt 生成统计代码
    yplam
        31
    yplam  
       2020-10-26 19:04:34 +08:00 via Android
    后端 crud 顺便提供了 pro table 初始模板生成接口,然后顺便把简单的 crud 前端也做了。。。
    secondwtq
        32
    secondwtq  
       2020-10-26 19:49:01 +08:00 via iPhone
    那可多了,包括且不限于 GCC,Clang,Babel,tsc,javac,HotSpot……
    woodensail
        33
    woodensail  
       2020-10-26 20:04:13 +08:00
    @DoctorCat 还是刚工作的时候写的,早丢了。没啥技术含量。基本上就是模板生成,然后把字段名替换一下就行。
    h3nng
        34
    h3nng  
       2020-10-26 20:09:50 +08:00 via iPhone
    codemodel 、gandiva
    no1xsyzy
        35
    no1xsyzy  
       2020-10-26 20:21:55 +08:00
    @lawler 异议!
    抽象到极致的也可以是通过代码生成实现的,比如 Lisp 宏
    dbskcnc
        36
    dbskcnc  
       2020-10-26 20:25:30 +08:00
    从 protobuf 生成 sql,grpc crud 接口
    nuk
        37
    nuk  
       2020-10-26 20:26:41 +08:00
    从 sql 还有注释,生成一大堆存储过程,还是我第一次用 peg 来做语法分析
    missdeer
        38
    missdeer  
       2020-10-26 20:27:34 +08:00
    jinja2, swig 做胶水层
    raaaaaar
        39
    raaaaaar  
       2020-10-27 07:26:17 +08:00 via Android
    IDE 自带的算么,感觉挺好用的。
    dany813
        40
    dany813  
       2020-10-27 09:21:03 +08:00
    自己定义模板
    threeEggs123
        41
    threeEggs123  
       2020-10-27 13:13:26 +08:00 via Android
    shuianfendi6
        42
    shuianfendi6  
       2020-10-27 16:24:58 +08:00
    tscfg
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2639 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:39 · PVG 19:39 · LAX 03:39 · JFK 06:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.