Unix哲学在Ruby社区中脱颖而出?

Unix哲学的支持者大卫·科恩(David Korn)在几年前在 a Slashdot interview年间为Perl脚本编写了单片Per​​l脚本,而不用通过管道,重定向等方式使用Unix工具包。“Unix不仅仅是一个操作系统,”他说“这是一种做事的方式,壳通过提供使其工作的胶水起着关键的作用。”

似乎提醒可以同样适用于Ruby社区。 Ruby通过popen,STDIN,STDOUT,STDERR,ARGF等与其他Unix工具配合使用,具有很强的功能,但是Rubyists越来越多地选择使用Ruby绑定和Ruby库并构建单片Ruby程序。

我明白,在某些情况下,在一个Ruby进程中可能会出现性能原因,并且在一个Ruby进程中执行所有操作,但是确实有很多离线和异步任务可以很好地处理Ruby程序与其他小程序在Unix时代,这个方法提供了所有的优势。

也许我只是缺少一些明显的东西。 Unix哲学与10年前的今天仍然如此相关吗?

Unix的管道和简单工具的理念是文本。它仍然是相关的,但可能不如以往那样相关:

>我们看到更多的工具,其输出不能被其他程序容易解析。
>我们看到更多的XML,通过过滤器来管道文本没有特别的优势,而正则表达式是冒险的赌博。
>我们看到更多的交互性,而在Unix管道中,信息只在一个方向上流动。

但是尽管世界发生了一些变化,但我仍然同意科恩的批评。无论什么语言,创建大型,单一的程序是绝对差的设计,无法与其他程序互操作。规则与以往一样:

记住你自己的程序的输出可能是另一个程序的输入。
>如果您的程序处理单一类型的数据(例如,由学生提交的代码执行,这是我在上周所做的工作),请确保对该数据的输入和输出使用相同的格式。
>为了与现有的Unix工具进行互操作,输入和输出应为ASCII和面向行。许多IETF Internet协议(SMTP,NNTP,HTTP)都是纯粹的例子。
而不是编写一个大的程序,考虑用shell管道编写与现有程序相关的几个小程序。例如,在xkcd blog之前,有一个可怕的管道在/ usr / share / dict / words中找到卦。
通过制作你的交互式shell,你也可以用脚本来逐步处理shell脚本。 (我使用ksh但是任何POSIX兼容的shell是一个合理的选择。)

总而言之,真正有两种高度相关的方式来重用代码

>通过shell管道(Unix)连接时编写一个很好的组合的程序。
>通过import,#include,load,require或use(Ruby,C STL,C Interfaces and Implementations等等)连接时,编写可以很好地组合的小型库。

在第一个范例中,依赖关系结构很简单(总是线性的),因此易于理解,但是您在表达方式上的限制更为有限。在第二个范式中,您的依赖关系结构可以是任何非循环图 – 更具表现力的功能,但这包括创建无偿复杂性的能力。

两种模式仍然是相关和重要的;对于任何特定的项目,您选择哪一个更多与您的客户和您的起点相比,具有范式的任何内在优点。当然他们不是互相排斥的!

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...