这个c#早就能干了,roslyn几年前就搞了个compiler as a service,程序访问自己的语法树什么的,只需要引用个nuget包就行。在17年就有出版的书介绍compiler as a service了,具体什么时候开始的不太清楚。
有几个序列化的库使用了这个特性,编译期自动分析并产生代码,因为在ios上是禁止动态生成代码的。
source generator是compiler as a service进一步方便用户的简化
【 在 hgoldfish 的大作中提到: 】
: 瞄了一眼 c# 的博客。发现我也想过这个 source generator,
: 各种语言的宏,和 c++ 的 template 本质上都是在编译期生成代码。c 宏太过于简单,c++ template 则非常强大图灵完备。这两个办法都没有利用好语言本身的语法,而是生造了另外一套语法进去。而且 c++ 的 template<> 只拥有部分被描述代码的信息,qt 不得不搞了 moc 预编译分析 c++ 代码。无论怎么搞,C++ 的 template 都是半残,这条路走死了。
: lisp 以及各种函数式编程语言的宏运行在语法解析阶段,好处是灵活容易学习,坏处是太过于灵活. 每个人的 DSL 各不一样,很难看懂。
: ...................
--
FROM 61.149.167.*