CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-graalvm-sdk--graal-sdk

GraalVM Standard Development Kit providing APIs for polyglot language embedding, native AOT compilation, memory-efficient collections, low-level memory access, JNI utilities, and native bridge communication.

Pending
Overview
Eval results
Files

config.mddocs/

Installation and Configuration

APIs for discovering GraalVM installation paths, version information, and managing configuration options across languages and tools.

Capabilities

GraalVM Installation Discovery

Programmatic access to GraalVM installation paths and metadata for runtime configuration.

/**
 * Abstract base class for finding GraalVM installation paths and metadata
 */
public abstract class HomeFinder {
    /** Get singleton instance for current environment */
    public static HomeFinder getInstance();
    
    /** Get GraalVM home directory path */
    public abstract String getHomeFolder();
    
    /** Get GraalVM version information */
    public abstract Version getVersion();
    
    /** Get map of language ID to installation path */
    public abstract Map<String, String> getLanguageHomes();
    
    /** Get map of tool ID to installation path */
    public abstract Map<String, String> getToolHomes();
    
    /** Check if running in GraalVM distribution */
    public boolean isGraalVMDistribution();
    
    /** Get relative path within GraalVM installation */
    public String getRelativePath(String path);
}

Usage Examples:

import org.graalvm.home.*;

public class InstallationDiscovery {
    public void discoverGraalVM() {
        HomeFinder finder = HomeFinder.getInstance();
        
        // Get installation details
        String graalHome = finder.getHomeFolder();
        Version version = finder.getVersion();
        
        System.out.println("GraalVM Home: " + graalHome);
        System.out.println("Version: " + version.toString());
        
        // Check available languages
        Map<String, String> languages = finder.getLanguageHomes();
        for (Map.Entry<String, String> entry : languages.entrySet()) {
            System.out.println("Language " + entry.getKey() + 
                             " at: " + entry.getValue());
        }
        
        // Check available tools
        Map<String, String> tools = finder.getToolHomes();
        for (Map.Entry<String, String> entry : tools.entrySet()) {
            System.out.println("Tool " + entry.getKey() + 
                             " at: " + entry.getValue());
        }
        
        // Conditional behavior based on distribution
        if (finder.isGraalVMDistribution()) {
            // Use GraalVM-specific features
            String libPath = finder.getRelativePath("lib/graalvm");
        }
    }
}

Version Information

Comprehensive version handling with parsing, comparison, and metadata access.

/**
 * Version information with parsing and comparison support
 */
public final class Version implements Comparable<Version> {
    /** Get current GraalVM version */
    public static Version getCurrent();
    
    /** Create version from version numbers */
    public static Version create(int... versions);
    
    /** Parse version from string */
    public static Version parse(String versionString);
    
    /** Get major version number */
    public int getMajor();
    
    /** Get minor version number */
    public int getMinor();
    
    /** Get patch version number */
    public int getPatch();
    
    /** Get build number if available */
    public int getBuild();
    
    /** Get version qualifier (alpha, beta, rc, etc.) */
    public String getQualifier();
    
    /** Check if this is a snapshot version */
    public boolean isSnapshot();
    
    /** Check if this is a release version */
    public boolean isRelease();
    
    /** Check if this is a development version */
    public boolean isDevelopment();
    
    /** Compare with another version */
    public int compareTo(Version other);
    
    /** Check if version is at least given version */
    public boolean isAtLeast(Version minimum);
    
    /** Check if version is older than given version */
    public boolean isOlderThan(Version maximum);
    
    /** Get string representation */
    public String toString();
    
    /** Get full version string with build info */
    public String getFullVersion();
}

Usage Examples:

public class VersionHandling {
    public void handleVersions() {
        // Get current version
        Version current = Version.getCurrent();
        System.out.println("Running on: " + current.toString());
        
        // Create and compare versions
        Version required = Version.create(21, 0, 0);
        Version latest = Version.parse("21.3.1-dev");
        
        if (current.isAtLeast(required)) {
            System.out.println("Version requirement satisfied");
        }
        
        if (latest.isSnapshot()) {
            System.out.println("Using development version");
        }
        
        // Version comparison
        if (current.compareTo(latest) < 0) {
            System.out.println("Newer version available: " + latest);
        }
        
        // Access version components
        System.out.println("Major: " + current.getMajor());
        System.out.println("Minor: " + current.getMinor());
        System.out.println("Patch: " + current.getPatch());
        
        if (current.getQualifier() != null) {
            System.out.println("Qualifier: " + current.getQualifier());
        }
    }
}

Option Management System

Type-safe configuration system for languages and tools with validation and metadata.

/**
 * Type-safe key for configuration options
 */
public final class OptionKey<T> {
    /** Get option value from option values */
    public T getValue(OptionValues values);
    
    /** Check if option has been explicitly set */
    public boolean hasBeenSet(OptionValues values);
    
    /** Get default value for this option */
    public T getDefaultValue();
    
    /** Get option type information */
    public OptionType<T> getType();
}

/**
 * Metadata describing a configuration option
 */
public final class OptionDescriptor {
    /** Create new option descriptor builder */
    public static OptionDescriptor.Builder newBuilder(OptionKey<?> key, String name);
    
    /** Get option name */
    public String getName();
    
    /** Get option key */
    public OptionKey<?> getKey();
    
    /** Get help text */
    public String getHelp();
    
    /** Get option category */
    public OptionCategory getCategory();
    
    /** Get option stability level */
    public OptionStability getStability();
    
    /** Check if option is deprecated */
    public boolean isDeprecated();
    
    /** Get deprecation message */
    public String getDeprecationMessage();
    
    /** Get allowed values if constrained */
    public Set<String> getAllowedValues();
}

/**
 * Builder for creating option descriptors
 */
public static final class OptionDescriptor.Builder {
    /** Set help text */
    public OptionDescriptor.Builder help(String help);
    
    /** Set option category */
    public OptionDescriptor.Builder category(OptionCategory category);
    
    /** Set stability level */
    public OptionDescriptor.Builder stability(OptionStability stability);
    
    /** Mark as deprecated with message */
    public OptionDescriptor.Builder deprecated(String message);
    
    /** Set allowed values */
    public OptionDescriptor.Builder allowedValues(String... values);
    
    /** Build option descriptor */
    public OptionDescriptor build();
}

Usage Examples:

import org.graalvm.options.*;

public class OptionManagement {
    // Define option keys
    public static final OptionKey<Integer> MAX_ITERATIONS = 
        new OptionKey<>(100);
    
    public static final OptionKey<String> OUTPUT_FORMAT = 
        new OptionKey<>("json");
    
    public static final OptionKey<Boolean> ENABLE_PROFILING = 
        new OptionKey<>(false);
    
    public void demonstrateOptions() {
        // Create option descriptors
        OptionDescriptor maxIterDesc = OptionDescriptor
            .newBuilder(MAX_ITERATIONS, "max-iterations")
            .help("Maximum number of optimization iterations")
            .category(OptionCategory.USER)
            .stability(OptionStability.STABLE)
            .build();
        
        OptionDescriptor formatDesc = OptionDescriptor
            .newBuilder(OUTPUT_FORMAT, "output-format")
            .help("Output format for results")
            .category(OptionCategory.USER)
            .allowedValues("json", "xml", "text")
            .build();
        
        // Use with option values (context-dependent)
        OptionValues values = getOptionValues(); // Implementation-specific
        
        int maxIter = MAX_ITERATIONS.getValue(values);
        String format = OUTPUT_FORMAT.getValue(values);
        boolean profiling = ENABLE_PROFILING.getValue(values);
        
        // Check if explicitly set
        if (MAX_ITERATIONS.hasBeenSet(values)) {
            System.out.println("Max iterations explicitly set to: " + maxIter);
        } else {
            System.out.println("Using default max iterations: " + maxIter);
        }
    }
    
    // Placeholder for getting option values
    private OptionValues getOptionValues() {
        return null; // Implementation depends on context
    }
}

Option Collections

Collections for managing groups of options with iteration and lookup capabilities.

/**
 * Read-only access to option values
 */
public interface OptionValues {
    /** Get value for option key */
    <T> T get(OptionKey<T> optionKey);
    
    /** Check if option has been explicitly set */
    boolean hasBeenSet(OptionKey<?> optionKey);
    
    /** Get all option descriptors */
    OptionDescriptors getDescriptors();
}

/**
 * Collection of option descriptors with fast lookup
 */
public interface OptionDescriptors extends Iterable<OptionDescriptor> {
    /** Get descriptor by option name */
    OptionDescriptor get(String optionName);
    
    /** Check if option exists */
    boolean contains(String optionName);
    
    /** Get number of options */
    int size();
    
    /** Get iterator over all descriptors */
    Iterator<OptionDescriptor> iterator();
    
    /** Create empty option descriptors */
    static OptionDescriptors empty();
    
    /** Create from array of descriptors */
    static OptionDescriptors create(OptionDescriptor... descriptors);
    
    /** Create from list of descriptors */
    static OptionDescriptors create(List<OptionDescriptor> descriptors);
}

/**
 * Mutable map of option values
 */
public final class OptionMap {
    /** Create empty option map */
    public static OptionMap create();
    
    /** Put option value */
    public <T> void put(OptionKey<T> key, T value);
    
    /** Get option value */
    public <T> T get(OptionKey<T> key);
    
    /** Check if option is set */
    public boolean hasBeenSet(OptionKey<?> key);
    
    /** Remove option */
    public <T> T remove(OptionKey<T> key);
    
    /** Check if map is empty */
    public boolean isEmpty();
    
    /** Get number of options */
    public int size();
    
    /** Clear all options */
    public void clear();
    
    /** Convert to option values */
    public OptionValues asOptionValues();
}

Usage Examples:

public class OptionCollections {
    public void manageOptionCollections() {
        // Create option map
        OptionMap options = OptionMap.create();
        options.put(MAX_ITERATIONS, 200);
        options.put(OUTPUT_FORMAT, "xml");
        options.put(ENABLE_PROFILING, true);
        
        // Check values
        if (options.hasBeenSet(MAX_ITERATIONS)) {
            int iterations = options.get(MAX_ITERATIONS);
            System.out.println("Iterations: " + iterations);
        }
        
        // Create descriptors collection
        List<OptionDescriptor> descriptorList = Arrays.asList(
            OptionDescriptor.newBuilder(MAX_ITERATIONS, "max-iterations")
                .help("Maximum iterations")
                .category(OptionCategory.USER)
                .build(),
            OptionDescriptor.newBuilder(OUTPUT_FORMAT, "output-format")
                .help("Output format")
                .category(OptionCategory.USER)
                .build()
        );
        
        OptionDescriptors descriptors = OptionDescriptors.create(descriptorList);
        
        // Iterate over descriptors
        for (OptionDescriptor desc : descriptors) {
            System.out.println("Option: " + desc.getName() + 
                             " - " + desc.getHelp());
        }
        
        // Lookup specific descriptor
        OptionDescriptor formatDesc = descriptors.get("output-format");
        if (formatDesc != null) {
            System.out.println("Found format option: " + formatDesc.getHelp());
        }
    }
}

Option Types and Validation

Type system for option values with validation and conversion support.

/**
 * Type specification for option values with validation
 */
public final class OptionType<T> {
    /** Create default type for given class */
    public static <T> OptionType<T> defaultType(Class<T> clazz);
    
    /** Create user-defined type with validation */
    public static <T> OptionType<T> user(Class<T> clazz, Function<String, T> converter);
    
    /** Create user type with validation and constraints */
    public static <T> OptionType<T> user(Class<T> clazz, 
                                        Function<String, T> converter,
                                        Predicate<T> validator);
    
    /** Get the option value type class */
    public Class<T> getType();
    
    /** Convert string to typed value */
    public T convert(String value);
    
    /** Validate typed value */
    public boolean isValid(T value);
    
    /** Get validation error message */
    public String getValidationError(T value);
}

Usage Examples:

public class OptionTypes {
    public void defineCustomTypes() {
        // Custom integer type with range validation
        OptionType<Integer> positiveInt = OptionType.user(
            Integer.class,
            Integer::parseInt,
            value -> value > 0
        );
        
        // Custom enum type
        OptionType<LogLevel> logLevelType = OptionType.user(
            LogLevel.class,
            LogLevel::valueOf,
            value -> true
        );
        
        // File path type with existence validation
        OptionType<String> existingFile = OptionType.user(
            String.class,
            Function.identity(),
            path -> new File(path).exists()
        );
        
        // Use custom types in option keys
        OptionKey<Integer> threadCount = new OptionKey<>(
            1, // default value
            positiveInt
        );
        
        OptionKey<LogLevel> logLevel = new OptionKey<>(
            LogLevel.INFO,
            logLevelType
        );
    }
    
    enum LogLevel {
        ERROR, WARNING, INFO, DEBUG
    }
}

Types

// Option categorization
public enum OptionCategory {
    /** User-facing options visible in help */
    USER,
    
    /** Expert-level options for advanced users */
    EXPERT,
    
    /** Debug options for development */
    DEBUG
}

// API stability levels
public enum OptionStability {
    /** Stable API, safe for production use */
    STABLE,
    
    /** Experimental API, may change */
    EXPERIMENTAL
}

// Exception types
public class OptionException extends RuntimeException {
    public OptionException(String message);
    public OptionException(String message, Throwable cause);
}

public class OptionValidationException extends OptionException {
    public OptionValidationException(String optionName, String message);
    public String getOptionName();
}

Install with Tessl CLI

npx tessl i tessl/maven-org-graalvm-sdk--graal-sdk

docs

c-interop.md

collections.md

config.md

index.md

jni-utils.md

native-bridge.md

native-image.md

polyglot.md

substitutions.md

word.md

tile.json