Hola Mirko, agradezco tus puntos de vista.
No es objetivo del workshop evangelizar apasionadamente o hacer una defensa fundamentalista sobre el uso de tal o cual lenguaje, sino simplemente dar las razones objetivas que justifican la elección en este caso concreto.
Me pareció interesante tratar este tema enmarcado en la discusión de las decisiones de diseño de
embedul.ar.
Cuando se trabaja en proyectos grandes, tampoco es potestad de un individuo elegir con que herramienta pica la piedra. Eso ya está
definido de antemano con otros criterios y objetivos mas amplios.
Por ejemplo, el framework apunta a estar centrado en sistemas críticos y en cumplir estándares como MISRA-C o CERT C.
Las
versiones en C++ de esos estándares son más recientes y están menos
depuradas en el tiempo. También existe algo llamado Verifiable-C.
Esa es una de las razones por las cuales no se usa el heap. Todo uso de memoria se define en tiempo de compilación.
Casualmente, otra parte del workshop tratará sobre como depurar, validar y testear la aplicación desarrollada en el framework de manera local, por fuera del embebido, sin modificaciones.
La portabilidad es otra razón para elegir C. No porque C++ no sea portable, sino porque es mas fácil portar C. Y también exponer cualquier elemento del mundo C a otros lenguajes. La clave es definir que es alto o bajo nivel.
Los lenguajes ayudan a la modularidad, la legibilidad y la mantenibilidad del código, pero no la garantizan per-se. Por todos los paradigmas que soporta y lo potente que es, mal C++ es potencialmente más dañino que mal C.
Las buenas prácticas tampoco son exclusivas de algún lenguaje en particular. Buen C++ implementando un buen diseño de software es algo hermoso de ver, pero en mi experiencia requiere gente experta en ambas áreas. Por eso no se ve seguido jaja.
En cuanto a la industria, por ejemplo podríamos decir que mBed es el abanderado de C++ en sistemas embebidos, pero no usa C++ moderno porque los compiladores de embebidos (IAR, ARMCC) no lo soportan mucho.
E imagino que, cuanto más esotérica se vuelve la sintaxis de C++ con respecto a C, el código se vuelve imposible de leer por gente que viene de C. Algunos se sentirán motivados a aprender, pero en lo inmediato dejaría un montón de gente afuera.
Entonces, en mBed uno se encuentra usando C++ básico para cosas muy básicas, con el impacto en runtime, memoria y almacenamiento que sí existe y aún cuando conscientemente los diseñadores se propusieron mitigar ese impacto no generando vtables.
Sería interesante oír por qué decidieron usar "ese" C++ y no C. Probablemente esos argumentos no pasaron por quitar miedo o por educar futuros recursos humanos.
No sería raro si se dejaron llevar por la moda, algo que no es nada raro en la industria. Por otra parte, mBed OS está mayormente escrito en C... compilado en un compilador de C++.
Si no corto se van a cansar de mí antes del workshop jaja :)
Seguramente se haga una transmisión o una grabación, los mantengo al tanto! En general debo adecuarme a lo que los organizadores del SASE dispongan.
Saludos!
Santiago.