En primer lugar, me gustaría saber quién está usando Ada en estos días. De hecho, me gusta el lenguaje, e incluso hay una biblioteca de GUI para Linux/Ada, pero no he escuchado nada sobre el desarrollo activo de Ada durante años. Gracias a sus conexiones militares, realmente no estoy seguro si es historia antigua o tan exitosa que toda mención de su uso está clasificada.
Creo que hay un par de razones para no GC en Ada. En primer lugar, y sobre todo, se remonta a una época en la que la mayoría de los lenguajes compilados usaban principalmente memoria estática o apilada, o en algunos casos, asignación/asignación de pila explícita. GC como filosofía general realmente solo despegó aproximadamente en 1990, cuando OOP, algoritmos de administración de memoria mejorados y procesadores lo suficientemente potentes como para ahorrarle a los ciclos su funcionamiento, todo salió a la luz. Lo que simplemente compilar Ada podría hacer con un mainframe IBM 4331 en 1989 fue simplemente despiadado. Ahora tengo un teléfono celular que puede superar a la CPU de esa máquina.
Otra buena razón es que hay personas que piensan que un diseño de programa riguroso incluye un control preciso sobre los recursos de memoria, y que no debe haber tolerancia para dejar flotar los objetos adquiridos dinámicamente. Lamentablemente, demasiadas personas terminaron perdiendo memoria a medida que la memoria dinámica se convirtió cada vez más en la regla. Además, al igual que la "eficiencia" del lenguaje ensamblador en idiomas de alto nivel y la "eficiencia" de JDBC sin formato en sistemas ORM, la "eficiencia" de la gestión manual de la memoria tiende a invertirse a medida que aumenta (he visto los puntos de referencia de ORM donde el equivalente JDBC era solo la mitad de eficiente). Contra-intuitivo, lo sé, pero en la actualidad los sistemas son mucho mejores para la optimización global de grandes aplicaciones, además de que son capaces de realizar re-optimizaciones radicales en respuesta a cambios superficiales menores. Incluyendo dinámicamente algoritmos de reequilibrio sobre la marcha basados en detectado carga.
Me temo que tendré que diferenciarme con aquellos que dicen que los sistemas en tiempo real no pueden pagar la memoria del GC. GC ya no es algo que congela todo el sistema cada dos minutos. Tenemos formas mucho más inteligentes de reclamar la memoria en estos días.
La pregunta es un poco incorrecta, ya que algunos * do * tienen GC, y es una opción disponible para cualquier compilador. Espero que las personas que buscan Ada no se encuentren con esta pregunta y piensen que Ada previene GC. –
No es un lenguaje de programación de propósito general. Fue diseñado y ordenado solo para proyectos del Departamento de Defensa de los Estados Unidos. Sector muy distinto. – EJP