免费注册 查看新帖 |

Chinaunix

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

[其他] tcsh,shebang和clojure [复制链接]

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
21 [报告]
发表于 2012-10-09 19:11 |只看该作者
原来是从QQ打到CU的

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
22 [报告]
发表于 2012-10-09 19:18 |只看该作者
starwing83 发表于 2012-10-09 18:58
回复 13# OwnWaterloo

其实我对这些都没意见,你说的都对,我只是对一件事情很奇怪——

如果你对一件事情很无力,无力到作者根本不理这个需求,无力到你只能抱怨的时候,我说一句“你抱怨也没用”,有问题么?


你是真不懂还是装不懂?  你要是直接说"我抱怨也没用", 我半点意见都没有。 我本来就只是随口提一句。

把我惹毛的是你一晚上你不停的给我说:
1. clojure不用作script
2. 用run_clojure运行
3. 不要全信unix那套
4. server应该daemon
。。。

你现在和我玩文字游戏, "clojure不用作script" 不代表clojure用做script是不合理的。 现在你承认这是合理的?
那就从"你一晚上说我这不合理那不合理" 变成了 "你一晚上和我说一些与主题无关的废话" 而已。
我错了, 是我低估你的跑题能力了, 我不应该将这些理解为你在批评这些用法不合理, 我应该从发现你跑题就不理你就行了。


另外, 我对这事很有力, 我已经(早在emacs lisp时就)找到了不用其他人(有可能就是另一台机器前的我)更换、更新shell就可以直接执行的方法。
如果你要去clojure的邮件列表提, 那很好。 如果它要改, 那更好。 改了我就用, 不改我就维持原样。 对我丝毫不影响。
我根本就没兴趣得到一个答案: 作者会不会理会这个需求。 我对clojure又没有归属感, 只要它在大方向上不出错就行了。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
23 [报告]
发表于 2012-10-09 19:31 |只看该作者
starwing83 发表于 2012-10-09 18:44
我擦……写了这么多,居然忘了写结论!!!

tcsh在Windows上的shebang是**会**分割参数的!
所以,只有一种可能了:即不分割参数应该是mingw或mingw的后端cygwin的Bug!!
这事儿应该向他们提才对……


没用, 从shell入手对我来说解决不了任何问题。
我的目的就是要减少用户(哪怕就是另一个机器前的我)的依赖。
相比更换、更新shell,我还不如直接下载一个clj启动器就完了。 这样我还可以继续用bash, 以及git的官方提供的补全脚本。

tcsh支持了, msys支持么? cygwin又支持么? sh/bash? dash? linux? mac os?
你让它们都支持分离参数? 你让用户都去更新shell软件或操作系统? 你做得到?



f() & g(), 如果f与g的副作用的产生顺序是需要留意的, 难道你会因此去给C标准委员会提议,让&产生一个顺序, 然后等各种编译器支持, 然后等用户换编译器?
你也知道:
T x = f();
U y = g();
x & y 不就完了?


虽然不是一个语言, 但shebang是否分离参数是unspecified。
如果能不利用这个unspecified的行为达成自己的目的 —— 无论clojure是否官方提供支持,都已经达成了 —— 何必要去和各种implementations作对?

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

达成同一目的的方法有很多,选哪个?

回复 16# starwing83

继续接着回复。

C的例子有点牵强, 但我一时也想不到更好的例子。
C的例子想表达的是"方法的代价", 而不是"正确地做事方法"。
在C的例子里, "正确的做事方法"也恰好是"代价最小"的方法, 所以我说这个例子有点牵强。


而回到shebang这个事。
混合语言是代价最低的 —— 除了难看,没其他代价了。 而且这行真不需要读懂,只需要知道magic happens here就ok了。
无参数启动器会产生一点点代价, 奖励就是依然可以用shebang, 可以被大多数人理解。
而改shell, 虽然它是"最正确地做事方式" —— 我一直,从最最开始就承认这点 —— 但它的代价也是最高的,高得不是一个数量级了。


所以我不会选改shell这种方式。


而你要选改shell的方式,我绝对没意见。
但你怎么就不理解我做出的各种权衡?(不一定是混合语言 vs clj vs shell,我忘记你在这方面有没有说什么了) 而是整晚上说不应该这样用,不应该哪样用。。。
哪怕你真的是在说我不应该怎样用,我又哪次不是在虚心的听? 我能坚持和你扯一晚上,就是因为想着"万一这家伙真有什么地方说中了", 我就赚到了。
可惜一晚上都是一些乱七八糟的理由, 比如让我去找不以.exe发布的软件,比如clojure不作为script是因为有clojurescript。。。

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

    好吧,我去加clojure的邮件列表,找一下他们的wiki,争取让他们在reference里面提一下……这个可以有——但问题还是一样的——他们如果不加,你依然没有任何办法,网站在人家手上呢,你除了提一下以外,根本做不了别的任何事情——如果是这样,你有啥办法来着……


这个都随便你。反正我是懒得写英文了。 读、听、写、说一个比一个吃力。


比这个更严重的事我都遇到过,比如有滥用macro的倾向。这事比shebang什么的严重得多。
shebang大不了不写,不会影响代码,影响的只是运行方式。
macro被滥用了会影响代码的。

但最后想想还是算了。。。 懒得去写英文。
总之,clojure又不是我自己的语言,没有归属感。只要大方向不错,能为我所用,投入少见效快就行。小细节上就随便它搞了。

论坛徽章:
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
26 [报告]
发表于 2012-10-09 20:37 |只看该作者
回复 24# OwnWaterloo


    好吧好吧,我败了。所有用法,只要你用出来了,就是合理的,好吧………………

不过我还是觉得发布的软件,至少也得装个exe的壳儿,哪怕是脚本写的,这方面的事儿我做过不止一次了,还弄出一个自动装Lua到壳儿的办法……有段时间专门写了一个lunamark-standalone,你知道的…………好吧好吧这不是重点………………

至于一晚上……那的确是我的活跃时间啊……不想写代码找个人扯东扯西的放松一下也不行么……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
27 [报告]
发表于 2012-10-09 20:45 |只看该作者
starwing83 发表于 2012-10-09 18:44

下面的代码,在tcsh上面,完美运行:
#!/mingw/git/bin/env java clojure.main


已经不完美了。 前面就说过,要在Windows上也用shebang,还得弄一个单根到多驱动器的映射。
别人不可能为了Windows而写"/mingw/git/bin/env" 的。 只能去适应现有的 "/usr/bin/env", 然后要将/usr映射到什么地方去。
无论这步的代价如何, 但让其他人用tcsh对我来说就是一个很大的代价了。


另外,说到Windows,我又想起了。昨天你说的"不该不该"什么里,还包括"不该同时用Windows/linux"。不过我不记得原话了。
你要utility.sh, utility.bat是你的事。
但我希望就只有一份 utility.lang 并且希望它在 cmd.exe, msys, cygwin, linux下都能用 —— 这都能有错了?
而且我还达到这个目标了, 我又有反过来说你写两份很搓?  如果我找到一个漂亮干净的做法我真的就会说你写两份很搓了, 只是混合语言本身也很搓。
我就是对 "clojure不将clj作为官方使得我达到只有 utility.clj 的目标更困难, 本来可以以较低代价写得漂亮的"  吐槽了一下, 值得你说我"谁让你同时用windows/linux"么?

当然,你现在估计又会改口说这是合理的了。。。

论坛徽章:
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
28 [报告]
发表于 2012-10-09 20:50 |只看该作者
回复 27# OwnWaterloo


    我也没说这个很挫吧?

我自己写两份是因为shell不认bat好不好……

你要是能找出来在cmd/sh下面通用的混合语言我也跟着搞啊……lua邮件列表又一次就是讨论这个话题的说,不过也没什么结果。

所以这样的确是很麻烦啊……混用linux/windows本来就是麻烦事,也不止这个了,你以前吐槽的tty问题,记得么?问题本来就大把的……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
29 [报告]
发表于 2012-10-09 20:58 |只看该作者
starwing83 发表于 2012-10-09 18:55
= =我的想法有问题么……clojure毕竟不是windows嘛……但是如果最终不支持也没办法嘛……我的策略一般是:

1. 搜索看是否有支持的隐藏开关(tcsh里面就有一个……)
2. 邮件列表提问
3. 如果没人回,自己写一个patch,再在邮件列表ANN

Windows完全无力啊,不开源啊……

好吧,就算clojure和Windows一样,rich对于自己不关心的特性完全不理,而且绝对不带入版本库。

——你对我抱怨也没用啊……我最终也只会上面提到的三板斧啊,而且最终你解决了问题也很好啊……

最多赞扬一下混合语言方案比较“巧妙”……

就算是吐槽了,总觉得这种吐槽有点奇怪……



你的想法 —— 这里是指向rich提意见? —— 没问题。
但我也不觉得我的想法 —— 路上有坨便便,懒得理,反正道路宽着,我绕道走 —— 有什么问题。
也不是在抱怨, 就随口提了一下。  对官方而言只是很小一件事, 但它不做, 就会造成很多不方便。

混合语言的方案我本来都不想提的, 所以都是在和你说clj。 我都忘了为什么要给你提了。  反正不是为了炫。

2楼的那个我能读懂, 因为比较复杂的是clojure方面的。 但我不会这么写, 4行代码啊。。。
而我给你说那个one-liner别人不给我解释我真不知道是怎么回事, 因为trick发生在shell那边。
:好像是个空操作,对clojure以及el来说是keyword。 ":"也是空操作我就彻底晕了。  如果有其他更好的方案还坚持用它就是炫耀&耻辱了。

论坛徽章:
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
30 [报告]
发表于 2012-10-09 21:10 |只看该作者
回复 29# OwnWaterloo


    这个我倒是看得懂的………………

对clojure而言:


":" -- 字符串
;  -- 注释

对shell而言:

":"就是escape后的:,空操作
;  命令分隔符,表示两个命令顺次执行

利用的就是这个。

如果觉得可能有问题,可以这样:

:shebang; xxxxxx

我记得冒号后面跟着一个identifier也是空操作的,这个比":"稍微verbose一点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP