Matryoshka C. Sistema de linguaxe de programa en capas

Tentemos imaxinar a química sen a Táboa Periódica de Mendeleiev (1869). Cantos elementos había que ter en conta, e sen orde en particular... (Entón - 60.)

Para iso, basta con pensar nunha ou varias linguaxes de programación á vez. Mesmos sentimentos, mesmo caos creativo.

E agora podemos revivir os sentimentos dos químicos do século XIX cando se lles ofreceu todos os seus coñecementos, e un pouco máis, nunha soa Táboa Periódica.

Matryoshka C. Sistema de linguaxe de programa en capas


O libro "Matryoshka C. Sistema en capas de linguaxe de programas" presenta todas as unidades da linguaxe C dunha ollada. Isto permítelle organizalos, corrixir información obsoleta e mesmo aclarar o propio concepto do programa.

Hoxe, a información de programación precisa de sistematización aínda máis que os elementos químicos hai 150 anos.

A primeira necesidade é a docencia. Mendeleiev comezou a crear o seu sistema cando se enfrontou á pregunta de con que elemento comezar a dar clases: O, H, N, He, Au... Ao mesmo tempo, foille máis doado -ensinaba química aos mellores- estudantes de Universidade de San Petersburgo. A programación xa se está a impartir na escola e en breve comezará na escola infantil.

A segunda necesidade é un enfoque científico. Coa axuda da Táboa Periódica descubríronse novos elementos e corrixíronse información sobre os antigos. Ela axudou a crear o modelo do átomo (1911). Etcétera.

A terceira necesidade é aclarar o concepto de programa.

A programación moderna ten un pé atrapado nos anos 50 do século XX. Daquela, os programas eran sinxelos, pero as máquinas e as linguaxes de máquinas eran complexas, polo que todo xiraba arredor de máquinas e linguaxes.

Agora todo é ao revés: os programas son complexos e primarios, as linguaxes son simples e secundarias. Isto chámase enfoque aplicado, que todos parecen estar familiarizados. Pero estudantes e desenvolvedores seguen convencidos de que todo é igual.

O que nos devolve á primeira conferencia de Privatdozent Mendeleev. Que dicir aos estudantes de primeiro ano? Onde está a verdade? Esa é a pregunta.

O libro "Matryoshka C" ofrece a súa resposta a esta pregunta. Sistema en capas de linguaxe de programas". Ademais, diríxese non só a estudantes, senón tamén a programadores formados, xa que son eles, é dicir, nós, os que debemos buscar a verdade e cambiar a visión do mundo.

O que segue é un resumo do libro.

1. Introdución

En 1969 creouse a linguaxe C, que se converteu na linguaxe de programación fundamental e que se mantén durante 50 anos. Por que é así? En primeiro lugar, porque C é aplicado a linguaxe que deu o programa humano vista no seu lugar máquina. Este logro foi garantido por linguaxes da familia C: C++, JavaScript, PHP, Java, C# e outros. En segundo lugar, é unha lingua curta e fermosa.

Non obstante, a propia linguaxe C adoita mesturarse co ensamblador de máquinas, polo que se complica e distorsiona a súa percepción. O outro extremo é a imposición dunha certa “filosofía” á linguaxe: procesual, obxectiva, funcional, compilada, interpretada, mecanografiada, etc. Isto engade emoción, pero non axuda a describir mellor a linguaxe.

A verdade está no medio, e para a linguaxe C está estrictamente no medio entre a percepción filosófica e a máquina.

A linguaxe C non é independente, obedece á linguaxe escrita ordinaria e, ao mesmo tempo, controla a propia linguaxe ensambladora. Esta posición describe Modelo de fala do programa, segundo o cal o programa divídese en tres tipos subordinados: voz, código, comando. A linguaxe C é responsable do segundo tipo de código.

Despois de ter determinado o lugar da lingua no programa, pode organizar a información sobre ela, o que fai Sistema de linguaxe de programas en capas, que representa a linguaxe C no espírito do sistema periódico - nunha páxina.

O sistema constrúese tendo en conta comunidades de linguas aplicadas, derivados da súa subordinación da fala. Un conxunto de unidades Matryoshka C permítelle describir e comparar diferentes linguaxes, creando unha serie de Matryoshkas: C++, PHP, JavaScript, C#, MySQL, Python, etc. É digno e correcto que as diferentes linguas sexan descritas por unidades da lingua fundamental.

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

O primeiro capítulo presenta modelo de fala do programa, reflectindo un enfoque aplicado. Segundo el, o programa ten tres tipos secuenciais obvios:

  1. fala - fala directa do programador que resolve o problema,
  2. codificado: codificar unha solución nunha forma matemática en linguaxe C (ou calquera outra)
  3. e comando: comandos directos da máquina.

O modelo de fala explica por que C é unha linguaxe sinxela e comprensible. Xi está construído a imaxe e semellanza da fala humana que nos é familiar.

O primeiro tipo de programa é o discurso directo do programador. A fala correspóndese co pensamento humano. Os programadores principiantes escriben programas usando a voz, primeiro en ruso, despois traducindo as accións paso a paso a unha linguaxe de código. E é precisamente neste modelo onde se creou a linguaxe C.

As conclusións do programador, expresadas na fala, convértense nunha forma numérica codificada. Esta transformación debería chamarse reflexión, xa que a fala e o código teñen a mesma natureza (reflexión - nacemento - xénero). Isto é bastante obvio se comparamos os tipos de fala (á esquerda) e de código (á dereita) do programa.

Matryoshka C. Sistema de linguaxe de programa en capas

É curioso que a reflexión se produza de xeito moi sinxelo, con só dous tipos de expresións.

Porén, a descrición moderna da linguaxe C (de 1978) non contén unha lista suficiente de nomes nin para describir a linguaxe en xeral, nin para a tarefa de reflexión en particular. Polo tanto, vémonos obrigados a ser creativos e introducir estes nomes.

A elección das palabras debe ser precisa e clara. Isto requiriu un enfoque especial, brevemente expresado do seguinte xeito: uso estrito da lingua nativa. Para os ingleses sería inglés, pero nós non somos ingleses. Así que usaremos o que temos e tentaremos falar ruso.

A reflexión realízase mediante dous tipos de expresións:

  1. cómputo (HF) - reflicte un cambio nas propiedades dun obxecto. A propiedade dun obxecto exprésase mediante un número, entón unha acción sobre unha propiedade é unha acción sobre un número - unha operación.
  2. subordinación (Pch) - reflicte un cambio na orde das accións. O prototipo de Pch é unha oración complexa de fala, polo que a maioría dos tipos de Pch comezan coas conxuncións subordinadas "se", "se non", "mentres", "para". Outros tipos de PC complémentanas.

Por certo, podes crer que na descrición C non hai un nome para as expresións de cálculo: simplemente chámanse "expresións"? Despois disto, xa non será de estrañar que non haxa nome e asociación para o tipo de subordinación, e de feito a escaseza de nomes, definicións e xeneralizacións en xeral. Isto débese a que o famoso K/R (“The C Language”, Kernighan/Ritchie, 1978) non é unha descrición, senón unha guía para usar a linguaxe.

Non obstante, aínda me gustaría ter unha descrición da lingua. Por iso ofrécese Sistema de linguaxe de programas en capas.

3. CAPÍTULO 2. Sistema de capas. Breve C

Calquera descrición debe ser precisa e extremadamente concisa. No caso dunha linguaxe de programa, unha descrición frontal é difícil.

Aquí temos un programa. Consta de módulos. Os módulos consisten en subrutinas e coleccións (estrutura). As subrutinas consisten en expresións individuais: declaracións, cálculos, subordinación. Hai ata dez tipos de subordinación. A subordinación conecta subniveis e subrutinas. Tamén hai varios anuncios. Non obstante, as declaracións inclúense non só en subrutinas e subniveles, senón tamén en módulos e coleccións. E a maioría das expresións consisten en palabras que son tan difíciles de describir que normalmente se dan en dúas listas: palabras orixinais e derivadas, coas que se familiarizará ao longo da aprendizaxe e do uso da lingua. Imos engadir signos de puntuación e outras expresións a isto.

En tal presentación, non é doado entender quen estaba sobre quen.

Un enfoque xerárquico directo para describir unha lingua sería excesivamente complexo. Unha busca indirecta leva a unha descrición da linguaxe en función da súa natureza de fala e do lado de mando. Así, naceu o Sistema de Capas, coincidindo parcialmente co Sistema Periódico de Mendeleiev, que tamén é capa. Como aconteceu 42 anos despois da súa publicación (1869), a periodicidade do sistema está asociada á electrónica. capas (1911, Modelo do átomo de Bohr-Rutherford). Ademais, os sistemas en capas e periódicos son similares na disposición tabular de todas as unidades nunha mesma páxina.

A descrición das unidades lingüísticas é breve: só 10 tipos de expresións e 8 tipos doutras unidades, así como significativas e visuais. Aínda que pouco habitual para o primeiro coñecido.

As unidades lingüísticas divídense en 6 niveis:

  1. unidades - filas da táboa
  2. departamentos - grupos especiais de xéneros (partes da primeira liña)
  3. xénero - células (nivel principal de división)
  4. superespecies - separadores de especies (nivel raro)
  5. tipos: fórmulas unitarias na parte inferior da cela ou por separado
  6. patróns: as propias unidades (só para palabras)

Palabras de mostra describe dicionario - un subsistema separado composto polos mesmos seis niveis.

O compoñente de fala da linguaxe C é bastante obvio, aínda que aínda merece unha descrición. Pero a parte de mando da linguaxe está relacionada precisamente co control de compilación, durante o cal se crea o terceiro tipo de programa: comando. Aquí chegamos ao aspecto máis emocionante da linguaxe C: a beleza.

4. SEGUINTES CAPÍTULOS. Guapo Si

A linguaxe C é a base da programación moderna. Por que? En primeiro lugar, pola maior correspondencia coa fala. En segundo lugar, porque superou as limitacións do procesamento de números de máquina.

Que propoñía Xi exactamente? Imaxe e capa.

A palabra "imaxe" é unha tradución da palabra inglesa "type", que provén do grego "prototype" - "type". Na lingua rusa, a palabra "tipo" non transmite a pedra angular do concepto que se expresa; ademais, confúndese co significado auxiliar "tipo".

Inicialmente, a imaxe resolveu un problema de cálculo puramente máquina, e logo converteuse nunha pista para o nacemento das linguaxes de obxectos.

A capa resolveu inmediatamente varios problemas, tanto de máquina como de aplicación. Polo tanto, a consideración comezará cunha imaxe dunha única tarefa e pasará a unha capa de varias tarefas.

Unha das características desagradables da programación histórica é que a maioría dos conceptos, incluídos os básicos, se dan sen definicións. "A linguaxe de programación (nome dos ríos) ten tipos de números enteiros e flotantes..." e rascaron máis. Non é necesario definir o que é un "tipo" (imaxe), porque os propios autores non o entenden completamente e calarán "por mor da claridade". Se están pegadas á parede, darán unha definición vaga e inútil. Axuda moito esconderse detrás das palabras estranxeiras: para os autores rusos - detrás do inglés (tipo), para os ingleses - detrás do francés (subrutina), do grego (polimorfismo), do latín (encapsulación) ou das súas combinacións (polimorfismo ad-hoc).

Pero este non é o noso destino. A nosa elección son definicións cunha viseira elevada en ruso puro.

Imaxe

Imaxe é un nome prefigurativo dunha cantidade, que define 1) as propiedades intrínsecas da cantidade e 2) a selección de operacións para a cantidade.

A palabra "tipo" (tipo) corresponde á primeira parte da definición: "propiedades intrínsecas dunha cantidade". Pero o significado principal da imaxe está na segunda parte: "selección de operacións a cantidades".

O punto de partida para introducir unha imaxe en C é un cálculo normal, como a operación de suma.

Papel As matemáticas, xa sexan escritas a man ou impresas, non fan moita distinción entre tipos de números, normalmente asumindo que son reais. Polo tanto, as súas operacións de procesamento son inequívocas.

máquina As matemáticas dividen estrictamente os números en enteiros e fraccións. Diferentes tipos de números almacénanse de forma diferente na memoria e procesan as diferentes instrucións do procesador. Por exemplo, as instrucións para sumar números enteiros e fraccións son dúas instrucións diferentes correspondentes a dous nodos de procesador diferentes. Pero non hai ningún comando para engadir argumentos enteiros e fraccionarios.

Aplicado as matemáticas, é dicir, a linguaxe C, separan os tipos de números, pero combinan operacións: a suma de enteiros e/ou fraccións escríbese cun signo de acción.

Unha definición clara da imaxe conceptual permítenos falar definitivamente doutros dous conceptos: importe и operación.

Magnitude e funcionamento

Valor - O número que se está a procesar.

Funcionamento — procesar os valores dos valores iniciais (argumentos) para obter o número final (total).

A magnitude e o funcionamento están interrelacionados. Cada operación é unha cantidade porque ten un resultado numérico. E cada valor é o resultado de transferir un valor a/desde o rexistro do procesador, é dicir, o resultado da operación. A pesar desta relación, o principal é a posibilidade da súa descrición separada, aínda que coa repetición dunha palabra en diferentes seccións do dicionario, que é o que ocorre en MA3.

O enfoque da máquina dividiu todos os números utilizados polo programador en ordes и os datos. Anteriormente, ambos eran números, por exemplo, os comandos escribíanse en códigos numéricos. Porén, nas linguaxes aplicadas, os comandos deixaron de ser números e convertéronse palabras и signos de acción. Só quedan os “datos” como números, pero é absurdo seguir chamándoos así, porque no paso dunha máquina ao punto de vista matemático, os números son cantidades que se dividen polo orixinal (os datos) e final (necesario). "Dato descoñecido" soará estúpido.

Tamén se dividiron os equipos en dous tipos de accións: matemáticas e de servizos. Accións matemáticas - operacións. Máis tarde chegaremos ás cousas oficiais.

Nas linguaxes C, as operacións matemáticas sen ambigüedades ou únicas en papel e máquinas habituais fanse case universalmente múltiples.

As operacións múltiples son varias operacións co mesmo nome con diferentes tipos de argumentos e accións diferentes, semellantes no seu significado.

Os argumentos enteiros corresponden a unha operación enteira e os argumentos fraccionarios a unha operación fraccionaria. Esta diferenza é especialmente clara durante a operación de división, cando a expresión 1/2 dá un total de 0, non 0,5. Tal notación non se corresponde coas regras das matemáticas en papel, pero a linguaxe C non se esforza por cumprilas (a diferenza de Fortran) - xoga segundo o seu propio aplicado regras.

No caso de mesturar números enteiros e fraccións, inclúese o único correcto emitir valores de argumento — transformación selectiva dun valor dunha imaxe a outra. De feito, ao engadir un número enteiro e un número fraccionario, o resultado é fraccionario, polo que a imaxe da operación recoller a operación de converter un argumento enteiro nun valor fraccionario.

Quedan varias operacións pluralE solteiro. Tales operacións defínense só para un tipo de argumentos: resto de división - argumentos enteiros, apilado (operacións bit a bit) - enteiros naturais. Ma3 indica a multiplicidade de operacións con signos (#^) que indican as imaxes para as que se define a operación. Esta é unha propiedade importante pero previamente ignorada de cada operación.

Todas as funcións son operacións unitarias arbitrarias. A excepción son os operadores - funcións sen corchetes, incorporado á linguaxe (operacións orixinais).

Asistencia

Asistencia - Acción que acompaña á operación.

Se consideramos a operación como a acción principal, podemos distinguir dúas que acompañan a operación e que se diferencian dela. Estes son 1) control variable e 2) subordinación. Esta acción chámase asistencia.

Aquí temos que divagar e dicir por separado sobre as traducións rusas dos libros de texto de programación. Introduciuse unha nova palabra no texto do K/R para rexistrar as accións afirmación (expresión), que tentaba dividir os conceptos dun comando de máquina en diferentes accións: 1) operación, 2) declaración e 3) subordinación (chamadas "construtos de control"). Este intento foi enterrado polos tradutores rusos, substituíndo "expresión" pola palabra "operador", que:

  1. converteuse en sinónimo da palabra máquina "comando",
  2. resultou ser sinónimo da frase "sinal de acción",
  3. e tamén recibiu un número ilimitado de valores adicionais. É dicir, converteuse en algo semellante ao artigo en inglés "uhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh"

Considere as accións de acompañamento, ou asistencia.

Control variable

Control variable (ARRIBA) - creando/eliminando celas variables.
UE ocorre implícitamente ao declarar unha variable, que xa está escrita por outro motivo: para indicar a imaxe do valor. Só se xestiona explícitamente unha vista variables adicionais usando as funcións malloc() e free().

Cómpre ter en conta que as accións implícitas son máis convenientes para escribir, xa que non requiren nada de escribir, pero son máis difíciles de entender: son máis difíciles de ter en conta e de interpretar.

Subordinación

Subordinación - conectar/desactivar seccións de capa.

A linguaxe C ofrecía un método aplicado para controlar a orde das accións, diferente do ensamblador - subordinación. Reflicte e desenvolve unha oración complexa do discurso cunha división clara na parte principal (cláusula de subordinación) e a parte subordinada (seccións de subnivel/subrutina).

Tanto a declaración como a presentación baséanse integramente no concepto capa.

Capa

Capa é un conxunto limitado de expresións selectivas dun só nivel.

A capa asumiu de forma explícita e implícita varias tarefas á vez:

  1. organizando o programa
  2. limitar a visibilidade dos nomes (implícitamente),
  3. xestión de variables (células de memoria) (implícita),
  4. definición de oracións subordinadas para subordinación,
  5. definicións de funcións e seleccións e outras.

Non había ningún concepto de capa nas linguaxes de máquinas, polo que non apareceu en K/R, e se algo non estaba alí, introducilo en libros posteriores sería herexía e librepensamento. Polo tanto, o concepto de capa non apareceu en absoluto, aínda que é extremadamente útil e bastante obvio.

Sen unha capa, é imposible explicar breve e claramente moitas das accións e regras do programa. Por exemplo, por que é tan simple como tres copeques mal e o complicado é bo. Só podes xurar impotentemente, como fixo Dijkstra ("a habilidade dos programadores é unha función que depende inversamente da frecuencia de aparición das declaracións goto nos seus programas". En resumo, só as cabras usan goto. O nivel de xustificación é Deus). É certo, isto non dá tanto medo se os teus libros Non temos que explicar nada, pero, como xa dixemos, este non é o noso destino.

Por certo, pódese supoñer que Dan Ritchie deixou goto precisamente como clave para buscar algún concepto sen nome, porque non había necesidade nin beleza na expresión goto. Pero facía falta unha explicación sinxela e comprensible dos novos principios da linguaxe, que o propio Richie non quería dar, e que se basean precisamente no concepto. capa.

Desviación

Desviación — cambiar as propiedades habituais do novo nome.

A desviación máis importante está relacionada precisamente coas propiedades da capa do programa, e descríbese cunha palabra "estática", que ten un significado diferente en cada tipo de capa.

5. O ÚLTIMO CAPÍTULO. Común de linguas aplicadas

As linguas aplicadas son figurado idiomas (tendo unha imaxe, "mecanografiado"). Baséanse no uso explícito ou implícito da imaxe. Ademais, aquí de novo aparece unha contradición: unha imaxe explícita é máis comprensible, pero menos conveniente, e viceversa.

Matryoshka C. Sistema de linguaxe de programa en capas

(A disposición da táboa aínda non foi entregada, polo que a táboa móstrase cunha imaxe).

Despois de C, o desenvolvemento das linguaxes aplicadas tomou o camiño de aumentar a súa figuratividade. O máis importante para comprender as imaxes altas é o descendente directo de C - a linguaxe C++. Desenvolve a idea dunha selección arbitraria de operacións para as cantidades e incorpóraa sobre a base da selección de expresións sintéticas, que recibe un novo nome - obxecto. Non obstante, C++ non é tan conciso e expresivo como C debido á sobrecarga de novos tipos de colección e as súas regras asociadas. Por certo, imos falar de "sobrecarga".

Sobrecarga e polimorfismo

A palabra "sobrecarga" é un termo obsoleto de aprendizaxe automática para crear operacións múltiples.

Programadores de máquinas (sistemas). pluralidade As operacións poden ser molestas: "¿Que significa este signo (+): engadir números enteiros, engadir fraccións ou mesmo cambiar?! Nos nosos tempos non escribían así!”. De aí a connotación negativa da palabra elixida (“exceso”, “canso”). Para un programador de aplicacións, as múltiples operacións son a pedra angular, o principal logro e legado da linguaxe C, tan naturais que moitas veces non son recoñecidas.

En linguaxe C++ pluralidade estendeuse non só ás operacións orixinais, senón tamén ás funcións -tanto individuais como combinadas en clases- métodos. Con varios métodos chegou a posibilidade de anulalos en clases estendidas, o que se chamou vagamente "polimorfismo". A combinación de polimorfismo e sobrecarga produciu unha mestura explosiva que se dividiu en dous polimorfismos: "verdadeiro" e "ad-hoc". É posible entender isto só a pesar dos nomes asignados. O camiño do anuncio está empedrado con nomes estranxeiros.

Unha declaración da forma "sobrecarga" exprésase mellor na palabra anuncio adicional — engadindo unha declaración dunha función do mesmo nome con argumentos dunha imaxe diferente.

Unha declaración da forma "polimorfismo" chámase mellor re-anuncio — unha declaración superposta nunha nova capa de extensión dunha función do mesmo nome con argumentos da mesma imaxe.

Entón será doado entender que os mesmos métodos de diferentes imaxes (argumentos) - anunciado adicionalmentee unha imaxe - re-anunciado.

As palabras rusas deciden.

Pista de aterraxe

A consideración dos conceptos das linguaxes altamente figurativas confirma a importancia dunha definición clara dos conceptos fundamentais. Con C correctamente descrito, aprender linguaxes de alta figuración será fácil e agradable.

Isto é especialmente importante para linguaxes implícitas altamente figurativas (PHP, JavaScript). Para eles, a importancia dos obxectos (imaxes compostas) faise aínda maior que en C++, pero o propio concepto de imaxe vólvese implícito e esquivo. Desde o punto de vista da conveniencia, fixéronse máis simples, pero desde o punto de vista da comprensión, volvéronse máis difíciles.

Polo tanto, debes comezar a aprender linguaxes de programación coa linguaxe C e avanzar máis na orde na que aparecen as linguaxes da familia C.

O mesmo ocorre coa descrición das linguas. As diferentes linguas teñen o mesmo, ou menor, conxunto de xéneros unitarios que a linguaxe C. O número de tipos e mostras pode diferir en ambas direccións: C++ ten máis tipos que C, mentres que JavaScript ten menos.

Mención especial merece a linguaxe MySQL. Parece que non hai nada en común, pero Matryoshka o describe perfectamente e coñecelo faise máis rápido e máis sinxelo. O que é importante, dada a súa importancia para a web: o camiño gastronómico da programación moderna. E onde hai MySQL, hai outros SQL. Ben, todos os tipos de Fortran-Pascal-Pythons tamén son descritos por Matryoshka, tan pronto como teñan man del.

Entón, agárdannos grandes cousas: unha descrición aplicada da linguaxe C e unha descrición unificada das linguas que a seguen. “Os nosos obxectivos están claros, as nosas tarefas están definidas. A traballar, compañeiros! (Aplausos tormentosos e prolongados, que se converten en ovación. Todos se levantan.)"

As túas opinións serán escoitadas con moita atención, a túa axuda na creación do sitio web de bonecas aniñadas será recibida con gran gratitude. Información máis completa sobre o libro está no sitio web, intelixentemente escondido en Matryoshka C.

Fonte: www.habr.com

Engadir un comentario