免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: __BlueGuy__
打印 上一主题 下一主题

[C] Lua 造成的代码冗余太严重了, 这个现状怎么改善? [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
21 [报告]
发表于 2012-11-18 17:00 |显示全部楼层
starwing83 发表于 2012-11-18 16:19
回复 52# OwnWaterloo

很奇怪的事情是,1+1=2有什么好辩论的。你的观点无非就是“Lua做的不够多”,OK,我举例子说有人做了,你的观点就成了“Lua官方做的不够多”,然后你自己还引了一段话说明“官方就是不做”,你这样让我怎么办?是不是要我说“55555Lua你怎么这样啊,这简直就是上帝都救不了你啊!因为上帝不是Lua的作者啊!!他无权改变什么啊!!算了,我自己写个语言吧,就叫OWLua好了,我就是作者,我能做很多”,这样?

这是抱怨,对不对?不能解决任何问题,对不对?能解决问题的方案,我贴的还不够多么?甚至连Lua对模块的要求很低,只要返回导出函数的表即可,因此任何的模块系统的实现,都能兼容现在所有的模块。你还要我说什么?是不是还要说“可是官方不支持啊”。那你还要我怎么办?发明一个新语言?一个和Lua的区别仅仅是官方支持模块载入的新语言么?



"lua做得不够多" -> "lua官方做的不够多" -> "官方不做"

你这是迫害妄想症?

只有最后一句是我引的pil里的,是为了说明即使是lua作者也是尊重私有/公有区分的,只是lua语言因为各种原因不提供表达,而是让程序员自己去协商。
只是为了说明:连lua作者都承认这是有用的,只是lua不做。 而你要帮lua维护到:这是不需要的, 可笑的。 你这不是自掌耳光?
哪天lua要是真支持了相对路径, 没屁股让你舔了, 你的脸该往哪放?


starwing83 发表于 2012-11-18 16:19
问题是,这里面提到的,基本上100%都不是语言的问题,不是语言“做不到这个做不到那个”,而是说那种东西有先天的缺陷,语言做到这个本身是有问题的(如相对载入——那个相对的文件本身可能自己根本就不是文件);而有些是语言能做得到,但是不是标准的;最坏的情况是你得自己做;还有什么是做不到的?


那是因为你在这贴里,也包括平时,都被lua这个框给限制死了。

starwing83 发表于 2012-11-18 16:24
哦?所以你的论点就转为嘲讽我Vim无法开repl了?你Emacs的repl模式威武牛逼?你是不是还得说,”Clojure鄙视所有用Vim的人!Emacs威武牛逼可以REPL!”这样?套用你的句型,连Clojure自己都没有锁REPL是自己的卖点吧?你有什么资格站在clojure的角度嘲笑Lua?


包括这个,也不是嘲讽vim。是你自己刻意强调"一点一点敲代码",没达到原有目的,反而暴露了你自己思想僵化。 这才是我嘲讽的东西。

不是那种东西有先天缺陷,做到这个是有问题的,而是你根本就不愿意往这方面去想。 你潜意识里已经认为这是没必要的了, lua已经做得足够好了。


PS: clojure不需要特别强调repl是自己的卖点。 因为这是lisp的卖点。 然后越来越多的语言引入了。
http://clojure.org/features 看第1项。
以及clojure现有的书都会花或多或少的篇幅说repl。
最多的在"clojure programming"里, "PART III Tools, Platform, and Projects", "CHAPTER 10 REPL-Oriented Programming"一整个chapter, 20+页都是。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
22 [报告]
发表于 2012-11-18 17:17 |显示全部楼层
starwing83 发表于 2012-11-18 16:19

哦,Repl然后dump state这个估计有困难,但是依然做得到,有个模块叫Pluto——当然不是官方的!我想问问,你自己的发言:

clojure可以dump repl的当前状态?Python可以?Elisp可以???Haskell可以??我怎么一个都没听说过呢?这就是你嘲笑的方式么?为其他语言装上他们根本就不具备的功能,然后说Lua没有这个功能?看过云风写的文章么?他做到了将Lua持久化(采用客制化内存分配器的方式),以及将Lua状态共享(同样的方案)的方法,clojure做个看看?JVM可以客制化内存分配器?别逗了。

而且还说了,你真想dump——我就听说过matlib有这个功能,可以直接dump,有人好像就因为引用没清干净dump一个函数dump出来200M的文件——的话,有Pluto,你以为Lua就真做不到?

好,现在轮到我来嘲笑你了,Python怎么做到这个?



因为lua有个模块叫pluto,所以repl的persistent是指dump? 你看你是不是又被lua的经验蒙蔽了?
云风又怎样了? 他那个实现dump出来的东西是人可读的? 他要把这做出来了, 也有值得我追捧的点了。


你嘲笑我好了, py, el, haskell, clojure都做不到(或者我不知道如何做)dump出内存状态。
而且我也不知道dump出来了有什么用。 又关我什么事?

是什么原因让你变得这么不自信了? 一提到关于lua的事,就非要得出"lua是可以做到的","lua有很多优美的解决方案","不然就是需求的错"的结论不可?
是因为你自己已经卖给lua了吗? 于是lua有什么疑似短板就让你很焦急?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
23 [报告]
发表于 2012-11-18 17:24 |显示全部楼层
starwing83 发表于 2012-11-18 16:37
如果你用一个模块叫做stm,那么除非文档明确说明,否则只有require 'stm'是导出给你用的。

就这么难理解?


这是lua里的惯例? 至少大多数模块都是这样?
那这样也行。


starwing83 发表于 2012-11-18 16:37
我已经说了无数遍了,你选择性失明?

你前面有说过无数次? 我怎么感觉是第1次看到?
你早这么说嘛, 清清楚楚明明白白的。
我理解能力又低, 而且看到一大篇一大篇讲"哲学"的文字就烦躁, lua的哲学关我什么事?
这么说你可能会觉得我有失公允。 haskell/clojure/lisp的哲学也不关我的事。 满意了么?

你要真的在一大段"哲学"里插入惯例, 那我真有可能选择性失明, 虽然我是无心的。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
24 [报告]
发表于 2012-11-18 17:31 |显示全部楼层
starwing83 发表于 2012-11-18 16:22

不一定是打开的,是可以在C源代码里面直接loadBuffer的,你如果真的开发过Lua甚至是Python你就会发现,有些时候异常给出的dump stack有些项是问号,就是因为在C源代码里面干活根本取不到文件名。

你如果认为我连问号都没看到过。。。 也太小看我了。。。
C源代码里loadBuffer, 那这个C源代码又是被谁调用的?  这个谁又是被另一个谁调用的?
这个stack trace里一直往上, 难道全都是问号?


starwing83 发表于 2012-11-18 16:22
另一个例子:Lua(甚至是Python)都支持不同的载入器,可能那个”文件“根本不是物理文件。而是,比如说,zip里面的某个文件。这种情况下的”相对载入“就必须提供在任何载入器上都兼容的uri表示方式——你不觉得这个很扯么?

既然要加载zip, 那lua肯定官方不支持, 这iso c都没有的东西, 怎么支持啊。
那么。。。 哪个读取zip的库没有相对路径的概念。。。

有多少介质是没有相对路径这个概念的?  相对路径是多么基础, 再基础不过的概念?


starwing83 发表于 2012-11-18 16:22
甚至连Java都不支持相对载入,必须设置CLASS_PATH。Android的ClassLoader本身还有点暧昧不清的问题,网上文章一把一把的。


别和java比。。。  java的class path甚至current working directory在整个JVM生存期内都是不能改变的, 你敢信?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
25 [报告]
发表于 2012-11-18 17:53 |显示全部楼层
starwing83 发表于 2012-11-18 16:36

是嘛,早这么说不就OK了,你又不用,那这些“需求”又是什么呢?哦,Lua支持Repl了,你吐槽官方不支持,OK我们假设官方被你的霸王之气打动,开始支持REPL,你又开始说Lua不支持宏,不支持AST,不支持不可变数据,不支持STM,还不支持纯函数式开发——您玩Clojure呢?

本来你就不用了,又哪里谈的上需求,本来就是完全不同的应用领域和开发方式,你又哪里谈得上缺陷?

那是因为lua至少还在一个candidate列表里。
如果是ruby什么的, 我根本就懒得关系它支持或不支持什么。 它支持everything is an object就够了。


starwing83 发表于 2012-11-18 16:36

这就是我对于“不按照正统方式做事”觉得很不好的原因。因为你藐视正统,你就会轻视它,轻视它的一切方案。你藐视C++正统,所以你就看不到遵守正统带来的描述逻辑方面强大的工具。你藐视Scheme正统,所以你看不到Scheme其实可以通过自行开发编译器的方式支持几乎任意语法。你藐视Haskell正统,所以还在静态的时空分析的深渊里面挣扎。现在是Clojure了恩?那我就不知道你会怎么去用Clojure了。

C++正统的描述逻辑方面的强大工具? 是啥啊? 给我介绍介绍啊? 别说是UML什么的啊?

通过自行开发编译器的方式支持几乎任意语法, 别天真了, 你见过几个scheme项目是这么做的? 它们又该怎么与其他人库合作?
这真是scheme的正统? 还是你意淫出来的正统? 尽信书不如无书。 书上说的, 和现实中做的很有可能是两个样子。

Haskell的正统是怎么的? 你教教我?Haskell正统程序员又不用做时空分析了? 嗯?


至于轻视,能别给我扣帽子行么?你自己往回翻,我说的是不是在正统里找不到办法才开始考虑非正统的?
我轻视的不是正统,而是对正统绝对服从


starwing83 发表于 2012-11-18 16:36
你可以藐视正统,如同你在C++里面做的那样,但是,在你学习的时候,你并没有藐视他。这样就够了。了解它的哲学,理解他的做法,再去藐视它,OK。但是在完全没理解到他的精髓他处理问题的态度和方式的前提下,你就去藐视它——你纯追求心理优越感么?

同上,别给我扣藐视。 将我抹黑了就能显得你正确了么? 你怎么开始耍这些手段了?



starwing83 发表于 2012-11-18 16:36
你可以说Lua很简陋,这没什么。但是你不能说Lua不完备,因为在概念上它的确是完备的。你可以说Lua官方没有提供什么支持,但是你不能说因为官方没有提供支持就会导致混乱和不兼容——你看到了,就算是官方已经提供了支持(自5.0开始有require),依然有人直接dofile,官方的态度和精髓我已经说了:平面,显式。OK既然你无视掉,那你就继续追求你的道德优越感吧。

先是哲学, 现在又开始优越感, 道德。 你心是有多虚?

java在概念上还是完备的呢。

好,精髓是平面和显式, 那它们与相对路径的关系是?


starwing83 发表于 2012-11-18 16:36
Lua是一门不强制的语言,除非是进行不下去的错误,Lua选择相信程序员,这和C一脉相承。所以我认为每个学习C的人,都应该学习一下Lua。为了某些子虚乌有的原因报错——可能有这个需求——这绝对不是Lua的哲学,所以Lua不这么做。这不是功能缺失,就这么简单。

某些人给我说在项目里推行用闭包控制访问权时是多么意气风发。
那时候你怎么要因为某些子虚乌有的原因去强制了呢? 怎么不就让私有域随便被访问呢? 怎么就不遵守lua的哲学了呢

限制私有域与限制库的私有组织方式到底有什么区别? 哦, 区别就是一个lua至少还是有闭包来支持, 另一个没有。 所以后面就符合lua不强制,和C一脉相承的哲学。
前者? 管它的呢。 大多数人都对闭包来限制感到很满意。 只有我这种讨厌的人才会去抱怨、 才会去戳人痛处、 故意刁难。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
26 [报告]
发表于 2012-11-18 18:18 |显示全部楼层
starwing83 发表于 2012-11-18 17:59
回复 63# OwnWaterloo

1. 你自己看清楚没?这两个表述有什么区别?Lua的强制除了报错还有什么?

2. 我已经说的很明白了:除非文档说明,否则除了模块的名字,其他子模块都是私有的。不明白?

C++的class不写存取权限符,就是默认private,不明白?

C的char*不主动给它赋值一块合法内存,其值就是未初始化的,不明白?


我最原始的问题是"如何避免无意间",如何"有一种方式让库的作者让库的用户知道"。 而且也列举了各种方式, 从最强最弱。
"强制"是你加的。

我 —— 直到现在都 —— 没看到你夹杂在各种"哲学"里的"除了模块名字,其他子模块都是私有的"的描述。
后来你单独说出来了。 这没看到, 算我的错。
现在我知道了 —— 我相信在lua方面你还是不会随口打哈哈 ——  如果写个stm.lua, 然后不加其他说明, 用户require stm.atomic就是他自己活该。 谢谢!

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
27 [报告]
发表于 2012-11-18 18:25 |显示全部楼层
回复 61# starwing83

>> 你藐视Haskell正统,所以还在静态的时空分析的深渊里面挣扎。

喂,别走啊。至少走之前教教我正统的Haskell该怎么做时空分析啊。我还挣扎着呢,拉兄弟一把啊。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
28 [报告]
发表于 2012-11-18 18:48 |显示全部楼层
starwing83 发表于 2012-11-18 18:39
第一条是你一直在提的(没有标准异常机制(QQ里);没有合理的REPL机制(我始终没明白你说的reload是啥含义,看来不是dump二进制了,那是dump什么?dump history么?我能在Vim里面ddp交换两行,能dd10p复制粘贴十行,能一次产生一个很漂亮的代码表格,repl可以?;没有支持相对路径的模块机制;还有别的什么没?);第二条是你自己提的(标准异常机制?有啊,luasocket的newtry+protect。你是怎么说的?“不是官方的”“不兼容”是吧?);第三条你自己承认了?


这个我在QQ里确实提过。
以前的结论 —— 至少我认为的部分 —— lua依然没有好的方案。 newtry不过是在nonlocal jump与status code之间不断地切换
在lua社区里,你要将这个叫做异常,那就叫做异常好了。
就好像很多语言支持了first class function也就说自己是functional programming language一样,有dynamic environment就说自己可以meta programming了一样。
人家的社区,爱怎么叫就怎么叫。 但是怎么回事就是怎么回事, 叫得再好听也没用。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
29 [报告]
发表于 2012-11-18 19:32 |显示全部楼层
starwing83 发表于 2012-11-18 18:44

我又不知道这个,当初学到这里的时候昏头昏脑已经完全晕了,我说过我印过一本Haskell 98 report吧?

Haskell你肯定比我熟,但是你用起来是不是也太非主流一点了?(上次Q里面你说arrow还没看,在看啥啥啥之前不敢看云云)反正你C++就很非主流了。上次是你给我看的还是我给你看的?那个phoenix模块。类似于C++里面手写解释器啥的。另外最近在看agg,正统的C++模板库用法——我承认里面很暧昧不清,但是等到我用C来实现里面的算法的时候才发现,如果考虑效率问题的话,用C基本上没法赢那个模块。甚至用C++-without-class都不行……那货用class做functor再参与template实例演变,最终导致的结果是流水线式的操作被整体实例化成一个独立函数参与优化,这点C完全做不到。


arrow不只是上次,我到现在都没看。这与不正统以及时空效率是什么关系?
我现在接触到的最大的库就是yesod,没见里面用arrow啊。

Haskell,以及SML那一系列的函数式编程社区里有无数的无数的概念。如果脱离实际应用直接去研究那些概念,我没那个本事。
http://www.haskellers.com/skills 这么多,总得有个先后吧?
就好比一个研究OO的,说他今天知道了XX模式,明天知道了YY模式。 如果不知道这些模式解决的问题, 光研究模式又有什么意义?

而且还有一点。如果要和C++对应的话,arrow大致就是C++中的一个具体的interface。
没有具体的implementations, 光研究interface有什么用?
就像file, 它支持open, close, read, write。 就完了啊, 没什么可以继续研究的了啊。
但要真正理解这个interface, 得知道它可以操作磁盘、内存、socket...   这才有了意思。
arrow没有接触到这样的具体应用, 唯一接触到的就是function。

我个人觉得自己不正统的地方就是不用cabal。。。
类似的,在clojure里不用lein。。。

之前说用lein,也是在工作室用。。。 自己家里的机器上没装。
还包括heroku的命令行工具(其实就是一些ruby程序),也没装。 因为我发现只要把ssh key用命令行工具上传(没有找到web界面),以及create之后就可以不用heroku的命令行工具了。
剩下的就是git clone和git push(用已经上传的ssh key)。
所以才会弄一个neval.htm, 因为我在家里不想装heroku, 不然它有通过ssh的remote eval的。

但这种洁癖。。。 你也有吧。。。



纳尼? 你后面说的C++的这种用法, 是正统C++? 你觉得说出去有多少C++程序员会信?要这么说, 我都是正统C++程序员了。
C++就是面向对象的C —— 有多少C++程序员不是这么想的?
是否正统不是由你个人的感觉说了算的。 但代码该怎么写, 是可以由你说了算的。
只要你能确认没有更好的方案了, 就这么写, 该是模板就是模板, 该是class就是class。
如果你要去顾及那种"哎哟,你这么模板好复杂,我看不懂哟"的人, 这种人是没有下限的, 他们最终会将你拉到只有C(甚至C都不如的层次) 那你还是什么都不要写算了。。。
正统的定义会随着时间、人群改变的, 假设我写模板, 在我们两人看来很正统。 发布出去后被大多数人认为不正统。 这个正统你还追求么?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
30 [报告]
发表于 2012-11-18 19:39 |显示全部楼层
starwing83 发表于 2012-11-18 18:39
下面一个回复:你咋就知道我被限制死了?你怎么就不觉得你自己太过天马行空不考虑实际开发的需要?在大学里面,人家WordPress几个小时交个单子你就继续研究你的Clojure?你难道不是被你的那些条条框框那些所谓美感给限制死了?说难听点叫“思维固化”,说好听点叫“执着坚持”。拜托别玩这种文字游戏好吗?


怀疑我在做"wordpress定制"这样的工作时,是谁在劝我离职? 说这没前途? 那我现在就去做wordpress定制, 你又觉得如何?
这不也是你的坚持? 你又能忍受现在web像坨屎一样的状态?

损人一千自伤八百,有你这么找论据的么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP