你们在实际工作中用过哪些代码自动生成技术? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Hanggi
V2EX    程序员

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

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

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

    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/td>
        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 文件。_(:з」∠)_
        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     Solana     5299 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 01:41 PVG 09:41 LAX 17:41 JFK 20:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86