Bueno... va por partes.... ya Mirko hablo de lo obvio... que no lo usa
nadie y que, cualquier problema que tengas vas a estar solo o con dos
persona mas al lado... y que, obviamente, no están testeados en
entornos de producción (no el argumento que lo hizo alguien del CERN
es liza y llanamente falacia de autoridad)
> Esto ya lo publiqué con otro título que creo no se entendió.
>
> Sí sí, obviamente cada lenguaje de programación tiene su campo de aplicación y el de Python es muy amplio y ventajoso en distintos contextos, poseedor de un "sintax sugar" del que C no puede gozar.
> Pero yo creo que C está siendo subvalorado y no lo estamos utilizando donde sí deberíamos hacerlo.
>
Aparte de en kernels, guis, herramientas de sistemas, editores,
compiladores, servidores web, servidores de aplicaciones, sistemas de
misión critica, bases de datos, inteligencia artificial, redes
neuronales, aprendizaje profundo, procesamiento gráfico, y vaya uno a
saber la cantidad de cosas que me dejo afuera???
No veo que se este siendo "subvalorado", todo lo contrario, C es un
lenguaje activamente usado que viene evolucionando continuamente
(ultima versión del estándar C18 que tiene implementaciones en gcc,
clang y visual c)
Python es un lenguaje con muchas ventajas al igual que C, no es
cuestión de campos sino de evaluar la situación con visión
ingenieril... si programar fuera elegir el lenguaje adecuado
dependiendo de una receta dada por las circunstancias el mundo seria
hermoso y fácil... y no lo es.
> Tiene C mayores ventajas de las que somos conscientes?
>
> Yo creo que sí, sobre todo para las "comunidades C" como ésta.
> Para trabajar en embebidos todos sabemos C y si formamos un grupo de desarrollo es el lenguaje en común de todos los programadores actuales y futuros que habrá en la empresa (por lo menos en los próximos años).
> Entonces que trabajemos todos en lo que conocemos realmente tiene su ventaja y no hay que pagar por capacitaciones costosas.
>
> El asunto es que C parece un lenguaje muy poco conveniente para un montón de aplicaciones fuera del microcontrolador y los sistemas...
>
Creo que ya dije las aplicaciones en las que me toco usar activamente
C... no veo que este restringido a embebidos ni a software de base
(incluso he visto apps webs hechas con C por cuestiones de performance
y escalabilidad)
> Para eso existen DYNACE (
https://github.com/blakemcbride/Dynace) y COS (
https://github.com/CObjectSystem/COS). Los dos son extensiones o librerías de C para orientación a objetos. Dynace tiene un garbage collector y en COS es bastante simple usar el Bohem's garbage collector.
>
>
> DYNACE es super fácil de aprender (mucho más que C++) para un programador C y un muy buen punto de entrada para la programación a objetos para el mismo. Soporta duck-typing como python que me parece el punto principal de la productividad de ese lenguaje (
http://docs.google.com/View?id=dcsvntt2_25wpjvbbhk). Menos simple pero con una capacidad poderosísima (los multimétodos) es COS desarrollado por un gurú del CERN.
> DYNACE tiene un preprocesador propio. COS usa C puro pero genera desde el código objeto un array de C con las clases y métodos definidos.
>
> POR QUÉ NO ESTAMOS USANDO TODOS ESTÁS TECNOLOGÍAS?
>
Acá viene la parte poco amigable mía:
Porque son todo lo que no hay que hacer:
DYNACE:
- Usa un fucking preprocesador (aparte del propio de c) para generar
código C... o sea, no es C ni por un segundo, es mas... es un
CWithClass pero sin Bjarne Stroustrup
- Usa ACTIVAMENTE memoria dinámica que se podría evitar si supieran
generar código con el preprocesador...
- Usan extensión "D"!!! Para sus archivos!!!! WTF!!!! Eso esta tomado
por, justamente, el lenguaje D... si esto salio antes, como mínimo no
ha tenido NADA de aceptación...
- Estoy viendo una carpeta win32 y otra win16... De que época es
esto??? El soporte de linux lo hacen con winegcc???!!!! Esto esta mal
en todos los sentidos...
- Estoy viendo que la metaprogramación ni se menciona en todo el
repo... el sistema de tipos es terriblemente frágil a un memory
corruption y es totalmente lo contrario de lo que se busca hoy.
- Vuelvo al punto uno.... es totalmente dinámico!!!!! Es un overhead
gigante para el sistema si tenemos que resolver todo en tiempo de
ejecución... para eso uso python... Si estoy usando C es para tener
control absoluto de que y como hago las cosas...
COS:
No tengo grandes quejas de COS, pero hay algo fundamental... usa y
ABUSA del preprocesador... en especial para generar código sensible...
eso es una invitación a no encontrar JAMAS el error cuando escribis
algo mal... prácticamente no hay forma saber que lo genero sin saber
COMO ESTA HECHO el mecanismo de las macros... lo que le quita todo el
atractivo que pudiera tener...
El problema de hacer OOP en C con estas herramientas, es que te quitan
lo único bueno que tiene la POO en C: Que podes decidir como
implementar objetos, métodos virtuales, tablas de llamadas, herencias,
etc etc... esto decide por vos como y te quita exactamente el control
que buscabas de C... y tampoco de da el dinamismo de Python porque,
simplemente no es un lenguaje interpretado (con el dinamismo que eso
trae... obviamente, a costa de una perdida de rendimiento)
Ya ni hablemos de que C++ es mucho mas que POO... que es lo único que
veo que intenta emular estas herramientas...
- Donde esta la deducción de tipos automática?
- Donde esta las funciones lambda?
- Donde esta la sobrecarga de operadores?
- Donde están los templates y el procesamiento en tiempo de compilación?
Bueno, no están por el simple hecho de que solo intentan hacer una
extensión de objetos sobre C... y eso, no es C++... de hecho los
objetos en C++ son casi un caso anecdotico, el problema es que muchos
se empeñan en presentar a C++ con un lenguaje "orientado a objetos"
porque queda cool o porque no tienen ni puta idea de lo que son los
objetos... bueno, tengo algo para decirles a esa gente: Assembler es
orientado a objetos si queremos... el codigo de maquina es orientado a
objetos. si queremos... y las suficientes piedras en la arena son
orientadas a objetos si queremos...
> El punto esencial me parece que está en que no hay mucho desarrollado sobre eso (librerías (aunque Dynace tiene varias ( base de datos, GUI, etc. ) ) , frameworks, etc.) ni muchos ejemplos (0 entradas en stackoverflow).
> Eso me parece que podría cambiar si las "comunidades C" como ésta las elijen. Las ventajas en costos corporativos (capacitaciones y necesidades de más personal ) y personales (estar concentrado más en los problemas y menos en aprender nuevas tecnologías asociadas a otros lenguajes, sobre esta obviedad tengo una cita de Gillermo Panteleo en el libro "Calidad en el desarrollo de software") me parece que hacen valer la pena su adopción.
Estas subestimando lo difícil que es ser PRODUCTIVO en una tecnología
dada, sumándole que a mas profunda la tecnología (como C++), mas
difícil es especializarse... el problema de que nadie esta adoptando
esto es simple: Llegaron 30 años tarde... no ofrecen nada que otros
lenguajes no ofrezcan (C++, python, js, java, etc etc) y son algo
nuevo a aprender con ganancia CERO.
Si me estoy equivocando en lo de ganancia cero, me gustaría ver un
ejemplo de estas cosas que tengan alguna ventaja sobre C++