Ponerse al día para programar C yC++ (aplicaciones windows)

(Casi) cualquier cosa que quieras compartir será bienvenida por la comunidad

Moderador: Sir Cilve Sinclair

hikoki
Freddy Hardest
Mensajes: 657
Registrado: Sab Nov 23, 2013 8:27 am

Re: Ponerse al día para programar C yC++ (aplicaciones windo

Mensaje por hikoki » Jue Mar 27, 2014 6:01 pm

depende de para que lo quieras, si es para windows para hacer cosas rapidas de tipo tratamiento textos, gestión de ficheros, lanzar programas como si fuera el lenguaje batch, puedes probar autohotkey con el que se pueden hacer interfaces de usuario, para una muestra todos estos programas estan hechos con autohotkey :
http://skwire.dcmembers.com/fp/?page=software
http://www.donationcoder.com/Software/Skrommel/

muzaraque
Jack The Nipper
Mensajes: 129
Registrado: Sab Ago 04, 2012 3:28 pm

Re: Ponerse al día para programar C yC++ (aplicaciones windo

Mensaje por muzaraque » Vie Mar 28, 2014 8:37 am

Ya Mcleod, pero usted con todo el cariño y respeto tiene un aire de bicho raro... creo que sabe más del spectrum que los propios ingenieros de diseño de sinclair....alguien así puede usar C

Cuando he dicho C nunca, también me referería nuna salvo que sea algo muy relacionado con Hardware o comunicaciones.

Yo no echo por tierra .NET...como usted dice MS ve que en un mundo abierto Java le comería el terreno...si no lo ha hecho es principalmente por las trabas (luego también por los incentivos que algunas empresas tienen en usar Microsoft a toda costa, incluso para programar)

Para Mac y dispositivos iOS tienes otro derivado de C, el Objective-C (no derivado de C++ por cierto).... y .... tío, que el JAVA también está basado en C. El que use una máquina virtual por debajo no lo hace mejor o peor lenguaje para programación gráfica. Lo hace más o menos idóneo para la interoperabilidad en distintos dispositivos que usen la misma máquina virtual.

Esto que afirma lo comparto al 100%

Con lo de la opción mas utilizada para programar en WIndows...pues no tengo un estadísticos para saberlo, pero yo por la gente que conozco depende del tipo de aplicación que se desarrolle, quizá por motivos históricos mas que por otras cosas...hay que reaprovechar código y empezar a usar un nuevo lenguaje puede retrasar mucho los proyectos. Como le digo los informáticos que conozco usan preferiblemente Java, si bien los electrónicos, industriales y telecos que se ven obligados a programar rara vez usan Java y se van mas a C y Shell-script...pero como digo las aplicaciones que desarrollan unos y otros son bien diferentes.

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Ponerse al día para programar C yC++ (aplicaciones windo

Mensaje por mcleod_ideafix » Sab Mar 29, 2014 12:42 am

muzaraque escribió:Ya Mcleod, pero usted con todo el cariño y respeto tiene un aire de bicho raro... creo que sabe más del spectrum que los propios ingenieros de diseño de sinclair....alguien así puede usar C

Esa definición se aplica a un montón de gente que pasa por aquí, y por otros foros del mismo estilo :P Y por extensión, a muchos de los ingenieros informáticos de mi quinta, que no hemos sufr... estoooo... aprendido JAVA.

muzaraque escribió:...Como le digo los informáticos que conozco usan preferiblemente Java...

Supongo que cada uno usa lo que ha aprendido. Hay curiosamente todo un debate - este enlace es sólo uno de muchos- montado por eruditos informáticos, profesionales de la IT, etc, sobre por qué JAVA no debería enseñarse como primer lenguaje de programación en las carreras de informática.

Considero que C ó C++ es tan bueno para hacer drivers y programas "cercanos al hardware" como aplicaciones completamente independientes de plataforma. Mira por ejemplo esto (¿en qué lenguaje de programación está hecho -entero o parte de- Microsoft Office, Adobe Acrobat, Firefox, Chrome, etc...?).
http://stackoverflow.com/questions/4102 ... written-in

Fíjate: todos ejemplos de programas nada triviales, programas gráficos, que funcionan en Windows y en lo que no es Windows, que usan C o C++ como lenguaje principal (o único), que están mantenidos activamente, en algunos casos por un montón de gente. Después de esto, ¿cómo se te ocurre que decir que "C nunca"?

Y yo añado: ¿MAME? ¿A cuántas plataformas se ha portado MAME? ¡Y sin necesidad de máquina virtual! Lo tienes corriendo, además de en PC, en XBOX, PSP, GP2X, Dreamcast, iPhone, Raspberry Pi... Chismes de lo más variopintos que tienen todos una cosa en común: no soportan JAVA (bueno, igual la GP2X o la Raspi sí, no lo sé, pero de todas formas, no lo han usado para esto).

Y como estamos donde estamos... y aunque hay emuladores de Spectrum en JAVA y JavaScript... ¿en qué lenguaje está hecho FUSE, el emulador más portado a otros sistemas, el más actualizado (soporta Spectranet), y el que más apoyo tiene de la comunidad? ¿Lo adivinas?

Curioso que para un lenguaje que se supone que sólo vale para aplicaciones "cercanas al hardware", resulte que soporte aplicaciones lo suficientemente portables como para funcionar desde en un PC hasta dentro de una cámara Kodak. Si eso no es independencia de hardware... ;)

Lo que pasa (opinión mía subjetiva, particular, y de las que levantan ampollas) es que no todo el mundo está cualificado para usar C ó C++. Los que no, mejor se queden con JAVA y la seguridad de su máquina virtual ;) (no sea que se encuentren con un puntero y no sepan qué hacer con él, o salgan corriendo temiendo un segmentation fault, o cosas así... :D )

O salvo que quieras hacer un chorri-programa donde el 99% del tiempo el programa esté esperando en la interfaz gráfica al usuario, y sólo el 1% está dedicado a hacer algún tipo de proceso, que tampoco sea demasiado pesado para la CPU. Lo bueno para los javarianos es que muchos programas entran en esta categoría. También entran en la categoría de chorri-programas aquellos que actúan como front-end gráfico de otros que realmente son los que trabajan en la sombra.

PD: ¿Se puede saber qué entiendes por un "bicho raro" ?
Web: ZX Projects | Twitter: @zxprojects

muzaraque
Jack The Nipper
Mensajes: 129
Registrado: Sab Ago 04, 2012 3:28 pm

Re: Ponerse al día para programar C yC++ (aplicaciones windo

Mensaje por muzaraque » Dom Mar 30, 2014 12:50 pm

Tras leerte y estar muy alineado con tus comentarios, creo que efectivamente mi primer post no desarrollaba mi pensamiento.

Yo personalmente tampoco nadica de nada se Java; de C se un poquito, poquito, poquito y debo decir que es un lenguaje que me gusta mucho, mucho, mucho.

Yo nunca he dicho que C no sea multiplataforma, lo es. C tiene la caracteristica de que para ser un lenguaje de alto nivel está hecho de manera que su acceso al hardware sea sencilla, de ahí que sea ( en mi humilde opinion) la opción ideal para cualquier tipo de aplicación donde el que programa tiene que utilizar recursos hardware dificiles de manejar....el ejemplo de los gráficos es uno de ellos, manejar gráficos es una tarea con su intríngulis. C ha demostrado que es un gran lenguaje para desarrollar por ejemplo sistemas operativos.

No obstante sigo pensando que el escritor del post, debería saber en que mundo de la progración le gustaría moverse, insisto que no es lo mismo desarrollar bases de datos relacionales para un CRM de una empresa, que trabajar desarrollando los sistemas operativos de los routers, para la primera cosa no digo que no se pueda usar C, para la segunda sería tonto no usarlo. Y seguramente para desarrollar algoritmia matemática existan otros lenguajes mejores

Como has dicho Java es bueno para programas con mucha interfaz de usuario y poco proceso...si es ahí donde esta interesado C no aporta valor sobre otras opciones mas fáciles de manejar en esos ambientes.

Un abrazo, muy fuerte
Roberto

Bicho raro: persona en en un ámbito estrecho del conocimiento, sabe más que la media sin necesidad de ser un doctor por la universidad de Kampfor (si, la del abrillantador de zapatos). Por ejemplo un experto en literatura hispanofilipina sería un bicho raro, un aficcionado a ella, como yo ...también :-)

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Ponerse al día para programar C yC++ (aplicaciones windo

Mensaje por radastan » Vie Abr 04, 2014 1:08 pm

Esto le va a doler a más de un anti Microsoft...

http://roslyn.codeplex.com/

Imagen
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
josepzin
Jack The Nipper
Mensajes: 117
Registrado: Vie Oct 19, 2007 4:27 pm
Ubicación: Carthagonova
Contactar:

Re: Ponerse al día para programar C yC++ (aplicaciones windo

Mensaje por josepzin » Vie Abr 04, 2014 3:14 pm

Mejor que lo traduzcas! :-D

zx81
Freddy Hardest
Mensajes: 619
Registrado: Vie Dic 28, 2007 2:14 pm
Ubicación: Valencia
Contactar:

Re: Ponerse al día para programar C yC++ (aplicaciones windo

Mensaje por zx81 » Vie Abr 04, 2014 10:12 pm

Los eruditos en informática, como en cualquier otra disciplina, se pasan la vida discutiendo por cosas de lo más variopintas, sin que lleguen nunca a ningún acuerdo, porque cuando se discute sobre el sexo de los ángeles, pasa lo que pasa. :D

Ahora bien, tiene gracia que el "estudio" (juas!) que enlaza mcleod_ideafix acabe por no decir nada exacto de Java (podrían usarse los mismos argumentos para denostar cualquier otro lenguaje), para acabar diciendo que en Java se escribe mucho y que es mehó Python por las mismas razones esgrimidas por Andie McDowell (porque yo lo valgo). :D

Lo siento, pero a Python lo tengo catalogado como el COBOL del siglo XXI. Quien haya programado en COBOL sabe porqué... ;)

Personalmente, en 25 años de profesión he tirado muchos miles de líneas de código C, otra cuarta parte como el anterior en C++ y otras tantas en lenguajes como BAL, ABAL, Clipper e incluso, pásmese, ensamblador de un micro muy antiguo que se llamaba Z80 (hice un curso de COBOL pero nunca llegué a trabajar profesionalmente con él). Incluso hice mis cosillas en Windows con el famoso libro de Charles Petzold y he aplicado algunos de esos lenguajes en DOS, Prologue, Windows, SCO Unix, HP-UX, Solaris, Linux, LynxOS y hasta en VMS.

Así pues, se me disculpará que por mi falta de experiencia y mis nulos conocimientos de punteros tenga que acabar programando en Java. De hecho, estoy comenzando un proyecto para desarrollar una aplicación industrial que maneja bastantes sensores y adquisición de datos analógicos y digitales por interfaces tan diversas como RS-232/422/485, algunos con protocolos propios y otros con MODBUS o MODBUS/TCP. Estuvimos evaluando la posibilidad de tomar el camino de C++ con la librería Qt-5 pero, sinceramente, los tiempos cambian. Y como esto me recuerda poderosamente al debate, igual de sesudo que ahora, acerca de la "inconveniencia" de dejar el ASM para pasarse a C, pues ya se que los inmovilistas también forman parte de la sociedad y tienen derechos igual que los demás, incluso el derecho a no moverse.

Sería largo de explicar, incluso para un hilo en el foro de offtopic, porqué creo que las máquinas virtuales son el futuro, aunque en ese futuro no estuviera Java. Obviamente, seguirán haciéndose cosas en C, C++ e incluso hay quien sigue agarrado al barco de Delphi como si fuera el último. Por cierto, no solo la Raspberry PI soporta Java, es que los procesadores ARM tienen una extensión hardware llamada 'java' que puede ser aprovechada para mejorar el rendimiento de una JVM (no sé de qué forma porque la documentación de las extensiones es de pago y no he logrado encontrarla en ninguna parte).

A estas alturas, alegar que C debe ser mejor porque Fuse es el emulador más portado no pasa de ser una falacia ad verecundiam. No solo es el más portado, es que no creo que haya nadie que lo haya usado más de media hora seguida que, antes o después, no le haya petado. Porque depurar esas aplicaciones tan grandes ES DIFICIL, por bueno que seas y mucha la gente que participe. Que el kernel de Linux esté escrito en C, me parece normal (los que no son normales son los tíos que colaboran ahí... :D ). Pero para escribir a día de hoy una aplicación nueva en C++ (C ya casi ni lo contemplo, la verdad) hay que tener una razón jodidamente poderosa (y se pueden escribir librerías nativas en C++ para ser usadas desde Java, técnica muy usada en Android, dicho sea de paso). Y no, como razón no valen las filias y las fobias de cada uno, porque para eso no hacen falta razones.

Cualquiera que tenga un mínimo (decente) de experiencia en desarrollo de aplicaciones en C usando threads sabe que la cosa se pone muy dura. Y encima, hoy en día el procesador que "solo" tiene dos CPU se le considera casi obsoleto y ya hay móviles con dos CPU quad-core. No sé donde acabará todo esto, pero ni C, ni C++ son los mejores compañeros de viaje (el tercer lenguaje que aprendí después del BASIC del Spectrum y del ASM del Z80 fue el C con el Hisoft C).

Me sorprende la simplicidad y la ligereza con la que se puede tratar desde ámbitos supuestamente académicos las tecnologías que se han desarrollado en la última década alrededor de las VM, los compiladores Just In Time y los Garbage Collectors (y sí, he leído el Design and Evolution of C++ de Stroustrup como para saber que el C++ existe gracias a un GC).

[muzaraque]
Que el C es un lenguaje portable es una verdad a medias. A fin de cuentas, el lenguaje solo es eso, una manera de expresar algoritmos. E incluso circunscribiéndose al propio lenguaje hay cosas que dependen de la plataforma subyacente y no funcionan igual en dos ordenadores diferentes, ni aunque estén en prístino C. Al final, programas para un S.O. y unas librerías y entonces lo de la portabilidad se complica. Si hablamos de C++ todavía es peor, puesto que no todos los compiladores soportan las mismas cosas del estándar. Si Fuse es multiplataforma es porque se lleva con él a Windows (y a otras plataformas) librerías como la SDL, la GTK y no sé si algunas más (nunca he usado Fuse fuera de Linux o Solaris). La portabilidad no es mágica, ni inmediata, ni sencilla y no la da el lenguaje solo por ser como es.

[radastan]
No veo porqué habría de ser eso un zas! para nadie. A fin de cuentas el C# es libre. Otra cosa es que las WPF lo sean... y no lo son. Llegado el caso, ya se ocupará M$ de decirles lo equivocados que están si hace falta, que a lo mejor no hace falta llegar a ese extremo nunca....

Y oye!, al final, que cada cual use lo que prefiera, pero con respeto a los demás comulguen o no con su parecer. ;)

Un abrazo para todos los que han aguantado el tocho inside... :D
Debido al fallo de un mecanismo, el lanzagranadas M203 se te podía disparar cuando menos lo esperaras, lo que te habría hecho bastante impopular entre lo que quedara de tu unidad.
Revista del ejército EE.UU. PS, agosto 1993.

Emulador JSpeccy
ZXBaremulator

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Ponerse al día para programar C yC++ (aplicaciones windo

Mensaje por radastan » Vie Abr 04, 2014 11:22 pm

Pues mira, aquí otro que cada vez piensa más en que JAVA no sólo es el presente, además es el futuro. Te olvidas de sistema operativo, lo puedes usar en TODAS partes, etc. Mi actual herramienta en casa es Netbeans, por mucho que en el curro el C siga siendo lo predominante (SCL en los autómatas Siemens, C en WinCC, etc).
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
josepzin
Jack The Nipper
Mensajes: 117
Registrado: Vie Oct 19, 2007 4:27 pm
Ubicación: Carthagonova
Contactar:

Re: Ponerse al día para programar C yC++ (aplicaciones windo

Mensaje por josepzin » Vie Abr 04, 2014 11:48 pm

zx81 escribió:Lo siento, pero a Python lo tengo catalogado como el COBOL del siglo XXI. Quien haya programado en COBOL sabe porqué... ;)


JAJJAJAJAJAJA!!! :D :D :lol: :lol: :lol: :lol:

De repente volví a ver las "hojas de programar COBOL", donde según la columna que ponías según que cosas significaba o hacía una cosa u otra!! :D

El tiempo que me tocó usarlo llegué a detestarlo :P

zx81
Freddy Hardest
Mensajes: 619
Registrado: Vie Dic 28, 2007 2:14 pm
Ubicación: Valencia
Contactar:

Re: Ponerse al día para programar C yC++ (aplicaciones windo

Mensaje por zx81 » Sab Abr 05, 2014 11:05 am

radastan escribió:Pues mira, aquí otro que cada vez piensa más en que JAVA no sólo es el presente, además es el futuro. Te olvidas de sistema operativo, lo puedes usar en TODAS partes, etc. Mi actual herramienta en casa es Netbeans, por mucho que en el curro el C siga siendo lo predominante (SCL en los autómatas Siemens, C en WinCC, etc).


El asunto es que lo de la multiplataforma era un objetivo buscado desde el principio, así que eso se da por sentado. También es cierto que, si no tienes la JVM, portarla no es una tarea trivial porque son varios millones de líneas de código. Pero a pesar de eso Java está en millones de teléfonos Android, en reproductores de Blue-ray, lo usa la NASA en algunos proyectos (es lo que tiene no saber manejar punteros), está en la bolsa de Londres (donde tuvieron que quitar un magnífico sistema de M$ que se caía a pedazos y tenía una latencia propia de un Z80 a 1 Mhz). Vamos, que para ser un fracaso, le va medianamente bien. :)

Lo que no creo que tuvieran previsto cuando crearon la primera JVM es la evolución de los GC y, sobre todo, el camino que se empezaría a andar con el tema de los JIT. A fin de cuentas, pseudo-VMs ya existían. En Prologue los lenguajes BAL y ABAL se compilaban a un código intermedio con TR y se ejecutaba con EX y el lenguaje estaba en varias plataformas, entre ellas DOS y SCO Unix de la época. Y el Ryan McFarland COBOL también era igual y también se vendía como portable ya antes de 1987. Una vez que salió Java 1.0 y se ganó el adjetivo de "lento" para toda la eternidad, llegó el JIT.

Desde el punto de vista informático es un asunto muy interesante. Una vez aplicadas las clásicas técnicas de optimización de código que realiza el compilador estático entra en juego la propia JVM. Y el campo de posibilidades que se abre aquí es enorme. Primero, porque se genera código nativo específico para el procesador que se esté usando en ese momento y no uno más genérico. Si tu CPU soporta AVX y la JVM puede generar código para esa extensión, ya la usa. Y si no, cuando salga una JVM con el soporte de AVX tu programa comenzará a aprovecharla extensión sin tocar ni una línea de código. Y lo que es mejor, el código generado lo es en base a cómo se está ejecutando tu programa, de modo que se pueden aplicar optimizaciones imposibles de aplicar en el caso de la compilación estática. De hecho, teniendo en cuenta el principio de Pareto, una parte del programa ni siquiera pasará por el JIT y el 20% que se usa a saco no tiene porqué generar en dos ejecuciones distintas el mismo código, dependerá de cómo se comporte el programa esa vez en función de las entradas y del proceso. Es capaz de quitarte los típicos "getters" y sustituir variables por código en línea donde le parezca oportuno y, si hace falta, llegado el caso desanda ese camino, invalida el código en línea y crea otro a medida de lo que está pasando en ese momento. Al ser un compilador que tiene información en tiempo real acerca de la ejecución del programa, las cosas que se pueden hacer son muchas y estoy seguro de que aún no lo hemos visto todo.

Es algo que he aprendido programando JSpeccy: no intentar ser más listo que Java y su JIT. Algunas "optimizaciones" que tú piensas pueden ser adecuadas, en lugar de acelerar la ejecución o bien la dejan igual en el mejor de los casos o en el peor la cagas, precisamente por hacer las cosas de una manera que el JIT tiene que cambiar sus decisiones por algo que ve que no puede optimizar con seguridad.

Y luego, con herramientas como visualvm, poder examinar la ejecución de programas "en la distancia" e incluso hacer profiling de ellas es muy útil en algunas ocasiones.

Por cierto, yo he usado NB con bastante éxito para portar una aplicación C++ de Solaris a Linux. El NetBeans hacía con el C++ como hace con Java y maneja además los Makefiles, llama al compilador y puede manejar hasta el GDB. No sé qué hará con C puro y duro, pero pruebalo a ver qué pasa. :)
Debido al fallo de un mecanismo, el lanzagranadas M203 se te podía disparar cuando menos lo esperaras, lo que te habría hecho bastante impopular entre lo que quedara de tu unidad.
Revista del ejército EE.UU. PS, agosto 1993.

Emulador JSpeccy
ZXBaremulator

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Ponerse al día para programar C yC++ (aplicaciones windo

Mensaje por mcleod_ideafix » Dom Abr 06, 2014 3:03 am

Pregunta inocente (y de la que de verdad que no sé la respuesta): ¿en qué lenguaje está escrito el código fuente de la máquina virtual de JAVA? ¿Y del compilador javac?

EDITO: por lo visto, lo primero, la JVM, en varios lenguajes, incluyendo Smalltalk y hasta JAVA, aunque la mayoría de JVM's se escriben en C o C++. Respecto a javac, empezó escribiéndose en C, y ahora se escribe en JAVA.

Otra pregunta inocente: si JAVA es tan chachi piruli en sí mismo, ¿por qué existe la JNI? O preguntado de otra forma: ¿por qué un programa en JAVA necesitaría de rutinas externas escritas en otros lenguajes? ¿O estoy equivocado y la JNI ya no existe o no es lo que yo me imagino?

¿Y por qué los programas, sobre todo los de uso común, como el mismo navegador que estás usando ahora mismo, no están escritos en JAVA? ¿Y los videojuegos para consolas de última generación?

Sobre usar JAVA en los videojuegos, John Carmack comentó esto (hace tiempo, sí, pero ilustrativo al fin y al cabo):

carmack escribió:The biggest problem is that Java is really slow. On a pure cpu / memory / display / communications level, most modern cell phones should be considerably better gaming platforms than a Game Boy Advanced. With Java, on most phones you are left with about the CPU power of an original 4.77 mhz IBM PC, and lousy control over everything. [...snip...] Write-once-run-anywhere. Ha. Hahahahaha. We are only testing on four platforms right now, and not a single pair has the exact same quirks. All the commercial games are tweaked and compiled individually for each (often 100+) platform. Portability is not a justification for the awful performance.

Poniéndome en plan conspiranoico, y leyendo quejas en Stack Overflow sobre el recolector de basura de JAVA, o la velocidad de la JVM, parece como si la industrial quisiera promover JAVA para de esa forma, cuando al usuario se le presenten errores de memoria, o note el programa lento, lo achaque a su hardware, y no al software, y se compre un Core i7 para hacer lo que podría hacer con un Dual Core o incluso un Celeron, con mucha menos memoria.

Por cierto, el recolector de basura de JAVA es otra de esas cosas que hacen que me afiance más en que JAVA parece hecho para programadores... cómo decirlo... "despreocupados". Enseñar desde primero de carrera a un futuro ingeniero que puede pedir recursos al ordenador sin molestarse en devolverlos cuando ya no los use "porque de eso se encarga automaticamente el sistema" me parece cuanto menos, inquietante, si lo que se pretende es educar al programador a escribir código eficiente. Claro que esa es otra batalla perdida... prima el "fast programming", como el "fast food". Una lástima...
Web: ZX Projects | Twitter: @zxprojects

hikoki
Freddy Hardest
Mensajes: 657
Registrado: Sab Nov 23, 2013 8:27 am

Re: Ponerse al día para programar C yC++ (aplicaciones windo

Mensaje por hikoki » Dom Abr 06, 2014 4:01 pm

*comentario de rompeteclas ocasional*
supongo que cada lenguaje tiene sus ventajas y pegas según la aplicación que quieras desarrollar,
por lo que he visto, con C# puedes programar para la plataforma linux con Mono, y existen buenos proyectos para aprovechar librerías hechas con otros lenguajes desde C#, por ejemplo hay muchas librerías científicas hechas en python como pyopt (usada por la nasa también) que se podría utilizar desde C#/Mono, sin embargo por lo que tengo entendido utilizar Jython junto con Java para utilizar librerías Python es más problemático. Desde C# también se puede utilizar librerías hechas con lenguajes antiguos. Hay otro proyecto para pasar código java a .net assemblies. Supongo que Java tendrá otras ventajas que el resto no tiene para aplicaciones concretas. Net y Java tienen una extensa librería, eso hay que tenerlo muy en cuenta.
Java me parece que estaba orientado sobre todo a servidores, pero ultimamente las aplicaciones de escritorio van mas rápido y existen librerias para hacer videojuegos en 3d aunque parece que a ese tipo de proyectos opensource le cuesta enganchar nuevos desarrolladores.
Lo bueno de la idea de un recolector de cagadas, punteros, etc es que el programa se pone en standby e intenta solucionar los problemas antes de que llegue un cuelgue.
A favor de Java en el mundo del Spectrum, hace poco intenté meter algún emulador en un notebook que tiene 5 años y todo lo que probé daba problemas hasta que instalé JSpeccy :)
En cuanto a JIT apenas sé lo que es, *pues callate la p*** boca* pero hay un lenguaje que utilizo de vez en cuando, fbsl, en el que están trabajando en una versión multiplataforma (también puedes utilizar c y asm dentro de ese lenguaje), he leído por ahí que hay un lenguaje lua con jit muy rápido.

zx81
Freddy Hardest
Mensajes: 619
Registrado: Vie Dic 28, 2007 2:14 pm
Ubicación: Valencia
Contactar:

Re: Ponerse al día para programar C yC++ (aplicaciones windo

Mensaje por zx81 » Dom Abr 06, 2014 4:16 pm

mcleod_ideafix escribió:Pregunta inocente (y de la que de verdad que no sé la respuesta): ¿en qué lenguaje está escrito el código fuente de la máquina virtual de JAVA? ¿Y del compilador javac?

EDITO: por lo visto, lo primero, la JVM, en varios lenguajes, incluyendo Smalltalk y hasta JAVA, aunque la mayoría de JVM's se escriben en C o C++. Respecto a javac, empezó escribiéndose en C, y ahora se escribe en JAVA.


Siguiendo la misma lógica, la capa más interna de todos los S.O. está escrita en ASM porque hay cosas a las que el C no llega. Escribamos todo en ASM otra vez porque eso es lo mejor. A fin de cuentas, la labor última de cualquier compilador tradicional es traducir el código escrito en el lenguaje N a ASM de esa máquina. Tarea absurda, porque todos sabemos que un programador de categoría escribe mejor código ASM que un compilador.

Lo que parece que es difícil de comprender es que TODO tiene su lugar y su momento. Cuando el ASM reinaba por encima de todas las cosas, llegó C y acabó por dejarlo reducido a nichos muy concretos (que siguen existiendo, ojo). Más tarde las cosas evolucionaron (desde mi punto de vista, claro) y ya no tiene sentido en muchos casos usar C pudiendo usar C++. Y ahora hay cosas que, objetivamente, no tiene sentido hacerlas en C++ existiendo Java. Este también quedará en desuso algún día y será sustituido por otra cosa. Mi creencia es que será sustituido por algo basado también en una VM o algo más evolucionado.

mcleod_ideafix escribió:Otra pregunta inocente: si JAVA es tan chachi piruli en sí mismo, ¿por qué existe la JNI? O preguntado de otra forma: ¿por qué un programa en JAVA necesitaría de rutinas externas escritas en otros lenguajes? ¿O estoy equivocado y la JNI ya no existe o no es lo que yo me imagino?


Veo que es común entre los informáticos el defecto de pensar en binario: o algo es cojonudo o es nefasto, sin grises (y el que esté libre de pecado, ya sabe). Java es chachi-piruli para unas cosas y nefasto para otras. Pero responderé a tu pregunta. JNI existe porque, a veces, es necesario usar recursos que NO son multiplataforma en su uso. Por ejemplo, un joystick o un puerto serie, que se manejan a nivel de API del S.O. de una manera muy diferente entre Windows, Linux y MacOS-X, por poner un ejemplo. Si yo tuviera una aplicación funcionando en Solaris que enviara mensajes por una cola (del sistema) necesitaría escribir una librería usando JNI para acceder a esa cola de mensajes, extraerlos y pasárselos de alguna forma a la aplicación Java que se supone estoy haciendo (no entramos en si tiene sentido o no hacer eso, es solo un ejemplo).

Yo mismo, en la versión de JSpeccy que debería haber salido ya (sigh!), he puesto en Linux soporte de joysticks. He escrito un código que no necesita JNI para manejarlo pero, si quiero alguna pequeña funcionalidad adicional, tengo que tirar de JNI (y no es difícil, de hecho, también tengo escrita esa librería). En el proyecto que ando ahora, es vital para mi manejar el puerto serie y, especialmente, la línea RTS. Pues para eso uso la RXTX que a partir de una librería Java y una librería nativa me permite hacerlo (ya la usé en otro proyecto para manejar un módem de los de toda la vida). Y oye, esa aplicación lleva más de cuatro años funcionando en 24x7, habrá hecho miles de llamadas de voz (es un sistema de alarmas) y jamás me ha fallado.

mcleod_ideafix escribió:¿Y por qué los programas, sobre todo los de uso común, como el mismo navegador que estás usando ahora mismo, no están escritos en JAVA? ¿Y los videojuegos para consolas de última generación?


Lo dicho, o lo hacemos todo en Java o le pegamos fuego, sin medias tintas. No tengo una respuesta para eso, pero como contraposición tengo una página web escrita en Java con varios miles de visitas al día y con puntas que multiplican hasta x20 el tráfico de un día normal y solo tiene un Apache Tomcat rulando, ni siquiera un HTTPD. Puede que HOY Java no sea la mejor opción para un navegador pero es una solución excelente para el lado del servidor. Y una cosa no excluye a la otra.

En las consolas suelen buscar apurar hasta el último ciclo de CPU, así que quizá no sea la mejor opción (y repito la palabra HOY, porque las cosas cambian con el tiempo y no sé donde van a ir). Y ellos lo han solucionado con librerías prefabricadas como Havok o Unreal Engine que son multiplataforma y que les permite concentrarse en lo que (supuestamente) importa en un juego.

mcleod_ideafix escribió:Sobre usar JAVA en los videojuegos, John Carmack comentó esto (hace tiempo, sí, pero ilustrativo al fin y al cabo):

carmack escribió:The biggest problem is that Java is really slow. On a pure cpu / memory / display / communications level, most modern cell phones should be considerably better gaming platforms than a Game Boy Advanced. With Java, on most phones you are left with about the CPU power of an original 4.77 mhz IBM PC, and lousy control over everything. [...snip...] Write-once-run-anywhere. Ha. Hahahahaha. We are only testing on four platforms right now, and not a single pair has the exact same quirks. All the commercial games are tweaked and compiled individually for each (often 100+) platform. Portability is not a justification for the awful performance.


El primer problema aquí es empezar diciendo hace tiempo, John Carmak dijo..., porque expone dos problemas: la falacia del principio de autoridad y la antigüedad, no sabemos cuanta, del comentario. Si hiciéramos caso a Carmack nunca habría existido un Doom para Spectrum porque era básicamente imposible. Y aún digo más, con Java 1.1 y las máquinas de entonces, probablemente hubiera sido imposible escribir JSpeccy (y como él, muchos otros emuladores que hoy están escritos en Java). Pero es que la JVM de 2014 no tiene NADA que ver con la de 1994, ni siquiera con la de 2004 (y creo que por entonces había salido Java 5.0). Y JSpeccy funciona perfectamente con un uso de CPU ridículo en un Dual Core de hace más de un lustro. Funciona incluso en mi AMD Turion a 2 Ghz con 1 GB de RAM... de 2006!!!.

En una cosa sí tiene razón Carmack, Portability is not a justification for the awful performance. Y es que un mal algoritmo es igual de malo en C, C++, Java, BASIC, ASM o LOGO. Y un mal programador lo es en cualquier lenguaje. Al margen de esto, un problema con los móviles Android es que Google no ha conseguido que haya una versión más o menos moderna instalada en la gran mayoría de terminales y eso complica mucho la vida a los desarrolladores. Pero eso, no es culpa estrictamente de Java. En realidad, no tiene nada que ver con el lenguaje, porque el problema es exactamente el mismo si usaras cualquier otro.

mcleod_ideafix escribió:Poniéndome en plan conspiranoico, y leyendo quejas en Stack Overflow sobre el recolector de basura de JAVA, o la velocidad de la JVM, parece como si la industrial quisiera promover JAVA para de esa forma, cuando al usuario se le presenten errores de memoria, o note el programa lento, lo achaque a su hardware, y no al software, y se compre un Core i7 para hacer lo que podría hacer con un Dual Core o incluso un Celeron, con mucha menos memoria.


Quejas en Stack Overflow las hay del color que las busques. Y gente que no sabe usar un lenguaje o una plataforma, a patadas. El GC no hace magia y la JVM tampoco. Lo industrial, como cualquier otro tiempo de empresa con conexiones con la tecnología, está muy apegada a lo que conoce. Ahora mismo, trato con una empresa "de lo industrial" que solo sabe poner PLC's de una determinada marca, una BBDD orientada a objetos propietaria (y carísima) que da la risa y aplicaciones de escritorio escritas en un Delphi de hace varios años que podrían estar escritas perfectamente en Java y que, para hacer una gilipollez, tira de OpenGL, necesita un máquinón (estoy seguro de poder hacer eso mismo en Java con la mitad de consumo de memoria y CPU) y el ejecutable ocupa 30 MB de nada. Será Delphi, será compilado, no habrá GC ni JVM, pero esa aplicación es una puta mierda como un piano de cola de grande. Seguramente, si la hubieran hecho en C o C++ sería aún peor. Me dijeron que intentaron reescribirla en Java pero que no pudieron. Sinceramente, no me extraña.

Supón ahora que tienes una aplicación industrial vieja funcionando en 486DX100 con 1 MB de RAM y un disco de estado sólido que simula un disquete de 1,44 MB. Usa MS-DOS y un programa escrito en BC++ 3.1. Para las conexiones de red (antes escasas, ahora las hay de todos los colores y formas) usa PC/TCP, lo que da algunos dolores de cabeza. Lo que va a sustituir a eso es un PC industrial con un intel Atom D510 (1,66 Ghz, 64 bits, 2 CPU con HT), 2 GB de RAM, una MMC industrial de 8 GB y Linux. Pongamos que se hace una aplicación en C++ que, además de alargar el tiempo de desarrollo, complica la depuración y el mantenimiento y que así consigues gastar 300 MB menos de RAM y la carga de las CPU (4 virtuales) pasa de 0.1 a 0.07. Joder, es tal la optimización que ya puedo llamarme Johnny Comomolo y soy el puto ninja del C++. Eso sí, cada vez que cambie la distro de Linux tendré que recompilar todas las librerías y rezo para que un cambio en el GCC, en las nuevas versiones de librerías o vaya usted a saber donde no me joda la vida en un cambio de HW (que será más moderno y rápido).

mcleod_ideafix escribió:Por cierto, el recolector de basura de JAVA es otra de esas cosas que hacen que me afiance más en que JAVA parece hecho para programadores... cómo decirlo... "despreocupados". Enseñar desde primero de carrera a un futuro ingeniero que puede pedir recursos al ordenador sin molestarse en devolverlos cuando ya no los use "porque de eso se encarga automaticamente el sistema" me parece cuanto menos, inquietante, si lo que se pretende es educar al programador a escribir código eficiente. Claro que esa es otra batalla perdida... prima el "fast programming", como el "fast food". Una lástima...


Mantienes una idea equivocada al respecto del GC, si me permites la observación. Es FALSO que no haya que preocuparse por el uso de la memoria solo por tener un GC. Repito, el GC no hace magia y puedes cometer determinadas malas prácticas que consigan que el GC curre como una loca, consuma CPU como una posesa y sea incapaz de hacer bien su trabajo. No existe (aún) el lenguaje que permita "despreocuparse" de todo. En esta vida, para hacer las cosas bien en cualquier disciplina no hay nada que sustituya a una cabeza bien amueblada, lógica y con sentido común. Y aún iré más lejos: sin esas tres cosas, es mucho peor alguien programando en C++ que en Java, porque al menos el GC y la JVM pueden intentar suplir las carencias del programador (sin conseguir más que atenuarlas un poco, porque de donde no hay, no se puede sacar).

Desde mi punto de vista, y dejando al margen la multiplataforma (que no es moco de pavo, pero para eso hay que haber portado entre plataformas aplicaciones escritas en C y C++ de varias decenas de miles de líneas de código y no haberse quedado con el mantra de que C y C++ son portables), Java es útil en al menos dos campos que cada vez tienen mayor importancia: el uso de la red y el multithreading. Ni lo primero es fácil, ni lo segundo trivial, como pueden atestiguar los libros de Doug Lea acerca de Java y los problemas de concurrencia.

Como observación bienintencionada y no como crítica velada, digo que muchos de los estupendos programas que tú mismo has hecho y regalado (gracias por hacerlos y el doble de gracias por regalarlos) no tienen ninguna razón para no estar escritos en Java, de modo que sirvieran a más usuarios y sin dolor, ni recompilaciones. Así, el problema que parece que ha tenido stratotrasto en el hilo del zx81putil del foro de "Emuladores y preservación" nunca lo hubiera sufrido. La SDL no es una librería nativa de Windows y no sabes si el usuario que la va a usar tiene un Windows de 32 o de 64 bits (cada día más habitual éste último porque ya son raros los ordenadores nuevos con más de 4 GB de RAM). Si un programa hace su trabajo a satisfacción, no veo ventaja alguna en que esté escrito en un lenguaje concreto porque, como pasa con las personas, el hábito no hace al monje... ;)

Un fuerte abrazo.
Debido al fallo de un mecanismo, el lanzagranadas M203 se te podía disparar cuando menos lo esperaras, lo que te habría hecho bastante impopular entre lo que quedara de tu unidad.
Revista del ejército EE.UU. PS, agosto 1993.

Emulador JSpeccy
ZXBaremulator

Avatar de Usuario
Hark0
Freddy Hardest
Mensajes: 545
Registrado: Mar Nov 13, 2012 12:42 pm
Ubicación: Cornella de Llobregat - Barcelona
Contactar:

Re: Ponerse al día para programar C yC++ (aplicaciones windo

Mensaje por Hark0 » Vie Abr 11, 2014 8:26 am

Tras leer todos los post me pregunto finalmente... ¿cual es el mejor SDK?
litiopixel.blogspot.com - Desarrollo videojuegos Indie · Pixel-Art · Retroinformática · Electrónica

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Ponerse al día para programar C yC++ (aplicaciones windo

Mensaje por radastan » Vie Abr 11, 2014 8:34 am

Hark0 escribió:Tras leer todos los post me pregunto finalmente... ¿cual es el mejor SDK?


Yo lo tengo claro:

- Si quieres hacer algo serio en WindowS: Visual Studio
- Si quieres hacer algo en Java porque funciones en cualquier sistema operativo: Netbeans

Yo uso ambos y me va fenomenal, ya sólo elijo el adecuado según lo que quiera hacer.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados