Red de conocimientos turísticos - Conocimientos sobre calendario chino - Capacitación en diseño de Beida Jade Bird: ¿Cuáles son las ventajas y desventajas de la tecnología de programación en lenguaje C?

Capacitación en diseño 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 veremos las ventajas y desventajas de la tecnología de desarrollo de programación en lenguaje C.

Algunas buenas experiencias en lenguaje C. Aprenda a 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, sabrá cómo utilizar el lenguaje C para implementar el analizador Scheme.

Escriba la versión inicial de GNOMEEye usando lenguaje C y ajuste el renderizado de MicroTile.

Algunas malas experiencias con el lenguaje C Cuando estaba en el equipo de Evolution, muchas cosas seguían fallando.

No existía Valgrind en ese momento. Para obtener el software Purify, era necesario comprar una máquina Solaris.

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

Depurando Mesa, pero sin éxito.

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

Quiero refactorizar el código, pero no sé cómo administrar la 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 las cosas que están en Rust pero no en el lenguaje C.

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

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

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

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

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

Decisional: los recursos se crean (asignación de memoria, inicialización, apertura de archivos, etc.) y luego se destruyen fuera del alcance.

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

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

Si siempre me olvido de llamar a estos métodos (liberar/cerrar/destruir) cuando escribo código, o descubro que el código que escribí antes se olvidó de llamarlo, o incluso lo llamó incorrectamente, entonces nunca lo haré. desea utilizar estos métodos nuevamente en el futuro.

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

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

Se necesitaría mucho código para lograr una funcionalidad similar en C, así que ya no quiero hacerlo.

Los rasgos no son solo interfaces. Rust no es un lenguaje de programación orientado a objetos como ese. Tiene rasgos que parecen interfaces, que pueden usarse para implementar enlaces dinámicos.

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

Pero pase lo que pase, el poder de los rasgos va más allá.

Gestión de dependencias En el pasado, la gestión de dependencias requería llamar a g-config manualmente o mediante macros de herramientas automatizadas.

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

Básicamente, debes asegurarte manualmente de que esté instalada la versión correcta del archivo 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 automáticamente u se obtendrán de un lugar específico.

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

En otras palabras, no pueden ser llamados por 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 de las bibliotecas dependientes o partes del código.

Necesita utilizar un marco de prueba, registrar casos de prueba con el marco y aprender a utilizar estos marcos.

Macro higiénica La macro higiénica de Rust evita posibles problemas con las macros en lenguaje C, como algunas cosas en la macro que taparán los identificadores en el código.

Rust no requiere que todos los símbolos en las macros utilicen paréntesis, como max(5 3, 4).

No existe una conversión automática en lenguaje C. Xuzhou Beida Jade Bird/descubrió que muchos errores se deben a la conversión inadvertida de int a short o char, pero esto no sucede en Rust porque requiere una transformación de visualización.

No habrá desbordamiento de enteros, por lo que no es necesario explicarlo más.