来造个php代码生成器吧,实在太难写了

2011-03-12 09:12:20 +08:00
 aligo
我不是一个职业程序猿,觉得php实在太难写了,但同时php的性能还是可以的,而且最主要的是使用广泛
之前帮sai姐姐写了一个算法,最近刨出来用scala和ruby重写了,可是她要我一定用php,坚决不在服务器上装jvm
我看过(包括写过)一些php,它们其实不是代码而是密码,但是大多数情况下php就算不是最好的选择,也是唯一的选择
这里应该有不少人对php是处于爱恨交织态度,所以既然逃不开在生产环境使用php,那么至少开发过程中可以不用写它吧
于是我想了想,不如来做一个php代码生成器吧,以下是我结合使用php经历的构想,欢迎各位提意见:

* 语法简化
* 告别<?php ?>,纯净php代码,反正大家都会用模版,内嵌html是个糟糕的做法。php6也有此改进
* 每一行末的;完全是必要的
* 变量名的$号完全是没有必要,只要全局常量全大写,就不会混淆
* 类名大驼峰,方法名小驼峰,为了一些语法糖不会混淆,这个必须强制

* 类
* 为了纯洁的oop,放弃static,改为类的伴生对象
* 为了纯洁的oop,例如str_replace(...),改为str.replace(...),在字符串对象上调用方法。php6或者7也将如此
* 类的访问控制如public private protected,应该像时髦的语言那样,尽可能少写。即默认public,一个private可以连续修饰好几个方法
* 为了更好的oop,添加mixin功能。php6或者7也将如此
* 基于上两条,同时提供更加细致的访问控制,可以用来专门指定对某个类及其后代的访问权限
* 调用方法中的->改为.或空格,括号不是必须的
* (2012)push->arr,如此实现从右到左调用方法,把2012插入数组arr后端,省略括号后为2012 push->arr

* 方法
* function -> def
* 不变性原则,绝对不能传递引用
* 无上限参数列表用*更直观,而不是在方法中func_get_args()
* 可以有多个返回值


* 静态类型
我目测写php的时候一般至少有20%的单元测试代码不干别的,专门测试类型是否正确
同上,还有更多(有时候是80%了)的phpdoc注释不干别的,专门标示方法参数的类型和返回值的类型
所以静态类型虽然看上去很难用,但是有助于减少体力劳动,所以:
* 语法:str1: String = "hello",用java们的空格方法显然太难看
* 声明时,方法的输入输出一定要显式指定类型,但对于lamdba可选,因为它们大概不需要被单元测试和生成文档
* 字面量和new方法创建对象,除非特例,否则显然不必要专门指定类型
* SQL类型:我用php时,如要长距离传递SQL语句,会定义SQL类,然后执行SQL方法判断输入的类,一定得是SQL类才行。SQL类无法和字符串拼接,然后用bindParam输入参数,防止SQL注入和人为疏忽的SQL注入
* 数组的成员类型要相同,即一个成员的key是数字那么该数组成员所有key都应该是数字,字符串"1"什么的是非法的
* 隐式转换,有静态类型必然还要有它

* 函数式编程
虽然5.3开始支持了lamdba等,但是并不好用
* 语法:{(arg1, arg2) ...},而不是function(arg1,arg2){...}
* {(arg) ...}("foobar")的就地调用,结合前面的调用方法,("foobar"){(arg) ...}也可以,而且更美观
* 结合纯洁的oop,arr.each{}用以代替foreach和变态for等循环语法,同时arr还应该有map和reduce/collect/folding等方法
* 其他一些函数式方法似乎不是很必要

* 其他
* 让定义数组方法更像json些,用:而不是=>,用花括号而不是圆括号,array开头不是必须的

以上基本是我目前的想法,非常不完整,大家有兴趣可以一起做这个东西,当然一切都是可以讨论的,目前我也只是设想阶段
如果各位在哪里见过类似的东西,那就不需要重复发明轮子了XD
11852 次点击
所在节点    PHP
52 条回复
lychee
2011-03-28 12:34:21 +08:00
= = 其实我觉得 当你用N年的时间做好这个东西 并且真的很好用
但那时 云计算平台已经全面普及了 可以选择的语言相比现在丰富的多得多 这个东西一定会悲剧..
ssword
2011-03-28 16:13:33 +08:00
这已经是发明一门新的语言了,直觉上实现起来的成本该不小,而且php的虚拟机不一定都能提供支持。
不过等楼主真正开始动手的时候,想法可能就有变化了吧
aligo
2011-03-29 19:55:45 +08:00
n年什么的就太那啥了
另外还是以生成php代码为目标,并不需要考虑虚拟机之类的问题,会把一切东西都转换回php,最多就是依赖一个php写成的标准库
另外我已经动手做了一部分,目前可以处理注释和简单的赋值表达式
语法之类的也还没确定多少,做一步算一步,而且还没到可以作为一个项目存在的程度,大家要看可以私下找我
而且因为不是很有时间,所以进展缓慢。。。
yuxing1171
2011-04-11 09:41:03 +08:00
这个上面有什么好纠结的...
ashchen
2011-04-13 18:06:50 +08:00
有类似想法,但做个可视化IDE更有实际价值

把if ,while... 做成可视化的,那时候,转换成任何语言都方便
msxcms
2011-04-17 17:08:50 +08:00
要按LZ的来……我就不会写PHP了
mcfog
2011-04-30 23:57:40 +08:00
抄送条sai姐的推
http://www.fructoselang.org/ 何等OO疼高科技,Ruby to PHP。』
real_newbie
2011-05-01 00:22:37 +08:00
可以嘛. JavaScript太难写, 不是搞出来了个CoffeeScript.
aligo
2011-05-01 07:47:34 +08:00
@mcfog -A-这有什么不好

然后这东西我做了个开头,就放在一边了,等接下来放假有时间再继续
reus
2011-05-01 18:45:28 +08:00
我也打算做这个,现在在补parsing的技术
chuck911
2011-05-01 20:28:05 +08:00
每种流行语言都有它的独到之处,php的$和一堆函数str_*,array_*是有它的好处的。$带来的动态特性实现做很多有意思的功能。不同语言都有自己独有的生态环境,楼主显然就是不适应,建议先读点著名框架的源码,学满80小时再说它好不好。不过楼主真要想做这个新奇又酷的东西我绝对支持
picasso250
2015-01-07 15:46:35 +08:00
当年我的想法和 @aligo 一样, 现在已经妥协了.
@chuck911 我懂你的意思, 而且完全赞成.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/9646

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX