La Red de Conocimientos Pedagógicos - Conocimientos de formación/capacitación - Capacitación en Java de Beida Jade Bird: ¿Cuáles son las ventajas y desventajas de la tecnología de programación en lenguaje C?

Capacitación en Java de Beida Jade Bird: ¿Cuáles son las ventajas y desventajas de la tecnología de programación en lenguaje C?

Con el desarrollo continuo de la tecnología de programación de Internet, la mayor parte del desarrollo de software ahora se implementa a través de lenguajes de programación. Hoy, echemos un vistazo a las ventajas y desventajas de la tecnología de programación C.

Algunas buenas experiencias en lenguaje C han aprendido cómo implementar programación orientada a objetos en lenguaje C leyendo el código fuente de POV-Ray.

Comprenda la claridad, limpieza y mantenibilidad del código en lenguaje C leyendo el código fuente GTK.

Al leer el código fuente de SIOD y Guile, sabemos cómo implementar el analizador Scheme en lenguaje C.

Escriba la versión inicial de GNOMEEye en lenguaje C y optimice la representación de microarchivos.

Algunas malas experiencias con el lenguaje C Cuando estaba en el grupo de evolución, muchas cosas siempre fallaban.

En aquella época no existía Wharton Hall. Para obtener Purify, debe comprar una máquina Solaris.

Depurar el problema de bloqueo de subprocesos de gnome-vfs.

Se depuró Mesa, pero no se encontró nada.

Acepté la versión inicial de Nautilus-share, pero descubrí que free() no se utilizaba en el código.

Quiero refactorizar mi código pero no sé cómo administrar mi memoria.

Quería empaquetar el código, pero descubrí que había variables globales en todas partes y no había funciones estáticas.

Pero de todos modos, hablemos de cosas que están en Rust pero no en lenguaje C.

Gestión automática de recursos Rust toma prestadas algunas ideas de C, como RAII (inicialización de adquisición de recursos) y punteros inteligentes, agrega el principio de propiedad única de valores y proporciona un mecanismo de gestión de recursos para la toma de decisiones automática.

Automatización: No es necesario llamar manualmente a free().

La memoria se liberará automáticamente después de su uso, los archivos se cerrarán automáticamente después de su uso y los mutex se liberarán automáticamente fuera del alcance.

Si desea encapsular recursos externos, básicamente solo necesita implementar el rasgo Drop.

Los recursos empaquetados son como parte del lenguaje de programación porque no es necesario gestionar su ciclo de vida.

Decisión: Crear recursos (asignación de memoria, inicialización, abrir archivos, etc.) y luego destruirlos fuera del alcance.

No existe la recolección de basura: cuando se ejecuta el código, todo termina.

El ciclo de vida de los datos del programa parece un árbol de llamadas a funciones.

Si siempre olvido llamar a estos métodos (liberar/cerrar/destruir) cuando escribo código, o descubro que olvidé llamar el código que escribí antes, o incluso lo llamé incorrectamente, entonces no lo hago. Ya no quiero usar estos métodos.

El Vec genérico es en realidad un vector de elementos T, no solo una matriz de punteros de objetos.

Después de la compilación, solo se puede utilizar para almacenar objetos de tipo t.

Usar el lenguaje C para implementar funciones similares requiere mucho código y ya no quiero hacerlo.

El rasgo no es solo una interfazRust, no es un lenguaje de programación orientado a objetos como ese. Tiene un rasgo que parece una interfaz en la computadora, que se puede usar para implementar enlaces dinámicos.

Si un objeto implementa Drawable, entonces puedes estar seguro de que el objeto tiene un método draw().

Pero en cualquier caso, el poder de los rasgos no termina ahí.

La gestión de dependencias debe implementarse antes que la gestión de dependencias: llame manualmente a g-config o llámelo a través de una macro de herramienta automatizada.

Especifique las rutas del archivo de encabezado y de la biblioteca.

Básicamente, es necesario asegurarse de que esté instalada la versión correcta de la biblioteca.

En Rust, solo necesita escribir un archivo Cargo.toml y luego especificar la versión de la biblioteca dependiente en el archivo.

Estas bibliotecas dependientes se descargarán u obtendrán automáticamente de lugares específicos.

Probar pruebas unitarias en C es muy difícil por las siguientes razones: Las funciones internas suelen ser estáticas.

Es decir, no se pueden llamar desde archivos externos.

El programa de prueba necesita usar la directiva #include para incluir los archivos fuente, o usar #ifdefs para eliminar estas funciones estáticas durante el proceso de prueba.

Necesita escribir un Makefile para vincular el programa de prueba a algunas bibliotecas dependientes o algún código.

Necesita utilizar un marco de pruebas, registrar casos de prueba en él y aprender a utilizarlos.

HygienicMacro) La macro de salud de Rust evita problemas que pueden surgir con las macros en lenguaje C, como algo en la macro que oscurece los identificadores en el código.

Rust no requiere el uso de paréntesis para todos los símbolos en macros, como max(5 3, 4).

Sin conversión automática. En el lenguaje C, Liaoning Beida Jade Bird descubrió que muchos errores se debían a la conversión inadvertida de int a short o char. Esta situación no ocurre en Rust porque se requiere una conversión explícita.

No habrá desbordamiento de enteros, por lo que no es necesario explicar esto.