Matryoshka C Sistema de linguagem de programa de camada

Vamos tentar imaginar a química sem o sistema periódico de Mendeleev (1869). Quantos elementos tinham que ser lembrados e em ordem aleatória ... (Então - 60.)

Para fazer isso, pense em uma ou mais linguagens de programação ao mesmo tempo. Os mesmos sentimentos, a mesma bagunça criativa.

E agora podemos experimentar os sentimentos dos químicos do século XIX, quando foram oferecidos todo o seu conhecimento, e um pouco de cima, em uma tabela periódica.

imagem


O livro “Matryoshka C. Sistema de camadas da linguagem de programação ”representa todas as unidades da linguagem C de relance. Isso permite organizá-los, corrigir informações desatualizadas e até esclarecer o próprio conceito do programa.

Hoje, as informações de programação precisam ser sistematizadas ainda mais que os elementos químicos 150 anos atrás.

A primeira necessidade é ensinar. Mendeleev começou a criar seu próprio sistema quando enfrentou a questão de qual elemento começar a dar palestras: O, H, N, He, Au ... Ao mesmo tempo, era mais fácil para ele - ele ensinava a química dos melhores - estudantes da Universidade de São Petersburgo. E a programação já está sendo ensinada na escola e em breve começará no jardim de infância.

A segunda necessidade é uma abordagem científica. Usando o Sistema Periódico, novos elementos foram descobertos e as informações sobre os antigos foram corrigidas. Ela ajudou na criação do modelo de átomo (1911). E assim por diante

A terceira necessidade é o esclarecimento do conceito de um programa.

Programação moderna com um pé preso na década de 50 do século XX. Os programas eram simples e as máquinas e as linguagens de máquina eram complexas; portanto, tudo girava em torno de máquinas e linguagens.

Agora, o oposto é verdadeiro: os programas são complexos e primários, as linguagens são simples e secundárias. Isso é chamado de abordagem aplicada, com a qual todos parecem familiarizados. Mas estudantes e desenvolvedores continuam convencendo que tudo é igual.

O que nos leva de volta à primeira palestra do professor particular Mendeleev. O que dizer aos calouros? Onde esta a verdade Essa é a questão.

O livro “Matryoshka C. Sistema de camadas da linguagem do programa. " Além disso, é dirigido não apenas aos estudantes, mas também a programadores treinados, pois são eles que devem buscar a verdade e mudar a visão de mundo, ou seja, nós.

A seguir, é apresentado um resumo do livro.

1. Introdução


Em 1969, a linguagem C foi criada, que se tornou a linguagem de programação fundamental e permanece com ela por 50 anos. Por que isso é assim? Primeiro, porque C é uma linguagem aplicada que dava ao programa uma aparência humana em vez de uma máquina . Essa conquista foi corrigida pelas linguagens da família C: C ++, JavaScript, PHP, Java, C # e outras. Em segundo lugar, é uma linguagem curta e bonita.

No entanto, a própria linguagem C geralmente é misturada ao montador de máquinas, complicando e distorcendo sua percepção. Outro extremo é a imposição de uma certa "filosofia" sobre a carga da linguagem: processual, objeto, funcional, compilada, interpretada, digitada e assim por diante. Isso acrescenta emoção, mas não ajuda a descrever melhor o idioma.

A verdade está no meio, e para a linguagem C - estritamente no meio entre a percepção filosófica e a máquina.

A linguagem C não é independente, ela obedece à fala escrita comum e ao mesmo tempo controla a própria linguagem assembler. Esta posição descreve o modelo de fala do programa , segundo o qual o programa é dividido em três tipos subordinados: fala, código, comando. A linguagem C é responsável pelo segundo formulário de código.

Após determinar o local do idioma no programa, é possível organizar informações sobre ele, o que é feito pelo sistema Layer da linguagem do programa , que representa a linguagem C no espírito do sistema Mendeleev - em uma página.

O sistema é construído levando em consideração a semelhança das linguagens aplicadas decorrentes de sua subordinação de fala. Um conjunto de unidades Matryoshka C permite descrever e comparar diferentes idiomas, criando vários Matryoshkas: C ++, PHP, JavaScript, C #, MySQL, Python e assim por diante. É digno e correto que diferentes idiomas sejam descritos por unidades da linguagem fundamental.

2. CAPÍTULO 1. O modelo de fala do programa. Limpar C


O primeiro capítulo apresenta o modelo de fala do programa , refletindo a abordagem aplicada. Segundo ele, o programa tem três tipos seqüenciais óbvios:

  1. discurso - discurso direto de um programador resolvendo um problema,
  2. code - codificando a solução em formato matemático em C (ou qualquer outro)
  3. e comando - comandos imediatos da máquina.

O modelo de fala explica por que C é uma linguagem simples e compreensível. C é construído à imagem e semelhança da fala humana familiar a nós.

O primeiro tipo de programa é o discurso direto do programador. A fala está alinhada com o pensamento humano. Com a ajuda do discurso, programadores iniciantes escrevem programas - primeiro em russo e depois traduzindo ações passo a passo em um idioma de código. E foi precisamente nesse modelo que a linguagem C foi criada.

As conclusões do programador expressas pela fala são convertidas em uma forma numérica de código. Essa transformação deve ser chamada de reflexão , pois a fala e o código têm a mesma natureza (reflexão - nascimento - gênero). Isso é óbvio se compararmos os tipos de fala (à esquerda) e código (à direita) do programa.

imagem

É curioso que a reflexão ocorra de maneira muito simples - com apenas dois tipos de expressões.

No entanto, a descrição moderna da linguagem C (de 1978) não contém uma lista suficiente de nomes para descrever a linguagem em geral ou para a tarefa de reflexão em particular. Portanto, somos forçados a participar da criatividade e introduzir esses nomes.

A escolha das palavras deve ser precisa e clara. Isso exigiu uma abordagem especial, resumida da seguinte forma - o uso estrito da língua nativa. Para o inglês, seria inglês, mas não somos ingleses. Então, usamos o que temos e tentaremos falar russo.

A reflexão é realizada por dois tipos de expressões:

  1. Cálculo (HF) - reflete a alteração nas propriedades do objeto. A propriedade de um objeto é expressa por um número, então a ação na propriedade é a ação no número - a operação.
  2. envio (Pch) - reflete uma alteração na ordem das ações. Um protótipo de PC é uma frase de fala com uma frase complexa; portanto, a maioria dos tipos de PC começa com uniões subordinadas “se”, “caso contrário”, “tchau”, “para”. Outros tipos de PCs os complementam.

A propósito, você acredita que na descrição de C não há nome para o cálculo da expressão - eles são simplesmente chamados de "expressões"? Depois disso, a ausência de um nome e associação para o tipo de submissão e, de fato, a escassez em termos de nomes, definições e generalizações, não serão mais surpreendentes. Isso ocorre porque o famoso K / R ("idioma C", Kernigan / Ritchie, 1978) não é uma descrição, mas um guia para o uso do idioma.

No entanto, eu gostaria de ter uma descrição do idioma. Portanto, é oferecido pelo sistema de linguagem do programa Layer .

3. CAPÍTULO 2. Sistema de camadas. C curto


Qualquer descrição deve ser precisa e extremamente curta. No caso de uma linguagem de programa, uma descrição frontal é difícil.

Aqui nós temos um programa. Consiste em módulos. Os módulos consistem em sub-rotinas e coleções. Os subprogramas consistem em expressões separadas: declarações, cálculos, envios. Submissões - até dez espécies. Os subordinados conectam subníveis e sub-rotinas. Existem também vários anúncios. No entanto, as declarações são incluídas não apenas em subprogramas e subníveis, mas também em módulos e coleções. E a maioria das expressões consiste em palavras que são tão difíceis de descrever; geralmente, elas são simplesmente fornecidas em duas listas - as palavras de origem e derivadas com as quais você precisa se familiarizar durante o estudo e a aplicação do idioma. Adicione a esses sinais de pontuação e várias expressões.

Nesta declaração, não é fácil entender quem estava de pé sobre quem.

Uma abordagem hierárquica direta à descrição da linguagem será excessivamente complexa. A busca por caminhos de rotatória leva a uma descrição do idioma com base na natureza da fala e no lado do comando. Assim nasceu o sistema de Camadas, que coincide parcialmente com a Tabela Periódica de Mendeleev, que também é um sistema em camadas. Como se viu 42 anos após a sua publicação (1869), a periodicidade do sistema está associada a camadas eletrônicas (1911, o modelo de átomo de Bohr-Rutherford). Além disso, os sistemas em camadas e periódicos são relacionados pelo posicionamento tabular de todas as unidades em uma página.

A descrição das unidades de linguagem é concisa - apenas 10 tipos de expressões e 8 tipos de outras unidades, além de significativas e visuais. Embora incomum para um primeiro conhecido.

As unidades de idiomas estão divididas em 6 níveis:

  1. esquadrões - linhas da tabela
  2. departamentos - grupos especiais de gêneros (partes da primeira linha)
  3. tipo - células (nível de divisão principal)
  4. subespécies - divisores de espécies (nível raro)
  5. visualizações - fórmulas de unidades na parte inferior da célula ou separadamente
  6. os padrões são as próprias unidades (apenas palavras)

Amostras de palavras são descritas por um dicionário - um subsistema separado composto pelos mesmos seis níveis.

O componente de fala da linguagem C é bastante óbvio, embora ainda mereça uma descrição. Mas a parte do comando da linguagem é apenas conectada ao controle de compilação, durante o qual um terceiro tipo de programa é criado - o comando. Aqui chegamos ao lado mais emocionante da beleza C.

4. Próximos capítulos. Si bonita


A linguagem C é subjacente à programação moderna. Porque Em primeiro lugar, em virtude do discurso mais consistente. Em segundo lugar, porque contornou bem as limitações do processamento de números de máquinas.

O que exatamente Xi ofereceu? Imagem e camada.

A palavra "imagem" é uma tradução da palavra em inglês "tipo", que vem do grego "protótipo" - "protótipo". Em russo, a palavra "tipo" não transmite a pedra angular do conceito expresso; além disso, é misturada com o significado oficial de "visão".

Inicialmente, a imagem resolveu a tarefa puramente mecânica da computação e depois se tornou a pista para o nascimento das linguagens de objetos.

A camada resolveu imediatamente vários problemas - tanto na máquina quanto na aplicação. Portanto, a revisão começará com uma imagem de tarefa única e passará para a camada de tarefas múltiplas.

Uma das características desagradáveis ​​da programação histórica é que a maioria dos conceitos, incluindo os básicos, são dados sem definições. "A linguagem de programação (o nome dos rios) tem um tipo inteiro e flutuante de números ..." - e riscado. O que é um “tipo” (imagem) não é necessário para determinar, porque os próprios autores não entendem isso completamente e serão silenciados “para maior clareza”. Se estiverem presos à parede, darão uma definição vaga e inútil. Isso ajuda a ocultar as palavras estrangeiras: para autores russos - para inglês (tipo), para inglês - para francês (sub-rotina), grego (polimorfismo), latim (encapsulamento) ou suas combinações (polimorfismo ad-hoc).

Mas esse não é o nosso destino. Nossa escolha - definições com uma viseira levantada em russo puro.

Imagem


Uma imagem é um nome preditivo de uma quantidade que define 1) as propriedades apropriadas de uma quantidade e 2) a seleção de operações para uma quantidade.

A palavra "tipo" (tipo) corresponde à primeira parte da definição: "propriedades apropriadas de uma quantidade". Mas o principal significado da imagem está na segunda parte: "seleção de operações em quantidades".

O ponto de partida para a introdução de uma imagem na linguagem C é o cálculo usual, por exemplo, a operação de adição.

A matemática do papel , escrita à mão ou impressa, não faz muita diferença entre os tipos de números, geralmente considerando-os reais. Portanto, suas operações de processamento são inequívocas.

A matemática da máquina separa estritamente números em números inteiros e números fracionais. Diferentes tipos de números são armazenados de forma diferente na memória e processados ​​por diferentes instruções do processador. Por exemplo, a adição de números inteiros e fracionários são dois comandos diferentes, correspondentes a dois nós diferentes do processador. Mas o comando para adicionar argumentos inteiros e fracionários está ausente.

A matemática aplicada , isto é, a linguagem C, separa os tipos de números, mas combina operações: a adição para números inteiros e / ou fracionários é escrita com um sinal de ação.

Uma definição clara da imagem do conceito permite que você definitivamente fale sobre outros dois conceitos: tamanho e operação .

Valor e operação


O valor é o número que está sendo processado.

Operação - processando os valores dos valores iniciais (argumentos) para obter o número total (total).

A magnitude e a operação estão interconectadas. Cada operação é uma quantidade, pois possui um total numérico. E cada valor é o resultado do envio do valor para o registro do processador / do processador, ou seja, o resultado da operação. Apesar dessa interconexão, o principal é a possibilidade de sua descrição separada, embora com a repetição de uma palavra em diferentes partes do dicionário, o que ocorre em ma3.

A abordagem da máquina dividiu todos os números usados ​​pelo programador em comandos e dados . Anteriormente, ambos eram números, por exemplo, os comandos eram escritos em códigos numéricos. No entanto, nas línguas aplicadas, as equipes deixaram de ser números e se tornaram palavras e sinais de ação . Somente "dados" permaneceram números, mas é ridículo continuar a chamá-los, porque na transição do ponto de vista da máquina para o ponto de vista matemático, os números são quantidades que dividem os iniciais ( dados ) e finais ( procurados ). "Desconhecido" - isso parecerá bobo.

As equipes também são divididas em dois tipos de ações: matemática e serviço. Ações matemáticas - operações. Voltaremos ao serviço mais tarde.

Nas linguagens C, as operações matemáticas inequívocas ou únicas de papel e máquina, quase sem exceção, tornam-se múltiplas.

Múltiplas operações - várias operações com o mesmo nome, com diferentes imagens de argumentos e diferentes ações de significado semelhante.

Argumentos inteiros correspondem à operação inteira, fracionário - fracionário. Essa diferença é especialmente evidente na operação de divisão, quando a expressão 1/2 fornece um total de 0, e não 0,5. Esse registro não está de acordo com as regras da matemática do papel, mas a linguagem C não procura cumpri-las (ao contrário do Fortran) - ele toca de acordo com suas próprias regras aplicadas .

No caso de misturar números inteiros e números fracionários, a única redução correta dos valores do argumento é incluída - uma conversão de seleção do valor de uma imagem para outra. De fato, ao adicionar um número inteiro e um número fracionário, o resultado é fracionário; portanto, a imagem da operação seleciona a operação de conversão do argumento inteiro em um valor fracionário.

Várias operações permanecem não múltiplas, mas únicas . Tais operações são definidas para apenas um tipo de argumento: o restante da divisão são argumentos inteiros, o estilo (operações bit a bit) são inteiros naturais. Ma3 indica a pluralidade de operações por sinais (# ^) indicando os padrões para os quais a operação está definida. Esta é uma propriedade importante, mas negligenciada anteriormente, de cada operação.

Todas as funções são operações arbitrárias da unidade. A exceção são operadores - funções sem suporte integradas ao idioma (operações iniciais).

Promoção


Assistência é uma ação concomitante.

Se considerarmos a operação como a ação principal, poderemos distinguir dois relacionados, que fornecem a operação e diferem dela. Estes são 1) controle variável e 2) envio. Essa ação é chamada de promoção .

Aqui é necessário distrair e dizer separadamente sobre traduções para o russo de livros didáticos de programação. Uma nova declaração de palavras (expressão) foi introduzida no texto de C / R para registrar ações, que tentou dividir os conceitos de um comando de máquina em diferentes ações: 1) uma operação, 2) um anúncio e 3) envio (chamado "estruturas de controle"). Esta tentativa foi ocultada por tradutores russos, substituindo a "expressão" pela palavra "operador", que:

  1. tornou-se sinônimo da palavra máquina "equipe"
  2. acabou por ser sinônimo da frase "sinal de ação",
  3. e também recebeu um número ilimitado de valores adicionais. Ou seja, se transformou em uma semelhança do artigo em inglês "uh ...".

Considere atividades ou facilitações associadas.

Gerenciamento de variáveis


Gerenciamento de variáveis (UE) - crie / exclua células variáveis.
A UP ocorre implicitamente quando uma variável é declarada, que já está gravada por outro motivo - para indicar a imagem de uma quantidade. Somente um tipo de variável incremental é explicitamente controlado usando as funções malloc () e free ().

Deve-se notar que as ações implícitas são mais convenientes para a escrita, uma vez que não requer nada, mas é mais difícil de entender - elas são mais difíceis de serem consideradas e interpretadas.

Submissão


Envio - ative / desative as seções da camada.

A linguagem C propôs uma maneira diferente da assembler, uma maneira aplicada de controlar a ordem das ações - submissão. Ele reflete e desenvolve uma frase complexa da fala com uma divisão explícita na parte principal (envio da frase) e na parte subordinada (seções de subnível / subprograma).

Tanto o anúncio quanto o envio são totalmente baseados no conceito de uma camada .

Camada


Uma camada é um conjunto de expressões seletivas limitado e de nível único.

A camada, explícita e implicitamente, assumiu a execução de várias tarefas ao mesmo tempo:

  1. racionalizando o programa,
  2. restrição de visibilidade de nome (implicitamente),
  3. gerenciamento de variáveis ​​(células de memória) (implicitamente),
  4. definição de seções subordinadas para subordinação,
  5. definições de funções e coleções e outras.

Nas linguagens de máquina, não havia o conceito de uma camada; portanto, ela não aparecia no K / P e, se não houvesse algo lá, a introdução em livros subsequentes seria heresia e liberdade de pensamento. Portanto, o conceito de uma camada não apareceu, embora seja extremamente útil e bastante óbvio.

Sem uma camada, é impossível explicar de forma breve e clara muitas das ações e regras do programa. Por exemplo, por que ir simples como três copeques é ruim e complicado enquanto é bom. Você só pode jurar impotente, como Dijkstra ("a qualificação de programadores é uma função que depende inversamente da frequência de ocorrência de declarações goto em seus programas". Em resumo, apenas cabras usam goto. O nível de justificação é Deus.) É verdade que não é tão ruim se seus livros eles não precisam explicar nada, mas, como dissemos, esse não é o nosso destino.

A propósito, pode-se supor que Den Ritchie tenha ido ao Goto precisamente como uma chave para procurar algum conceito sem nome, porque não havia necessidade ou beleza na expressão do Goto. Mas havia uma explicação simples e compreensível dos novos princípios da linguagem que o próprio Richie não queria dar, e que se baseiam apenas no conceito de uma camada .

Desvio


Desvio - alterando as propriedades usuais de um novo nome.

O desvio mais importante está relacionado apenas às propriedades da camada do programa e é descrito por uma palavra "estática", que possui significados diferentes em cada tipo de camada.

5. O último capítulo. Linguagens de aplicação comuns


Idiomas aplicados são idiomas figurativos (com uma imagem "digitada"). Eles são baseados no uso explícito ou implícito da imagem. E aqui novamente se manifesta uma contradição: a imagem explícita é mais compreensível, mas menos conveniente, e vice-versa.

imagem

(O layout da tabela ainda não foi entregue, portanto, a tabela é apresentada em uma figura.)

Após C, o desenvolvimento das linguagens aplicadas foi o caminho para aumentar suas imagens. O mais importante para entender a alta definição é um descendente direto da linguagem C - a linguagem C ++. Ele desenvolve a idéia de seleção arbitrária de operações para quantidades e a incorpora com base em uma expressão sy-expressiva, uma coleção que recebe um novo nome - um objeto. No entanto, o C ++ não é tão conciso e expressivo quanto o C, devido à sobrecarga de novos tipos de coleções e regras relacionadas. A propósito, vamos falar sobre "sobrecarga".

Sobrecarga e polimorfismo


A palavra sobrecarga é um termo desatualizado em uma abordagem de máquina que denota a criação de várias operações .

Os programadores de máquina (sistema) podem se incomodar com a multiplicidade de operações: “O que esse sinal (+) significa: adição de números inteiros, adição de números fracionários ou mesmo um deslocamento ?! Hoje em dia, eles não escreveram assim! " Daí a conotação negativa da palavra selecionada ("busto", "cansado"). Para um programador de aplicativos, várias operações são a pedra angular, a principal conquista e legado da linguagem C, tão naturais que elas geralmente não são realizadas.

Em C ++, pluralidadeestendida não apenas às operações originais, mas também às funções - individuais e agrupadas em métodos - métodos. Juntamente com vários métodos, tornou-se possível redefini-los em classes estendidas, o que era vagamente chamado de "polimorfismo". A combinação de polimorfismo e sobrecarga deu uma mistura explosiva, que se espalhou em dois polimorfismos: "verdadeiro" e "ad-hoc". Você só pode descobrir isso apesar dos nomes atribuídos. Nomes estrangeiros abriram o caminho para o anúncio.

A declaração da forma "sobrecarga" é melhor expressa pela palavra add - adicionando uma declaração da função de mesmo nome com os argumentos de outra imagem.

Um anúncio da forma "polimorfismo" é melhor chamado de palavra redeclaração- declaração sobreposta em uma nova camada de extensão da função de mesmo nome com argumentos da mesma imagem.

Será fácil entender que os métodos com o mesmo nome de imagens diferentes (argumentos) são redeclarados e da mesma imagem são redeclarados .

Palavras em russo decidem.

Pista de decolagem


A consideração dos conceitos de linguagens altamente figurativas confirma a importância de uma definição clara de conceitos fundamentais. Com C descrito corretamente, aprender idiomas de alta forma será fácil e agradável.

Isso é especialmente importante para linguagens implícitas e altamente figurativas (PHP, JavaScript). Para eles, a importância dos objetos (imagens compostas) se torna ainda maior do que em C ++, mas o próprio conceito de imagem se torna implícito e ilusório. Do ponto de vista da conveniência, eles se tornaram mais simples, mas do ponto de vista do entendimento, é mais complicado.

Portanto, você deve começar a aprender linguagens de programação com a linguagem C e seguir em frente na ordem em que as linguagens da família C aparecem.

O mesmo vale para descrições de idiomas. Idiomas diferentes têm o mesmo ou menor conjunto de unidades de gênero que o idioma C. O número de espécies e amostras pode diferir em ambas as direções: C ++ tem mais espécies que C, JavaScript tem menos.

A linguagem MySQL merece menção especial. Parece - nada em comum, mas ele é perfeitamente descrito por Matryoshka, e conhecê-lo se torna mais rápido e fácil. O que é importante, dada a sua importância para a web - a cantina da programação moderna. Onde está o MySQL, existem outros SQL. Bem, todos os tipos de pítons de Fortran-Pascal também são descritos por Matryoshka assim que suas mãos alcançam.

Então, grandes coisas nos esperam - uma descrição aplicada da linguagem C e uma única descrição das línguas que a seguem. “Nossos objetivos são claros, as tarefas são definidas. Para trabalhar, camaradas! (Aplausos prolongados e tempestuosos, transformando-se em uma ovação de pé. Todos se levantam.) ”

Suas opiniões serão ouvidas com muita atenção, sua ajuda na criação do site de bonecas será muito apreciada. Informações mais completas sobre o livro estão no site, astuciosamente escondidas em Matryoshka C.

Source: https://habr.com/ru/post/pt452328/


All Articles