Matryoshka C Sistema de lenguaje de programa de capa

Tratemos de imaginar la química sin el sistema periódico de Mendeleev (1869). Cuántos elementos tenían que tenerse en cuenta, y en orden aleatorio ... (Entonces - 60.)

Para hacer esto, solo piense en uno o más lenguajes de programación a la vez. Los mismos sentimientos, el mismo desorden creativo.

Y ahora podemos experimentar los sentimientos de los químicos del siglo XIX, cuando se les ofreció todo su conocimiento, y un poco desde arriba, en una tabla periódica.

imagen


El libro "Matryoshka C. Sistema de capas del lenguaje del programa ”representa todas las unidades del lenguaje C de un vistazo. Esto le permite organizarlos, corregir información desactualizada e incluso aclarar el concepto mismo del programa.

Hoy, la información de programación necesita ser sistematizada aún más que los elementos químicos hace 150 años.

La primera necesidad es la enseñanza. Mendeleev comenzó a crear su propio sistema cuando se enfrentó a la pregunta de con qué elemento comenzar a dar clases: O, H, N, He, Au ... Al mismo tiempo, fue más fácil para él: enseñó la química de los mejores estudiantes de la Universidad de San Petersburgo. Y la programación ya se está enseñando en la escuela y pronto comenzará en el jardín de infantes.

La segunda necesidad es un enfoque científico. Usando el Sistema Periódico, se descubrieron nuevos elementos y se corrigió la información sobre los antiguos. Ella ayudó a crear el modelo atómico (1911). Y así sucesivamente.

La tercera necesidad es la aclaración del concepto de un programa.

Programación moderna con un pie atrapado en los años 50 del siglo XX. Luego, los programas eran simples, y las máquinas y los lenguajes de máquina eran complejos, por lo que todo giraba en torno a las máquinas y los lenguajes.

Ahora lo contrario es cierto: los programas son complejos y primarios, los lenguajes son simples y secundarios. Esto se llama el enfoque aplicado, con el que todos parecen estar familiarizados. Pero los estudiantes y los desarrolladores continúan persuadiendo que todo es igual.

Lo que nos lleva de vuelta a la primera conferencia de Mendeleev, privatista. ¿Qué decir a los estudiantes de primer año? Donde esta la verdad Esa es la pregunta.

El libro "Matryoshka C. Sistema de capas del lenguaje del programa ". Además, está dirigido no solo a los estudiantes, sino también a programadores capacitados, ya que son ellos quienes deben buscar la verdad y cambiar la visión del mundo, es decir, nosotros.

El siguiente es un resumen del libro.

1. Introducción


En 1969, se creó el lenguaje C, que se ha convertido en el lenguaje de programación fundamental y se ha mantenido con él durante 50 años. ¿Por qué es esto así? En primer lugar, porque C es un lenguaje aplicado que le dio al programa una apariencia humana en lugar de una máquina . Este logro fue arreglado por lenguajes de la familia C: C ++, JavaScript, PHP, Java, C # y otros. En segundo lugar, es un lenguaje corto y hermoso.

Sin embargo, el lenguaje C en sí mismo generalmente se mezcla con el ensamblador de máquinas, lo que complica y distorsiona su percepción. Otro extremo es la imposición de una cierta "filosofía" sobre la carga del lenguaje: procesal, objeto, funcional, compilado, interpretado, mecanografiado, etc. Esto agrega emoción, pero no ayuda a describir mejor el lenguaje.

La verdad está en el medio, y para el lenguaje C, estrictamente en el medio entre la percepción filosófica y la máquina.

El lenguaje C no es independiente, obedece el discurso escrito ordinario y al mismo tiempo controla el lenguaje ensamblador. Esta posición describe el modelo de voz del programa , según el cual el programa se divide en tres tipos subordinados: voz, código, comando. El lenguaje C es responsable de la segunda forma de código.

Una vez determinado el lugar del lenguaje en el programa, es posible organizar la información al respecto, que se realiza mediante el sistema Layer del lenguaje del programa , que representa el lenguaje C en el espíritu del sistema Mendeleev, en una sola página.

El sistema se construye teniendo en cuenta la comunidad de lenguajes aplicados que surgen de su subordinación del habla. Un conjunto de unidades Matryoshka C le permite describir y comparar diferentes lenguajes mediante la creación de una serie de Matryoshkas: C ++, PHP, JavaScript, C #, MySQL, Python, etc. Es digno y correcto que diferentes idiomas se describan por unidades del lenguaje fundamental.

2. CAPÍTULO 1. El modelo de habla del programa. Claro C


El primer capítulo presenta el modelo de habla del programa , que refleja el enfoque aplicado. Según él, el programa tiene tres tipos secuenciales obvios:

  1. discurso: discurso directo de un programador que resuelve un problema,
  2. código: codificación de la solución en forma matemática en C (o cualquier otro)
  3. y comando: comandos inmediatos de la máquina.

El modelo de voz explica por qué C es un lenguaje simple y comprensible. C está construido a imagen y semejanza del habla humana que nos es familiar.

El primer tipo de programa es el discurso directo del programador. El discurso está en línea con el pensamiento humano. Con la ayuda del habla, los programadores novatos escriben programas, primero en ruso y luego traducen paso a paso las acciones a un lenguaje de código. Y fue precisamente en este modelo que se creó el lenguaje C.

Las conclusiones del programador expresadas por el discurso se convierten en una forma numérica de código. Esta transformación debería llamarse reflexión , ya que el habla y el código tienen la misma naturaleza (reflexión - nacimiento - género). Esto es bastante obvio si comparamos los tipos de voz (a la izquierda) y de código (a la derecha) del programa.

imagen

Es curioso que la reflexión ocurra de manera muy simple, con solo dos tipos de expresiones.

Sin embargo, la descripción moderna del lenguaje C (de 1978) no contiene una lista suficiente de nombres para describir el lenguaje en general, o para la tarea de reflexión en particular. Por lo tanto, nos vemos obligados a participar en la creatividad e introducir estos nombres.

La elección de las palabras debe ser precisa y clara. Esto requería un enfoque especial, resumido de la siguiente manera: el uso estricto del idioma nativo. Para el inglés sería inglés, pero no somos ingleses. Entonces usamos lo que tenemos y trataremos de hablar ruso.

La reflexión se realiza mediante dos tipos de expresiones:

  1. Cálculo (HF): refleja el cambio en las propiedades del sujeto. La propiedad de un objeto se expresa mediante un número, luego la acción sobre la propiedad es la acción sobre el número: la operación.
  2. presentación (Pch): refleja un cambio en el orden de las acciones. Un prototipo de PC es una oración de voz con una oración compleja, por lo tanto, la mayoría de los tipos de PC comienzan con uniones subordinadas "si", "de lo contrario", "adiós", "para". Otros tipos de PC los complementan.

Por cierto, ¿puedes creer que en la descripción de C no hay nombre para el cálculo de la expresión? ¿Se llaman simplemente "expresiones"? Después de esto, la ausencia de un nombre y asociación para el tipo de presentación, y de hecho la escasez en términos de nombres, definiciones y generalizaciones, ya no sorprenderá. Esto se debe a que el famoso K / R ("lenguaje C", Kernigan / Ritchie, 1978) no es una descripción, sino una guía para el uso del lenguaje.

Sin embargo, me gustaría tener una descripción del idioma. Por lo tanto, es ofrecido por el sistema de lenguaje del programa Layer .

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


Cualquier descripción debe ser precisa y extremadamente corta. En el caso de un lenguaje de programa, una descripción frontal es difícil.

Aquí tenemos un programa. Se compone de módulos. Los módulos consisten en subrutinas y colecciones. Los subprogramas consisten en expresiones separadas: declaraciones, cálculos, presentaciones. Presentaciones: hasta diez especies. Los subordinados conectan subniveles y subrutinas. También hay varios anuncios. Sin embargo, las declaraciones se incluyen no solo en subprogramas y subniveles, sino también en módulos y colecciones. Y la mayoría de las expresiones consisten en palabras que son tan difíciles de describir, por lo que generalmente se les da dos listas: las palabras de origen y las derivadas, que debes conocer a lo largo del estudio y la aplicación del lenguaje. Agregue a esto signos de puntuación y varias expresiones.

En esta declaración no es fácil entender quién estaba parado sobre quién.

Un enfoque jerárquico directo a la descripción del lenguaje será demasiado complejo. La búsqueda de rutas indirectas conduce a una descripción del lenguaje en función de su naturaleza del habla y del lado del comando. Así nació el sistema de capas, que coincide parcialmente con la tabla periódica de Mendeleev, que también es un sistema de capas. Como resultó 42 años después de su publicación (1869), la periodicidad del sistema está asociada con capas electrónicas (1911, el modelo atómico Bohr-Rutherford). Además, los sistemas estratificados y periódicos están relacionados por la ubicación tabular de todas las unidades en una página.

La descripción de las unidades del lenguaje es concisa: solo 10 tipos de expresiones y 8 tipos de otras unidades, además de significativas y visuales. Aunque inusual para un primer conocido.

Las unidades lingüísticas se dividen en 6 niveles:

  1. escuadrones - filas de la mesa
  2. departamentos - grupos especiales de géneros (partes de la primera línea)
  3. kind - celdas (nivel de división principal)
  4. subespecies - divisores de especies (nivel raro)
  5. vistas: fórmulas de unidad en la parte inferior de la celda o por separado
  6. los patrones son unidades mismas (solo palabras)

Las muestras de palabras son descritas por un diccionario , un subsistema separado compuesto por los mismos seis niveles.

El componente del habla del lenguaje C es bastante obvio, aunque todavía merece una descripción. Pero la parte del comando del lenguaje solo está conectada con el control de compilación, durante el cual se crea un tercer tipo de programa: el comando. Aquí llegamos al lado más emocionante de C: la belleza.

4. SIGUIENTES CAPÍTULOS. Hermoso si


El lenguaje C subyace a la programación moderna. Por qué En primer lugar, en virtud del discurso más consistente. En segundo lugar, porque eludió muy bien las limitaciones del procesamiento automático de números.

¿Qué ofreció exactamente Xi? Imagen y capa.

La palabra "imagen" es una traducción de la palabra inglesa "tipo", que proviene del griego "prototipo" - "prototipo". En ruso, la palabra "tipo" no transmite la piedra angular del concepto expresado, además, se mezcla con el significado oficial de "vista".

Inicialmente, la imagen resolvió la tarea puramente mecánica de la informática, y luego se convirtió en la pista para el nacimiento de los lenguajes de objetos.

La capa resolvió de inmediato varios problemas, tanto de máquina como aplicados. Por lo tanto, la revisión comenzará con una imagen de tarea única y pasará a la capa de tareas múltiples.

Una de las características desagradables de la programación histórica es que la mayoría de los conceptos, incluidos los básicos, se dan sin definiciones. "El lenguaje de programación (el nombre de los ríos) tiene un número entero y flotante de números ..." - y se rascó. No es necesario determinar qué es un "tipo" (imagen), porque los propios autores no lo entienden completamente y se callarán "para mayor claridad". Si se sujetan a la pared, darán una definición vaga e inútil. Ayuda a esconderse detrás de palabras extranjeras: para autores rusos - para inglés (tipo), para inglés - para francés (subrutina), griego (polimorfismo), latín (encapsulación) o sus combinaciones (polimorfismo ad-hoc).

Pero ese no es nuestro destino. Nuestra elección: definiciones con visera elevada en ruso puro.

Imagen


Una imagen es un nombre predictivo de una cantidad que define 1) las propiedades adecuadas de una cantidad y 2) la selección de operaciones para una cantidad.

La palabra "tipo" (tipo) corresponde a la primera parte de la definición: "propiedades propias de una cantidad". Pero el significado principal de la imagen está en la segunda parte: "selección de operaciones a cantidades".

El punto de partida para introducir una imagen en el lenguaje C es el cálculo habitual, por ejemplo, la operación de suma.

Las matemáticas en papel , escritas a mano o impresas, no hacen mucha diferencia entre los tipos de números, generalmente considerándolos reales. Por lo tanto, sus operaciones de procesamiento son inequívocas.

La matemática mecánica separa estrictamente los números en números enteros y fraccionarios. Los diferentes tipos de números se almacenan de manera diferente en la memoria y se procesan mediante diferentes instrucciones del procesador. Por ejemplo, la suma de números enteros y fraccionarios son dos comandos diferentes que corresponden a dos nodos de procesador diferentes. Pero falta el comando para agregar argumentos enteros y fraccionarios.

La matemática aplicada , es decir, el lenguaje C, separa los tipos de números, pero combina las operaciones: la suma para números enteros y / o fraccionarios se escribe con un signo de acción.

Una definición clara de la imagen conceptual le permite hablar definitivamente sobre otros dos conceptos: tamaño y operación .

Valor y operación


El valor es el número que se procesa.

Operación : procesa los valores de los valores iniciales (argumentos) para obtener el número total (total).

La magnitud y la operación están interconectadas. Cada operación es una cantidad, ya que tiene un total numérico. Y cada valor es el resultado de enviar el valor al registro del procesador / desde el procesador, es decir, el resultado de la operación. A pesar de esta interconexión, lo principal es la posibilidad de su descripción por separado, aunque con la repetición de una palabra en diferentes partes del diccionario, lo que sucede en ma3.

El enfoque de la máquina dividió todos los números utilizados por el programador en comandos y datos . Anteriormente, ambos eran números, por ejemplo, los comandos se escribían en códigos numéricos. Sin embargo, en los idiomas aplicados, los equipos dejaron de ser números y se convirtieron en palabras y signos de acción . Solo los "datos" seguían siendo números, pero para seguir llamándolos tan ridículos, porque al pasar de una computadora a un punto de vista matemático, los números son cantidades que dividen los iniciales ( datos ) y los finales ( buscados ). "Desconocido dado" - esto sonará tonto.

Los equipos también se dividen en dos tipos de acciones: matemática y de servicio. Acciones matemáticas - operaciones. Pasaremos al servicio más tarde.

En lenguajes C, las operaciones matemáticas habituales de papel y máquina sin ambigüedades, o simples, casi sin excepción se vuelven múltiples.

Operaciones múltiples: varias operaciones del mismo nombre con diferentes imágenes de argumentos y diferentes acciones de significado similar.

Los argumentos enteros corresponden a toda la operación, fraccional - fraccional. Esta diferencia es especialmente evidente en la operación de división, cuando la expresión 1/2 da un total de 0, no 0.5. Tal registro no cumple con las reglas de las matemáticas en papel, pero el lenguaje C no busca cumplir con ellas (a diferencia de Fortran), se reproduce de acuerdo con sus propias reglas aplicadas .

En el caso de mezclar enteros y números fraccionarios, se incluye la única reducción correcta de los valores del argumento : una conversión de selección del valor de una imagen a otra. De hecho, al sumar un número entero y un número fraccionario, el resultado es fraccionario, por lo que la imagen de la operación selecciona la operación de convertir el argumento entero a un valor fraccionario.

Una serie de operaciones no son múltiples sino únicas . Tales operaciones se definen para un solo tipo de argumento: el resto de la división son argumentos enteros, el estilo (operaciones bit a bit) son enteros naturales. Ma3 indica la pluralidad de operaciones mediante signos (# ^) que indican los patrones para los que se define la operación. Esta es una propiedad importante pero previamente pasada por alto de cada operación.

Todas las funciones son operaciones unitarias arbitrarias. La excepción son los operadores: funciones sin paréntesis integradas en el lenguaje (operaciones iniciales).

Promoción


La asistencia es una acción concomitante.

Si consideramos la operación como la acción principal, entonces podemos distinguir dos que la acompañan, que proporcionan la operación y difieren de ella. Estos son 1) control variable y 2) presentación. Esta acción se llama promoción .

Aquí es necesario distraer y decir por separado sobre las traducciones al ruso de los libros de texto de programación. Se introdujo una nueva declaración de palabra (expresión) en el texto K / P para registrar acciones, que intentaron dividir los conceptos de un comando de máquina en diferentes acciones: 1) una operación, 2) un anuncio y 3) presentación (llamadas "estructuras de control"). Este intento fue enterrado por traductores rusos, reemplazando la "expresión" con la palabra "operador", que:

  1. se convirtió en sinónimo de la palabra máquina "equipo"
  2. resultó ser sinónimo de la frase "signo de acción",
  3. y también recibió un número ilimitado de valores adicionales. Es decir, se convirtió en una imagen del artículo en inglés "uh ...".

Considere las actividades asociadas o facilitaciones .

Manejo variable


Gestión de variables (UE): crea / elimina celdas variables.
UP ocurre implícitamente cuando se declara una variable, que ya está escrita por otro motivo, para indicar la imagen de una cantidad. Solo un tipo de variable incremental se controla explícitamente utilizando las funciones malloc () y free ().

Cabe señalar que las acciones implícitas son más convenientes para la escritura, ya que no requieren escribir nada en absoluto, pero son más difíciles de entender: son más difíciles de tener en cuenta e interpretar.

Sumisión


Presentación : activar / desactivar secciones de capa.

El lenguaje C propuso una forma diferente de ensamblador, una forma aplicada para controlar el orden de las acciones: la presentación. Refleja y desarrolla una oración compleja del habla con una división explícita en la parte principal (presentación de la oración) y la parte subordinada (secciones de subnivel / subprograma).

Tanto el anuncio como la presentación se basan completamente en el concepto de una capa .

Capa


Una capa es un conjunto de expresión selectiva de nivel único limitado.

La capa asumió explícita e implícitamente la ejecución de varias tareas a la vez:

  1. racionalizando el programa,
  2. restricción de visibilidad del nombre (implícitamente),
  3. gestión de variables (celdas de memoria) (implícitamente),
  4. definición de secciones subordinadas para subordinación,
  5. definiciones de funciones y colecciones y otros.

En los lenguajes de máquina no existía el concepto de una capa, por lo que no aparecía en K / P, y si algo no estaba allí, entonces introducirlo en libros posteriores sería herejía y libre pensamiento. Por lo tanto, el concepto de una capa no apareció en absoluto, aunque es extremadamente útil y bastante obvio.

Sin una capa, es imposible explicar breve y claramente muchas de las acciones y reglas del programa. Por ejemplo, por qué un simple goto como tres kopecks es malo y complicado mientras es bueno. Solo puede jurar impotente, como lo hizo Dijkstra ("la calificación de los programadores es una función que depende inversamente de la frecuencia de aparición de declaraciones goto en sus programas". En resumen, solo las cabras usan goto. El nivel de justificación es Dios). Cierto, no es tan malo si sus libros no tienen que explicar nada, pero, como hemos dicho, este no es nuestro destino.

, , goto , goto . , , .


— .

, «static», .

5. .


( , «»). . : — , , .

imagen

( , .)

. — ++. - , — . ++ , , . , «».


«» (overload) — , .

() : « (+): , ?! !» («», «»). — , , , .

++ , — , — . , «». , : «» «ad-hoc». . ad.

«» — .

«» — .

, () — , — .

.


- . - .

- (PHP, JavaScript). ( ) , ++, . , — .

.

. , , . : ++ , , — .

MySQL. — , , . , — . MySQL, SQL. , -- , .

, — . « , . , ! (, , . .)»

, . , .

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


All Articles