Barista
 
    Introduction     Status     Examples     Manual     API     Downloads      
         
 

Features   
History   

 
Features
  • full support for class file format up to version 1.7
  • experimental support for 'future' features (e. g. modules)
  • can be used as a library, or as a command-line [dis]assembler
  • support for ocamlfind

History
Version 2.0-beta (2013-03-07):
  • update for Objective Caml 4.00.1
  • update for Camlzip 1.05
  • new 'graph' command, allowing to generate the graph of classes references from a list of archives (supported file formats: Dot, GEXF, and GraphML)
  • new 'Lookup' module allowing to search for Java elements (classes, constructors, fields, and methods) from string queries
  • new 'Manifest' module providing support for archive manifest files
  • new 'ArchiveBuilder' module allowing to construct archives from classes, and handling manifest, services, and copy from other archives
  • the 'flow' command can now generate output to either GEXF, or GraphML, in addition to Dot
  • improved handling of classpaths
  • improved performance for class encoding (about 50% speed-up)
  • improved performance for stack state computations (about 30% speed-up)
  • optimization of switches (turning lookup switches into table switches if it saves some place)
  • new peephole optimizations, in order to avoid simple conversions of constants
  • API CHANGE: class types for 'traversal' objects enhanced with new methods
  • API CHANGE: 'Traversal' module renamed to 'ClassTraversal'
  • new 'traversal' class type allowing to fold over class elements
  • new 'ArchiveTraversal' module allowing to traverse archives
  • bug: incorrect handling of some 'package-info' class files
  • bug #86: '-ocaml-prefix' doesn't really work
  • bug #87: install shouldn't build anything
  • bug #89: do not activate warnings by default
  • bug #104: configure script should be executable
  • bug #110: error in annotation encoding of string value
  • bug #111: invalid stack frame when locals are changed in a protected block
  • bug #116: invalid stack frame after "invokespecial" instruction
Version 2.0-alpha3 (2012-05-13):
  • support for '*.sym' and '*.war' files in classpath
  • 'JAVA_HOME' environment variable used to load JDK classes
  • '/usr/libexec/java_home' utility used to load JDK classes (MacOS X)
  • 'Predef' module renamed to 'Predefined'
  • peephole rule for optimization of load/load sequences
  • no automatic detection of 'ocamljava' binary
  • bug #99: wrong packing of int32 into int64
  • bug: ocamlbuild plugin for ocamljava-based compilation
  • bug: invalid stack maps when double/long is followed by top
  • bug: invalid locals size when over 255
  • bug: incorrect graph flattening when wide gotos are used
  • bug: install 'cmi' file
Version 2.0-alpha2 (2011-12-21):
  • move from Java 1.6 to Java 1.7 as default version
  • syntax extension for 'exception pattern' (BARISTA_ERROR)
  • syntax extension for Unicode literals (@"string" and @'c')
  • InputStream.t and OutputStream.t can now be created from functions
  • better error reporting when a signature is invalid
  • helper functions for serialization
  • minor refactoring of code (with small impact on API)
  • removed dependency to 'Str' module
  • bug #73: uniform handling of depencies
  • bug #83: correct construction of constant pool w.r.t. LDC instructions
Version 2.0-alpha (2011-07-15):
  • update for Objective Caml 3.12.1
  • update for Camomile 0.8.3
  • new build system (ocamlbuild-based)
  • reorganization of 'src' directory
  • support for Unicode in 'src/utf8' directory
  • major refactoring of code (with impact on API)
  • executable names changed to 'barista.byte' and 'barista.native'
  • peephole optimizations
  • optimization of stack frames
  • optimization of exception tables
  • optimization of 'transitive' jumps
  • new '-optimize' command-line switch to enable peephole/jump optimizations
  • support for 'invodynamic' (JSR 292)
  • preliminary support for type annotations (JSR 308)
  • preliminary support for Java modules (project Jigsaw / JSR 294)
  • support for 'package-info' and 'module-info' class files
  • support for Java serialization protocol (version 2 only)
  • new implementation for i/o operations
  • improved manual
  • Java API has been removed
Version 1.4 (2010-02-06):
  • new 'StackState' module for stack/locals manipulation
  • new 'ControlFlow' module for control flow information (as a graph)
  • new 'Code' module for computation of stack/locals from instructions
  • new '-flow' command-line switch to generate flow graph for a method
  • new '-generate-stack-infos' command-line switch to generate stack elements
  • switch to OCaml 3.11.2
  • bug #28: support for ocamlfind
  • bug #46: invalid padding size for switch instructions
  • bug #47: invalid handling of '@LineNumber'
Version 1.3 (2009-09-19):
  • new 'Traversal' module (mappers and iterators over class definitions)
  • handling of class file format versions
Version 1.2 (2009-04-17):
  • bug fix for LDC, LDC_W and INVOKEVIRTUAL instructions (results in a change in the definition of the Instruction.t type)
  • various fixes in Java sources (both code and documentation)
  • enhanced tests
  • now able to load all classes from the JDK 1.6
Version 1.1 (2008-11-09):
  • move from Java 1.5 to Java 1.6
  • support for stack frames (StackMapTable atribute)
  • support for Bisect coverage
  • bug fixes
Version 1.0 (2008-05-27):
  • enhanced tests
  • main OCaml module renamed from 'Barista' to 'BaristaLibrary'
  • Ant tasks
Version 1.0-beta (2008-02-29):
  • minor API changes
  • minor grammar changes
  • Java API
Version 1.0-alpha (2007-09-09):
  • first public version