|JVMTools: Extending the Mathematica system with all features of the JVM and/or .Net! Empowering the Mathematica user with the efficiency, speed, concurrency, platform-independence, and stability of the modern JVM HotSpot platform and/or .Net for true power-programming!
All functions at a glance:
|Write/edit/compile and immediately run Java, Scala, C# and F# code directly from Mathematica
||Code Compilation Examples|
|         Power Example: the n-queens problem||N-Queens Problem
|Extremely fast Combinatorial Optimization Functions:|
|         Traveling Salesman -- Introduction and Overview||TSP Intro|
|         Traveling Salesman -- Power Examples||TSP Power Examples|
|         Knapsack||Knapsack Examples|
|         Min Spanning Tree, Min Cost Flows: Kruskal, MooreBellmann,|
|Min Spanning Tree and Min Cost Flow Examples|
Browsers included in JavaTools:
Data Structures/Collections included in JavaTools:
JavaTools lets you write static Java methods in a Mathematica string and compile directly from Mathematica and then load back into Mathematica and execute from Mathematica as a symbol! That means you get the compiled speed of Java (as the execution environment is the Java virtual machine and not the Mathematica kernel!), while at the same time constructing the string of Java code in Mathematica! No need to program Java code in a separate IDE, no need to deploy separate .jar or .class files, do all the Java code directly from the Mathematica front-end (or the WorkBench)!
On .Net and mono systems C# and F# compilation is provided as well, not just Java.
JavaTools provides extremely fast and precise parallel American options valuations (along with Delta, Gamma, Theta) that, unlike the FinancialDerivative function introduced in Mathematica 8, can operate with discrete dividends. FinancialDerivative can handle only a dividend yield, which professional practitioners reject for short times to maturity due to poor precision. The American options functions in JavaTools use a thread pool from the concurrency framework in Java to execute parallel tasks simultaneously, which means your speed performance scales up as determined by Amdahl's Law. The execution is done with low-level Java/machine code, spawned over parallel threads, not with parallel kernels executing high-level Mathematica code! Note that standard Mathematica licensing terms are four parallel kernels, but the lowest level of scheduling activity is the thread, not a heavy-weight kernel process, therefore on hardware with more than 4 cores Mathematica alone leaves parallelism potential unused.
JavaTools contains state-of-the-art network flow optimization / graph theory functions and other minimization functions that beat the speed of the (symbolic) Mathematica implementations as well as other commercial codes by magnitudes. In fact, on several large-scale problems Mathematica is not even able to produce a result (even the latest version 8.0.4!), whereas JavaTools had no problem solving them fast. JavaTools can compute minimum spanning trees with thousands of nodes in milliseconds, and Traveling Salesman Problem instances with thousands of nodes in less than a minute -- usually to optimality!
JavaTools also contains functions for Calculus and Linear Algebra, which beat the Mathematica implementations. In fact, some of the Mathematica functions are broken.
With JavaTools the user has two functions similar to the (experimental, unfinished, and undocumented) Mathematica function TableView. Unlike with TableView, the data entered by the user can be stored in a symbol and is type-checked, to prevent data entry errors when entering data manually. The tables created with JavaTools' table view function can be customized, and formatted with user-defined alternating line background colors.
JavaTools provides Mathematica symbols for the data structures Stack, Queue, Deque, Set, BiMap, Multimap, and MultiSet, using the collections framework for Java as well as the Google Collections (now part of Google Guava) internally. Querying and manipulating these data structures is easy and fast, again entirely through Mathematica symbols, but executing in the Java VM!
JavaTools contains the Interactive Symbol Browser, which is a very convenient tool to quickly find symbols with a certain name, or that contain a certain name. In the filter field the user can enter parts of the expression or regex for instant, interactive filtering of Mathematica symbols. With thousands of standard symbols, thousands of package symbols, and hundreds or thousands of user symbols, this is a very time-efficient way to "browse" and search the symbols live and instantly.
JavaTools also contains the Interactive Expression Browser, which provides an interactive expression viewer for any Mathematica expression to make it easier to understand deeply nested expression trees. Every node can be expanded or collapsed, allowing the user to interactively study only those parts of the expression tree that are of interest and ignore the branches the user is not interested in.
Absolutely no Java or C# or F# programming skills are required to use JavaTools, as all Java functions are conveniently accessed through Mathematica symbols! However, all Java and .Net objects are fully exposed through their object references, so the advanced object-oriented programmer can easily manipulate these objects in a Java paradigm directly from Mathematica!