ようこそ、Raviプログラミング言語チュートリアルへ！RaviはLuaの方言であり、オプションの静的型付けとMIRによるJITコンパイラを備えています。
本チュートリアルでは、Raviの基本的な文法と機能を学ぶことができます。
Raviは、パフォーマンスの向上とプログラムの安全性を重視しながら、Luaの互換性を保ちつつ拡張されています。
非エキスパートのプログラマーにも使いやすい言語です。
このチュートリアルを通じて、Raviの基本的な概念と使い方を理解し、効果的なプログラミングを実現しましょう。
__TOC__ 
RaviはLuaの方言であり、オプションの静的型付けとMIR（Medium Internal Representation）によるJIT（Just-In-Time）コンパイラを備えています。
Raviは、Luaの拡張として設計されており、パフォーマンスの向上とプログラムの安全性を重視しながら、Luaの互換性を保ちつつ拡張されています。
Raviの名前はサンスクリット語で「太陽」を意味し、Luaの前身であるSol（ポルトガル語で「太陽」を意味する）から派生しています。
Raviには以下のような特徴があります:
オプションの静的型付け: Raviでは、変数や関数に静的な型情報を付けることができます。静的型付けにより、コンパイラやJITコンパイラがより効率的なコードを生成することができます。
MIR JITコンパイラ: RaviのJITコンパイラはMIRを使用しており、タイプ情報を活用してより高速な実行コードを生成します。MIRはコンパクトで効率的なバックエンドであり、Raviのパフォーマンスを向上させるために設計されています。
AOT（Ahead-of-Time）コンパイル: RaviはAOTコンパイルをサポートしており、ネイティブコードへのコンパイルが可能です。これにより、起動時間の短縮やパフォーマンスの向上が期待できます。
Lua 5.3との互換性: RaviはLua 5.3との高い互換性を持ち、既存のLuaコードを簡単に移植することができます。また、Luaの拡張として開発されているため、LuaのプログラムはそのままRaviでも実行可能です。
Raviを使用することで、以下のような利点が得られます:
パフォーマンスの向上: 静的型付けとJITコンパイラにより、Raviは高速な実行コードを生成し、実行時間を効率化します。特にタイプ情報が明示的に指定された場合、より効果的な最適化が行われます。
プログラムの安全性: 静的型付けにより、コンパイル時に型エラーを検出することができます。これにより、実行時の意図しないエラーやバグを事前に防ぐことができます。
Luaの拡張性: RaviはLuaの拡張として設計されており、既存のLuaコードを簡単に移植することができます。また、Luaの標準ライブラリやエコシステムをそのまま利用することができます。
Raviのユースケースには以下のようなものがあります:
パフォーマンスが重要なアプリケーション: Raviは高速な実行コードを生成するため、パフォーマンスが重要なアプリケーションやシステムに適しています。例えば、ゲーム開発や科学技術計算などが挙げられます。
プロトタイピングとスクリプト: Luaの特徴である柔軟性と簡潔さを保ちつつ、パフォーマンスを向上させるためにRaviを使用することができます。プロトタイピングやスクリプト開発において、高速な実行速度と安全性が求められる場合に便利です。
モジュール化されたコンポーネント: Raviはモジュール化されたコンポーネントの開発にも適しています。静的型付けと互換性の高いLuaコードベースにより、再利用性の高いコンポーネントを簡単に作成できます。
このチュートリアルでは、Raviの基本から応用までを学ぶためのステップバイステップのガイドを提供します。次の章では、Raviのインストールとセットアップについて説明します。
Raviを使うためには、まず必要な環境をセットアップする必要があります。この章では、Raviのダウンロードとインストール方法、システム要件と依存関係、そして環境設定とパスの設定について説明します。
Raviは、GitHubでソースコードが公開されているので( https://github.com/dibyendumajumdar/ravi/tree/1.0-beta11 )、clone してビルドします。
RaviはLuaの拡張として開発されており、いくつかの機能を追加しています。以下にRaviのLuaからの拡張のいくつかを示します。
オプションの静的型付け（Optional Static Typing）: Raviでは、ローカル変数や関数のパラメータに型を付けることができます。静的型付けにより、コンパイル時に変数の型をチェックすることができます。
defer文: Raviでは、defer文を使用して遅延実行を行うことができます。defer文は、あるスコープから抜ける際に実行される無名のクロージャを作成します。通常の終了やエラーが発生した場合でも、defer文で指定した処理が確実に実行されます。
組み込みC言語サポート: Raviでは、C言語を埋め込むことができます。LuaからC言語の関数を呼び出したり、C言語からLuaの関数を呼び出したりすることができます。
JITコンパイルとAOTコンパイルのサポート: Raviは、JIT（Just-in-Time）コンパイルおよびAOT（Ahead-of-Time）コンパイルの両方をサポートしています。JITコンパイルは実行時にコードを最適化し、高速化します。AOTコンパイルは事前にコードをコンパイルし、実行時に高速に実行することができます。
バイトコードJIT API: RaviはバイトコードJIT APIを提供しており、バイトコードを最適化するための柔軟なインタフェースを提供しています。
コンパイラフレームワークJIT: RaviにはコンパイラフレームワークJITが組み込まれており、Luaコードを高速に実行するための最適化手法を提供しています。
世代ごとのガベージコレクション: RaviはLua 5.4から取り入れられた世代ごとのガベージコレクションをサポートしています。これにより、メモリ管理が改善され、パフォーマンスが向上します。
C APIの拡張: RaviはLuaのC APIを拡張しており、Cプログラマーがより効率的にLuaの値を操作できるようにしています。
これらはRaviが提供する一部の機能です。RaviはLuaの拡張として開発されているため、Luaの既存のコードと互換性があり、パフォーマンスの向上や追加の機能を利用することができます。