¿Los compiladores y los lenguajes de programación son básicamente infalibles o el programa / codificador siempre es responsable de las fallas en el software?

Diría que el programador tiene la culpa, a menos que una prueba bastante rigurosa de una o más versiones del compilador / intérprete para el mismo idioma muestre una discrepancia (el (los) otro (s) funcionan como se esperaba y uno falla, o hace algo inesperado), y la especificación. dice que tu código debería funcionar.

Es posible que una implementación de lenguaje contenga un error que afecta la capacidad de compilar / ejecutar código legal. Estos son, después de todo, solo programas, y están sujetos a los mismos defectos en los programadores humanos, como en otro software.

Creo que la razón por la cual los compiladores / intérpretes tienden a ser impecables, o parecen ser de esa manera, es que son en gran medida artefactos matemáticos, que se pueden probar usando un conjunto de casos de prueba matemáticamente vinculados.

Solo he visto errores en un intérprete que afectan mi trabajo en una instancia, que fue en la implementación del logotipo de Terrapin, cuando estaba en la escuela secundaria Jr., alrededor de 1983. La cuestión era que siempre detectaba sus propios errores, si te lo puedes imaginar! No era una cosa común, pero cuando sucedía, ibas avanzando, ingresando tus funciones o ejecutando tu programa, y ​​de repente el intérprete apareció con una pantalla de texto que decía: “¡Felicidades! Acabas de encontrar un error en el logotipo. Escriba la siguiente información y envíela a … “, seguido de un breve volcado de memoria en hexadecimal.

El único otro ejemplo que puedo señalar es C ++ en la década de 1990 y principios de 2000. Solía ​​ser un desarrollador de Microsoft Visual C ++, y solía obtener parches regulares para Visual C ++ que corrigieron errores en el IDE / compilador, aunque cada vez, las correcciones tenían que ver con la integración de COM, nada que ver con la sintaxis / semántica de C ++. Recuerdo vagamente con VC ++ 6 que hubo deficiencias en la implementación que no estuvieron a la altura del estándar actual de C ++, particularmente en lo que respecta a re. plantillas, pero estas estaban bien documentadas (o “errores conocidos”), y no se solucionaron hasta que salió la próxima versión principal. Hubo otras instancias en el momento en que escuché acerca de los compiladores de Unix C ++ con implementaciones defectuosas de plantillas en el sentido de que no admitían todas las características especificadas en el estándar. Recuerdo un caso de un desarrollador que trabajaba para un contratista de defensa que se estaba arrancando el cabello quejándose del compilador Irix C ++ que estaba usando. Parecía que en ese momento era bastante común que los compiladores de C ++ tuvieran implementaciones de plantillas incompletas / con errores. Otros desarrolladores de C ++ me aconsejaron que a pesar de las especificaciones de las plantillas. se estandarizó, en efecto, con el estado defectuoso de las implementaciones disponibles, eran una característica no portátil del lenguaje. Supongo que eso ha mejorado desde entonces.

La mayoría de las veces, es culpa del programador.

Hay fallas en los compiladores y hardware, pero generalmente son raros.
Las posibilidades de que un problema sea realmente un compilador o un defecto de hardware es inversamente proporcional a la velocidad a la que el programador llega a esa conclusión. En otras palabras, los programadores inexpertos o incompetentes suelen culpar rápidamente al compilador o al hardware, pero los programadores más experimentados buscarán primero los errores en su propio código, y solo concluirán que el problema radica en otra parte cuando pueden probarlo.

El programador / codificador generalmente tiene la culpa, más del 99% del tiempo.
Pero ha habido casos en que los compiladores rompen el código que debería funcionar (o incluso funcionó en otras versiones / compiladores), más comúnmente con optimizaciones.
Por supuesto, en estos días rara vez escribes todo el código tú mismo, solo una pequeña fracción, y confías en grandes marcos y proyectos de código abierto para proporcionar mucha funcionalidad y una capa adicional de abstracción, y esos tienen errores mucho más. comúnmente que los compiladores.
Ah, y si estás hablando de desarrollo web, es un juego de pelota completamente diferente … puede ser un verdadero problema lidiando con errores / incompatibilidades entre navegadores … como cuando Apple lanzó IOS 8 y rompió todos los videos de transmisión en aplicaciones web (cuando se agregó como un icono de pantalla de inicio ) … ese en particular todavía no se soluciona incluso después de un par de meses.

Ninguno de los dos y ambos. Los compiladores no son infalibles. Me encontré con errores del compilador, los informé y trabajé con el equipo del compilador para solucionarlos. Pero, dado que muchas personas utilizan los compiladores y tienen conjuntos de pruebas tan extensos derivados de años de comentarios de los usuarios, los errores de compilación son raros. Es un programador deshonesto que coloca al compilador más alto que aproximadamente el décimo en la lista de sospechosos, siendo él mismo el primero. Y si es así, generalmente puede llegar al ensamblador para averiguar qué está yendo mal.

No, no son infalibles, son una abstracción para ayudarlo a ignorar los detalles de bajo nivel a nivel de idioma. Se han producido varios compiladores verificados como compcert, el compilador C verificado, donde se garantiza que la semántica de la salida coincida con la entrada. Sin embargo, es muy difícil escribir programas C muy grandes correctamente, y su punto se aplicaría, culpe al programador o culpe a la computadora por requerir un nivel de abstracción tan primitivo. Sin embargo, se han escrito numerosos proyectos exitosos en C.

Una vez estaba escribiendo una aplicación j2me, y en algún momento mientras depuraba una sección de la aplicación, seguía dando resultados incorrectos sin importar lo que cambiara en el código. Después de horas de intentar todo lo que pude, sin ver ningún cambio significativo, sospechando el proceso de compilación ahora, escribí una jerga que era sintácticamente incorrecta en Java e intenté compilar nuevamente. Esto también se compiló con éxito, y ahora estaba seguro de que el problema no era del código que escribí. Más tarde descubrí que la solución era eliminar los archivos compilados y compilar nuevamente. Entonces era un programador novato, pero creo que fue un buen ejemplo de una falla que no fue culpa del programador. Todavía tengo el mismo problema con eclipse ahora, de vez en cuando.

Con hardware moderno, siempre es culpa del programador. Pero tenga en cuenta que los compiladores y los lenguajes de programación también son programas, escritos por personas como cualquier otro programa 🙂

Depende.

GCC todavía tiene errores. Pero es muy poco probable que te encuentres con ellos. https://gcc.gnu.org/bugs/

Swift es mucho más nuevo que GCC. He archivado dos radares de error de bloqueo duro y un radar de sintaxis de idioma. He estado inclinando rápidamente desde finales de 2014. https://idmsa.apple.com/IDMSWebA… . Algunos días es más inclinable. Esperemos que no en los molinos de viento. Apple parece ser receptivo.

More Interesting

Cómo convertirse en un diseñador de teléfonos inteligentes en las empresas (me refiero al diseño, no al diseño de software)

¿Cómo estimar el esfuerzo de desarrollo al proporcionar el documento de arquitectura de la solución?

¿Hay un lenguaje de programación que no necesita pruebas?

¿Es bueno para un desarrollador pasar a la gestión de identidad y acceso? ¿Cuánta codificación está involucrada en la gestión de identidad y acceso?

¿Cómo describirías la arquitectura cliente-servidor en términos simples?

¿Cuál es su historia sobre el uso de software libre y de código abierto en lugar de software propietario (o viceversa) en ciencia?

¿Es posible obtener una oferta de compañías tecnológicas de primer nivel como Google, Facebook, Twitter, etc., después de graduarme de Hack Reactor?

¿Cómo es útil la reflexión?

¿Qué factores deben tenerse en cuenta al contratar el desarrollo de software? ¿Especialmente en la India?

¿Cuáles son los desafíos de la microrred?

¿Cuáles son algunos problemas en astronomía que podrían resolverse (pueden ser resueltos fácilmente por los astrónomos) mediante el uso del software adecuado, pero no hay ningún software que los ayude?

Si tengo el código fuente de un programa, ¿puedo compilarlo para que se ejecute en cualquier sistema?

Ingeniería de software: ¿qué es la API REST y cómo me familiarizo con ella?

¿Cuándo y por qué Haskell se convirtió en un lenguaje viable?

¿Por qué es esencial contar con los servicios de una empresa de pruebas de software?