🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #26080

Re: La supuesta portabilidad de C.

#26080
From: Jonathan Revusky
Date: Fri, 29 Jan 1999 00:00
172 lines
9294 bytes

Guillermo Rodriguez Garcia wrote:
> 
> El d�a Mon, 25 Jan 1999 18:18:24 +0100, Jonathan Revusky
> <jrevusky@jet.es> escribi�:
 
> >Es incorrecto obviamente. Pero no s� si es ilegal. Quiz� se describa
> >como ilegal en la especificaci�n, pero no me parece un argumento muy
> >potente en todo caso.
 
> En fin...
 
> >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.
 
> >nadie que proporcione empleo y vivienda a cada espa�ol.) El argumento
> >que haces sobre lo que es legal, a nivel pr�ctico, me temo, no tiene
> >mucha base real.
 
> 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.

> 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
una vez a la hora de cargar una clase. Si compilas est�ticamente, es una
verificaci�n a la hora de compilar. Adem�s, en el caso de clases
cargadas dinamicamente, es una etapa opcional que s�lo es necesaria para
"untrusted code" que se carga de la red.

En cuanto a la verificaci�n de que un �ndice no sobrepasa los l�mites de
un array, como he indicado en mi respuesta a Enrique, casi cualquier
caso cr�tico se hallar�a dentro de un bucle y cualquier compilador --
hasta un compilador JIT -- puede prescindir de las verificaciones de
l�mites cuando es demostrable que el �ndice nunca supera el l�mite. En
cualquier caso en que t� y yo nos damos cuenta de que el �ndice nunca
supera el l�mite, el compilador se da cuenta tambi�n. Con dos
diferencias. El compilador se da cuenta mucho m�s r�pido, cuesti�n de
microsegundos y... el compilador NUNCA se equivoca.

> 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. Acu�rdate que los dise�adores de C
ten�an el objetivo de hacer un sistema operativo. Hacer un lenguaje s�lo
era una etapa intermedia. Quer�an un lenguaje para el cual fuese f�cil
escribir un compilador. Es s�lo por eso la sintaxis tan impresentable de
los arrays (y cadenas) en C. Fue una chapuza r�pida por la cual llevamos
a�os pagando.

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 todo eso nos lleva, como siempre, a la siguiente observaci�n.
> >
> >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
implementaciones de java funcionaban con interprete de bytecode y que
hab�a un 1000% o m�s comparado con C. Ahora, en cualquier plataforma
importante, java es un lenguaje compilado (en JIT o incluso
est�ticamente) y las comprobaciones ocurren est�ticamente a la hora de
compilar a c�digo nativo. 

> 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.

> 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.

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.

> 
> >Eso a nivel de empresas grandes que pueden dedicar muchos a�os-hombre al
> >tema de portar software. A nivel de gente como yo, un desarrollador
> >independiente, o incluso empresas peque�as, a nivel pr�ctico, esa
> >portabilidad casi no existe.
> 
> Nunca he dicho que el C sea un buen lenguaje para t�, ni para la gente
> como t�, ni para peque�as empresas que desarrollan mayoritariamente
> aplicaciones de gesti�n o similares. He dicho que el C es el lenguaje
> de los que desarrollan sistemas operativos, aplicaciones de sistema,
> herramientas, etc. Se me va a caer la boca de decirlo.

Mira, mucha gente que trabaja muy cerca del hardware est� hasta el mo�o
del C tambi�n. Es por eso el inter�s suscitado por el embedded Java
specification y alguna especificaci�n que HP est� desarrollando en
competencia con eso. Java suscita tanto inter�s en esos dominios tambi�n
porque los fallos y limitaciones del C son ya patentes. 

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. Y no soy el �nico en considerar que la sem�ntica de arrays
en C es totalmente inaceptable.

Y mira, hombre, da un paso atr�s y date cuenta de que est�s defendiendo
algo totalmente indefensible. El consenso general en el mundo, entre
gente que piensa seriamente en temas de lenguajes de programaci�n, es
que esa sintaxis de arrays en C es algo horriblemente roto. Si quieres
defender el uso del C, s� m�s selectivo. No defiendas todos sus
aspectos, hasta sus fallos m�s evidentes, como si se tratara de tu
propio hijo. S� que sabes bastantes cosas, pero es que da�as tu
credibilidad as�, hombre. Pi�nsalo.

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: <36B22A44.44F9B181@jet.es>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <367ecc2b.2367399@noticias.iies.es> <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>

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/01/29
Message-ID: <36B22A44.44F9B181@jet.es>
X-Deja-AN: 438486685
Content-Transfer-Encoding: 8bit
References: <367ecc2b.2367399@noticias.iies.es> <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>
X-Accept-Language: en
Content-Type: text/plain; charset=iso-8859-1
X-Complaints-To: usenet@lola.ctv.es
X-Trace: lola.ctv.es 917646033 23445 194.224.180.168 (29 Jan 1999 21:40:33 GMT)
Organization: CTV/JET
Mime-Version: 1.0
Reply-To: jrevusky@bigfoot.com
NNTP-Posting-Date: 29 Jan 1999 21:40:33 GMT
Newsgroups: es.comp.lenguajes.java