From 137c7f633dba8badda89bab8d68762a796303147 Mon Sep 17 00:00:00 2001 From: konsoletyper Date: Sun, 5 Oct 2014 16:45:44 +0400 Subject: [PATCH] Update readme --- README.md | 73 ++++++++++++++----------------------------------------- 1 file changed, 18 insertions(+), 55 deletions(-) diff --git a/README.md b/README.md index d9f3ca7a1..894194bab 100644 --- a/README.md +++ b/README.md @@ -4,25 +4,25 @@ TeaVM What is TeaVM? -------------- -In short, TeaVM gets a bytecode, running over JVM, and translates it to the JavaScript code, -which does exactly the same thing as the original bytecode does. -It is based on its cross-compiler which transforms `class` files to JavaScript. -But there is something more: +TeaVM is an ahead-of-time translator from Java bytecode to JVM. +It can be compared with GWT, however TeaVM does not require source code of your application and +all required libraries. +You can use TeaVM for building applications for the browser, due to the following features: - * a sophisticated per-method dependency manager, which greatly reduces the JavaScript output; - * an optimizer capable of things like devirtualization, inlining, constant propagation, - loop invariant motion and many other; - * implementation of subset of core Java library; + * per-method dependency analyzer, that determines a set of methods that are really needed + to run your application, so TeaVM won't translate whole JAR files; + * fast JavaScript; for now it is almost as fast as the JavaScript, generated by GWT; + * Java class library emulation; + * integration with Maven and Eclipse; + * generation of source maps; + * debugger; + * interoperation with JavaScript libraries together with the set of predefined browser interfaces. How to use ---------- -There is no TeaVM artifacts in the central Maven repository yet. -So first you need to clone project and install it into the local repository. -In order to install project, just run `mvn install` when you are in the project's root directory. - -There are several options of using TeaVM. One is the maven build. First, you write your code as if it were an -ordinary Java project: +There are several options of using TeaVM. One is the Maven build. First, you write your code as if it were an +ordinary Java application: ```Java package org.teavm.samples; @@ -40,12 +40,12 @@ Second, you include the following plugin in your `pom.xml` build section: org.teavm teavm-maven-plugin - 0.1 + 0.2 org.teavm teavm-classlib - 0.1 + 0.2 @@ -69,8 +69,7 @@ Now you can execute `mvn clean package` and get the generated JavaScript files i Just open `target/javascript/main.html` page in your browser, open developer's console and press *Refresh* and see what happen. -There is [teavm-samples](teavm-samples) module, -containing a complete buildable and runnable example. +There is also the [teavm-samples](teavm-samples) module, containing examples of TeaVM-based projects. DukeScript ---------- @@ -92,40 +91,4 @@ and [HTML page](http://source.apidesign.org/hg/html~demo/file/4dce5ea7e13a/mines Another example is avaialble [here](http://graphhopper.com/teavm/). It uses [GraphHopper](https://github.com/graphhopper/graphhopper/) to build route in browser. Unlike original GraphHopper example it works completely in browser instead of querying server. -Thanks to [Peter Karich](https://github.com/karussell). - -Advantages over GWT -------------------- - -You may notice that TeaVM idea is much similar to GWT. So why we need TeaVM instead of GWT? - -Unlinke GWT, TeaVM gets the compiled bytecode, not Java sources. -Thereby it **does not depend on a specific language syntax**. Even not on a specific language. -So, when the next Java version gets a new feature, you can use it in your source code -and TeaVM compiler remains unbroken. Also you may want thigs Scala, Kotlin or Ceilon. TeaVM supports them. - -To represent a source code, GWT uses abstract syntax trees (AST). -TeaVM uses control flow graph (CFG) of methods. CFG are much easier to optimize, -so TeaVM **applies aggressive optimizations** to you code to make it running faster. - -TeaVM compiler is faster. And TeaVM does not produce permutations. -So with TeaVM you have no permutation explosion problem. - -Advantages over JavaScript --------------------------- - -JavaScript suffers of its dynamic typing. When you write a new code, dynamic typing accelerates -the development process, allowing you to write less boilerplate code. -But when you are to maintain a large code base, you may need static typing. -Also, it is not dynamic typing that really makes code short. -Good static typed languages can [infer variable types for you](http://en.wikipedia.org/wiki/Type_inference). -And they usually have a lot more useful features like [lambda functions](http://en.wikipedia.org/wiki/Lambda_function), -[lexical closures](http://en.wikipedia.org/wiki/Closure_%28computer_science%29), -[implicit type casting](http://en.wikipedia.org/wiki/Type_conversion#Implicit_type_conversion), etc. - -With JavaScript you sometimes have to include large library for only one feature. Or you include many different -libraries for different purposes and your project size grows. TeaVM translates only the methods which -are really needed. So you can depend on as much libraries as you want and get - -With JavaScript you are limited to one language. TeaVM supports many of the JVM languages. - +Thanks to [Peter Karich](https://github.com/karussell). \ No newline at end of file