Article View: es.comp.lenguajes.java
Article #26033Re: La supuesta portabilidad de C.
From: Jonathan Revusky
Date: Sun, 07 Feb 1999 00:00
Date: Sun, 07 Feb 1999 00:00
109 lines
6580 bytes
6580 bytes
Guillermo Rodriguez Garcia wrote: > >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. Hay una diferencia b�sica. En C, tienes que saber por adelantado en qu� plataformas quieres que el c�digo corra y escoger las librer�as en funci�n de eso. Eso representa una diferencia enorme a nivel pr�ctico con lo que ocurre con Java. Imag�nate el escenario siguiente: IBM saca un nuevo super servidor -- o digamos, dentro de un par de a�os, alguna peque�a empresa nueva inventa una m�quina con una arquitectura novedosa con un rendimiento que antes era impensable. El programa que t� escribes AHORA correr� en esa m�quina si hay una implementaci�n de Java para esa plataforma (y lo habr�.) Es decir, Java tiene portabilidad en el sentido de que puedes desarrollar PARA UNA MAQUINA CUYA EXISTENCIA DESCONOCES EN ESE MOMENTO. Es realmente portabilidad en otro sentido. > 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. Las librer�as son un elemento de la rompecabezas. No obstante, no es el �nico elemento. Hasta el lenguaje Java es intr�nsecamente m�s portable que el lenguaje C. Como Juan Antonio indic�, la sem�ntica de Java se expresa en t�rminos de una m�quina virtual. Un programa v�lido en Java se reduce a una serie de instrucciones para esa m�quina *virtual*, que es una abstracci�n de una m�quina real. Bueno, eso quer�a matizar en un cierto momento, ya que por supuesto el C tambi�n incorpora una abstracci�n de la m�quina real. Cualquier lenguaje menos ensamblador, pens�ndolo. No obstante, hay una gran diferencia. En Java toda la sem�ntica de esas instrucciones (de hecho, uf, algunos matices me vienen en mente...pero bueno) est� definida de una manera independiente de la m�quina real. A diferencia de eso, en el coraz�n mismo de C, hay una sintaxis de punteros y aritm�tica de punteros sin restricciones -- y la sem�ntica de los punteros es necesariamente distinta para cada m�quina ya que depende sutilmente (y a veces no tan sutilmente) del modelo de memoria de cada SO y procesador. Para m�, eso ser�a un motivo inescapable para tener que concluir que C no es intr�nsecamente portable en el mismo sentido que Java. Otro motivo importante por el cual C es intr�nsecamente no portable -- por lo menos compar�ndolo con Java -- es que Java lleva incorporado en el lenguaje mismo una sem�ntica de programaci�n multitarea. Ya que los programas no triviales hoy d�a tienden a ser multitarea, eso representa una gran limitaci�n de la portabilidad de C, una limitaci�n superada claramente por Java. > 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) �C�mo dices? Guillermo, para que lo sepas. Los compiladores JIT compilan de verdad. Generan instrucciones de m�quina. La compilaci�n JIT ocurre la primera vez que una clase se carga en memoria. Y se ejecuta c�digo compilado comparable en eficacia con el c�digo generado por compiladores de otros lenguajes. > 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. Si t� lo dices. :-) > Pero eso no significa que la portabilidad de C sea > "pura teor�a" como t� dices. Mira, yo apostar�a que todas las empresas principales de Software -- IBM, Microsoft, Adobe, Corel, etcetera -- tienen grupos enteros de trabajo donde la gente no hace m�s que portar c�digo. Apostar�a tambi�n que la mayor�a de ese c�digo fue escrito en C -- on en C++, pero t�picamente en un C++ bastante cerca del C. Una situaci�n as� es simplemente inconcebible con Java, departamentos enteros dedicados a portar c�digo Java. �Por qu�? �Porque Java, a diferencia de C, es portable de verdad! Para m�, la portabilidad de C es algo te�rico. Puedes afirmar que ANSI C es portable pero tienes que condicionar y matizar la afirmaci�n hasta tal punto que, al fin y al cabo, no tiene mucho significado. Cierro este mensaje aqu�, porque todo esto se vuelve largo y quiz� conteste al resto por separado cuando tenga un momento. Saludos, Jonathan Revusky -- Java and Delphi Consulting Make your .class files double-clickable with SmartJ http://www.bigfoot.com/~crystalline.solutions
Technical Details
Message-ID:
<36BD8DBF.43818422@jet.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> <36bc4728.97809@noticias.iies.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: 1116f3,4e17c3721247235e X-Google-Attributes: gid1116f3,public From: Jonathan Revusky <jrevusky@jet.es> Subject: Re: La supuesta portabilidad de C. Date: 1999/02/07 Message-ID: <36BD8DBF.43818422@jet.es> X-Deja-AN: 441657621 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> <36bc4728.97809@noticias.iies.es> X-Accept-Language: en Content-Type: text/plain; charset=iso-8859-1 X-Complaints-To: usenet@lola.ctv.es X-Trace: lola.ctv.es 918392390 6652 195.55.161.212 (7 Feb 1999 12:59:50 GMT) Organization: CTV/JET Mime-Version: 1.0 Reply-To: jrevusky@bigfoot.com NNTP-Posting-Date: 7 Feb 1999 12:59:50 GMT Newsgroups: es.comp.lenguajes.java