简体   繁体   中英

byte code, libraries and Java

If I wanted to create a new language for Java I should make a compiler that is able to generate the byte-code compatible with the JVM spec, right? and also for the JDK libraries?

Where can I find some info?

Thanks.

I would start with a compiler which produced Java source. You may find this easier to read/understand/debug. Later you can optimise it to produce byte code.

EDIT:

If you have features which cannot be easily translated to Java code, you should be able to create a small number of byte code classes using Jasmin with all the exotic functionality which you can test to death. From the generated Java code this will look like a plain method call. The JVM can still inline the method so this might not impact performance at all.

Depends what you mean by "create a new language for Java" -- do you mean a language that compiles to bytecode and the code it generates can be used from any Java app (eg Groovy) or an interpreted language (for which you want to write a parser in Java)? If it is the former one then @Joachim is right, look at the JVM spec; for the latter look at the likes of JavaCC for creating a parser for your language grammar.

TheJava Virtual Machine Spec should have most of what you need.

An excellent library for bytecode generation/manipulation is ASM: http://asm.ow2.org .

It is very versatile and flexible. Note however that it's API is based on events (similar to Sax parsers) - it reads.class files and invokes a method whenever it encounters a new entity (class declaration, method declaration, statements, etc.). This may seem a bit awkward at first, but it saves a lot of memory (compared to the alternative: the library read the input, spits out a fully-evolved tree structure and then you have to iterate over it).

I don't think this will help much practically, but it has a lot of sweet theoretical stuff that I think you'll find useful.

http://www.codeproject.com/KB/recipes/B32Machine1.aspx

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM