Qual é o papel/responsabilidade de uma 'concha'?[fechado]
-
22-09-2019 - |
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.
Solução
Eu acho que um significado geral para o shell seria 'processo do usuário que interpreta e executa comandos'.
'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.
'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.
'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.