“外壳”的作用/责任是什么?

时间:2010-03-28 21:13:23

标签: open-source shell naming-conventions dynamic-language-runtime orchardcms

我一直在查看IronPython项目和Orchard CMS项目的源代码。 IronPython使用名为Microsoft.Scripting.Hosting.Shell的命名空间(DLR的一部分)进行操作。 Orchard项目还在各种接口(IShellContainerFactory,IShellSettings)中间接使用“shell”的概念。

上面提到的所有项目都没有详细的文档,所以如果你试图通过阅读源代码来弄清楚整个应用程序结构/体系结构,那么从名称中获取类型(类等)的含义是非常有价值的。 。

现在我想知道:当他们引用'shell'时,这个源代码的作者会想到什么?当我听到“shell”这个词时,我会想到像命令行解释器这样的东西。这对IronPython来说很有意义,因为它有一个交互式解释器。但对我而言,对于Web CMS而言,它没有多大意义。

当我遇到一种叫做“贝壳”的东西时,我应该怎么想?一般而言,“壳”的作用和责任是什么?甚至可以回答这个问题吗? “shell”的含义是否具有主观性(使该术语变得毫无用处)?

感谢。

2 个答案:

答案 0 :(得分:2)

在Orchard中,术语“shell”实际上更像是一个范围的隐喻。有三个嵌套范围:host,shell和work。

主机是一个在Web应用程序域期间存在的单个容器。

shell是由根据当前配置构建的主机创建的子容器。如果更改了配置,则会构建一个新shell,并释放现有的shell。

该工作是另一个由shell创建的容器,它容纳在单个请求期间存在的组件。

使用shell容器的一个好处是它有助于避免使用静态变量以及在配置更改时循环应用域的需要。另一个好处是,当主机拥有多个shell并为每个请求使用适当的shell时,它允许Orchard app域同时为多个“站点”提供服务。

答案 1 :(得分:1)

我认为shell的一般含义是'解释和执行命令的用户进程'。

  1. '用户进程':与操作系统内核中内置的进程不同。 IBM大型机领域的JCL很难被视为一个shell。

  2. '解释并执行':以某种形式或形式,shell从文件或终端读取命令,并对呈现的内容作出反应,而不是严格编程执行一系列命令。

  3. '命令:命令的内容取决于上下文。在标准的Unix shell中,执行的命令主要是其他程序,shell将它们适当地连接在一起。显然,有内置命令,并且通常还有流控制语法,以便对执行命令的结果做出适当的反应。

  4. 在其他情况下,考虑执行其他类型的命令是合理的。例如,可以设想一个“SQL Shell”,它允许用户在连接到数据库时执行SQL语句。

    Python shell将支持Pythonic符号,并且将执行类似Python的语句,其语法与Python的语法密切相关。 Perl Shell将支持类似Perl的表示法并且将执行类似Perl的语句,......所以列表继续。 (例如,Tcl有tclsh - Tcl Shell。)