🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Java vs C++

#25734
From: Jonathan Revusky
Date: Wed, 10 Mar 1999 00:00
120 lines
7118 bytes

Alvaro Fuentes wrote:

> Los defensores de C++ ya s�lo pueden acogerse a la mayor rapidez de C++ en
> ejecuci�n, algo en lo que Java no puede competir.

Bueno, es cierto que ahora mismo, C++ tiende a ser m�s r�pido que Java,
pero, en el fondo, eso no es sorprendente. Est�s comparando algo que
lleva muchos a�os en el mercado y muchos esfuerzos se han hecho para que
C++ corra r�pido. A�os de ingenier�a. 

Mira, si, hace un siglo, al ver el primer prototipo de un autom�vil,
cuando los proponentes de esa tecnolog�a dec�an que �sta iba a remplazar
el transporte a base de caballo, muchos pensaban seguramente que eran
locos, porque los primeros prototipos eran muy lentos y muy poco
fiables. Adem�s, esa impresi�n fue acuentuada por el hecho de que las
carreteras del tiempo no fueron dise�ados con los automoviles en mente.
Razonar que ese autom�vil era m�s lento que un hombre montado a caballo,
y por lo tanto, los autom�viles son *intr�nsecamente m�s lentos* que un
caballo es un gran salto de razonamiento. Sabemos ahora que ocurre
exactamente lo contrario. Lo que quiero decir es que criticar el
*potencial* de una nueva tecnolog�a a base de los problemas con los
primeros prototipos que salen es casi siempre un error.

Notar�s que mucha gente dice que C++ debe ser m�s r�pido que Java pero
nunca te explican realmente bien porque. �Incluso ofrecen motivos que, a
mi juicio, tienden a favorecer el Java a largo plazo!

T�picamente, se ofrece los motivos siguientes:

(1) C y C++ van a ser m�s r�pidos porque le ofrecen al programador la
posibilidad de manipular punteros directamente sin restricciones.

(2) Java tiende a ser m�s lento porque tiene un sistema de recolecci�n
de basura. Eso tiene un gran coste en eficacia comparado con la gesti�n
manual de memoria.

Las dos afirmaciones *pueden* ser ciertas (puntualmente) pero se tienen
que matizar much�simo. En el caso de afirmaci�n (2) me parece que se
tiene que matizarla tanto que probablemente as� como as�, yo dir�a que
la afirmaci�n es totalmente falsa. Bueno, la afirmaci�n (1) es casi
totalmente falsa tambi�n.

Lo que pasa con (1) es que es cierto que, puntualmente, hay truquillos
que puedes hacer con aritm�tica de punteros para conseguir m�s rapidez
en C o C++. Las matices son que: (a) Ese tipo de cosa es peligrosa y muy
propensa al error. (b) El c�digo resultante tiende a ser muy poco
mantenible. (c) Es muy posible que el "truquillo" tenga el efecto
contrario -- que incluso ralentiza el c�digo en cuesti�n.

O, y por supuesto (d) incluso cuando funciona, con ese tipo de truco
sueles ganar muy poco y en realidad, no vale la vela.

Con aritm�tica de punteros, t�, el programador, puedes optimizar m�s a
la mano, pero paradojicamente, la m�quina, quiero decir el generador de
c�digo, tiene las manos atadas. En el t�pico programa C o C++, el
compilador no puede mover los datos o reordenar un conjunto de objetos
en memoria porque hay "punteros sueltos por ahi" que incluso apuntan a
direcciones dentro de las propias estructuras. Mover y/o reordenar los
objetos siempre puede tener efectos secundarios. Uno o m�s punteros
podr�an quedar apuntando al vac�o.

Todo ese problema nefasto que en C se llama el problema de "pointer
aliasing" no existe en java. No puedes tener un puntero que indica una
ubicaci�n dentro del espacio de memoria de otro objeto.

Es decir que C o C++ deja m�s grados de libertad al programador para
optimizar a mano, mientras el Java deja m�s margen al sistema, al
generador de c�digo, para optimizar el c�digo que genera. Lo consigue
imponiendo cieras restricciones a lo que el programador puede hacer.

Demos un paso atr�s. Si se trata de apostar a largo plazo, �para qu�
sistema vas a apostar -- en cuanto a generar c�digo eficaz? �El sistema
que requiere que un experto humano optimice a la mano, o el sistema
basado en la �dea de optimizaci�n automatizada?

Bueno, y si adjuntas el hecho de que las optimizaciones que el humano
lleva a cabo en C s�lo se aplican a un procesador determinado. Algo que
resulta una optimizaci�n en la arquitectura x86 puede no serlo con otro
procesador. Y considera que las optimizaciones que un generador de
c�digo de Java puede llevar a cabo desde el bytecode neutro son
optimizaciones espec�ficas para la plataforma en cuesti�n....

Todo el argumento de que Java tiene una desventaja comparada con C++ en
cuanto a eficacia -- y quiero decir una deventaja intr�nseca -- es muy
muy dudoso.

Y en cuanto a la afirmaci�n (2) arriba sobre la recogida de basura,
estamos hablando con C++ de un sistema que te obliga a liberar memoria
"sobre la marcha". En Java, el sistema puede dejar que la basura se
acumule y con el esquema del "generational garbage collector" puede
liberarlo todo de golpe y adem�s puede hacer esas gestiones en un
momento de baja cuando la m�quina no tiene nada mejor que hacer. Pero,
bueno, en general, la idea de que la gesti�n manual de memoria por parte
del programador tender� a ser m�s eficaz que un sistema automatizado es
muy dudosa si lo piensas. Toda la situaci�n es sacar conclusiones
generales a partir de una situaci�n muy espec�fica. Es decir, las
implementaciones actuales de Java son lentas, entonces, Java *es* lento.

Bueno, hay bastantes motivos para creer que, en su proceso de maduraci�n
como tecnolog�a, Java incluso va a superar en la mayor�a de casos la
eficacia de C y C++.

En todo caso, una comparaci�n de Java con C++ no es especialmente
interesante. Java tiene sus defectos, pero es un lenguaje moderno. Si
enumeras las prestaciones que deber�amos querer en un lenguaje moderno a
estas alturas, yo creo que C++ re�ne tan pocas que... bueno, �qu� decir?
En cierto sentido, siento inc�modo que los defensores de Java quieran
concentrarse tanto en comparar Java con C++, ya que el resultado de la
comparaci�n es devastador. Demasiado f�cil, �no? Tengo la impresi�n de
que hay muchas m�s comparaciones interesantes que hacer con lenguajes
como Eiffel o Smalltalk. 

Jonathan Revusky
-- 
Java and Delphi Consulting
Make your .class files double-clickable
with SmartJ
http://www.bigfoot.com/~crystalline.solutions
Technical Details
Message-ID: <36E6B089.AF0F42DF@jet.es>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <7c5a5e$1f0$1@mercurio.cica.es> <36E65683.CF3A1435@tissat.es>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: 1116f3,3b1718ca1122f30f
X-Google-Attributes: gid1116f3,public
From: Jonathan Revusky <jrevusky@jet.es>
Subject: Re: Java vs C++
Date: 1999/03/10
Message-ID: <36E6B089.AF0F42DF@jet.es>
X-Deja-AN: 453465526
Content-Transfer-Encoding: 8bit
References: <7c5a5e$1f0$1@mercurio.cica.es> <36E65683.CF3A1435@tissat.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 921088132 525 194.224.182.1 (10 Mar 1999 17:48:52 GMT)
Organization: CTV/JET
Mime-Version: 1.0
Reply-To: jrevusky@bigfoot.com
NNTP-Posting-Date: 10 Mar 1999 17:48:52 GMT
Newsgroups: es.comp.lenguajes.java