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