自己动手造语言
一个人选用一个语言的理由可能是很少的,比如觉得开发效率高,觉得适合做网页,需求要求,或者甚至只因为作者长得帅;想要造一个语言的理由就比较多了,比如觉得xx语言写起来太麻烦,xx语言不安全,xx语言太慢,xx语言的风格不符合自己的审美等等
最早产生这个想法是09年,看完python的源码剖析后感觉编译原理里面的一些东西串起来了,其实大学就学过,只不过那时候大部分时间用来学lex和yacc怎么用,结果现在也忘了,其实这俩玩意完全可以不用。我得说龙书的确是本好书,如果它能再精简一些的话就更好了。不过,那时候也只是大概看懂了py的实现,主要是为了写C扩展不至于出问题,实际使用中py+C足够了,究其原因还是需求问题,在工作中简单的需求用脚本就能搞定,等需要用C的时候,相对开发时间又会宽裕很多,再者还可以用py建模然后用C重构,当然还有一点是,工作中可以有很多时间去做分析和设计,还有沟通,所以代码这块没有那么大问题
后面是自己做到projecteuler的时候,矛盾才凸显出来,首先是需求分析(思考过程)太长了,很难想象在好容易想出一个抽象方案后,还来设计数据结构和具体算法(或者还要考虑内存问题,如果用C的话),这等于心理自虐,所以我大都用py做,但第二个问题是py很慢,比如跑半个小时,于是又用java改写,结果等改完,py那头也快跑出结果了,如果最后答案不对,又得修改,来回很麻烦,再者我又觉得java写起来太啰嗦了,而且某些实现(高精度计算,泛型等)个人觉得就是一坨(原因以后分析)。。还不如用py。而且语言特性不同,改起来也很麻烦,比如py里面我有个(1,(2,3),"abc")这种tuple,可以直接作为dict的key,改java就呵呵呵了,自己搞class和hashCode吧
所以简单说,就是要一个语言,开发要像py一样简单(包括库和内置数据结构等),然后运行效率还需要高,向C看齐。是不是觉得耳熟?没错,当初go语言的广告就是这么说的(貌似非官方?),只是后面的实际情况大家都懂的,语法方面萝卜白菜了,反正我很不习惯,效率方面参考我之前的日志,虽然bench只有一个,但总的来说我猜不会超过java。或许已经有了这种语言,不过我懒得学……所以觉得还是自己尝试搞一个新的,比对目标可以选go现在的版本,C和java就别想了
最后的问题就是怎样才能搞定,语言是一个很复杂的东西,最早的fortran编译器花了18个人年,而现在,如果能充分利用已有的理论和技术,可以很方便地实现自己想要的,当然前提是对相关的东西比较熟悉了