English 中文(简体)
为什么书写语言(例如Perl、Adhur、和Rub)不适于使用手法? [闭门]
原标题:Why are scripting languages (e.g. Perl, Python, and Ruby) not suitable as shell languages? [closed]

Bash(bash), (zsh ),Fish (fish) and the scripting instruments above that have better appropriate for the shell?

在使用指挥线时,弹壳语言似乎更加容易。 它感到非常顺利,例如,在,IPython,,尽管有相反的报告。 我认为,我完全同意我的看法,即中到大规模方案规划的很大一部分比巴什更容易。 我把沙尔语作为我最熟悉的语言。 Ruby

我试图说明理由,但我不能不认为这两种人的待遇都有所不同。

造成这一问题的原因是,我希望能开发一种两种语文。 如果你知道这种语言,请将其张贴。

S.Lott所解释,这个问题需要澄清。 我正在问一下“ 语言<>与描述性语言”的特征。 因此,比较并不涉及各种互动环境的特点(REPL),如历史和指挥线替代。 对这一问题的其他表述是:

一种适合设计复杂系统的方案拟定语言能否同时表达能够进入档案系统或控制工作的有用的一线人员? 方案拟订语言能否有效扩大和缩小规模?

最佳回答

我可以想到的有两点分歧:这里的思想流逝,特别是:

  1. Zar & Co.的用药设计好。 Bash & Co.设计成“只有 > 说明良好,绝对没有妥协。 IOW: 粉碎设计在包装和非包装上都是好的,Bash只关心描述。

  2. Bash & Co. are untyped, Python & Co. are strongly typed, which means that the number 123, the string 123 and the file 123 are quite different. They are, however, not statically typed, which means they need to have different literals for those, in order to keep them apart.
    Example:

                    | Ruby             | Bash    
    -----------------------------------------
    number          | 123              | 123
    string          |  123             | 123
    regexp          | /123/            | 123
    file            | File.open( 123 ) | 123
    file descriptor | IO.open( 123 )   | 123
    URI             | URI.parse( 123 ) | 123
    command         | `123`            | 123
    
  3. 宗旨是将up到10 000,100 000美元,甚至可能达到100 000英尺方案,Bash & Co.,旨在将<>><>>>><>>>>><>character>>>.

  4. 在Bash & Co.,档案、目录、档案记录器,过程是所有头等物体,在Avry,只有Zahur物体是头等,如果你想操纵档案、目录等,你必须先把这些材料打入一个灰色物体。

  5. 壳牌方案基本上是数据流方案。 没有人认识到,甚至连发炮弹的人都知道,炮弹非常好,通用语言也不大。 在普通用途方案拟订世界中,数据流似乎主要被视为一种一致性模式,而不是像方案拟订模式。

我感到,试图通过在普通用途方案拟定语言上加固特征或变数来解决这些问题,是徒劳的。 至少,我尚未看到令人信服地予以执行。 www.un.org/Depts/DGACM/index_french.htm (Ruby Shell)试图在Ruby实施一枚炮弹,有rush,这是用于在鲁比拉进行壳方案规划的内部数字,有<<>/><<<<<, >是海洋航程的朋友,但不是海事组织的。

实际上,IMHO是目前最好的彩票:http://msdn.microsoft.com/en-us/library/windows/desktop/d83550628v=vs.85%29.aspx” rel=“noretinger”>Microsoft PowerShell>/strong>,这令人非常惊讶,因为对于几个decades <<>m> 现在,微软公司一直拥有worst<><>m><>>>>。 页: 1 真的? (很幸运的是,他们仍然有一个快的终点站。) 它仍然是自那以来所围绕的“共同和迅速”? Windows 3.0?

动力壳基本上是通过忽视微软公司所做的一切(COMMAND.COMCMD.EXE、VB式、J式)来创建的,而是从“Unix adll”开始,然后消除所有后向与兼容的屏障(如替代指挥的背书),将其集中起来,使之更方便地使用Windows(例如,将目前未使用的背书作为逃逸性,而不是视器分离特性。 之后,正是发生魔鬼的时候。

他们从上述地址1和3上发言,基本上将选择与Avhur相比。 甲型肝脏首先照顾大型方案,其次。 Bash只关心描述。 权力 壳牌照首先,大型方案。 在约谈者问他,一个人可以与PowerShell和Snover联系,但又不缺少一张床子的节目,这样一来我就看了与Jeffrey Snover(权船长)面谈的录像。 此时此刻,我认识到,这是最终。 a gu在Microsoft的“植被”壳设计上(可能与以下事实有关:Microsoft s方案编制语言组(即:lambda-calculus mathnerds)和OS小组(kernel nerds)开发的“植被”(即:实际上use <<>>>>>炮弹的质),而且我或许应当认真研究PowerShell。

<>第2号通过静态打字解决。 因此,你只能写上<条码>123<>>>。 壳牌公司知道它是否是一种扼杀,还是一个编号或档案,因为碎块(这是在PowerShell的指挥所)宣布其对炮弹的争论类型。 这产生了很深的影响:与“Unix”不同,“Unix”是,每名指挥官都负责平整自己的论点(她基本上把论点作为一系列的扼杀手段),“Lem>shell/em”是“PowerShell”的争辩。 界碑明确了他们的所有选择和旗帜和论点,以及他们的类型和名称及文件(!),然后可以在一个集中的地方进行争 argument、制成、英特尔法、在线文件播等。 (这并不是革命性的,PowerShell设计师承认像DIGITAL指挥语言(DCL)和IBMOS/400指挥语言(CL)这样的炮弹是以前的艺术。 对于那些曾经使用过AS/400的人来说,这应当很熟悉。 在OS/400中,你可以写上弹道,如果你不了解某些论点的表象,那么你就能够将其从中删除并打到F4,这将带来一个带有标签的田野、 drop、帮助文本的菜单(相当于超文本)。 之所以能够做到这一点,是因为监督厅知道所有可能的论点及其类型。 在《统一令》中,这种信息往往重复三倍:在指挥本身中,在“编码”栏目中,在表格编印上和在单页上。

<4>Number 4由该权力国解决 壳牌照在强烈分类的物体上运行,其中包括像档案、程序、文件夹等 st。

<>第5号特别令人感兴趣,因为强权 壳牌是我知道的唯一壳牌,在这里,写这本信的人实际上是aware,因为炮弹基本上是数据流发动机,并蓄意作为数据流发动机加以使用。

关于PowerShell的另外一点是命名公约:所有厘米层都名称为Action-Object,此外还有具体行动和具体物体的标准化名称。 (Again,这应当向监督厅/400名用户提供健全的法庭。) 例如,与接收某些信息有关的一切都称作。 在(次)主题上操作的所有物品都称作<代码>。 Bar-ChildItem 。 因此,相当于<代码>ls的代码>。 (尽管PowerShell还提供下列内容:lsdir——事实上,只要有此意义,它们既提供统一编码,又提供CMD.EXEsss et abbreviations (gci in this case))。

技能特征 海事组织是严格分类的物体管道。 权力 壳牌是来自“Unix”的,有一个非常重要的区别:在“Unix”中,所有通信(通过管道和转头以及指挥论点)都是用无型、无结构的扼子进行的。 在PowerShell,它含有所有强型、有条理的物体。 这是如此令人难以置信的强大力量,我非常想知道,为什么没有人想到这一点。 (Well, 他们有,但从未受到欢迎) 在我的手稿中,我估计,只有多达三分之一的指挥员在另外两个没有商定共同文本格式的指挥员之间行事。 其中许多适应人员离开了PowerShell,因为碎块交换了结构化物体,而不是结构化的案文。 如果你看inside 因此,这些指挥部基本上由三个阶段组成:将案文输入内部物体,操纵物体,将其改成案文。 第一阶段和第三阶段基本消失,因为数据已经作为目标出现。

然而,设计者非常谨慎地通过他们称之为的描述保持了字面的活力和灵活性。 适应型系统

不管怎么说,我不想把这变成一种威力剧。 有许多事情是not,对PowerShell来说如此之大,尽管其中大多数事情要么是用Windows,要么是用具体执行,要么与概念相去甚远。 (例如,它已经执行。) NET表示,你第一次开始治疗,如果是的话,就可接上几秒钟。 由于需要的其他应用,网络框架尚未进入档案系统。 认为你经常在第二周内使用炮弹,这是完全不能接受的。

我想谈的最重要一点是,如果你想以描述语言和炮弹来审视现有的工作,那么you ben t end at Unix and the Duncan/Python/Perl/PHP family。 例如,tcl已提及Rexx。 在弹壳中,有一些已经提到的主机/中程炮弹,如OS/400指挥线和DCL。 而且,《计划》9 弧。

问题回答

它带有文化色彩。 http://en.wikipedia.org/wiki/Bourne_shell”rel=“noreferer” Bourne Shell 将近25岁;它是第一个描述性语言之一,是第一个“od解决“Unix admin”核心需要的办法。 (一) gl一 gl,把所有其他公用事业连接起来,并履行典型的“团结”任务,而无需每次编造一个水坝方案。)

按照现代标准,其辛瓦克斯岛是残暴的,其编织的规则和旁观-声明风格(在1970年代每 by计算在内)使得非行政当局难以渗透。 但did the work. 他们的后代(ksh、bash、zsh)的革命性改善没有重新考虑其背后的想法,从而消除了这些缺陷和缺点。 污染物 st到核心金星上,因为,正如我们所继承的那样,没有任何东西能更好地处理简单的 st子,而不会去。

对于复杂的 st, Perl沿途走进去,形成一种半行政半应用语言。 但是,越是复杂的问题,就越被视为申请,而不是行政工作,因此,企业人们往往寻找“方案者”,而不是“行政”来做,尽管事实上,真正的“热心”往往都是这样。 因此,重点在什么地方,以及不断改进Perl的应用能力,导致了......well、Alfredo和Ruby。 (That 过于简单化,但Perl是两种语文的几种灵感之一。)

结果? 专业化。 未成年人往往认为,现代口译语言太重,不能满足他们每天再做的事情。 总的来说,它们还是正确的。 他们不需要物体。 他们不关心数据结构。 它们需要commands.。 它们需要glue>。 比起Bourne Shell概念(这里已经提及的Tcl除外)和Bourne做得好,别无选择。

学员——他们现在必须更多地了解诽谤情况——研究Bourne炮弹的局限性,并想知道谁可以把他ll掉。 但是,他们知道的工具虽然肯定是朝I/O和档案业务的“独特”风格的跳跃,但为这一目的提供的是better。 我写了书状等书面材料,并存档,重新命名在Ruby,因为我知道这比我知道的好,但任何专用行政可在双管——可证明是上做同样的事情,但以较少的线路和较少的间接费用进行,但同样工作。

要求“在Z时,每个人都使用Y? 更好的解决办法是失败的,除非这一差异被视为一种具有突破性的挫折感。 网上打字可能跳跃到you<>>m>,但对于所有时间都使用这种打字的人,对于它所要从事的工作来说,它总是做的。

语言必须易于使用。 你们想要打上一次性的 throw,而不是小的方案。 页: 1

ls -laR /usr

不适用

shell.ls("/usr", long=True, all=True, recursive=True)

也就是说,如果争论是选择、扼杀、数或数种其他东西,那么语言不会真正得到注意。

Also, programming constructs in shells are an add-on, and 不适用 even always build-in. I.e. consider the combination of if and [ in Bash or Bourne shell (sh), seq for generating sequences, and so on.

最后,炮弹有具体需要,你在方案拟订方面的需求较少,或有所不同。 I.e., 管道、档案转播、流程/工作控制等。

由于这两种语言都是正式的方案拟订语言,你可以做些什么,你可以做些什么。 实际上,这是一个设计重点问题。 壳牌语言是供互动使用的,而字母是t。

设计方面的基本差别是,在指挥和变量范围之间储存数据。 在Bash等地,你必须跳跃穿孔径,以储存价值(例如<条码>、<条码>、等指令),而像Zahur一样,你只使用“任务说明”(<条码>a=)。 在使用彩票的数值时,你必须告诉你想要变数价值的语言,而在描述语言时,当你想要说明的立即价值时,你必须告诉这些语言。 这对互动使用具有影响。

在<代码>ls被定义为指挥的文字中

a = some_value

ls a*b  

(What does a mean? Does this mean some_value * (whatever b is) or do you mean a anystring b ?. In a scripting language the default is what is stored in memory for a.)

ls  a*b   Now means what the Unix ls a*b means.

以巴什类语言

set a=some_value

ls a*b   means what the Unix ls a*b means.

ls $a*b  uses an explicit recall of the value of a.

文字化使得能够轻易存储和回顾价值观,难以在价值上具有瞬间空间。 壳牌语言使储存和回顾价值成为可能,但每个指挥区的范围非常短暂。

你要问这个问题。 并非每个人都同意说,彩票是优等的。 http://viewsourcecode.org/why/hacking/allRubySfallersToWork.html” rel=“nofollow”_ 为什么没有。

不久前,一位朋友问我,如何重新寻找他的PHP的文字来进行扼杀。 他在这些目录中拥有大量大型双轨文档和模板,这些档案和模板本来可以真正地 gr平。 我无法想出一种办法,使这种情况发生,因此,我用发现和 gr眼来看待,是我的最好之兆。

  find . -name "*.php" -exec grep  search_string  {} ; -print

这里在Rubu重新进行上述档案搜查:

  Dir[ **/*.php ].each do |path|
    File.open( path ) do |f|
      f.grep( /search_string/ ) do |line|
        puts path,  : , line
      end
    end
  end

你的第一个反应可能是,“Well, 远比原来的字句”。 而我只得rug,听任之。 我说,“扩大范围非常容易”。 而且它跨越平台开展工作。

Scalability and extensibility? Common Lisp (你甚至可以操作CLISP,可能还有其他执行,as aloginherll in Unix environment.





相关问题
Can Django models use MySQL functions?

Is there a way to force Django models to pass a field to a MySQL function every time the model data is read or loaded? To clarify what I mean in SQL, I want the Django model to produce something like ...

An enterprise scheduler for python (like quartz)

I am looking for an enterprise tasks scheduler for python, like quartz is for Java. Requirements: Persistent: if the process restarts or the machine restarts, then all the jobs must stay there and ...

How to remove unique, then duplicate dictionaries in a list?

Given the following list that contains some duplicate and some unique dictionaries, what is the best method to remove unique dictionaries first, then reduce the duplicate dictionaries to single ...

What is suggested seed value to use with random.seed()?

Simple enough question: I m using python random module to generate random integers. I want to know what is the suggested value to use with the random.seed() function? Currently I am letting this ...

How can I make the PyDev editor selectively ignore errors?

I m using PyDev under Eclipse to write some Jython code. I ve got numerous instances where I need to do something like this: import com.work.project.component.client.Interface.ISubInterface as ...

How do I profile `paster serve` s startup time?

Python s paster serve app.ini is taking longer than I would like to be ready for the first request. I know how to profile requests with middleware, but how do I profile the initialization time? I ...

Pragmatically adding give-aways/freebies to an online store

Our business currently has an online store and recently we ve been offering free specials to our customers. Right now, we simply display the special and give the buyer a notice stating we will add the ...

Converting Dictionary to List? [duplicate]

I m trying to convert a Python dictionary into a Python list, in order to perform some calculations. #My dictionary dict = {} dict[ Capital ]="London" dict[ Food ]="Fish&Chips" dict[ 2012 ]="...