13 Ring は画期的で実用性のある汎用マルチパラダイム言語です。 C/C++ プロジェクトへの組み込み、
14 C/C++ コードにより拡張・単体プログラミング言語にもなります。
15 命令型、手続き型、オブジェクト指向、関数型、メタプログラミング、入れ子構造による宣言型、および自然言語のプログラミング・パラダイムに対応しています。
16 Ring は移植性 (Windows, Linux, macOS, Android など) があり、小規模、柔軟かつ高速な設計の動的プログラミング言語 (動的型付け、および弱い型付け) です。コンソール、GUI、ウェブ、ゲーム、およびモバイル・アプリケーションを作成できます。
17 ソースコードをバイトコードへコンパイル後に、
18 Ring コンパイラで単体プログラムとして統合を行い、 Ring 仮想計算機で実行します。
20 さて、 Ring 言語の設計と実装の背景における目標を議論しましょう。
28 2011年11月に、新しいバージョンの `Programming Without Coding Technology (PWCT) <http://doublesvsoop.sf.net/>`_ ソフトウェアを白紙段階から開発することを検討し始めました。
30 ウェブとモバイル開発に対応したマルチプラットフォーム版 Programming Without Coding Technology (PWCT) の作成に興味がありました。
31 Programming Without Coding Technology (PWCT) のソースコードの大部分は Microsoft Visual FoxPro (VFP) で記述しています。
32 ソフトウェアにはコンポーネント作成用スクリプト言語 RPWI が付属しており、
33 Harbour, C, Supernova および Python などのプログラミング言語のコード生成に対応しています。
35 求めているものは、新発想の異次元プログラミング言語です (画期的、即戦力、単純明快、柔軟。さらに知性的な実装)。
36 マルチプラットフォーム対応、より優れた実行性能、コンポーネントを記述できるスクリプト言語であり、
37 開発環境の構築にも耐え、多種多様なアプリケーションを開発できるものです。さらに、大規模アプリケーションの開発用に設計してあり、ガベージコレクター (GC) 制御の良くできている高速で生産性の高い小規模な動的プログラミング言語です。
39 そのため、複数のプログラミング言語を併用するのではなく、開発環境の作成、
40 コンポーネント用スクリプトの記述、およびアプリケーション作成用言語を一本に絞ることを決めました。
42 C, C++, Java, C#, Lua, PHP, Python と Ruby などのプログラミング言語を調査しました。
44 まず、 C, C++ は違います。初心者や専門家向けの使いやすいビジュアル・プログラミング環境、さらに上述の言語よりも高水準の生産性が欲しいのです。
46 Java と C# (Mono) は違います。静的型付け、マルチプラットフォームですが、膨大なクラスとオブジェクト指向を強要する冗長なプログラミング言語は不適切です。
50 PHP は違います。シンタックスは C と非常に似ていますが、複雑怪奇なウェブ開発用言語です。
52 Python と Ruby は惜しいのですが、規模、動作速度、生産性に不満があります。
53 また、英数大小文字を区別します。リストのインデックス計数は 0 から始まり、関数は呼び出し前に定義する必要があります。
54 Ruby はオブジェクト指向とメッセージパッシングを多用するため、必然的に実行性能は低下します。 Python のシンタックス (インデント、self の使用、pass & _) は目標としているものではありません。
56 とはいえ、前述のプログラミング言語は、全て成功を収めたものであり、対象となる問題解決領域では非常に優れたものです。
60 pair: はじめに; Ring 以外のプログラミング言語
63 =============================
65 Ring は下記のプログラミング言語の影響を受けています。
78 pair: はじめ; Matz への心よりの感謝
83 Matz (まつもとゆきひろ - プログラミング言語 Ruby の原作者) 様へ Ring について広めていただいたことを心より感謝します。
85 .. image:: matzring.png
86 :alt: プログラミング言語 Ring に関するまつもとゆきひろ氏のツイート
94 2013年09月より Ring の設計と実装を開始し、21ヶ月後の2015年05月頃に Ring コンパイラと仮想計算機は完成しました。
96 その後、再検証で三ヶ月間を費やしました。優れたテストを記述してから各種不具合の修正を続け、
97 2015年08月末までに不具合の修正を完了しました。
98 大量のテストを用意して自動化することは、製品の安定化で大いに役に立ちました。
100 2015年09月12日に取扱説明書の大部分を執筆しました。
101 Facebook ページへアラビア語の記事を投稿して、広報活動を開始しました (Ring の公開前に、手短な説明を読んでいただき、 Ring の考えに興味をもった貢献者を探すためです)。
102 同日、開発貢献に興味がある開発者、そして友人たちから多数の電子メールを受け取りました!
104 2016年01月25日に Ring 1.0 を公開しました。わずか数日で数千回のダウンロードを達成しました! そして、世界中の開発者が学習と使用をはじめました。Ring の発展と成功は、皆様から寄せられた声のお蔭でございます。また、皆様から Ring を用いて短時間で作成した素晴らしい用例をいただきました。
106 2017年12月07日に Ring 1.6 取扱説明書の日本語訳作業が isVowel (旧名義: めぐみ発動機 / GreenWing) により開始されました。 Ring 1.0 の公開から約二年半後となる翌年の 2018年06月03日には、非公式ウェブサイト (Geocities Japan) と Ring 1.7 の日本語訳が公開されました。翌年の 2019年02月05日には OSDN への非公式ウェブサイト移転、同月10日には日本語キット化のテスト版が公開されました。そして、同月22日には、日本語サイトへのアクセス件数が 5,000件 を超えました。
108 2018年10月06日に公開の Ring 1.9 では Heroku に対応し、クラウド・アプリケーションも開発可能です。
110 2019年01月25日に公開の Ring 1.10 ではパッケージマネージャーが導入されました。
112 2019年09月15日に公開の Ring 1.11 では Allegro, SDL に加えて 2D/3D ゲームプログラミングライブラリである `RayLib <https://www.raylib.com/>`_ に対応しました。また、ZeroLibの導入により、リストと文字列で 0 ベースのインデックスを使用できるようになりました。
114 2020年01月25日に公開の Ring 1.12 では RayLib のサンプルソース集強化、 Load Again コマンドによるソースコードに記述された定数の動的再読み込みに対応しました。また、記念すべきことに Ring は初公開から今年で五周年となりました。今後ともご愛顧いただけますよう宜しくお願い致します。
116 Ring は、今後広く使われるプログラミング言語と大成すべく着実に成長を続けています。
120 * Ring 1.0 (2016年01月25日)
122 * Ring 1.1 (2016年10月06日)
124 * Ring 1.2 (2017年01月25日)
126 * Ring 1.3 (2017年05月15日)
128 * Ring 1.4 (2017年06月29日)
130 * Ring 1.5 (2017年08月21日)
132 * Ring 1.6 (2017年11月30日)
134 * Ring 1.7 (2018年01月25日)
136 * Ring 1.8 (2018年06月25日)
138 * Ring 1.9 (2018年10月06日)
140 * Ring 1.10 (2019年01月25日)
142 * Ring 1.11 (2019年09月15日)
144 * Ring 1.12 (2020年01月25日)
154 .. tip:: Ring は即戦力です。今すぐ製品開発を行うことができます!
156 * 自由なオープンソース (MIT ライセンス)
157 * ハイブリッド実装 (コンパイラ + 仮想計算機)
158 * オブジェクト指向プログラミングによる宣言型プログラミング
159 * オブジェクト指向プログラミングによる自然言語プログラミング
161 * 三種類の異なる記法によるコード記述、および記法を自作可能
162 * 柔軟性のあるシンタックス (言語のキーワードと演算子は変更可能)
163 * 言語キーワードは英語から他の外国語 (アラビア語、フランス語、日本語など) へ翻訳可能
164 * ステートメントへの明示的な end が不要であるため、シンタックスは簡潔です (; や ENTER は不要)
165 * 括弧 { } でオブジェクトへのアクセス、および変数、属性としてメソッド、関数を使えます。
166 * 透過型実装 (プログラムごとに字句、構文、およびバイトコードを表示)
167 * ビジュアル実装 - ビジュアル言語 Programming Without Coding Technology (PWCT) で実装
168 * ANSI C で記述 (コード生成 + 手書きのコードと同一記法)
170 * コンパイラ + 仮想計算機 (20,000 行の C コード)
171 * そのほか 500,000 行のコードはライブラリ関連です!
172 * 移植性 (Windows, Linux および macOS, Android など)
176 * 弱い型付け (数値と文字列間でのみ自動変換)
177 * レキシカルスコープ (グローバル、ローカル、およびオブジェクトのステート)
178 * 関数内変数のデフォルトスコープ (ローカル)
179 * 関数外変数のデフォルトスコープ (グローバル)
180 * ライブラリごと、またはサブプロジェクトで独立したグローバルスコープがあります。
181 * ガベージコレクター - メモリの自動管理 (エスケープ解析と参照カウント)
182 * ほとんどの場合 (90%)、エスケープ解析によりガベージコレクターの実行を不要にしています (高速です)。
185 * For in では値ではなく参照により項目を取得するため、項目を読み書きできます
186 * exit による一階層以上のループからの脱出 (小規模プログラミングに限り使用してください)
188 * メイン関数 (オプション扱い - グローバルスコープの使用回避)
189 * 定義前の関数呼び出し (トップダウンプログラミング)
192 * インデックスによる文字列内の文字へのアクセス (読み書き)
194 * クラス、パッケージ、関数には end キーワードは不要
195 * 範囲演算子。用例: 1:10 および \"a\":\"z\"
196 * 第一級変数、リスト、オブジェクトと関数
197 * 値による格納、リストのコピー、オブジェクト (深いコピー)
202 * Setter/Getter (オプション扱い)
203 * プライベートステート (オプション扱い)
212 * 明瞭なプログラム構造 (ステートメントの後に関数、そしてパッケージとクラス)
214 * Eval() によるアプリケーション実行中のコード実行
215 * 8-bit クリーン設計であるためバイナリデータは直接処理します。
221 * データベースへの対応 (ODBC, SQLite, MySQL および PostgreSQL)
223 * インターネット関数 (LibCurl)
225 * CGI ライブラリ (Ring にて記述)
237 * ユーザーによる用例 (登録、ログインと確認)
239 * クラウド経由によるウェブアプリケーションの配布 (Heroku)
240 * C/C++ による拡張機能の使用 (単純明快なAPI)
242 * Ring プログラムへの Ring 組み込み
243 * 手軽に C/C++ ライブラリと接続するためのコード生成器 (Ring にて記述) を標準装備。
245 * Allegro に対応するために RingAllegro の作成で使用
246 * LibSDL に対応するために RingLibSDL の作成で使用
247 * Qt に対応するために RingQt の作成で使用
249 * デスクトップとモバイル用の 2D ゲーム作成 (Allegro ライブラリ)
251 * シンプルな 2D ゲームエンジンを添付
255 * デスクトップとモバイル用の GUI アプリケーションの作成 (Qt フレームワーク)。
256 * コードエディタ (Ring Notepad) とフォームデザイナーを搭載した統合開発環境 (IDE)
257 * RingREPL (Read-Eval-Print-Loop)
260 * アプリケーションの配布用に Ring2EXE を添付
262 * インタプリタ (VM) 全体の停止 (global interpreter (VM) lock) は起こりません (GIL なし) - これはスレッドと平行性において優れています (高速化)
263 * RingPM (パッケージ管理プログラム)
264 * 豊富なサンプルソースとアプリケーション
275 http://ring-lang.net/
281 Copyright (c) Mahmoud Fayed
283 Permission is hereby granted, free of charge, to any person obtaining a copy
284 of this software and associated documentation files (the "Software"), to deal
285 in the Software without restriction, including without limitation the rights
286 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
287 copies of the Software, and to permit persons to whom the Software is
288 furnished to do so, subject to the following conditions:
290 The above copyright notice and this permission notice shall be included in all
291 copies or substantial portions of the Software.
293 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
294 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
295 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
296 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
297 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
298 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE