Mostrando las entradas con la etiqueta JVM. Mostrar todas las entradas
Mostrando las entradas con la etiqueta JVM. Mostrar todas las entradas

miércoles, 23 de noviembre de 2022

Libros de Java Code Geeks

 

Download FREE IT Guides!

 

JVM Troubleshooting Guide

The Java bytecode produced when application are compiled, is eventually executed by the Java Virtual Machine (JVM). The JVM has grown to be a sophisticated tool, but it essentially...

 
 

Java 8 Features

With no doubts, Java 8 release is the greatest thing in the Java world since Java 5 (released quite a while ago, back in 2004). It brings tons of new features to the Java as a language,...

 
 

JPA Mini Book

One of the problems of Object Orientation is how to map the objects as the database requires. JPA allows us to work with Java classes as it provides a transparent layer to each database...

 
 

Spring Integration for EAI

It is a lightweight framework that builds upon the core Spring framework. It is designed to enable the development of integration solutions typical of event-driven architectures and...

 

viernes, 5 de febrero de 2021

GraalVM 21.0 introduce una JVM escrita en Java


GraalVM es (en mi opinión) uno de los proyectos más interesantes de estos tiempos en el mundo java. 

La versión 21 introduce una JVM escrita en Java. Con esta versión, Java on Truffle, una JVM escrita en Java que utiliza el framework Truffle, proporciona una opción adicional para ejecutar aplicaciones Java.


Java on Truffle, con nombre en código Espresso, se puede instalar utilizando GraalVM Updater que es un administrador de paquetes que descarga e instala paquetes que no están incluidos en la distribución principal de GraalVM.

gu install espresso

Para ejecutar una aplicación Java usando Java en Truffle, la opción -truffle debe pasarse al comando java.

java -truffle -jar awesomeApp.jar

Java on Truffle es una JVM minificada que proporciona todos los componentes centrales de una JVM como el intérprete de bytes code, la interfaz nativa de Java (JNI) y el protocolo Java Debug Wire (JDWP). Implementa las API de la biblioteca Java Runtime Environment (libjvm.so) y reutiliza todos los JAR necesarios y las bibliotecas nativas de GraalVM. Y al igual que con una JVM tradicional, Java on Truffle admite la ejecución de otros lenguajes basados en JVM como Kotlin.

Dado que está implementado en Java y puede ejecutar Java, Java en Truffle es esencialmente Java autohospedado o Java en Java. Esto abre oportunidades interesantes para investigar e innovar la JVM, ya que permite a los desarrolladores de Java leer y comprender el código fuente de la JVM y mejorarlo.

Dejo link: 

https://www.graalvm.org/release-notes/21_0/

https://www.graalvm.org/reference-manual/java-on-truffle/

domingo, 10 de abril de 2016

Eclipse OMR


IBM ha creado Eclipse OMR, un conjunto de herramientas de código abierto para máquina virtual java con el objetivo de crear entornos de ejecución para cualquier lenguaje. OMR pretende potenciar nuevos lenguajes en la jvm. Para lograr esto, IBM está generalizando su propia JVM, J9.

Aunque la JVM es cada vez más más políglota, su estrecha relación con el lenguaje Java significa que los lenguajes que corren en ella tiene que estar ligados a java. Esto causa problemas especialmente a los lenguajes de tipado dinámico, por ejemplo hasta la adición de InvokeDynamic en Java 7, lenguajes dinámicos tuvieron que hacer uso de soluciones ineficientes para superar la naturaleza de tipo estático de la JVM, que repercute notablemente en el rendimiento.

Aunque OMR no es un motor de ejecución en sí mismo, es un conjunto de herramientas para crear fácilmente los runtimes. OMR proporciona una implementación de JVM independiente de las características de Java y proporcionando las características más comunes de los runtimes.

Este proyecto esta en incubadora pero se espera un gran futuro. Otra cosa es opensource y con licencia eclipse 1 y apache 2.

Dejo link: https://projects.eclipse.org/proposals/omr

lunes, 21 de marzo de 2016

Programación lógica con miniKanren

Siempre pero siempre pero siempre que escuchamos sobre programación lógica, relacionamos con prolog y hacemos bien. Pero prolog no es la única opción.

Con ustedes miniKanren.

miniKanren es un DSL (Domain Specific Language) para la programación logica.

miniKanren es muy simple, con sólo tres operadores lógicos y un operador de interfaz.
La primera implementación fue en scheme, pero ahora existen implementaciones en diferentes lenguajes y tecnologías como Racket, Clojure, Haskell, Python, JavaScript, Scala, Ruby, OCaml, PHP y algunos más.

miniKanren fue diseñado para ser simple y fácil pero a la vez fácil de extender.

Veamos un ejemplo:

(run* [q] (== q 1))

Esto parece una linea de codigo pero hace muchas cosas.

run* retorna la lista de comandos que se pueden ejecutar. q es una variable booleana.

Como podemos ver miniKanren es simple y open source!

Dejo link: http://minikanren.org/

martes, 27 de noviembre de 2012

Cual es el próximo lenguaje java?

InfoQ realiza una encuesta preguntando, cual va ser el próximo lenguaje que va a triunfar en la JVM. A votar!

Que piensan? Cual es el próximo lenguaje? que lenguaje hay que ir estudiando?

Dejo link:
http://www.infoq.com/research/next-jvm-language?utm_source=infoqresearch&utm_campaign=lr-homepage

sábado, 27 de octubre de 2012

Redline, corriendo Smalltalk en la plataforma Java


Si se junta un lenguaje orientado a objeto puro y la maquina virtual más usada del mercado, junto a la plataforma más robusta nos da redline. Redline es una gran idea, programar en smalltalk en la plataforma Java.

Proporcionar una implementación viable Smalltalk para la JVM puede ayudar a revitalizar la comunidad haciéndola llegar a la mayor audiencia posible. La máquina virtual de Java es sin duda la más utilizada y la plataforma de implementación más popular. Poder ejecutar Smalltalk en la JVM trae Smalltalk un público mucho más amplio posible.

Los desarrolladores que trabajan con Java y otros lenguajes de la JVM puede tener la oportunidad de trabajar con Smalltalk en un entorno en el que se sienta cómodo y aprovechar la productividad que trae Smalltalk.

Dejo link:
http://www.redline.st/

martes, 17 de julio de 2012

Jigsaw se va a hacer esperar...

Al parecer Project Jigsaw no va a llegar a la fecha que esta programado Java 8, por lo tanto vendrá en Java 9 o Java 8 no cumplirá la fecha de su entrega.

En fin pero creo que se preguntaran, que es Jigsaw? Bueno Jigsaw es un proyecto que intenta llevar la modularidad a Java, si estas pensando en OSGI te diría que no estas tan errado. El objetivo de este proyecto es diseñar e implementar un sistema de módulos estándar para la plataforma Java SE, y aplicar ese sistema a la misma plataforma y el JDK.

Como sabrán la JDK actual es monolítica; por ejemplo una aplicación que utiliza SWT debe de igual manera  bajar el sdk con Swing; aunque no lo ocupe en su vida. El proyecto Jigsaw dará fin a todo esto y a la vez nos proveerá un estándar de modularización. 


A esperar un poco más entonces!! 


Dejo link: 
http://openjdk.java.net/projects/jigsaw/

sábado, 12 de mayo de 2012

Dalvik, la maquina virtual de Android


Dalvik es la máquina virtual que utiliza la plataforma para dispositivos móviles

Dalvik está optimizada para requerir poca memoria y está diseñada para permitir ejecutar varias instancias de la máquina virtual simultáneamente, delegando en el sistema operativo subyacente el soporte de aislamiento de procesos, gestión de memoria e hilos.

A menudo Dalvik es nombrada como una máquina virtual Java, pero esto no es estrictamente correcto, ya que el bytecode con el que opera no es Java bytecode. Sin embargo, la herramienta dx incluida en el SDK de Android permite transformar los archivos Class de Java compilados por un compilador Java al formato de archivos Dex.

El nombre de Dalvik fue elegido por Bornstein en honor a Dalvík, un pueblo de Eyjafjörður, Islandia, donde vivieron antepasados suyos.

En este ultimo tiempo se hizo famosa esta maquina virtual porque ser capaz de compilar código java a otra plataforma. Con lo que utiliza el lenguaje java plataforma de Android dañando algunas patentes de Oracle. Pero sobre todo esta en el centro de la discusión de si un lenguaje de programación puede ser copyrighteable. Ustedes que piensan? Un lenguaje de programación puede ser copyrighteable?

Dejo link:
http://www.dalvikvm.com/

viernes, 11 de noviembre de 2011

Ahora le toca a eclipse!



Luego que Jboss presente su lenguaje Ceylon para la plataforma Java; ahora la organización eclipse pone una nueva ficha en el tablero. Xtend es el lenguaje de eclipse. El cual corre sobre la plataforma java.

Xtend nació con el objetivo de simplificar el lenguaje y escribir menos lineas de código. Entre sus características podemos nombrar:

  • Tipado estático
  • Facilita el desarrollo
  • Closures
  • Compila a código Java no a bycode
  • Sintaxis similar a Java
  • Se desarrollo con Xtext y se basa en Xbase


Veamos un ejemplo:


import my::metamodel;extension other::ExtensionFile;

/**
  * Documentation
  */
anExpressionExtension(String stringParam) :
  doingStuff(with(stringParam))
;

/**
  * java extensions are just mappings
  */
String aJavaExtension(String param) : JAVA
  my.JavaClass.staticMethod(java.lang.String)
;


No es el objetivo de reemplazar Java. Por lo tanto, los frameworks pueden interactuar con código Xtend igual que interactúa Java. También puede llamar a funciones Java, Xtend de una manera totalmente transparente. Y, por supuesto, ofrece un moderno IDE basado en Eclipse IDE integrado con las herramientas de desarrollo de Java (JDT).

Dejo un ejemplo que compara java con Xtend:


Dejo links:






Xtend Intro from Xtext Team on Vimeo.

lunes, 7 de noviembre de 2011

Gosu

Gosu es un lenguaje que corre sobre la jvm, y tiene las siguientes características:

  • 100% orientado a objetos
  • tipado estático
  • es imperativo
  • 100% compatible con java
  • inferencia de tipos
  • soporta closures
  • generic simplificados
  • y con licencia Apache 2.0!


Veamos un ejemplo:


// Declare some data
var minLength = 4
var strings = { "yellow", "red", "blue" }

// Slice and dice the data using blocks
print( strings.where( \ s -> s.length() >= minLength )
              .sort()
              .join( ", " ) )

// Use standard java classes
var someFile = new java.io.File( "SomeFile.txt" )

// But with shiny new methods
someFile.write( strings.join( "\n" ) )


Dimos un pequeño vistazo a este lenguje, dejo links:

http://gosu-lang.org/
http://gosu-lang.org/intro.shtml
http://gosu-lang.org/examples.shtml

sábado, 22 de octubre de 2011

jdart

jdart es compilador a código java el nuevo lenguaje de google Dart. El objetivo es poder portar codigo dart a la plataforma. Actualmente se encuentra en desarrollo.
En la pagina del proyecto podemos ver un ejemplo del compilador:

main() {
  print("hello world");
}


Y esto compilaría a este código java:

public class test {
  public static void main(java.lang.String[]);
    Code:
       0: invokedynamic #18,  0             // InvokeDynamic #0:__main__:()V
       5: return        

  public static java.lang.Object __main__();
    Code:
       0: ldc           #21                 // String hello world
       2: invokedynamic #27,  0             // InvokeDynamic #1:print:(Ljava/lang/String;)V
       7: aconst_null   
       8: areturn       
}



Me parece una buena idea, todavía esta en desarrollo pero pinta lindo!
Dejo links:
http://code.google.com/p/jdart/
http://www.dzone.com/links/r/jdart_dart_to_jvm_bytecode_compiler_using_invoked.html
http://www.dartlang.org/

domingo, 14 de agosto de 2011

JavaCC

Una de las capacidades de la tecnología Java es que no solo puede correr e lenguaje Java sino innumerables lenguajes más. Pensemos si pudiéramos hacer un lenguaje a nuestro gusto, para eso existe JavaCC

JavaCC (Java Compile) es un generador de lenguajes que funcionen sobre la plataforma java y además es open source. Es similar a Yacc pero para java.

JavaCC es una herramienta para transformar y generar un parser con código Java (similar a las expresiones regulares) para chequear la sintaxis del código fuente desde reglas definida como gramática. La gramática de JavaCC es similar a la de java por suerte.

Dejo algunos tutoriales:

http://www.codeproject.com/KB/cross-platform/CreateProgrammingLanguage.aspx
http://www.uhu.es/470004004/practicas/practica04.htm

miércoles, 10 de agosto de 2011

Java SE 7 Released

Me llego un mail hace instantes que nos dice lo siguiente:

After nearly five years of collaboration within the worldwide Java community, Java Platform, Standard Edition 7 is ready for download! The major features of Java SE 7 are Project Coin, the Fork/Join framework, the New File System API, and InvokeDynamic. It's an important step in Java’s evolution. Learn more:

Download Java SE 7
Read the Press Release: Oracle Announces Availability of Java SE 7
Watch the technical presentations from Oracle's global event on July 7
View Moving Java Forward: A Video Discussion about Java 7
Find a JUG meeting covering Java 7 near you
Access Java 7 Training
Get Involved in Open JDK

-The Oracle Technology Network Team (The Java Source Blog)

domingo, 7 de agosto de 2011

Clojure


Clojure es Lisp sobre JVM. Clojure es un dialecto de Lisp por lo tanto si entendemos Lisp entendemos Clojure. Lisp es un lenguaje funcional no puro. Lisp tiene algunas características interesantes:

Lisp es un lenguaje de listas. Una llamada a una función utiliza el elemento de la primera lista como la función y el resto como los argumentos.
Lisp utiliza sus propias estructuras de datos para expresar código

Si mezclamos estas dos ideas obtendremos un lenguaje ideal para metaprogramacion. Podemos organizar nuestro código en un árbol teniendo una base de modelo de objetos, también podemos crear un código basado en prototipos. Dándonos gran flexibilidad.

Los primeros dialectos de Lisp son Common Lisp y Scheme. Scheme y Clojure son de la familia de dialectos llamado lisp-1 y Common Lisp es de la familia llamada lisp-2.

Una de las cosas más importantes de Clojure es que funciona sobre la JVM lo que permite usar todas las librerías y frameworks ya escritos en java.

Clojure es funcional y es dinámicamente tipado, lo que hace que el código sea más fácil de leer y más divertido de escribir.

Esto es solo una introducción en proximos post seguiremos escribiendo de este lenguaje.

Dejo Link:
http://clojure.org/

martes, 2 de agosto de 2011

Ceylon


La República Democrática Socialista de Sri Lanka (cingalés:ශ්‍රී ලංකා ප්‍රජාතාන්ත්‍රික සමාජවාදී ජනරජය, Sri Lankā Prajathanthrika Samajavadi Janarajaya, tamil: இலங்கை சனநாயக சோஷலிசக் குடியரசு, Ilaṅkai caṉanāyaka cōṣalisak Kuṭiyarasu) es un país insular ubicado al sureste de India en Asia. Hasta 1972 era llamado Ceilán. Originalmente conocido como Heladiva, está habitada por más de veinte millones de personas.
La isla fue conocida en la Antigüedad como Lanka, Lankadvīpa, Simoundou, Taprobane, Serendib y Selan, llegando a ser denominada popularmente como la «Isla de los mil nombres». Durante su colonización, la isla tomó el nombre, en inglés, de Ceylon, que se siguió utilizando posteriormente. Su particular forma y su cercanía a la India hicieron que se la llame la «Lágrima de la India».

Además Ceylon es el nombre del nuevo lenguaje de Jboss para la JVM.

Ya escribí sobre este nuevo lenguaje de Jboss que corre sobre la JVM. Gavin escribe en su blog que el Lenguaje Java a quedado un poco viejo; por lo tanto el diseño un lenguaje llamado Ceylon que tiene como principal objetivo actualizar el lenguaje Java.

Los objetivos de Ceylon incluyen: Ser fácil de aprender tanto para desarrolladores Java como C#
  • Eliminar la verbosidad de Java pero manteniendo la legibilidad
  • Mejorar el tipado estático de Java
  • Proveer una expresión declarativa para eliminar dependencias con xml
  • Apoyar y fomentar un estilo de programación más funcional.
  • Proveer soporte para meta-programación
  • Proveer construcción modular.

Veamos el clasico “Hola Mundo”:
void hello() {   writeLine("Hola Mundo!");
}

Este método imprime “Hola Mundo!” por consola. Un método TopLevel como este es similar a una función C, esta es manejada directamente por el paquete que la contiene. Y esta no es parte de ningún tipo, por lo tanto no es necesario llamar a un objeto para llamar a un método TopLevel y a la vez no es necesario tener funciones estáticas.Para documentar el codigo provee una anotaciones que nos permiten hacer una documentación más natural por ejemplo:
doc "The classic Hello World program"
by "Gavin"
see (goodbye)
throws (IOException)
void hello() {
writeLine("Hello, World!");
}

Ceylon provee también mejora en el manejo de string, veamos un ejemplo:
doc "The Hello World program
... version 1.1!"
void hello() {
writeLine("Hello, this is Ceylon " process.languageVersion
" running on Java " process.javaVersion "!");
}

Para el manejo de objetos nulos provee un operador ?, veamos un ejemplo:
doc "Print a personalized greeting"
void hello() {
String? name = process.arguments.first;
String greeting;
if (exists name) {
greeting = "Hello, " name "!";
}
else {
greeting = "Hello, World!";
}
writeLine(greeting);
}

Name es declarado como String? Lo que significa que acepta valores nulos. También podemos usar el operador ? Para no devolver valores nulos:
shared String greeting = "Hello, " + name?"World";

El operador ? Devolverá name si no es nulo, sino devolvera “World”

Celyon provee parámetros por defecto, secuencias y diferentes tipos de parametros:

void hello(String name="World") {
writeLine("Hello, " name "!");
}


//sequenced parameter
void print(String... strings) {
for (String string in strings) {
writeLine(string);
}
}


//union type
void print(String|Named printable) {
String string;
switch (printable)
case (is String) {
string = printable;
}
case (is Named) {
string = printable.name;
}
writeLine(string);
}

Veamos la declaración de una clase:

doc "A personalized greeting"
class Hello(String? name) {

doc "The greeting"
shared String greeting;
if (exists name) {
greeting = "Hello, " name "!";
}
else {
greeting = "Hello, World!";
}

doc "Print the greeting"
shared void say(OutputStream stream) {
stream.writeLine(greeting);
}

}

Como se puede ver no es necesario un método constructor dado que el código se ejecuta en el cuerpo de la clase.

Ahora veamos como se usa nuestra clase:

doc "Print a personalized greeting"
void hello() {
Hello(process.args.first).say(process.output);
}


La palabra new no se usa simplemente porque no es necesaria.
Las interfaces pueden tener definiciones de metodos pero no se pueden instanciar veamos un ejemplo:

shared interface Writer {

shared formal Formatter formatter;

shared formal void write(String string);

shared void writeLine(String string) {
write(string);
write(process.newLine);
}

shared void writeFormattedLine(String formatString, Object... args) {
writeLine( formatter.format(formatString, args) );
}

}

shared class ConsoleWriter()
satisfies Writer {

formatter = StringFormatter();

shared actual void write(String string) {
writeLine(string);
}

}


Hasta aquí una pasada por este nuevo lenguaje para JVM. En mi opinión, cumple sus objetivos; pero deja mucho que desear si se lo compara con groovy o scala. Que piensan? Les gusta este nuevo lenguaje?

Dejo Link:

martes, 26 de julio de 2011

JetBrains crea un nuevo lenguaje para la JVM


Kotlin es el nombre del nuevo lenguaje de la empresa jetbrains. Recordemos que jetbrains es la creadora de la exitosa ide IntelliJ.

Kotlin es un lenguaje que intenta solucionar incombenientes al escribir codigo Java. Entre otras características podemos nombrar:

El sistema toma control de las referencias nulas, no es necesario null pointer.
Soporta Clojures

Es interoperable con Java; Java puede llamar a Kotlin y Kotlin puede llamar a Java.


Veamos un ejemplo de un Hola Mundo:

class Greeter(name : String) {
fun greet() {
println("Hello, ${name}");
}
}

fun main(args : Array) {
Greeter(args[0]).greet()
}


Dejo links:

miércoles, 20 de julio de 2011

InvokeDynamic en Java 7


Ya hemos hablado en post anteriores sobre el proyecto Da Vinchi:

da-vinci-machine-project.html

InvokeDynamic es el primer fruto de este proyecto, básicamente que permite hacer InvokeDynamic, invocar métodos al vuelo; si si va ser usado para closures. Si bien no se puede usar desde java es una mejora importante para jvm preparando todo para el uso de closures en la versión 8 de java.

La pregunta es cantada, para que hacen esta mejora en java 7 si la vamos a ver en java 8. Es para los lenguajes script que actualmente corren en java.
Poder ejecutar al vuelo métodos le da la posibilidad a lenguajes script a correr mucho más rápido. Anteriormente se veían obligados a un uso de reflexión.
En conclusión en java 7 los lenguajes scripts son mucho más rápidos y la pregunta es: el futuro de la plataforma esta en otros lenguajes?

Dejo links:

http://java.sun.com/developer/technicalArticles/DynTypeLang/index.html

jueves, 5 de mayo de 2011

Ceylon




Ceylon es el nuevo lenguaje que corre sobre jvm. Es un lenguaje hecho por Jboss/Red Hat ; el principal impulsor es ni más, ni menos Gavin King el creador de Hibernate.

Fue creado para correr sobre JVM, utiliza escritura estática e incluye soporte para funciones de alto orden, manteniendo un fuerte enfoque sobre la facilidad para aprenderlo y para leerlo. La principal premisa que se tuvo en cuenta para su diseño fue: Como sería Java si se escribiera hoy?

Prometo hacer un post decente de este lenguaje, por ahora solo dejo una serie de tutoriales que hizo su creador en su blog:

martes, 8 de febrero de 2011

Erjang


Erjang no es otra cosa que una mv escrita para correr erlang sobre la plataforma java.

Como trabaja esto? Lo que permite erjang es pasar un .beam a un .class lo que permite que este corra en la jvm. Además también tiene una consola interactiva.

Este proyecto esta en pañales pero le veo mucho futuro.

Dejo links:
http://groups.google.com/group/erjang
https://github.com/trifork/erjang/wiki

viernes, 30 de julio de 2010