On Dec 3, 2007 10:59 AM, Xavier Andrade <[EMAIL PROTECTED]> wrote: > On Sun, 2 Dec 2007, Aldrin Gonzalo Martoq Ahumada wrote: > > Discrepo. Lo que se llama "maquina" es la definicion de una > > arquitectura y su set de instrucciones. Cuando se habla de "maquina > > virtual", se quiere decir que ese set de instrucciones no es el mismo > > que el implementado en hardware; por lo tanto si quieres ejecutar ese > > set de instrucciones requeriras de un paso de traduccion. > > Un interprete es un programa que realiza la traduccion desde un set de > > instrucciones o lenguaje y las ejecuta, de manera que puedas correr el > > codigo en tu maquina "real". La distincion importante es que el paso > > de traduccion se hace en tiempo de ejecucion; es decir, cada vez que > > corras el programa tendras el costo adicional de traduccion lo que > > puede traer problemas de performance o uso de recursos (memoria por > > ej). Por eso la *implementacion* de la maquina virtual de java es un > > interprete. > El problema es que no es tan claro hacer la distincion, de acuerdo a tu > definicion, x86(_64) es una maquina virtual, ya los procesadores modernos > implementan un set de instrucciones a la RISC internamente y en el momento > de ejecucion se traducen las instrucciones x86 a instrucciones nativas, > algunas directamente y otras por microcodigo.
Exactamente, ese es el punto: los procesadores x86 modernos poseen un interprete! Dicho de otra forma, si pudieramos compilar (traducir "offline") directamente en el codigo "nativo" del procesador, nos ahorrariamos varios ciclos de cpu (y tal vez transistores si dejamos esa pega exclusivamente al ambiente); que se gastan en el interprete (traducir "online"). -- Aldrin Martoq From [EMAIL PROTECTED] Wed Dec 5 02:06:14 2007 From: [EMAIL PROTECTED] (Aldrin Gonzalo Martoq Ahumada) Date: Wed Dec 5 02:15:28 2007 Subject: Benchmarking en distintos lenguajes In-Reply-To: <[EMAIL PROTECTED]> References: <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> Message-ID: <[EMAIL PROTECTED]> On Dec 4, 2007 2:30 PM, Franco Catrin L. <[EMAIL PROTECTED]> 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??? ;) -- Aldrin Martoq From [EMAIL PROTECTED] Wed Dec 5 03:10:57 2007 From: [EMAIL PROTECTED] (Rodrigo Fuentealba) Date: Wed Dec 5 03:20:06 2007 Subject: Benchmarking en distintos lenguajes In-Reply-To: <[EMAIL PROTECTED]> References: <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> Message-ID: <[EMAIL PROTECTED]> El 5/12/07, Aldrin Gonzalo Martoq Ahumada <[EMAIL PROTECTED]> escribió: > On Dec 4, 2007 2:30 PM, Franco Catrin L. <[EMAIL PROTECTED]> 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