Buenas a todos,
Queria reunir opiniones respecto de porque en el ambito de sistemas embebidos se sigue prefiriendo el uso de C sobre C++ en general. En los ambitos en los que ustedes suelen trabajar, cuales son las principales razones (si las hay): Falta de soporte por parte
de los toolchains? C++ es muy complicado? C ofrece mejor control? Hay mas programadores disponibles que sepan sobre ARM, arquitectura de micros y bajo nivel que solo saben C y no tanto C++?
Espero sus opiniones!
Saludos!
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32+unsubscribe@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
Me vino a la mente esto:
http://www.dansaks.com/talks/ESC-205.pdfCuando este con mas tiempo agrego mis experiencias en este aspecto.El 1 de marzo de 2018, 14:16, Agustin Bonelli <agustin...@hotmail.com> escribió:Buenas a todos,
Queria reunir opiniones respecto de porque en el ambito de sistemas embebidos se sigue prefiriendo el uso de C sobre C++ en general. En los ambitos en los que ustedes suelen trabajar, cuales son las principales razones (si las hay): Falta de soporte por parte de los toolchains? C++ es muy complicado? C ofrece mejor control? Hay mas programadores disponibles que sepan sobre ARM, arquitectura de micros y bajo nivel que solo saben C y no tanto C++?
Personalmente he visto que entre mas alto es el nivel de abstracción
del lenguaje, mas código innecesario se genera, eso si, depende
también mucho del programador y del compilador, pero en general si
suele pasar eso . . .
Buenas noches.Tal cual lo comenta Eric, en mi caso particular siendo electrónico, cuando he intentado programar POO para sistemas embebidos siento que pierdo en control de varias partes del código (es una sensación muy particular), por tal motivo me he mantenido en C en cuanto a sistemas embebidos se refiere.Cuando es tema de software no tengo ningún inconveniente en escribir por ejemplo en C#.Diría que es cuestión de enseñanza y de que parte de la ingeniería provengas, los ingenieros de sistemas manejan muy fácilmente el tema POO, en mi caso fue muy duro entender el concepto de clases sin que el subconsciente lo relacionara con estructuras en C.
Yo creo que el tema es más de educación que tecnológico.En C++ se puede lograr el mismo rendimiento que en C. Y en ambos se puede incluir alguna función en assembler cuanddo estamos complicados con la performance de alguna función. Pasa por lo que sabe y le gusta a cada uno el aprovechar las cosas o pegarle a todo con el mismo martillo.Habiendo dado clases tanto de programación muy básica de assembler, C, programación avanzada en C y POO para electrónica y automatización y control; y teniendo mucha relación con profesores y alumnos de carreras de sistemas y programación, resulta que depende todo del lado que se ven las cosas, en mi experiencia pasa esto:Los alumnos de las carreras de electrónica detestan la abstracción de la POO, no quieren aprender a programar, si no los lenguajes que más puedan usar en un trabajo, y quieren saber que pasa con el bit en cada momento, disfrutan más las materias donde se ve toda la parte más física y de arquitectura que la programación abstracta. *En el otro extremo tenemos los de las carreras de sistemas y programación quieren abstraerse completamente del hardware y trabajar en una máquina ideal que no quieren saber como funciona y le tienen asco a conectar cables, conocer la arquitectura a bajo nivel, pasan la única materia que ven de bajo nivel y arquitectura como un suplicio. *
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32+unsubscribe@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Para simplificar la discusión, cuando me referí a sistema embebido, me referia a sistemas caracterizador por algun tipo de procesador que ejecuta instrucciones, y cuyo conjunto de funcionalidades esta predefinida, y el usuario no tiene forma de agregarle nueva funcionalidad, ni instalando programas ni plugins ni nada por el estilo. Sencillo, lo que en general se suele entender. Un aparatito que corre un ejecutable establecido por el programador (con o sin OS, o RTOS, da lo mismo).
Se puede hacer en C, C++, python, micropython, o la plataforma que sea. El objetivo del desarrollador en este caso siempre suele ser, crear uno (o varios, ej: bootloader e imagen principal) archivo/s binarios con instrucciones de maquina para el chip que eligió.
Buenas
Cuando hablamos de embebido y lenguaje, ¿en que capa estamos? No se puede responder alegremente "en embebdidos se usa tal o cual cosa...", hay que diferenciar tipo de sistema, funcionalidad, presentacion etc.
A ver vamos por casos extremos si tengo que un micrito con 4k de memoria que lo tengo que usar para controlar dos portones, lo vamos a hacer en Python, xLANG, JAVA, C++, C, ASM, ahora un embebido como nuestro telefono, lo vamos a hacer en ASM, C, C++, JAVA (aca se usa de todo y cuando digo de todo es de to-do).
No quiero entrar en los sistemas de mision critica y ahi solo se pueden utllizar herramientas certificadas
Por otra parte esta la herencia. En varios embebidos se utiliza un OS y/o bibliotecas, esto por lo general esta en C y con años de vuelo. Muchas veces un diseño se basa en el anterior, y ese en el anterior y ese, bueno ya se entendio la idea. ¿Cual es el lenguaje nativo del original? y si.. C y ASM. Cuando encaramos un nuevo diseño lo haremos escribiendo todo desde cero, obviamente no (razon obvia ya hay muchas cosas que se podrIA decir que funcionan ok, observen el potencial). De esto tampoco escapan los grandes proveedores TI. NXP etc, sus desarrollos por lo general se basan en uno anterior y hacen una minima portabilidad. El mundo esta asi y lo seguira estando.
Volviendo al asunto de esta cadena
¿Que procesador se va a utilizar?
¿Que tipo de sistema y mision se quiere implementar?
¿Requiere OS?
¿Debe ejecutar programas de terceros?
Etc etc Definamos entorno y hagamos mas concreto el debate
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32+unsubscribe@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Para simplificar la discusión, cuando me referí a sistema embebido, me referia a sistemas caracterizador por algun tipo de procesador que ejecuta instrucciones, y cuyo conjunto de funcionalidades esta predefinida, y el usuario no tiene forma de agregarle nueva funcionalidad, ni instalando programas ni plugins ni nada por el estilo. Sencillo, lo que en general se suele entender. Un aparatito que corre un ejecutable establecido por el programador (con o sin OS, o RTOS, da lo mismo).
Se puede hacer en C, C++, python, micropython, o la plataforma que sea. El objetivo del desarrollador en este caso siempre suele ser, crear uno (o varios, ej: bootloader e imagen principal) archivo/s binarios con instrucciones de maquina para el chip que eligió.
El viernes, 2 de marzo de 2018, 10:36:04 (UTC-5), Bone escribió:Eso no es simplificar la discusión sino todo lo contrario de simplificar la discusión, es ampliarla.Para simplificar la discusión, cuando me referí a sistema embebido, me referia a sistemas caracterizador por algun tipo de procesador que ejecuta instrucciones, y cuyo conjunto de funcionalidades esta predefinida, y el usuario no tiene forma de agregarle nueva funcionalidad, ni instalando programas ni plugins ni nada por el estilo. Sencillo, lo que en general se suele entender. Un aparatito que corre un ejecutable establecido por el programador (con o sin OS, o RTOS, da lo mismo).
Se puede hacer en C, C++, python, micropython, o la plataforma que sea. El objetivo del desarrollador en este caso siempre suele ser, crear uno (o varios, ej: bootloader e imagen principal) archivo/s binarios con instrucciones de maquina para el chip que eligió.
"algun tipo de procesador que ejecuta instrucciones" es TODO procesador basado en las ideas de Turing.
"Se puede hacer en C, C++, python, micropython, o la plataforma que sea" me dice que puedo poner una notebook entera cerrada con un candado (acéptenme esta metáfora por favor) para que no se le pueda modificar la funcionalidad.
Yo creo que en las preguntas que te hacen está la respuesta que vos buscás y se parece bastante a "Porque hay que ser macho para hacer embebidos en C++!!!" (Martín Ribelotta lo dijo más elegantemente que yo).
Al margen de este comentario, mi respuesta formal es "porque es más difícil saber lo que estás haciendo". Pero claro que mientras uno sepa lo que está haciendo (o al menos verifique y valide sus resultados) se puede hacer perfectamente.
Saludos!
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32+unsubscribe@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
Amplio entre lineas:
--Espero sus opiniones!
Saludos!
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Hola Santiago,
Entiendo tu punto y si estoy de acuerdo (a grandes rasgos) con lo que decis que C++ es mas extenso y mas complejo de entender y de usar bien. Por otro lado, creo que a tu comentario final le falto agregar que con C se puede hacer lo mismo, no se si mejor pero
al menos igual de bien (o con C++ hay mas chances de hacer cualquier verdura y enrollarse por demas), mas claro, pero te toma el doble o el triple de tiempo que hacerlo con C++, y te forzas a tener que duplicar o triplicar el tiempo de mantenimiendo de la
aplicacion por siempre.
Me parece que el tema hay que verlo desde el punto de vista de que, con C++ se puede hacer lo mismo que C (tenes el mismo control a bajo nivel si lo deseas), pero tambien tenes otras herramientas a tu disposicion mas potentes.
Creo que la conclusion es que muchas industrias eligen C, porque pareciera ser que hay menos chances de cagarla y generar un codigo espaghet inmantenible. Aunque en la practica, he visto mas codigo espagheti escrito en C que en C++.
Saludos
Agustin
Has recibido este mensaje porque estás suscrito a un tema del grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/embebidos32/WbQ21_Jaurw/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a embebidos32...@googlegroups.com.
Hola Agustin, es cierto lo que decis sobre el poder de sintesis y abstraccion de buen codigo en C++. Justamente el problema es ese: el lenguaje es tan potente y diverso que si no se decide limitar su uso a un pequeño subset de sus posibilidades (como hizo Qt), si realmente fue escrito por alguien experto que luego se va de la empresa, ese codigo se vuelve incomprensible e inmantenible! C es transparente y el problema en todo caso seria de estilo.
Ultimamente se esta usando mucho Qt en sistemas embebidos, pero eso corre en hardware multicore en Linux o Android (como cualquier celu) y no en los Bare Metal que suelen darse en la facu.
Como varios ya dijeron, es verdad que ahi falta cubrir un bache educativo, pero estando tan a alto nivel, no se si sea deber de un ingeniero o ya de alguna especialidad en sistemas!
Saludos,Santiago.
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32+unsubscribe@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32+unsubscribe@googlegroups.com.
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32+unsubscribe@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/embebidos32/WbQ21_Jaurw/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a embebidos32+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32+unsubscribe@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32+unsubscribe@googlegroups.com.
Saludos,Santiago.
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/embebidos32/WbQ21_Jaurw/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a embebidos32...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Podrias dar un ejemplo de donde Qt usa solo un subset de C++? Yo me he visto codigo de Qt usando templates y metaprogramming como campeones para hacer cosas como estas:
En este punto el deber de un ingeniero es hacer el trabajo que se le encomienda, si tiene que escribir en alto nivel lo hace, si tiene que programar en assembler si hace, si tiene que programar en VHDL/Verilog o cualquier HDL se hace, si tiene que soldar se hace, si tiene que armar un setup analógico lo hace, si tiene que medir el ROE de una antena lo hace, y si tiene que ir a destapar el baño también lo hace... en este país no nos podemos dar el lujo de ser especializados exclusivos, al contrario tenemos que ser multiespecialisas.Como digo, abogo por la mutli-especializacion (o sea ser maestro de todo luego de haber sido aprendiz de todo). Yo digo que no nos detengamos a pensar en cual es el limite de tal o cual ingenieria sino en que hace falta para resolver los problemas que se nos presenta.
Bone, metiste el dedo en la llaga, a fondo. Eso no se pregunta, es como preguntar cuál es la mejor religion o cual es el mejor partido político. Yo programo desde los 17 y ya tengo 51, empece con el BASIC luego Pascal y finalmente C. Cuando salió el C++ me mudé inmediatamente al “nuevo lenguaje de los ’80”, era joven, inexperto y no sabía nada sobre modelo de datos, acoplamiento, BPM, etc. Realicé grandes sistemas en C y en C++, por eso sigo eligiendo el C. Pero realizar un sistema significa resolver muchos problemas a la vez y no existe la herramienta o lenguaje mágicos que resuelven todos los problemas.
Respecto del C, como decía Clua (profesor de la UBA) el C no es un lenguaje, es un ensamblador enmascarado. Y como para trabajar sobre un micro no hay nada mejor que un ensamblador, el “C” es la elección ideal.
Respecto del C++, para mi es un híbrido que se quedó a mitad de camino entre lo estático y lo dinámico. Recordemos que la Programación Orientada a Objetos es un concepto y no un lenguaje. Un verdadero lenguaje OO debe ser interpretado y no compilado.
Si bien hay infinidad de puntos a observar, un sistema “bien escrito” en “C” y “bien documentado” es mucho mas mantenible y debugeable que el mismo escrito en C++. Y el problema del C++ no está en el lenguaje en si, dado que no deja de ser un “C” extendido, sino en el árbol de herencias, en la sobre carga de operadores, etc. que lo hacen muy poco modificable a lo largo del tiempo, muy complicado de debuguear, etc.
Hola Martin, te respondo lo mio entre lineas!
Podrias dar un ejemplo de donde Qt usa solo un subset de C++? Yo me he visto codigo de Qt usando templates y metaprogramming como campeones para hacer cosas como estas:En sus origenes, los de Qt decidieron quedarse con un subset de C++ para facilitar la portabilidad. Por eso tambien reimplementaron funcionalidad de la STL y para signal/slots hicieron el MOC, algo que siempre fue muy criticado. Ya hace unos cuantos años que existen las lambda functions (C++11 si mal no recuerdo) y Boost tiene signal/slots, reflection y hace lo mismo y mas que Qt hace sin requerir de otras herramientas de compilacion. Tampoco es un dato menor que los errores de compilacion kilometricos de STL/Boost asustan a cualquiera y no es igual que entender el error que sea compilando C.
En este punto el deber de un ingeniero es hacer el trabajo que se le encomienda, si tiene que escribir en alto nivel lo hace, si tiene que programar en assembler si hace, si tiene que programar en VHDL/Verilog o cualquier HDL se hace, si tiene que soldar se hace, si tiene que armar un setup analógico lo hace, si tiene que medir el ROE de una antena lo hace, y si tiene que ir a destapar el baño también lo hace... en este país no nos podemos dar el lujo de ser especializados exclusivos, al contrario tenemos que ser multiespecialisas.Como digo, abogo por la mutli-especializacion (o sea ser maestro de todo luego de haber sido aprendiz de todo). Yo digo que no nos detengamos a pensar en cual es el limite de tal o cual ingenieria sino en que hace falta para resolver los problemas que se nos presenta.Eso es ir a contramano de lo que hace y pide el mundo. Las cosas ya no son tan simples como para creer que uno puede ser suficientemente bueno en todo. Que nosotros no podamos entrar en ese esquema de epecializacion (sea por falta de recursos, de capacitacion o de organizacion) es una limitacion, no una fortaleza. Ademas de ser un mal sintoma de la seriedad o rigurosidad (desapego a los protocolos y las normas internacionales) con la que tomamos un trabajo.
Ejemplos hay miles, mas si uno trabajo en una empresa grande y por lo menos en automatizacion industrial que es donde conozco.
Saludos,Santiago.
Bone, metiste el dedo en la llaga, a fondo. Eso no se pregunta, es como preguntar cuál es la mejor religion o cual es el mejor partido político. Yo programo desde los 17 y ya tengo 51, empece con el BASIC luego Pascal y finalmente C. Cuando salió el C++ me mudé inmediatamente al “nuevo lenguaje de los ’80”, era joven, inexperto y no sabía nada sobre modelo de datos, acoplamiento, BPM, etc. Realicé grandes sistemas en C y en C++, por eso sigo eligiendo el C. Pero realizar un sistema significa resolver muchos problemas a la vez y no existe la herramienta o lenguaje mágicos que resuelven todos los problemas.
Respecto del C, como decía Clua (profesor de la UBA) el C no es un lenguaje, es un ensamblador enmascarado. Y como para trabajar sobre un micro no hay nada mejor que un ensamblador, el “C” es la elección ideal.
Respecto del C++, para mi es un híbrido que se quedó a mitad de camino entre lo estático y lo dinámico. Recordemos que la Programación Orientada a Objetos es un concepto y no un lenguaje. Un verdadero lenguaje OO debe ser interpretado y no compilado.
Si bien hay infinidad de puntos a observar, un sistema “bien escrito” en “C” y “bien documentado” es mucho mas mantenible y debugeable que el mismo escrito en C++. Y el problema del C++ no está en el lenguaje en si, dado que no deja de ser un “C” extendido, sino en el árbol de herencias, en la sobre carga de operadores, etc. que lo hacen muy poco modificable a lo largo del tiempo, muy complicado de debuguear, etc.
Jajajaja ok ok, es cierto. En si, C++ provee mas herramientas que C (eso es totalmente objetivo).Como bien decís, Mirko, bien usadas son una bendición para poder mejorar tu código, tu legibilidad y dejarle al compilador la tarea de detectar errores en el código (con mas poder de expresion)De todas formas, como también tenes muchas herramientas, también podes conjugarlas de formas truculentas para hacer esoterismo pagano y termina invocando a David Bisbal.
El 3 de abril de 2018, 15:22, Ing. Mirko Serra <mirko...@gmail.com> escribió:
A mi entender, es al revés: C++ te da más herramientas para no cagarla a la vez que hacés código más legible.En C cualquier cast da algo válido (fruta).En C++ dynamic_cast<Perro*>(gato) da nullptr y static_cast se queja al compilar.En C los enums son números y hacer setColor(PIZZA) es válido. En C++ no, y es cosa del compilador en la que no se incurre en penalización.En C hay funciones que devuelven 0 en error ("false") y hay funciones que devuelven -1 en error y 0 es todo bien. En C++ podés hacer que esa función devuelva Archivo::OK que no solo es independiente numéricamente de Socket::OK, sino que no es válido compararlas. Nuevamente, esto es sin costo para el programa.Ni hablar de las funciones que devuelven un puntero en C, que puede ser que haya que liberarlo uno o no. En C++ podrías devolver una instancia de un unique_ptr y es mucho más difícil que haya leak.Por eso, C++ es más poderoso, pero con buenas prácticas es mucho más seguro. Es exactamente el botón nuclear: requiere el portafolios con los códigos y el escaneo de retina. No lo activa un mono con un martillo.Saludos.
Ing. Mirko Serra.
El 3 de abril de 2018, 15:01, martin ribelotta <martinr...@gmail.com> escribió:
El 28 de marzo de 2018, 22:27, Alejandro Armanazqui <alejan...@gmail.com> escribió:Bone, metiste el dedo en la llaga, a fondo. Eso no se pregunta, es como preguntar cuál es la mejor religion o cual es el mejor partido político. Yo programo desde los 17 y ya tengo 51, empece con el BASIC luego Pascal y finalmente C. Cuando salió el C++ me mudé inmediatamente al “nuevo lenguaje de los ’80”, era joven, inexperto y no sabía nada sobre modelo de datos, acoplamiento, BPM, etc. Realicé grandes sistemas en C y en C++, por eso sigo eligiendo el C. Pero realizar un sistema significa resolver muchos problemas a la vez y no existe la herramienta o lenguaje mágicos que resuelven todos los problemas.
Respecto del C, como decía Clua (profesor de la UBA) el C no es un lenguaje, es un ensamblador enmascarado. Y como para trabajar sobre un micro no hay nada mejor que un ensamblador, el “C” es la elección ideal.
Respecto del C++, para mi es un híbrido que se quedó a mitad de camino entre lo estático y lo dinámico. Recordemos que la Programación Orientada a Objetos es un concepto y no un lenguaje. Un verdadero lenguaje OO debe ser interpretado y no compilado.
Eso conceptualmente no tiene mucho sentido. Porque el concepto de POO deberia estar ligado a interpretado o compilado? De hecho, hoy lo interpretado es cada vez mas desaconsejado siendo la tendencia el JIT y la emicion de codigo AOT (ahead on time)De todas formas, C++ es un lenguaje multiparadigma (de ahi que digas que es un hibrido) pero asi es en la mayoria de lenguajes de programación, siendo los casos emblematicos Java, Objetive-C y C#. Todos lenguajes que siguen la linea de C++ del multiparadigma (no, desde el momento que java define tipos nativos deja de ser POO puro y desde el momento que permite metodos de clase -estaticos- deja de ser un lenguaje POO correcto -ciñendonos a la definición de POO original de Simula 67)Si bien hay infinidad de puntos a observar, un sistema “bien escrito” en “C” y “bien documentado” es mucho mas mantenible y debugeable que el mismo escrito en C++. Y el problema del C++ no está en el lenguaje en si, dado que no deja de ser un “C” extendido, sino en el árbol de herencias, en la sobre carga de operadores, etc. que lo hacen muy poco modificable a lo largo del tiempo, muy complicado de debuguear, etc.
Lo mismo corre para un sistema "bien escrito en C++". No entiendo cual seria la diferencia salvo que C te da menos herramientas para cagarla. Es decir, un mono con una navaja es menos peligroso que un mono saltando sobre un boton nuclear, pero eso no es culpa ni de la navaja ni del boton nuclear.
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Buenas a todos,
Queria reunir opiniones respecto de porque en el ambito de sistemas embebidos se sigue prefiriendo el uso de C sobre C++ en general. En los ambitos en los que ustedes suelen trabajar, cuales son las principales razones (si las hay): Falta de soporte por parte de los toolchains? C++ es muy complicado? C ofrece mejor control? Hay mas programadores disponibles que sepan sobre ARM, arquitectura de micros y bajo nivel que solo saben C y no tanto C++?
Espero sus opiniones!
Saludos!