读书人

fastCSharp代码生成倚重新实现讨论帖

发布时间: 2012-12-19 14:13:15 作者: rapoo

fastCSharp代码生成器重新实现讨论帖
fastCSharp准备迁移代码生成器部分,我简单介绍一下我以前的实现(参考类库下载)。
1、C#程序模板是可编译的C#程序,不是文本文件。所以编写模板的时候,确定性的程序可以得到IDE的支持,包括错误提示、重构等。
2、模板与数据是分离的,输入参数主要是.net元数据和自定义属性组成视图,类似于网站概念里面的界面与程序分离。
3、在编译事件中执行,无需界面操作。

如果模板需要可编译,那么要符合C#语法规定。
1、使用@作为普通变量识别标志,后面接连续的英文、数字、下划线、小数点。比如:
return @type.fullName/**/.showjimCode.memberMap.memberNames;
type.fullName就是绑定视图数据的,/**/用做结束分隔符,因为后面接的是小数点。
2、有两种等价的逻辑格式定义,NAME用于绑定视图数据,开始符与结束符必须对称:

#region COMMAND [NAME]
//...
#endregion COMMAND [NAME]

/*COMMAND:[NAME]*/
//...
/*COMMAND:[NAME]*/

现在支持7种COMMAND
* LOOP/FOR 表示循环,NAME必须绑定到集合
* IF 绑定的数据为true或者不为null时输出代码
* NOT 绑定的数据为false或者为null时输出代码
* NOTE 表示屏蔽代码段输出,不需要定义NAME
* NAME 用于标识一个子段模板,可以被别的模板引用
* PART 用于标识一个子段程序代码,用于代码的分类输出
* VALUE 输出绑定的数据(这个很少用,一般情况用@替代)
不明白的结合看看setup\cSharp\template\*.cs

大家看看有什么问题,一起讨论,下个星期开始迁移代码生成器这部分程序(不包括模板)。
[最优解释]
引用:
引用:还不是很明白做这个目的
代码生成器,是根据程序模板生成逻辑类似的程序,替代那种“简单重复”的手写代码。
当然有些功能可以用反射来做,不过反射的运行效率比价差,在这种情况下代码生成就是又来取代反射的。
也有一些功能可以用AOP来做:有的实现有副作用(比如必须继承自某一个类,而且还是反射实现的);也有用Emit不用反射的实现,……


这个是生成程序,而不仅仅是静态的代码文件,可以这样理解吗?
[其他解释]
引用:
“迁移”?

不是随便用时髦术语的,对菜鸟应该使用(起码)正确一点的规范用语。

谢谢关注,重新设计+重写代码。
因为我也是菜鸟级别的,不懂规矩^-^。
[其他解释]
好贴,推荐一下,继续努力!
[其他解释]
还不是很明白做这个目的
[其他解释]
谢谢你的分享
[其他解释]
该回复于2012-11-05 16:06:55被管理员删除
[其他解释]
谢谢你的分享
[其他解释]
谢谢你的分享
[其他解释]
该回复于2012-11-05 17:15:11被管理员删除
[其他解释]
该回复于2012-11-05 17:15:11被管理员删除
[其他解释]
该回复于2012-11-05 17:15:11被管理员删除
[其他解释]
该回复于2012-11-05 18:01:05被管理员删除
[其他解释]
谢谢你的分享
[其他解释]
谢谢分享 ........
[其他解释]
该回复于2012-11-05 18:28:21被管理员删除
[其他解释]
谢谢不错哟
[其他解释]
谢谢你的分享
[其他解释]
谢谢你的分享
[其他解释]
谢谢分享。。。。
------其他解决方案--------------------


顶起。。。。。。。。。。。。。。。。
[其他解释]
谢谢,真心感谢!真心感谢!
[其他解释]
谢谢你的分享....
[其他解释]
不错不错!谢谢你的分享
[其他解释]
谢谢不错哟ss
[其他解释]
谢谢你的分享
[其他解释]
谢谢你的分享
[其他解释]
该回复于2012-11-05 22:01:26被管理员删除
[其他解释]
谢谢你的分享
[其他解释]
该回复于2012-11-05 23:01:06被管理员删除
[其他解释]
谢谢分享。。。。。
[其他解释]
谢谢,真心感谢!真心感谢!
[其他解释]
谢谢你的分享
[其他解释]
谢谢分享
[其他解释]
该回复于2012-11-06 01:03:25被管理员删除
[其他解释]
谢谢分享啊,真好
[其他解释]
看看 怎么样 的
[其他解释]
谢谢不错哟fff
[其他解释]
只能说谢谢了
[其他解释]
好东西,支持了!
[其他解释]
该回复于2012-11-06 14:34:17被管理员删除
[其他解释]
该回复于2012-11-06 11:45:14被管理员删除
[其他解释]

引用:
还不是很明白做这个目的

代码生成器,是根据程序模板生成逻辑类似的程序,替代那种“简单重复”的手写代码。
当然有些功能可以用反射来做,不过反射的运行效率比价差,在这种情况下代码生成就是又来取代反射的。
也有一些功能可以用AOP来做:有的实现有副作用(比如必须继承自某一个类,而且还是反射实现的);也有用Emit不用反射的实现,不仅要掌握IL语言,而且难以通用。
当然也有一些功能AOP做起来比较方便的,代码生成却不是那么好做的。而且代码生成会产生新的东西(类或方法),而不是使用原始定义,这是缺点,但也有好处,这样不会混淆原始定义和新生成的定义。
也有一些是反射与AOP都做不了的,所以我选择了代码生成,而且代码生成可以控制程序运行效率。
[其他解释]
标记一下,以后好好看
[其他解释]
顶。。。。。。。
[其他解释]
好东西,支持了!
[其他解释]
该回复于2012-11-06 21:25:40被管理员删除
[其他解释]
楼主牛逼~~
[其他解释]
谢谢,这个文章很好
[其他解释]
顶一个 好啊 真好啊
[其他解释]
谢谢,这个文章很好
------其他解决方案--------------------


谢谢,
[其他解释]
该回复于2012-11-08 15:49:09被管理员删除
[其他解释]

引用:
这个是生成程序,而不仅仅是静态的代码文件,可以这样理解吗?

是的,现在准备迁移的是用来生成程序的模板解析器。
[其他解释]
该回复于2012-11-10 14:39:21被管理员删除
[其他解释]
哈哈哈
.....
[其他解释]
支持,谢谢了
[其他解释]
学习了,顶一下。
[其他解释]
该回复于2012-11-11 00:57:14被管理员删除
[其他解释]
“迁移”?

不是随便用时髦术语的,对菜鸟应该使用(起码)正确一点的规范用语。
[其他解释]
该回复于2012-11-11 01:08:06被管理员删除
[其他解释]
感谢楼主分享,密切关注前沿技术!
[其他解释]
不懂,貌似很nb ..啊
[其他解释]
该回复于2012-11-12 14:24:15被管理员删除
[其他解释]
该回复于2012-11-11 14:37:24被管理员删除
[其他解释]
谢谢你的分享
[其他解释]
引用:
万一逻辑要变,就全部手工改?

逻辑要变?能不能具体点。
[其他解释]
null
[其他解释]
谢谢你的分享
[其他解释]
该回复于2012-11-15 15:20:54被管理员删除
[其他解释]
引用:
引用:还不是很明白做这个目的
代码生成器,是根据程序模板生成逻辑类似的程序,替代那种“简单重复”的手写代码。
当然有些功能可以用反射来做,不过反射的运行效率比价差,在这种情况下代码生成就是又来取代反射的。
也有一些功能可以用AOP来做:有的实现有副作用(比如必须继承自某一个类,而且还是反射实现的);也有用Emit不用反射的实现,……


万一逻辑要变,就全部手工改?
[其他解释]
该回复于2012-11-17 14:46:38被管理员删除

读书人网 >.NET

热点推荐