免费注册 查看新帖 |

Chinaunix

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

[C] 站在月亮看地球——牛逼的新语言 MoonScript [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
171 [报告]
发表于 2011-08-19 17:31 |只看该作者
回复 167# starwing83

你这人真是无敌了。 我算是看出来了, 每当发现苗条不对, 你就将黑锅丢给我背。
是我说特殊表与宏是在使用方式而非实现方式上有区别, 最终被扣上从实现方式解释两种不同的帽子。
是我说真实事件编程充满了shit, 只是量的多少的问题。 你这楼回复完全就是在证明我的观点, 但一开始就把"不食人间烟火"的帽子丢给我来扣……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
172 [报告]
发表于 2011-08-19 17:33 |只看该作者
回复  OwnWaterloo

不好意思,我是看着r5rs学的Scheme,不够正统?
starwing83 发表于 2011-08-19 17:29


又来了。 这只能说你学的scheme是正统的。
但不是scheme那样实现的lisp是正统的。
而你在提到正统lisp时, 指的是下面这层意思, ok? 敢拿出根据吗?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
173 [报告]
发表于 2011-08-19 17:40 |只看该作者
回复 169# starwing83

你敢冷静一点的看完帖在回吗!

1. 修改的是另一个宏产生的结果, 而不是另一个宏本身
2. 引用一个宏? 怎么引用? (F arg...) ?  这样就会被求值了好吗?

只展开, 不对展开的结果求值这本身就是用处, 还要我怎么解释?
我可以用这个查看宏是否写对了, 算是用处吗?
实际一点的用处与编译有关, 要扯就远了。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
174 [报告]
发表于 2011-08-19 17:43 |只看该作者
回复 171# OwnWaterloo


    好,既然你这么说。我就按着你说的来。如果这样你还说我把黑锅给你背,那我就没办法了。

先说实现。我的观点就是特殊表和宏在使用上是没有区别的,在使用上,他们都是不对参数求值,由内部进行处理(至于内部是lisp是c是汇编我就不知道了),这算不算”使用方式“?是不是非要macroexpand才叫使用方式?好,就算是,假设我需要advising一个函数,我需要得到一个函数的函数体,然后去分析(这可是你说的!你说通过分析一个函数的表就可以得到函数的参数表,这比C++简单的多),但是你能得到*或者/的函数体么?你得不到,那你怎么去分析?如果你认为特殊表和宏在使用上有区别,那么你就必须承认原生函数和lisp函数在使用上有区别了。这在原理上是一样的,而且,就算是这样,这和“Lisp只有两种form,special-form和normal-form,前者在调用前不对参数求值,后者对参数分别求值再调用”这个论断完全没有关系:这个论断说明的是Lisp的form的分类和原理(也许在你看来是没用的东西),而不是教你怎么用special-form和normal-form,换言之,这句话根本就没提到使用方式,你这里提使用方式是什么意思呢?

再说shit。我想我们在什么是shit上有分歧。我觉得是由人导致的技术上的不美好(比如Windows和*nix的接口的差别,再比如各种实现限制,再比如写的很烂很不好维护的代码)才叫shit。我觉得Lua没有这方面的问题。所以Lua不算shit,Lua已经考虑到了现实编程中的无奈,Lua提出了解决方案,并且在你不接受这个方案时,提供预处理宏来将这些针对各个系统或者各个架构的琐碎的、不通用的代码从Lua的核心中去掉。这样我认为是很漂亮的处理。很干净,也很好维护,我认为这不是shit。

我不知道你是不是承认Lisp也有无奈,讽刺的是,一向反对无用概念的你,也只是崇尚概念上的的Lisp。我真的找不到一个实现得和Lua一样不带shit的Lisp实现。假设你不介意Lisp的实现很shit——就比如ELisp那充满了补丁的实现(这是你同意过的!),那么我只能假定你已经习惯能接受建构在shit上的,美好的东西。如果是这样,你为什么不去说明Lua概念一致的美,而非要纠结Lua实现的可能的shit?(况且我还不认为这些是shit),这算不算是双重标准?(允许Lisp实现得shit,只要结构好就成,但是不允许Lua实现得shit,即使语言上做了十分慎重的考虑?)

如果这么说你还说我给你扣黑锅,那我就没什么话说了。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
175 [报告]
发表于 2011-08-19 17:44 |只看该作者
回复 172# OwnWaterloo

好,那么我想问问,请问Scheme是不是正统的Lisp?Scheme关于form(这是基本概念)的看法是不是正统Lisp对form的看法?

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
176 [报告]
发表于 2011-08-19 17:51 |只看该作者
回复 173# OwnWaterloo


    这个我的确没想到。修改一个宏的返回值这件事情在Scheme上本身是不必要的。Scheme采用模式匹配来自动地产生Lisp代码,它根本就不需要去处理某个宏产生的结果,因为所有宏产生的结果会被合并然后整体提供给最终代码。所以你说对了,我的确是没有做这种肮脏的事情的经验,那么请问,这种概念是优雅的吗?这种概念是Lisp整个语言体系必要的吗?这种概念,和这种概念带来的混乱和不可维护的代码(比如万一宏A修改了,宏B就完蛋了:因为它处理的表结构变了)真的是有益的吗?不是shit吗?

我说的是正统的Scheme没有macro-expand,但是几乎所有的发布版都带了这个标准外的函数,目的也无非就是调试,所以这一点Scheme并不差。但是,Scheme绝对不鼓励改变宏运行后产生的代码这种危险的行为。这种行为本身就和你得到一个指向未知对象的指针然后以为第四个字节的偏移位置就是长度然后瞎改一样危险。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
177 [报告]
发表于 2011-08-19 17:55 |只看该作者
两个牛人别曲高和寡了, 帮我看看 http://bbs.chinaunix.net/thread-3584363-1-1.html

评分

参与人数 1可用积分 +2 收起 理由
OwnWaterloo + 2 *nix不熟……

查看全部评分

论坛徽章:
0
178 [报告]
发表于 2011-08-19 18:00 |只看该作者
回复 159# starwing83


一个东西很美,一点shit不带,通常意味着各种shit要你自己去写

lua代码里嵌入C代码,看起来很NB,其实呢?
编辑器的代码高亮,自动缩紧全没了,C代码里随便写点逻辑,混在在风格紧凑一致的代码里就跟shit一样难看

一个库,一个工具,不管它自己多优雅,能让我少写shit我就心存感激,要让我去写一堆shit我就骂娘

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
179 [报告]
发表于 2011-08-19 18:02 |只看该作者
本帖最后由 starwing83 于 2011-08-19 18:05 编辑

回复 178# reiase


    哥哥……小量的C代码如果你还要缩进神马的,那还是免了吧……int add(int a, int b) { return a + b; }你也要缩进?

大量的代码,你难道不会从文件读么?

从来都不是代码自己shit的,是人assume才会导致代码shit。assume == ass-u-me


事实上,如果一个库什么都帮你做了,反而更容易shit,因为你几乎没法配置它,或者配置过程极其复杂:还不如提供机制呢。


注意区分:一个东西如果提供给你强大的机制,哪怕是什么都没做,也不能说是shit,如果一个库什么都帮你做了帮你决定了,即帮你决定了策略,那还要你干嘛?这种库怎么复用?怎么解决更多问题?如果这个库只解决这个问题就足够了,那还要你写什么代码?直接写个三行main引用这个库不久得了?

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
180 [报告]
发表于 2011-08-19 18:06 |只看该作者
回复 178# reiase

看不出来fork后能有这种问题。最后一次看APUE是半年前,能不能先科普我一下子进程会不会继承父进程的file-struct(比如文件读写位置什么的)?我记得是不会的,不过没多少印象。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP