Why Raku?

Why We Chose Raku for the Ditana Installer

Introduction

Raku serves as the foundational programming language for Ditana’s installation and configuration system. This choice was made after careful consideration of the unique requirements of a modern Linux distribution installer that needs to handle complex system configurations while maintaining code clarity and maintainability.

Raku in Ditana

The Ditana installer is driven by a comprehensive settings.json configuration file that contains all dialog definitions and system properties. What makes this approach particularly powerful is the ability to embed Raku code directly within the JSON structure. This allows for dynamic evaluation of system properties and sophisticated dependency management. For example:

{
    "name": "uefi",
    "detect": "'/sys/firmware/efi'.IO.d"
},
{
    "name": "avx2-available",
    "detect": "'/proc/cpuinfo'.IO.lines.first(*.contains('flags')).contains('avx2').so"
}

The embedded Raku expressions are evaluated at runtime, enabling dynamic system detection and configuration. More complex scenarios, such as managing dependencies between settings, are handled elegantly:

{
    "name": "kernel-option-wmsca",
    "dialog-name": "General Kernel Configuration",
    "short-description": "Maintain free memory (vm.watermark_scale_factor 10/3000 --> 125/3000)",
    "long-description": "Maintain free memory: Make the Kernel Swap Thread more aggressive in maintaining free memory...",
    "spdx-identifiers": "GPL-2.0-only",
    "default-value": "`install-zram`"
}

Why Raku for System Tools?

Raku excels in system tool development for several reasons:

  1. Shell-like Power: Raku provides bash-like capabilities for system interaction but within a modern programming language framework.

  2. Process Management: Superior handling of external processes and their output streams, crucial for system management tools.

  3. Text Processing: Advanced string manipulation and pattern matching capabilities, essential for processing configuration files and system outputs.

  4. Type Safety with Flexibility: Optional type checking provides safety where needed while maintaining flexibility for system-level operations.

  5. Cross-platform Compatibility: Runs effectively on various hardware platforms, from Raspberry Pi to multi-processor systems.

  6. Native Interface: Easy integration with existing system libraries through NativeCall, enabling direct interaction with system APIs.

These characteristics make Raku particularly suitable for system tools like the Ditana installer, where complex configuration management meets system-level operations.

Key Features of Raku

For a complete list of unique features, please refer to the official Raku FAQ. Here are the main aspects that make Raku an excellent choice for modern software development:

Programming Paradigm Flexibility

  • Supports procedural, object-oriented, and functional programming methodologies
  • Features powerful object orientation with classes and roles
  • Everything can be treated as an object, supporting inheritance, subtyping, and efficient code reuse

Language Design

  • Concise syntax enables shorter programs, and commonly used operations have shorter names for better readability.
  • Supports hyphens and Unicode characters in identifiers
  • Features rational numbers by default for precise numeric computation
  • Implements both lazy and eager evaluation, supporting infinite sequences
  • Offers enhanced regular expressions with named patterns
  • Uses Junctions for elegant multiple-condition checking
  • Maintains consistent syntax through invariable sigils

Modern Concurrency

  • Provides react, whenever, and supply keywords for event-driven programming
  • Supports implicit and explicit parallelism for multi-core systems
  • Implements a high-level, composable concurrency model

System Integration and Performance

  • Features extensible grammars for parsing
  • Supports full Unicode including Annex #29
  • Offers easy integration with C/C++ through NativeCall
  • Provides seamless integration with Perl and Python modules via Inline::Perl5 and Inline::Python
  • Includes garbage collection and phasers for resource management
  • Features JIT optimization for hot code paths
  • Supports introspection and metaprogramming

Comparison between Raku and other languages

For those interested in a comparison between Raku and other languages like Python, we recommend this insightful video:

Raku: The Programming Language You Didn’t Know You Needed