- 主题:CPP实在是太复杂了 (转载)
cpp模板那块搞得确实是不必要的过于复杂,走邪路了
正路是编译期代码生成,编译器暴露语法树等,然后二次编译。可以极大降低复杂度
【 在 milksea 的大作中提到: 】
: 我觉得主要是c++追求的目标本身就很难,束缚手脚的地方又太多。
: 追求零开销抽象,把尽量多的东西留到编译期,这种目标本来就会带来很大的复杂度。其他语言经常会牺牲抽象程度,或者牺牲零开销,难度或者难受程度就不一样。rust 也是这种目标诉求,所以也不简单。
: 缚手脚的地方,比如旧版本有一些不合理的设计但又要坚持旧版本兼容,委员会扯皮,也肯定快不起来。rust 如果是 c++ 这么老的语言也会慢很多。
: ...................
--
FROM 123.116.196.*
不是,举个例子:
当C#开发序列化库的时候,需要获取传入类型。最开始实现方式是反射,但是这个很慢。
后来有优化方式改成了动态代码生成,第一次调用的时候生成il代码。这种方法性能好,但问题是动态代码生成在unity和ios上是无法使用的。
现在解决办法,是编译的时候先编译一遍,序列化库拿到exe项目完整语法树,然后针对要序列化的类型生成cs文件,然后再带上新cs文件整体编译一次
这样的好处是开发难度很低,出错信息明确。
性能也还说的过去,至少比模板快,彻底解决了cpp用模板搞元编程带来的一堆问题。
对于这种方法,c#这边没有完成100%也完成95%了。关键词是fody,和roslyn compiler as a service
【 在 ArchLinux 的大作中提到: 】
: LTO算是你说的二次编译吗?
:
--
FROM 123.116.196.*
开源通病
【 在 hothail 的大作中提到: 】
: 这也许就是问题所在呢。“就像欧盟,甚至更糟,就像联合国”
: 人越多,越是扯皮难成事
:
: ...................
--
FROM 123.116.196.*