Benchmarking en distintos lenguajes
Rodrigo Fuentealba
darkprox en gmail.com
Mie Dic 5 03:10:57 CLST 2007
El 5/12/07, Aldrin Gonzalo Martoq Ahumada <amartoq en dcc.uchile.cl> escribió:
> On Dec 4, 2007 2:30 PM, Franco Catrin L. <fcatrin en tuxpan.com> wrote:
> > Veamos un simple cambio de este sencillo ejemplo. Ahora queremos
> > pasar el nombre del "saludado" por parametro. En Java quedaria como :
> > (sin validar)
> >
> > public class HelloWorld
> > {
> > public static void main(String[] args )
> > {
> > System.out.println( "Hello " + args[0] );
> > }
> > }
>
> Sigue odiando Java por su mal llamada "elegancia" (==
> sobre-ingenieria). Escribo ese ejemplo en eclipse 3 europa, y ya tengo
> varios warnings. El programa final "profesional" queda asi:
>
> -------------------hello/HelloWorld.java-----
> // "The use of the default package is discouraged.
> package hello;
>
> public class HelloWorld {
>
> // avoid using explicit string literals, declare constants instead
> // BTW, por que esto no lo hace el compilador!
> private static final String _STR_HELLO = "Hello "; //$NON-NLS-1$
>
> public static void main(String[] args) {
> System.out.println(_STR_HELLO + args[0]);
> }
> }
> -------------------
>
> Oh perdon, el programa se cae por una (de las odiadas por mi)
> "RunTimeExceptions"; es decir, los errores _mas_ tipicos comunes por
> los cuales se caen los programas, en particular NullPointerException;
> pero que no son revisados durante la compilacion.
>
> $ java hello.HelloWorld
> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
> at hello.HelloWorld.main(HelloWorld.java:66)
>
> Nueva version:
> ---------------hello/HelloWorld.java
> // "The use of the default package is discouraged.
> package hello;
>
> public class HelloWorld {
> // avoid using explicit string literals, declare constants instead
> private static final String _STR_HELLO = "Hello "; //$NON-NLS-1$
>
> // avoid using explicit string literals, declare constants instead
> private static final String _STR_USAGE = "Usage: java
> hello.HelloWorld <your_name>"; //$NON-NLS-1$
>
> public static void main(String[] args) {
> if (args.length != 1) {
> System.err.println(_STR_USAGE);
> return;
> }
> System.out.println(_STR_HELLO + args[0]);
> }
> }
> --------------------------
>
> Y que es eso de NON-NLS??? Ah claro, olvidaba la i18n....
>
> ---------- Ultima version, espero ------
> package hello;
>
> public class HelloWorld {
> private static final String _STR_HELLO =
> Messages.getString("HelloWorld.HELLO"); //$NON-NLS-1$
>
> private static final String _STR_USAGE =
> Messages.getString("HelloWorld.USAGE"); //$NON-NLS-1$
>
> public static void main(String[] args) {
> if (args.length != 1) {
> System.err.println(_STR_USAGE);
> return;
> }
> System.out.println(_STR_HELLO + args[0]);
> }
>
> import java.util.MissingResourceException;
> import java.util.ResourceBundle;
>
> public class Messages {
> private static final String BUNDLE_NAME =
> "hello.messages"; //$NON-NLS-1$
>
> private static final ResourceBundle RESOURCE_BUNDLE =
> ResourceBundle.getBundle(BUNDLE_NAME);
>
> private Messages() {
> }
>
> public static String getString(String key) {
> try {
> return RESOURCE_BUNDLE.getString(key);
> } catch (MissingResourceException e) {
> return '!' + key + '!';
> }
> }
> }
>
> ---- messages.properties ----
> HelloWorld.HELLO=Hello
> HelloWorld.USAGE=Usage: java hello.HelloWorld <your_name>
> -----------------------------------
>
> Alguien en java llega a algo tan elaborado??? Y eso que ni siquiera
> hemos llegado a J2EE....
>
> Algun contraejemplo en otro lenguaje, anyone??? ;)
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. HELLOWORLD.
000300
000400*
000500 ENVIRONMENT DIVISION.
000600 CONFIGURATION SECTION.
000700 SOURCE-COMPUTER. RM-COBOL.
000800 OBJECT-COMPUTER. RM-COBOL.
000900
001000 DATA DIVISION.
001100 FILE SECTION.
001200
100000 PROCEDURE DIVISION.
100100
100200 MAIN-LOGIC SECTION.
100300 BEGIN.
100400 DISPLAY " " LINE 1 POSITION 1 ERASE EOS.
100500 DISPLAY "Hello world!" LINE 15 POSITION 10.
100600 STOP RUN.
100700 MAIN-LOGIC-EXIT.
100800 EXIT.
Y eso que no pide tu nombre. (Sí, fue de picado...)
--
Rodrigo Fuentealba
Más información sobre la lista de distribución Linux