Article View: es.comp.lenguajes.java
Article #26165Re: La supuesta portabilidad de C.
From: Guillermo Rodriguez Garcia
Date: Fri, 05 Feb 1999 00:00
Date: Fri, 05 Feb 1999 00:00
220 lines
11167 bytes
11167 bytes
El d�a Fri, 29 Jan 1999 22:38:12 +0100, Jonathan Revusky <jrevusky@jet.es> escribi�: >> >Incluso si es oficialmente ilegal, carece de significado. Si algo es >> >ilegal y no hay absolutamente ning�n mecanismo para "imponer la ley", su >> >ilegalidad es m�s bien te�rica. Por ejemplo, si hay un limite de >> >velocidad en una carretera de 100 km/h pero no hay ninguna vigilancia y >> >nunca te multan, ese l�mite no tiene importancia pr�ctica (por lo menos > >> No s� a qu� viene esto, de verdad. > >Te explico. Estoy diferenciando una realidad te�rica de una realidad >pr�ctica. La portabilidad de c�digo C es una realidad te�rica en la >mayor�a de casos. Entiendo la met�fora, lo que no s� a qu� viene es el empecinamiento en demostrar que el C no es portable. C puede ser tan portable como Java. S� que hay una diferencia principal, y es que las librer�as est�ndar de Java son mucho m�s completas que las de C. Por eso un programa en Java puede tener GUIs utilizando s�lo librer�as est�ndar, mientras que en C no es as�... (pero esto no significa que no se pueda hacer de forma portable. Simplemente utiliza una librer�a adecuada, como por ejemplo V), pero no es un problema de que el *lenguaje* sea m�s o menos portable, sino de las librer�as. Por otra parte, he visto que le contestabas a Enrique que en C hay que recompilar para cada m�quina, mientras que en Java tienes lo que has llamado "un �nico binario ejecutable". Eso es simplemente porque Java normalmente es int�rpretado (dentro de esta categor�a incluyo los compiladores JIT) y C compilado, pero sigue sin ser una caracter�stica esencial del lenguaje, m�s bien del entorno. A pesar de todo, nunca he tenido problema en reconocer que Java es m�s portable que C. Pero eso no significa que la portabilidad de C sea "pura teor�a" como t� dices. Un poco resumiendo: - Si me dices que Java es m�s portable que C: de acuerdo. - Si me dices que Java es portable "en un sentido distinto que C": de acuerdo, b�sicamente porque es interpretado. - Si me dices que C no es portable: est�s equivocado. >> No hago ning�n argumento. Solo digo que el C es perfectamente portable >> si te atienes al est�ndar, que para eso est�. > >Como dije, veo eso como un argumento de abogado, m�s que un argumento de >ingeniero. Pues soy ingeniero, no abogado. Y tampoco creo que fueran abogados los que redactaron el est�ndar. No s� porqu� no ves el punto del argumento: se trata simplemente de que es posible hacer programas portables, PERO tambi�n es posible hacer programas no portables. >> El hecho de que no haya >> miles y miles de controles y chequeos y vigilancias etc etc como los >> hay en Java es simplemente por motivos de *velocidad*, > >Mira, esto es pura desinformaci�n. Es cierto que hay muchos "chequeos y >vigilancias" en Java, pero las cosas de que estamos hablando no tienen >porque afectar la velocidad de ejecuci�n, ya que se llevan a cabo >est�ticamente. Por ejemplo, la etapa de verificaci�n del bytecode ocurre Eso depende de cada m�quina virtual y de cada compilador, pero en general, s� que va a haber un overhead, que ser� m�s o menos grande, y eso para aplicaciones que tengan un interfaz interactivo de tipo "pulso aqu�-ocurre esto" probablemente no tenga ninguna importancia, pero en otras aplicaciones, como procesos que corren continuamente en background, o que realizan c�lculo intensivo, o muchos otros, s� puede que la tenga. >una vez a la hora de cargar una clase. Si compilas est�ticamente, es una Si compilas est�ticamente tienes el mismo problema que tanto criticas en C: tienes que recompilar para cada m�quina. Yo la ventaja de la portabilidad de Java la veo en Java interpretado (repito: compiladores JIT incluidos), corriendo sobre una JVM. Java compilado pierde mucho de la esencia de Java. >> que teniendo en >> cuenta para qu� est� dise�ado C parece un factor bastante importante. > >El C fue dise�ado en su forma inicial casi exclusivamente para que fuese >f�cil implementar un compilador. Y luego fue estandarizado para que fuera portable. El C del que estoy hablando no es el C de K&R, sino el C ANSI. >Hombre, mira, para un segundo y da un paso atr�s. Est�s defendiendo algo >totalmente indefensible, la sintaxis de arrays que tiene el C. �C�mo >puedes defender eso? �Es indefensible! �Pero bueno! Yo NO he defendido en ning�n momento la sintaxis de arrays del C, simplemente cuando t� dijiste que el C no ten�a arrays, yo te contest� que s� los tiene, y que no son iguales que los punteros, aunque en ocasiones se puedan tratar de forma equivalente. De ah� a "defender la sintaxis de los arrays" hay un trecho. P�rate a pensarlo. >> >La portabilidad en C es algo: >> > >> >(1) definido de manera muy limitada >> >> La portabilidad de C est� perfectamente definida para permitir >> trabajar sin tener un overhead del 1000% s�lo en comprobaciones > >���1000%???? �De d�nde est�s sacando esto? Es cierto que las primeras :-) Es que soy andaluz, llevo la exageraci�n metida en la sangre. Lo siento, no estaba citando cifras, es s�lo una forma de hablar. Si alguien me ha malinterpretado pido disculpas. El overhead de las comprobaciones y chequeos de Java puede estar, usando datos m�s realistas, en torno al 20-100%, en funci�n de la aplicaci�n y las librer�as. >> sobre >> si el programador es lo suficientemente inteligente como para no >> acceder a un elemento inexistente en un array, por ejemplo. Ya he >> dicho que el �nico motivo de no tener los muchos mecanismos que tiene >> Java de protecci�n contra errores son motivos de eficiencia, y est�n >> plenamente justificados. > >La sintaxis tan horrible de arrays (y cadenas) en C no tiene nada que >ver con la eficacia de ejecuci�n. Y punto. Si seguimos esta discusi�n, >no repitas ese argumento m�s, porque ser�a prueba de mala fe. Bueno, aqu� te quiero decir varias cosas: - Primera: yo NO estoy defendiendo la sintaxis de los arrays en C, estoy defendiendo que el hecho de que no tenga mecanismos como los que tiene Java para tratar las excepciones es una cuesti�n de eficiencia, porque el overhead que te comentaba antes ser� m�s grande o m�s peque�o pero el caso es que _existe_ - Segunda: C no tiene cadenas (eso s� que es cierto) - Tercera: Simplemente porque t� digas que una cosa "es as� y punto" no me parece que quede zanjado el tema, as� que si yo repitiera ese argumento (que nunca he sostenido: ver apartado primero) no ser�a prueba de mala fe en absoluto, simplemente de que no me habr�as convencido de estar equivocado. >> Repito por en�sima vez que me da exactamente >> igual que Java sea m�s portable que C o que deje de serlo. Lo que >> defiendo es que C puede ser perfectamente portable. >> >> >y >> > >> >(2) no tiene mucho significado pr�ctico. >> >> Claro, por eso herramientas como por ejemplo todas las de gnu est�n >> �ntegramente escritas en C y son perfectamente portables a docenas de >> sistemas distintos. > >Para los lectores que no sab�is qu� son las herramientas de GNU, que >sepais que Guillermo est� hablando de un conjunto de herramientas de >l�nea de mando, que no tienen ninguna interfaz gr�fica, que son cosas >algor�tmicas como el GREP y el SED y el MAKE que leen un stream por >stdin y lo escriben al stdout. > >Lo que pasa es que a partir de 1984 y adelante, iniciado por el >lanzamiento del Apple Macintosh, la inform�tica empez� una revoluci�n >basada alrededor del esquema de interfaz gr�fica. En este mundo moderno, >los programas que los usuarios finales utilizan tienen una interfaz >gr�fica e intuitiva. > Pues para empezar, acabas de dar en el clavo. Los programas "que los usuarios finales utilizan" son aplicaciones de usuario. Los programas que utilizan mayoritariamente los desarrolladores o son herramientas de sistema. Por otra parte, efectivamente las herramientas de GNU son casi todas en modo consola, pero es que hay mucho UNIX por ah� sin X, con lo cual en determinadas ocasiones o trabajas con stdin y stdout o no trabajas. Y por �ltimo, tambi�n mucho del software que se escribe para X, por ejemplo con tcl/tk, se escribe en C, y todo ese software es perfectamente portable a cualquier m�quina donde haya tcl/tk (casi todas las que merecen la pena, y no solo Unix: tambi�n hay para Windows, OS/2, etc.). Como ves, el tema de que las aplicaciones tengan GUI o lo dejen de tener es mayoritariemente un problema de librer�as, no de lenguaje. La librer�a est�ndar de Java incorpora awt y jfc (swing), y la de C no tiene nada parecido, pero hay alternativas como tcl/tk o V, por poner un ejemplo. No tiene nada que ver con el lenguaje en s�. >Es cierto que el C puede considerarse portable para los que quieren >quedarse en el mundo perdido de Jurassic Park hasta el fin del tiempo. >Pero si quieres hacer algo moderno, con una interfaz gr�fica, un >programa que un usuario normal y corriente utilizar�a, no puedes >f�cilmente hacerlo en C y que sea portable. "Programa que usuario normal y corriente utilizar�a" != "herramienta de sistema". Aparte de lo cual s� que puedes. Usa V o tcl/tk, o alguna otra. >Bueno, lo dejo aqu� de momento. S�lo un comentario m�s sobre el resto >que he cortado. Por una parte, no deber�as decirme que no entiendo c�mo >funcionan los arrays en C. Es que lo entiendo perfectamente y desde hace >muchos a�os. Bueno, entonces me limitar� a decir que no daba esa impresi�n. >Y mira, hombre, da un paso atr�s y date cuenta de que est�s defendiendo >algo totalmente indefensible. �Es que NO, NO, NO, NO, NO lo estoy defendiendo! Si as� fuera no tendr�a problema en reconocerlo, te lo aseguro. Un saludo: GUILLE ---- Guillermo Rodriguez Garcia <XXguille@XXiies.XXes> (ya sabes :-)
Technical Details
Message-ID:
<36bc4728.97809@noticias.iies.es>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<01be2d1e$9894a5e0$e6164cc3@default> <75ntf6$vgl$1@news.udl.net> <01be2f3f$b70425a0$65164cc3@default> <3685c875.1606618@noticias.iies.es> <3686AEA6.95121EF7@jet.es> <36895642.1240659@noticias.iies.es> <3695DAA5.554C94F2@ibm.net> <3698a74d.1128294@noticias.iies.es> <36A384E0.4EC6BEC@jet.es> <36a59e89.1856809@noticias.iies.es> <36A50AD4.FC2F8B7A@jet.es> <36a8acca.4654561@noticias.iies.es> <36ACA760.8FD40701@jet.es> <36b4aa0e.4641133@noticias.iies.es> <36B22A44.44F9B181@jet.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: 1116f3,4e17c3721247235e X-Google-Attributes: gid1116f3,public From: XXguille@XXiies.XXes (Guillermo Rodriguez Garcia) Subject: Re: La supuesta portabilidad de C. Date: 1999/02/05 Message-ID: <36bc4728.97809@noticias.iies.es> X-Deja-AN: 441106718 Content-Transfer-Encoding: 8bit References: <01be2d1e$9894a5e0$e6164cc3@default> <75ntf6$vgl$1@news.udl.net> <01be2f3f$b70425a0$65164cc3@default> <3685c875.1606618@noticias.iies.es> <3686AEA6.95121EF7@jet.es> <36895642.1240659@noticias.iies.es> <3695DAA5.554C94F2@ibm.net> <3698a74d.1128294@noticias.iies.es> <36A384E0.4EC6BEC@jet.es> <36a59e89.1856809@noticias.iies.es> <36A50AD4.FC2F8B7A@jet.es> <36a8acca.4654561@noticias.iies.es> <36ACA760.8FD40701@jet.es> <36b4aa0e.4641133@noticias.iies.es> <36B22A44.44F9B181@jet.es> Content-Type: text/plain; charset=ISO-8859-1 Organization: Telefonica Transmision de Datos Mime-Version: 1.0 Newsgroups: es.comp.lenguajes.java