¿Por qué elegir el lenguaje C en la historia? Los hechos han demostrado: ¡el lenguaje C en la vejez todavía no es viejo!

La aparición de cualquier cosa nueva no es por accidente, sino el resultado inevitable impulsado por los tiempos.

1. El desarrollo del lenguaje C

1. Qué tan bueno es el lenguaje C

Si me preguntas: qué tan bueno es el lenguaje C. Entonces, podría pensar en ello y decir: no sé qué tan bueno es, pero sé que es genial.

Aquí quiero decir algo que puede ser un poco parcial, es decir: hoy en día, donde hay electricidad en este mundo, puede estar ella (lengua C) o sus descendientes.

Cualquier lenguaje inferior a C no es suficiente para abstraer completamente un sistema informático; cualquier lenguaje superior a C se puede implementar en C.

2. El padre del lenguaje C

Dennis MacAlistair Ritchie (en inglés: Dennis MacAlistair Ritchie, 9 de septiembre de 1941-12 de octubre de 2011) fue un científico informático estadounidense. Los hackers suelen llamarlo "dmr". Es el creador del lenguaje C y un desarrollador clave del sistema operativo Unix. Ha tenido un profundo impacto en el campo de la informática y fue el ganador del premio Turing de 1983 con Ken Thompson.

Cronología de la vida de Dennis Ritchie

El profesor Martin, del Departamento de Ciencias de la Computación del MIT, comentó: "Si Jobs es el rey de los productos de visualización, Rich es el monarca del reino invisible. La contribución de Jobs es que comprende mucho las necesidades y los deseos de los usuarios. En cuanto a la creación de productos tecnológicos que hacen que la gente contemporánea sea reacia a pensar en ello. Sin embargo, es el Sr. Rich quien proporciona la mayoría de los componentes básicos para estos productos. La gente no puede ver estos componentes, pero los usa todos los días ". Knihan comentó: Newton dijo que estaba sobre los hombros de gigantes. Ahora, todos estamos sobre los hombros de Rich.

3. Los antepasados ​​del lenguaje C

En aras de la brevedad, yo (Dennis M. Ritchie) omití la descripción completa de C en sí, su padre B [Johnson 73] y su abuelo BCPL [Richards 79], y solo me centré en los elementos característicos de cada idioma y cómo evolucionado. Este artículo trata sobre el desarrollo del lenguaje de programación C, las influencias en él y las condiciones bajo las cuales fue creado. En aras de la brevedad, omito descripciones completas del propio C, su padre B [Johnson 73] y su abuelo BCPL [Richards 79] y, en cambio, se concentran en los elementos característicos de cada idioma y en cómo evolucionaron.

Este texto proviene de un artículo sobre "La historia del desarrollo del lenguaje C" escrito por Dennis M. Rich, el padre del lenguaje C. El texto señala claramente que el lenguaje C se originó en dos idiomas, B y BCPL. Se puede considerar que el lenguaje C está sobre los hombros de gigantes, siguiendo la marea de los tiempos.

1) Padre del lenguaje BCPL

Martin Richards

Martin Richards (inglés: Martin Richards, 21 de julio de 1940 -), nacido en el Reino Unido, un informático, como inventor del lenguaje de programación BCPL, desarrolló el sistema operativo TRIPOS.

En 1966, Martin Richard inventó el lenguaje de programación BCPL basado en el lenguaje de programación CPL en la Universidad de Cambridge.

2) El padre de la lengua B

Kenneth Lane Thompson

Kenneth Lane Thompson (inglés: Kenneth Lane Thompson, 4 de febrero de 1943 -) apodado Ken Thompson (inglés: Ken Thompson), erudito e ingeniero informático estadounidense. Los círculos culturales de los hackers suelen llamarlo "ken". Mientras trabajaba en Bell Labs, Thompson diseñó e implementó el sistema operativo Unix. Creó el lenguaje B (basado en BCPL), el predecesor del lenguaje C, y es uno de los creadores y desarrolladores del sistema operativo Plan 9. Junto con Dennis Ritchie, fue el ganador del Premio Turing de 1983.

En 2006, Thompson se unió a Google y co-diseñó el lenguaje Go.

3) Un conjunto de fotos de Ken y Dennis

Mejorando y poniéndose sobre los hombros de gigantes

Ken está sentado y Dennis está de pie.

Enseñe con el ejemplo

Gracias a Dennis Rich por dejar una "Biblia en lenguaje C" al mundo

Es una lástima que el autor haya estudiado la lengua C de Tan Haoqiang en la universidad. 

Dennis 与 《El lenguaje de programación C》

4. Cronología del lenguaje C

En la línea de tiempo de la figura, podemos ver claramente el origen y los nodos de tiempo del lenguaje C.

A veces tengo que decir que los tiempos hacen héroes. Entre 1969 y 1971, el famoso sistema operativo Unix nació de Ken Thompson. Como software de sistema a gran escala, un lenguaje confiable de alto nivel era extremadamente necesario. Apareció (el bajo nivel de lenguaje en el momento referido a ensamblador, porque el sistema operativo anterior estaba escrito en ensamblador). Dennis Rich no estaba inactivo en este momento. Después de la mejora del lenguaje B, nació un lenguaje C mecanografiado (según el propio Rich, durante un tiempo, este lenguaje mejorado se llamó NB. A saber: nuevo B. Sin embargo, en los ojos de los que comemos melones, de hecho es NB).

En 1971 comencé a extender el lenguaje B agregando un tipo de carácter y también reescribí su compilador para generar instrucciones de máquina PDP-11 en lugar de código enhebrado. Así, la transición de B a C fue contemporánea con la creación de un compilador capaz de producir programas lo suficientemente rápido y pequeño para competir con el lenguaje ensamblador. Llamé al lenguaje ligeramente extendido NB, para "nuevo B".

5. Cronología de Unix

El nacimiento de Unix está estrechamente relacionado con la difusión y el uso generalizados del lenguaje C.

La línea de tiempo anterior solo muestra las primeras versiones de Unix que nacieron en el mismo período de tiempo que el lenguaje C (por supuesto, si está interesado, puede consultar el historial del desarrollo relacionado con Unix, lo que definitivamente lo sorprenderá. sucursales: BSD, Minix, Linux ...).

A continuación, a través de algunos de los códigos fuente del kernel de Unix que se encuentran en Internet, rastrearé el momento en que apareció el lenguaje C.

1) PDP-Unix

Archivo de código de kernel del sistema PDP-Unix

PDP-7 Unix 

 

Se puede ver que básicamente están escritos en ensamblador (sufijo de nombre de archivo .s). ¿Por qué usar la palabra básico? Porque algunos comandos del sistema están escritos en lenguaje B.

2) Primera edición Unix

Archivo de código del kernel del sistema Unix First Edition

Como puede ver, todavía está escrito en ensamblado (nombre de archivo sufijo.s).

3) Segunda edición Unix

Archivo de código del kernel del sistema Unix de segunda edición

Segunda edición de Unix La segunda edición de Unix fue desarrollada para el PDP-11 en Bell Labs por Ken Thompson, Dennis Ritchie y otros. Extendió la Primera Edición con más llamadas al sistema y más comandos. Esta edición también vio el comienzo del lenguaje C, que se utilizó para escribir algunos de los comandos.

En esta versión, ya puede ver el lenguaje C.

4) Lenguaje Unix y C

Después de que apareciera el lenguaje C en la versión Unix V2 y la versión Unix V3, ya se puede ver una gran cantidad de códigos escritos en el lenguaje C en el kernel de Unix.

Según Richie: A principios de 1973, se había completado el conocimiento básico de la C moderna. El lenguaje C y el compilador son lo suficientemente potentes como para permitirnos reescribir el kernel Unix de PDP-11 (es decir, la versión V3 de Unix) en C ese verano.

A principios de 1973, los elementos esenciales de la C moderna estaban completos. El lenguaje y el compilador eran lo suficientemente fuertes como para permitirnos reescribir el kernel Unix para el PDP-11 en C durante el verano de ese año.

En este momento, es básicamente cierto que la mayoría de los núcleos del lenguaje C y Unix se han perfeccionado. Todo lo que queda por hacer es la portabilidad y la estandarización.

Es posible que haya oído hablar de la siguiente historia: Más tarde, Unix se utilizó en organizaciones académicas y gubernamentales. Es precisamente debido a la popularidad y prosperidad de Unix que el lenguaje C se ha difundido y utilizado ampliamente.

En la década de 1980, el uso del lenguaje C se extendió ampliamente y casi todas las arquitecturas de máquinas y sistemas operativos pueden usar compiladores. En particular, se ha convertido en una herramienta de programación para computadoras personales y es muy popular, ya sean fabricantes de software comercial para estas máquinas o usuarios finales interesados ​​en la programación.

Durante la década de 1980, el uso del lenguaje C se extendió ampliamente y los compiladores estuvieron disponibles en casi todas las arquitecturas de máquinas y sistemas operativos; en particular, se hizo popular como herramienta de programación para computadoras personales, tanto para los fabricantes de software comercial para estas máquinas como para los usuarios finales interesados ​​en la programación.

Este es el llamado logro mutuo.

El resumen es: no tener miedo a las ganancias y pérdidas, mejorar cada vez más, y finalmente lograr el uno al otro.

6. ¿Cómo se escribió el primer compilador en lenguaje C?

No sé si lo has pensado alguna vez. Todo el mundo escribe un compilador en lenguaje C o en un lenguaje basado en C. Entonces, ¿cómo lo escribió el primer compilador de lenguaje C del mundo? Esta no es una pregunta de "huevo y gallina" ...

Mirando hacia atrás en la historia del lenguaje C: Tomphson desarrolló el lenguaje B sobre la base de BCPL, y Ritchie desarrolló con éxito el lenguaje C actual sobre la base del lenguaje B. Antes de que se usara el lenguaje C como lenguaje de programación de sistemas, Tomphson también usaba el lenguaje B para escribir sistemas operativos. Se puede ver que antes de que se implemente el lenguaje C, el lenguaje B ya se puede poner en práctica. Por lo tanto, el prototipo del primer compilador en lenguaje C puede estar escrito en lenguaje B o en lenguaje B mixto y lenguaje ensamblador PDP.

Todos sabemos ahora que la eficiencia de ejecución del lenguaje B es relativamente baja, pero si todo está escrito en lenguaje ensamblador, no solo el ciclo de desarrollo es largo, el mantenimiento es difícil y lo que es más terrible es la pérdida de portabilidad necesaria para lenguajes de programación de alto nivel.

Por lo tanto, los primeros compiladores del lenguaje C adoptaron un enfoque complicado: primero use el lenguaje ensamblador para escribir un subconjunto del compilador del lenguaje C, y luego recursivamente a través de este subconjunto, y luego complete el compilador completo del lenguaje C.

El proceso detallado es el siguiente: primero cree un subconjunto con solo las funciones más básicas del lenguaje C, denotado como el lenguaje C0, el lenguaje C0 es bastante simple, puede usar directamente el lenguaje ensamblador para escribir un compilador C0. Dependiendo de las funciones existentes de C0, el diseño es más complejo que C0, pero aún incompleto, otro subconjunto del lenguaje C1 del lenguaje C, donde C0 pertenece a C1, C1 pertenece a C y C0 se utiliza para desarrollar un compilador de lenguaje C1 . Sobre la base de C1, diseñe otro subconjunto del lenguaje C del lenguaje C2. El lenguaje C2 es más complejo que el C1, pero aún no es un lenguaje C completo. Se desarrolló un compilador para el lenguaje C2 ... Así que hasta CN, CN ya es lo suficientemente potente, este tiempo es suficiente para desarrollar una implementación completa del compilador en lenguaje C. En cuanto a la N aquí, depende de la complejidad de su idioma de destino (aquí es el lenguaje C) y la capacidad de programación del programador. En pocas palabras, si alcanza una determinada etapa de subconjunto, puede usar fácilmente las funciones existentes para implementar el lenguaje C, entonces ha encontrado N. El siguiente diagrama ilustra este proceso abstracto:

https://kknews.cc/tech/bx2r3j.html introduce un concepto, "autocompilación" Autocompilación, es decir, para algunos tipos fuertes con propiedades de arranque obvias (el llamado tipo fuerte significa que cada variable en el El programa debe Se puede usar solo después de declarar el tipo, como el lenguaje C. Por el contrario, algunos lenguajes de scripting no tienen el término tipo en absoluto.) Los lenguajes de programación pueden usar un subconjunto limitado de ellos para lograr su propia expresión a través de un número limitado de recursiones. Los lenguajes incluyen C, Pascal, Ada, etc. En cuanto a por qué se puede autocompilar, puede consultar "Principios de compilación" de Tsinghua University Press. El libro implementa un compilador de un subconjunto de Pascal. https://zhuanlan.zhihu.com/p/136102461

Y este proceso también encontró evidencia en la versión Unix V2.

Ken Thompson, Dennis Ritchie y otros desarrollaron la segunda versión de Unix para el PDP-11 en Bell Labs. Extiende la primera edición con más llamadas al sistema y más comandos. Esta versión también vio el comienzo del lenguaje C, que se utilizó para escribir algunos comandos.

El código aquí es solo algunos comandos, algunas funciones de biblioteca y el código fuente del compilador de C. Los archivos en c / provienen de la cinta last1120c.tar.gz y constituyen un compilador C válido para la segunda versión de Unix.

La segunda edición de Unix fue desarrollada para el PDP-11 en Bell Labs por Ken Thompson, Dennis Ritchie y otros. Extendió la Primera Edición con más llamadas al sistema y más comandos. Esta edición también vio el comienzo del lenguaje C, que se usó para escribir algunos de los comandos. El código aquí es solo la fuente de algunos de los comandos, algunas de las funciones de la biblioteca y el compilador C. Los archivos en c / provienen de la cinta last1120c.tar.gz y forman un compilador C funcional para la Segunda Edición de Unix.

Después de descargar el código fuente y descomprimirlo, la estructura del directorio es la siguiente:

Los amigos interesados ​​pueden descargarlo y estudiarlo.

Comparación de dos idiomas BCPL, B, C

Si desea encontrar una buena forma de comparar lenguajes de programación, es el código.

1. Ejemplos de código de tres idiomas

Lo siguiente usa BCPL, B y C para implementar un programa simple: el programa suma tres números a, byc, asigna el resultado a la suma y finalmente imprime la suma.

1) Ejemplo de lenguaje BCPL

OBTENER "libhdr"

DEJE comenzar () = VALOF

{DEJE a, b, c = 1, 2, 3

suma: = a + b + c

escrito (suma)

}

DEJE declarar variables;

El símbolo: = es un símbolo de asignación Este símbolo también se encuentra en Go, que representa una variable local dentro de una función. Lo interesante aquí es que Ken Thompson, el padre del lenguaje B, cambió el símbolo: = por el símbolo =. Ahora, como uno de los padres del lenguaje Go, he recuperado el símbolo: = (destino en la oscuridad ~).

从 BCPL 到 B 的 过渡 中 , 决定 使用 单个 字符 = 代替 赋值: = Otros violines en la transición de BCPL a B se introdujeron como cuestión de gusto, y algunos siguen siendo controvertidos, por ejemplo, la decisión de utilizar el carácter único = para asignación en lugar de: =. De manera similar, B usa / ** / para incluir comentarios, donde BCPL usa //, para ignorar el texto hasta el final de la línea. El legado de PL / I es evidente aquí. (C ++ ha resucitado la convención de comentarios BCPL). Fortran influyó en la sintaxis de las declaraciones: las declaraciones B comienzan con un especificador como auto o static, seguidas de una lista de nombres, y C no solo siguió este estilo sino que lo adornó colocando sus palabras clave de tipo al comienzo de las declaraciones.

2) Ejemplo de idioma B

Estructura lingüística de la lengua B

principal() {

- declaraciones -

}

newfunc (arg1, arg2) {

- declaraciones -

}

fun3 (arg) {

- más declaraciones -

}

Ejemplo de código de idioma B

principal() {

auto a, b, c, suma;

a = 1; b = 2; c = 3;

suma = a + b + c;

putnumb (suma);

}

La declaración auto ... es una declaración. Es decir, define las variables locales que se utilizarán en la función;

putnumb es una función de biblioteca con parámetros, que imprimirá un número en la terminal.

3) Ejemplo de lenguaje C

#include <stdio.h>

vacío principal(){

int a, b, c, suma;

a = 1; b = 2; c = 3;

suma = a + b + c;

printf ("% d", suma);

}

2. La diferencia entre los tres en el código de muestra

La diferencia entre los tres se puede ver en el ejemplo anterior:

La escritura en lenguaje C está más cerca del lenguaje B;

Los idiomas BCPL y B son idiomas sin tipo y utilizan palabra / celda para representar un bit de longitud fija. El lenguaje C tiene tipos.

Hay algunos lugares que pueden interesarle:

++, - El símbolo fue inventado por Thompson;

&&, || se introducen en lenguaje C.

Descripción:

Después de comprobarlo durante mucho tiempo, solo encontré algunos fragmentos de código de BCPL y lenguaje B. En cuanto a si se puede ejecutar, no lo sé ^ _ ^;

Si desea conocer las diferencias específicas entre los tres, se recomienda leer el artículo de Dennis Ritchie sobre "La historia del desarrollo del lenguaje C";

Los lenguajes BCPL y B también han experimentado varias iteraciones de versión (porque los fragmentos de código que se encuentran en Internet tienen muchas formas diferentes de escritura. Por ejemplo, los fragmentos de código B que se encuentran en Wikipedia son diferentes de los que se encuentran en versiones anteriores del kernel de Unix Los fragmentos de código B se escriben de manera diferente. La especulación personal es un problema de versión y las diferentes versiones tienen diferentes métodos de escritura);

El lenguaje C está más cerca del lenguaje B, o es decir que se agregan continuamente muchas características nuevas sobre la base de B (se lanzan 2 preguntas: 1. ¿Por qué Rich no se llama B ++ como C ++ cuando lo nombró? 2. ¿Por qué C ++ usa 2 signos más en lugar de un signo más, llamado C +? ¡Dé la bienvenida a los estudiantes con gran cerebro para que dejen comentarios!);

Si hay un maestro que cree que el fragmento de código anterior es incorrecto o sabe cómo ejecutarlo, puede comunicarse de forma privada.

En tercer lugar, ¿por qué elegir el lenguaje C en la historia?

A finales de la década de 1960, la investigación de Bell Labs sobre sistemas informáticos entró en un período próspero. El proyecto Mutlics cooperado por MIT, General Electric y Bell Labs terminó en un fracaso (alrededor de 1969). Fue durante este período que Ken Tompson comenzó a escribir alternativas a Mutlics. Esperaba construir un sistema informático cómodo (es decir, Unix) de acuerdo con su propio diseño. Más tarde, al escribir la primera versión de Unix, sintió que se necesitaba un nuevo lenguaje de programación del sistema en Unix y creó un lenguaje B. El lenguaje B es sin ningún tipo C. Para ser precisos, el lenguaje B es un lenguaje producido por Tompson que aprieta BCPL en la memoria 8K y lo filtra su cerebro personal.

Debido a algunos problemas en el lenguaje B, solo se usa para escribir algunas herramientas de comando. Fue durante este período que Ritchie rediseñó y mejoró sobre la base de la lengua B, dando así nacimiento a la lengua C.

En 1973, el lenguaje C estaba básicamente completo. Desde el nivel del lenguaje y del compilador, fue suficiente para Tompson y Ritchie usar el lenguaje C para reescribir el kernel de Unix. Más tarde, Unix se hizo popular lentamente en algunas instituciones de investigación, universidades y agencias gubernamentales, lo que a su vez condujo al desarrollo del lenguaje C.

En 1978, se publicó "El lenguaje de programación C" compilado por K&R, que promovió aún más la popularización del lenguaje C.

El resumen en una oración es: en el momento correcto y en el lugar correcto, aparecieron las personas y las herramientas adecuadas (la relación entre Unix y el lenguaje C es un poco como la relación entre GNU y el kernel de Linux, que es un logro mutuo).

Cuarto, la biblioteca y el código C estándar

Después de varias iteraciones del lenguaje C y sus estándares, se convirtió en lo que todos ven hoy. Muchas bibliotecas estándar de C se especifican en el estándar y diferentes sistemas tienen sus propias implementaciones de código diferentes.

Por supuesto, también hay código que implementa la biblioteca estándar C en el kernel de Linux. Apreciemos juntos su belleza.

1. Biblioteca C estándar

ANSI C incluye 15 archivos de encabezado en total. En 1995, Normative Addendum 1 (NA1) aprobó 3 archivos de encabezado (iso646.h, wchar.hy wctype.h) para ser agregados a la biblioteca estándar C. El estándar C99 agrega 6 archivos de encabezado (complex.h, fenv.h, inttypes.h, stdbool.h, stdint.hy tgmath.h). Se han agregado cinco archivos de encabezado adicionales (stdalign.h, stdatomic.h, stdnoreturn.h, threads.hy uchar.h) al estándar C11.

Hasta ahora, hay 29 archivos de encabezado en la biblioteca estándar de C:

2 、 linux / lib / string.c

Versión del kernel de Linux: 4.18.13

A continuación se enumeran tres funciones de procesamiento de cadenas strcpy (), strncpy (), strncat (). El código proviene de Linus Benedict Torvalds, ¿por qué dices eso? Mira los comentarios del encabezado del código, es el sabor familiar estúpido. Aquellos que hayan leído el código fuente de git también deben saber que hay comentarios similares en el código fuente de git.

// Identificador de licencia SPDX: GPL-2.0

/ *

* linux / lib / string.c

*

* Copyright (C) 1991, 1992 Linus Torvalds

* /

/ *

* rutinas estúpidas de la biblioteca .. Las versiones optimizadas generalmente deben encontrarse

* como código en línea en <asm-xx / string.h>

*

* Estos también tienen errores.

*

* * Viernes 25 de junio de 1999, Ingo Oeser <[email protected]>

* - Se agregó strsep () que reemplazará a strtok () pronto (porque strsep () es

* reentrante y debería ser más rápido). Utilice solo strsep () en el código nuevo, por favor.

*

* * Sábado 9 de febrero de 2002, Jason Thomas <[email protected]>,

* Matthew Hawkins <[email protected]>

* - Strtok besado () adiós

* /

// ....... omitir otro ......

// ... aquí está mi código de amor .....

#ifndef __HAVE_ARCH_STRCPY

/ **

* strcpy: copia una cadena terminada en% NUL

* @dest: dónde copiar la cadena

* @src: de dónde copiar la cadena

* /

#undef strcpy

char * strcpy (char * dest, const char * src)

{

char * tmp = dest;

while ((* dest ++ = * src ++)! = '\ 0')

/* nada */;

return tmp;

}

EXPORT_SYMBOL (strcpy);

#terminara si

#ifndef __HAVE_ARCH_STRNCPY

/ **

* strncpy: copia una cuerda C de longitud limitada

* @dest: dónde copiar la cadena

* @src: de dónde copiar la cadena

* @count: el número máximo de bytes para copiar

*

* El resultado no termina en% NUL si la fuente excede

* @count bytes.

*

* En el caso de que la longitud de @src sea menor que la de

* cuenta, el resto de @dest se rellenará con% NUL.

*

* /

char * strncpy (char * dest, const char * src, size_t count)

{

char * tmp = dest;

while (contar) {

si ((* tmp = * src)! = 0)

src ++;

tmp ++;

contar--;

}

return dest;

}

EXPORT_SYMBOL (strncpy);

#terminara si

#ifndef __HAVE_ARCH_STRLCPY

#ifndef __HAVE_ARCH_STRNCAT

/ **

* strncat: agrega una cadena C de longitud limitada a otra

* @dest: la cadena a la que se agregará

* @src: la cadena para agregarle

* @count: el número máximo de bytes para copiar

*

* Tenga en cuenta que, a diferencia de strncpy (), strncat () garantiza que el resultado sea

* terminado.

* /

char * strncat (char * dest, const char * src, size_t count)

{

char * tmp = dest;

if (contar) {

mientras (* dest)

dest ++;

while ((* dest ++ = * src ++)! = 0) {

si (--count == 0) {

* dest = '\ 0';

romper;

}

}

}

return tmp;

}

EXPORT_SYMBOL (strncat);

#terminara si

#ifndef __HAVE_ARCH_STRLCAT

// ....... omitir otro ......

// ... aquí está mi código de amor .....

Al mirar estos códigos con sus compañeros de clase por primera vez, dijo: Esto se llama código, y todo lo demás es shXt. Ahora que lo pienso, cuando implementé estos códigos, escribí algo que no sabía qué era. Oye, el código está más arrojado que el código ~

Leer el código de otras personas también es una especie de progreso y crecimiento.

5. Lian Po es mayor, ¿todavía puede comer?

La "Biografía histórica de Lian Po Lin Xiangru" registra que después de que Lian Po fue despedido, corrió hacia Wei. Zhao Wang quería usarlo nuevamente y envió a alguien para ver su condición física. El enemigo de Lian Po, Guo Kai, sobornó al mensajero y al mensajero vio a Lian Po Po, Lian Po hizo un cubo de arroz, diez ganchos de carne y fue montado en caballos para demostrar que todavía se podía usar. El mensajero regresó e informó al rey Zhao: "Aunque el general Lianpo es viejo y bueno en la comida, se sentó con sus ministros y las tres flechas obstinadas (que pasan caracteres falsos, es decir, mierda) se han ido". El rey Zhao pensó que Lianpo era viejo, por lo que no lo usó.

Después de décadas de pruebas y dificultades, el lenguaje C puede describirse como numeroso y puede verse en todas partes del mundo. Sin embargo, al mismo tiempo, a los ojos de algunas personas, puede ser que el lenguaje C sea antiguo (casi 50 años) y antiguo. Como se muestra abajo:

Si realmente lo cree, está equivocado.

Índice TIOBE de septiembre de 2020

Las clasificaciones de lenguajes de programación TIOBE 2020-09 le dicen que el tesoro del lenguaje C no es viejo, pero sigue siendo una juventud deslumbrante.

Lo que quiero decir es que mientras la computadora siga basándose en la arquitectura de Von Neumann, el chip seguirá basándose en el proceso físico. Entonces, habrá un cielo en C. Porque conoce un lugar más cercano al cielo (C es uno de los lenguajes de alto nivel más cercanos al lenguaje ensamblador y máquina).

Déjelo cambiar la dinastía de la aplicación de nivel superior, y yo (lenguaje C) se queda quieto. Este es C, el lenguaje C en mi corazón.

para resumir

De repente, me di cuenta de que se había llegado al resumen, pero todavía sentía que aún no había terminado, este no es el más verdadero en mi mente. Sin embargo, todavía espero que después de leer este artículo, pueda comprender y familiarizarse con la belleza y la verdad de C.

Lo último que quiero decir es: incluso mil palabras no pueden decir la importancia del lenguaje C, estas palabras son solo la punta del iceberg.

En vista de la capacidad personal limitada, si hay algún problema o defecto, por favor corríjame.

Si desea mejorar su capacidad de programación, ¡aprenda el lenguaje C y la programación C ++! Adelantar en una curva, ¡un paso más rápido!
[ Círculo de pingüinos de aprendizaje en lenguaje C C ++ ], compartir (código fuente, video de combate real del proyecto, notas del proyecto, tutorial introductorio básico)
bienvenidos socios que cambian de carrera y aprenden programación, ¡usan más información para aprender y crecer más rápido de lo que piensas!

Programación de libros de aprendizaje:

Programación de video de aprendizaje:

 

Supongo que te gusta

Origin blog.csdn.net/Hsuesh/article/details/112392751
Recomendado
Clasificación