Pergunta

Eu estive olhando o código-fonte do FerroPython projeto e o Pomar CMS projeto.IronPython opera com um namespace chamado Microsoft.Scripting.Hosting.Shell (parte do DLR).O Projeto Orchard também opera com o conceito de 'shell' indiretamente em diversas interfaces (IShellContainerFactory, IShellSettings).

Nenhum dos projetos mencionados acima possui documentação elaborada, portanto, captar o significado de um tipo (classe etc.) a partir de seu nome é muito valioso se você estiver tentando descobrir a estrutura/arquitetura geral do aplicativo lendo o código-fonte.

Agora estou me perguntando:o que os autores deste código-fonte têm em mente quando se referem a um 'shell'?Quando ouço a palavra ‘shell’, penso em algo como um interpretador de linha de comando.Isso faz sentido para o IronPython, pois possui um interpretador interativo.Mas para mim não faz muito sentido em relação a um Web CMS.

O que devo pensar quando encontro algo chamado 'concha'?Qual é, em termos gerais, o papel e a responsabilidade de uma “concha”?Essa pergunta pode ser respondida?O significado de 'concha' é subjetivo (tornando o termo inútil)?

Obrigado.

Foi útil?

Solução

Eu acho que um significado geral para o shell seria 'processo do usuário que interpreta e executa comandos'.

  1. 'Processo do usuário': como distinto de um processo embutido no kernel do sistema operacional. A JCL no mundo do mainframe da IBM seria pressionada a contar como uma concha.

  2. 'interpreta e executa': De alguma forma ou formato, um shell lê comandos de um arquivo ou terminal e reage ao que é apresentado, em vez de ser rigidamente programado para fazer uma certa sequência de comandos.

  3. 'comandos: O que os comandos são depende do contexto. Nos shells do Unix Standard, os comandos executados são principalmente outros programas, com o shell vinculando -os adequadamente. Obviamente, existem comandos internos e também geralmente há sintaxe de controle de fluxo para permitir reações apropriadas aos resultados da execução de comandos.

Em outros contextos, é razoável pensar em outros tipos de comandos sendo executados. Por exemplo, pode -se imaginar um 'shell SQL' que permitisse ao usuário executar instruções SQL enquanto conectado a um banco de dados.

Uma concha do Python suportaria notações pitônicas e executaria declarações semelhantes a Python, com uma sintaxe intimamente relacionada à sintaxe do Python. Um shell Perl apoiaria notações do tipo Perl e executaria declarações do tipo Perl, ... e assim a lista continua. (Por exemplo, o TCL possui TCLSH - The TCL Shell.)

Outras dicas

Em Orchard, o termo "concha" é mais uma metáfora para um escopo.Existem três escopos aninhados:host, shell e trabalho.

O host é um contêiner único que permanece durante todo o domínio do aplicativo web.

O shell é um contêiner filho criado pelo host que é construído de acordo com a configuração atual.Se a configuração for alterada, um novo shell será criado e o existente será liberado.

O trabalho é outro contêiner, criado pelo shell, que contém os componentes que permanecem durante uma única solicitação.

Uma coisa interessante sobre o uso de um contêiner de shell é que ele ajuda a evitar o uso de variáveis ​​estáticas e a necessidade de ativar o domínio do aplicativo quando a configuração é alterada.Outra coisa interessante é que ele permite que um domínio de aplicativo Orchard atenda a mais de um "site" ao mesmo tempo quando o host mantém vários shells e usa o apropriado para cada solicitação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top