免费注册 查看新帖 |

Chinaunix

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

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

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

我是搜到这个: http://www.emacswiki.org/emacs-es/EmacsScripts  才知道的。

:是空操作。。。 不专门研究shell语言的,只是依葫芦画瓢写写的人。。。 平时哪有机会会用到空操作?
这都算了,我都可以理解。。。
为嘛":"也是啊?
This works, since “:” is the same as : to the shell


哪怕双引号是弱引用(好像是这个名, '单引号内容始终是verbatim', 而"双引号里的内容可能会被替换 $(date)"), 也得有个$才对啊。
嗯,这又是顺带说说而已。 弄不明白就算了。。。  我又懒了, 懒得去shell板块问。。。

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


    是这样的,shell命令在实际执行之前,会经过多道处理:

- wildcard替换
- 变量替换
- 脱引号
- 参数分割

等等。

对于:
":"

来说,没有wildcard,没有变量,就走到了脱引号这一步,":"变成了:,而:是builtin-command(内建命令),代表啥也不做。所以最后结果就是啥也不做了~~就是这样~~

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
33 [报告]
发表于 2012-10-09 21:30 |只看该作者
starwing83 发表于 2012-10-09 21:10
如果觉得可能有问题,可以这样:
:shebang; xxxxxx
我记得冒号后面跟着一个identifier也是空操作的,这个比":"稍微verbose一点。


el和clojure肯定认的。你的意思是如果shell也认,就可以这么写?

我觉得没必要。
只要不是#! 就免不了要给别人解释 —— 我就是烦这点, 如果用#!导致他人看不懂不是我的错。这都不知道还玩啥?
但不用#! ( 用 ":"; 或 :shebang; )而导致他人看不懂, 这责任划分就不明确, 就不好推卸了。。。
:shebang 并不一定是好主意, 因为这其实不是shebang了, 还是会引起人的疑惑。

反正都得解释 —— 也就是magic happens here, 我只知道这么多, 更多信息请去问懂shell的人 ——  ":"可以少敲几个字。。。

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

也就是说,ls也可以写成"ls"?
擦。。。 试了试还真可以。。。

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


    对shell来说,命令名和参数没区别,都一样处理的,假设有个目录里面有a.exe, b.exe, c.exe,你写:

$ *.exe

最终的结果就是执行: a.exe b.exe c.exe了。

只有到了最后一步,shell才会把一个string-array的第一项当做命令名,后续的当做命令的参数,到这一步命令名和参数才有区别……

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

clojure有特别处理#!。 从1.0之前就有。 只是文档一直不说这事。。。
但没有一个launcher也是无用功。

我也觉得直接挑战shebang机制代价太高, 重新实现env让它去分离参数至少可以把代价降低到更新一个软件。。。
而且这个软件 —— 反正都要更新,还不如另做一个专用的,比如叫interpreter-launcher啥的 —— 还可以顺带处理其他一些事情, 比如同语言多版本、多安装路径、初始化配置什么的。。。

论坛徽章:
2
操作系统版块每日发帖之星
日期:2015-08-05 06:20:0015-16赛季CBA联赛之北控
日期:2019-02-13 22:56:03
37 [报告]
发表于 2012-10-09 21:48 |只看该作者
本帖最后由 346196247 于 2012-10-09 21:50 编辑

都出书把,这字够出书了 :wink:书名为,楼住标题,后面加一个疑问

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

"$(echo date)" 。。。   我懂了。。。


其实昨天重点都不在jark, 而是map/filter到底返回什么。我很担心它们是直接返回一个table。

  1. for x in map(f2, filter(f1, map(f0, xs) ) ) do print(x) end
复制代码
如果要用列表操作以及它们的组合代替手写循环,需要达到的目标是上面的代码的空间代价是类似:

  1. for x0 in xs do
  2.   local x1 = f0(x0)
  3.   local x2 = f1(x1)
  4.   if not x2 then continue end -- 有 continue 么???
  5.   local x3 = f2(x2)
  6.   print(x3)
  7. end
复制代码
每一个元素的代价与处理的步骤多少(此处是f0,f1,f2)正相关都可以接受。
haskell还可以进一步优化为 local x2 = f1(f0(x)) 以及 print(f2(x2)) ;clojure我怀疑不行。
但整个循环的代价一定不能与元素个数(此处是xs的元素个数)有关。 否则就没意义了。

haskell是通过惰性求值完成的, clojure是通过seq(正在准备转换为recipe)。 而我听你说gfor用来把关什么的, 我就担心map会产生整个table。
准备说完jark后重点说这个的。。。 结果。。。   只听你说道map是产生一个函数。。。 那至少大方向没问题了。。。

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


    其实要达到这样的效果,还是会有问题。

主要原因是天杀的所谓“stateless iterator”,即实际上ipairs返回的是iter, state, first_key,这玩意儿不能放到中间:

map(f, ipairs(t1), ipairs(t2)) -- 完蛋了,ipairs(t1)的state和first_key被吞了…

这时**只能**传递table或者closure。

但是closure代价太大,很慢的。

最终只剩下table了。

那啥,小数据量下,map的参数是table似乎没有问题吧?table本身做成惰性的也不难啊……

t = lazy_table(function()...end)

这种……t是标准的table,只是里面的key/value是惰性产生的……

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
40 [报告]
发表于 2012-10-09 22:13 |只看该作者
回复 37# OwnWaterloo

修改env,至少可以让linux下的env与bsd下的env看齐。毕竟多数情况下,二者之间的兼容性很高的。不过话说回来,有些工具bsd做得很好,比如tar,不用区分压缩格式,自动识别。
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP