0

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

上面提到的所有项目都没有详尽的文档,因此如果您试图通过阅读源代码来了解整个应用程序结构/架构,那么从其名称中获取类型(类等)的含义非常有价值。

现在我想知道:这个源代码的作者在提到“shell”时有什么想法?当我听到“shell”这个词时,我会想到命令行解释器之类的东西。这对 IronPython 来说是有意义的,因为它有一个交互式解释器。但对我来说,这对于 Web CMS 没有多大意义。

当我遇到一种叫做“外壳”的东西时,我应该怎么想?一般而言,“外壳”的角色和责任是什么?这个问题还能回答吗?“外壳”的含义是主观的(使该术语无用)吗?

谢谢。

4

2 回答 2

2

在 Orchard 中,术语“shell”实际上更像是一个范围的隐喻。存在三个嵌套范围:主机、外壳和工作。

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

shell是宿主机根据当前配置构建的子容器。如果配置改变,一个新的 shell 会被构建,而现有的 shell 会被释放。

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

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

于 2010-11-17T08:22:53.683 回答
1

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

  1. 用户进程”:不同于内置于操作系统内核中的进程。IBM 大型机世界中的 JCL 很难算作一个外壳。

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

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

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

Python shell 将支持 Pythonic 符号并执行类似于 Python 的语句,其语法与 Python 的语法密切相关。Perl Shell 将支持类似 Perl 的符号并执行类似 Perl 的语句,......等等。(例如,Tcl 有 tclsh - Tcl Shell。)

于 2010-03-28T21:50:09.007 回答