- 论坛徽章:
- 5
|
OwnWaterloo 发表于 2012-11-18 17:00 ![]()
"lua做得不够多" -> "lua官方做的不够多" -> "官方不做"
你这是迫害妄想症?
第一条是你一直在提的(没有标准异常机制(QQ里);没有合理的REPL机制(我始终没明白你说的reload是啥含义,看来不是dump二进制了,那是dump什么?dump history么?我能在Vim里面ddp交换两行,能dd10p复制粘贴十行,能一次产生一个很漂亮的代码表格,repl可以?;没有支持相对路径的模块机制;还有别的什么没?);第二条是你自己提的(标准异常机制?有啊,luasocket的newtry+protect。你是怎么说的?“不是官方的”“不兼容”是吧?);第三条你自己承认了?
麻烦你看明白行吗?Lua的模块载入是上下文无关的。是独立的。意思是这样的:
require "..foo"
这一行语句本身,并不会额外带其他的信息——这只是普通的语句而已。因此,如果写着这一行语句的文件——可能是个普通lua文件,可能是个zip包,可能是个mpk文件(我们以前的私有打包格式),可能是在一个.c文件内部,甚至可能是一个独立的.o文件(LuaJIT支持)——不附带某些指向文件格式的信息,那么就根本无法推导..到底是什么。我们假设是个zip包吧。你想想看实现,require得从某个地方知道当前文件到底在哪儿,假设我很好心的给出了一个这样的路径:
zip://c:/data.zip/main.lua
那么也得有个东西能读取这个东西啊!现在的问题来了,如果require要从多个loader载入模块呢?那么这些loader就必须协商出一套能够在所有loader之间表述1.该文件是由哪个loader载入的;2.该如何查找他的相对路径模块文件。这种机制,除了官方指定,又怎么兼容?但是这种东西,明显是不会有任何语言会做的,那么实际上能做到的事情就只有两个了:1.不支持任意loader,只能由官方决定文件从几个有限的地方载入(如Java),这样你估计更有意见了;2.只支持文件路径相对载入,其他的就不管了,这样的后果是可能导致Bug(如果载入的几个地方都是?,持续往上找的结果可能是错误的)。这两者都是不完美的。所以Lua没有做任何限制——有本事,你自己做一套机制出来,反正材料都给你了。随便你。
但是,换一个角度思考这个问题——啊,我知道,你肯定又要选择性失明了,但是慢慢看,免得等会儿又无理取闹——从构架上来说,要求所有的库在一个目录下,要求这些库有清晰的相对关系,要求载入是明确的,这究竟有多么困难?就非要相对路径载入?就非要偷偷摸摸载入几个文件然后让谁也不知道?你说闭包能隐藏数据,可是那些数据是大白于天下的,是在文件里面的,是谁打开都能看得到的。数据的内容是隐藏的而其结构是完全看得见的。这难道不和公开载入模块完全相似么?(注意,模块的结构是完全公开的,但是模块内部干了什么事情是被隐藏的)
我知道你想说什么:“我就是有这种需求,你咋地?我就是不想遵循这个规则,你咋地?我就是想要相对载入文件我就认为这个好,你咋地?”那就直接没什么好谈了。语言是妥协的产物,Lua就是不这样,而你非要这样。我说了你能自己实现,你又嫌这种实现会有各种各样的问题,那我有什么办法?
下面一个回复:你咋就知道我被限制死了?你怎么就不觉得你自己太过天马行空不考虑实际开发的需要?在大学里面,人家WordPress几个小时交个单子你就继续研究你的Clojure?你难道不是被你的那些条条框框那些所谓美感给限制死了?说难听点叫“思维固化”,说好听点叫“执着坚持”。拜托别玩这种文字游戏好吗?
最后一个回复:我用repl的经验一直很糟糕。因为你不是Vimer你体会不到。Vim的文件编辑是立体的,是跳脱的。在repl我感觉自己就被限制住了。我打个比方吧。GW-BASIC,以前在文曲星,甚至学习机上经常玩。现在看来实在是很操蛋。但是那种“操蛋”的REPL就是立体的,比如说这样:
list
10 print "hello"
OK
然后,你将光标挪到10那一行,把10改成20,回车,然后程序就变成了2行!明白吗?是很灵活的可以对屏幕上任意文本进行修改并且执行的。我可以很快的在Vim里面产生一个几行的表格,我可以随时看到语法高亮的结果,我可以不写括号,而等到写完以后统一加上,然而在repl里面,我感觉所有的高级功能,那些跳跃,那些preview都离我而去了,我只能想在Emacs里面那样,老老实实地敲代码,f功能没了,*功能,#功能,d,p,c,v这些都没了,你明白么?
继续下一个帖子:
OwnWaterloo 发表于 2012-11-18 17:17 ![]()
因为lua有个模块叫pluto,所以repl的persistent是指dump? 你看你是不是又被lua的经验蒙蔽了?
云风又怎样了? 他那个实现dump出来的东西是人可读的? 他要把这做出来了, 也有值得我追捧的点了。
你嘲笑我好了, py, el, haskell, clojure都做不到(或者我不知道如何做)dump出内存状态。
而且我也不知道dump出来了有什么用。 又关我什么事?
是什么原因让你变得这么不自信了? 一提到关于lua的事,就非要得出"lua是可以做到的","lua有很多优美的解决方案","不然就是需求的错"的结论不可?
是因为你自己已经卖给lua了吗? 于是lua有什么疑似短板就让你很焦急?
我完全不理解repl所谓persistent,看来你也不打算科普了。事实上我从没用到过repl的persistent的能力。我也不知道reload到底是什么含义,当然你也不打算解释了。所以你就是来秀你的优越感的?
那是,我也不知道所谓的基于repl的开发,而不是基于edit-compile-eval的开发到底有啥优越感可言,你嘲笑我好了。我就只会edit-compile-eval。对我来说这真的好不方便好难啊,我得按gc才能执行正在编辑的文件呢!
你也学会给我安上这种态度了?我什么时候不自信了?你哪只眼睛看到我不自信了?有缺陷做不到的本来就是做不到的,难道我没有说明这一点?看看你的逻辑吧:
Lua做得到 - 但是它不是官方的!(针对异常机制)
Lua做不到,但是这种想法本身就是有缺陷 - 你看看,就是做不到吧?有缺陷?我咋看不出来?(针对相对模块载入)
Lua做得到,官方也兼容,但是这没多大意义 - 有没有意义你说了算?Roberto说了算?天王老子说了算?我就说有意义。
Lua做不到,不过你可以用Lua的方式来组织/设计 - 哈哈哈你承认做不到了吧?做不到就是搓!
这啥逻辑?你这除了让我承认“哎呀Lua好搓啊,哎呀我咋就用这么挫的东西写了这么久的代码捏?”?是不是我承认以后你还得加一句“是啊是啊,你看你多搓,你看你的思维全被Lua给限制住了!!赶紧皈依我佛吧!”,这算啥?
下面的三个帖子我就不想回了。实在是太乱了,基本上有些观点上面也已经提出了。估计你也看得出来。实际思想其实很简单:
- Lua本身先不管做不做得到了,这货很简单粗暴,所以也没那么多好争的。语法上的灵活性导致几乎所有想法都能做到,如果你要争论是否是官方的是否是约定俗成的那我也没办法。
- 我并不认为追求简单就是在固步自封。我就是不喜欢上百M的编译器。
- repl我用过,但是感觉没有在editor里面那么灵活,你也是windows,你怎么能闭着眼睛说瞎话呢?当一个函数很长,长到了prompt要显示PS2的时候,万一你打错了,回车的结果是error的后果是什么?是一行一行翻过去重新按回车,然后把错的地方改对!那我为什么不能在editor里面一次改对,然后执行呢?这样不是更快么?clojure的repl我就遇到过这种痛苦事儿,写fac写了三行,一按回车给了个错,然后我发现某括号没对准,于是我翻到第一行,回车,翻到第二行,回车,翻到第三行,光标移动到最后,加),回车,好了,在Vim里面我早就在试验第三种写法了!!
- 别有事没事给人扣帽子。别人说不是这个东西的错,就是固步自封?非要让别人说这个东西不好这个东西不对这个东西生来就是错?你这叫啥来着?
就是这样。
|
|