OSDN Git Service

【更新内容】
[ring-lang-081/ring.git] / docs / ja-jp / source / introduction.txt
1 .. index:: 
2         single: はじめに; はじめに
3
4 ========
5 はじめに
6 ========
7
8 .. image:: thering.jpg
9         :alt: プログラミング言語 Ring
10
11 プログラミング言語 Ring へようこそ!
12
13 Ring は画期的で実用性のある汎用マルチパラダイム言語です。 C/C++ プロジェクトへの組み込み、 
14 C/C++ コードにより拡張・単体プログラミング言語にもなります。
15 命令型、手続き型、オブジェクト指向、関数型、メタプログラミング、入れ子構造による宣言型、および自然言語のプログラミング・パラダイムに対応しています。
16 Ring は移植性 (Windows, Linux, macOS, Android など) があり、小規模、柔軟かつ高速な設計の動的プログラミング言語 (動的型付け、および弱い型付け) です。コンソール、GUI、ウェブ、ゲーム、およびモバイル・アプリケーションを作成できます。
17 ソースコードをバイトコードへコンパイル後に、
18 Ring コンパイラで単体プログラムとして統合を行い、 Ring 仮想計算機で実行します。
19
20 さて、 Ring 言語の設計と実装の背景における目標を議論しましょう。
21
22 .. index:: 
23         pair: はじめに; 動機
24
25 動機
26 ====
27
28 2011年11月に、新しいバージョンの `Programming Without Coding Technology (PWCT) <http://doublesvsoop.sf.net/>`_ ソフトウェアを白紙段階から開発することを検討し始めました。
29
30 ウェブとモバイル開発に対応したマルチプラットフォーム版 Programming Without Coding Technology (PWCT)  の作成に興味がありました。
31 Programming Without Coding Technology (PWCT) のソースコードの大部分は Microsoft Visual FoxPro (VFP) で記述しています。
32 ソフトウェアにはコンポーネント作成用スクリプト言語 RPWI が付属しており、
33 Harbour, C, Supernova および Python などのプログラミング言語のコード生成に対応しています。
34
35 求めているものは、新発想の異次元プログラミング言語です (画期的、即戦力、単純明快、柔軟。さらに知性的な実装)。
36 マルチプラットフォーム対応、より優れた実行性能、コンポーネントを記述できるスクリプト言語であり、
37 開発環境の構築にも耐え、多種多様なアプリケーションを開発できるものです。さらに、大規模アプリケーションの開発用に設計してあり、ガベージコレクター (GC) 制御の良くできている高速で生産性の高い小規模な動的プログラミング言語です。
38
39 そのため、複数のプログラミング言語を併用するのではなく、開発環境の作成、
40 コンポーネント用スクリプトの記述、およびアプリケーション作成用言語を一本に絞ることを決めました。
41
42 C, C++, Java, C#, Lua, PHP, Python と Ruby などのプログラミング言語を調査しました。
43
44 まず、 C, C++ は違います。初心者や専門家向けの使いやすいビジュアル・プログラミング環境、さらに上述の言語よりも高水準の生産性が欲しいのです。
45
46 Java と C# (Mono) は違います。静的型付け、マルチプラットフォームですが、膨大なクラスとオブジェクト指向を強要する冗長なプログラミング言語は不適切です。
47
48 Lua は小規模で高速ですが機能不足です。
49
50 PHP は違います。シンタックスは C と非常に似ていますが、複雑怪奇なウェブ開発用言語です。
51
52 Python と Ruby は惜しいのですが、規模、動作速度、生産性に不満があります。
53 また、英数大小文字を区別します。リストのインデックス計数は 0 から始まり、関数は呼び出し前に定義する必要があります。
54 Ruby はオブジェクト指向とメッセージパッシングを多用するため、必然的に実行性能は低下します。 Python のシンタックス (インデント、self の使用、pass & _) は目標としているものではありません。
55
56 とはいえ、前述のプログラミング言語は、全て成功を収めたものであり、対象となる問題解決領域では非常に優れたものです。
57
58
59 .. index:: 
60         pair: はじめに; Ring 以外のプログラミング言語
61
62 Ring 以外のプログラミング言語
63 =============================
64
65 Ring は下記のプログラミング言語の影響を受けています。
66
67 * Lua
68 * Python
69 * Ruby
70 * C
71 * C#
72 * BASIC
73 * QML
74 * xBase
75 * Supernova
76
77 .. index:: 
78         pair: はじめ; Matz への心よりの感謝
79
80 Matz への心よりの感謝
81 =====================
82
83 Matz (まつもとゆきひろ - プログラミング言語 Ruby の原作者) 様へ Ring について広めていただいたことを心より感謝します。
84
85 .. image:: matzring.png
86         :alt: プログラミング言語 Ring に関するまつもとゆきひろ氏のツイート
87
88 .. index:: 
89         pair: はじめに; 歴史
90
91 歴史
92 ====
93
94 2013年09月より Ring の設計と実装を開始し、21ヶ月後の2015年05月頃に Ring コンパイラと仮想計算機は完成しました。
95
96 その後、再検証で三ヶ月間を費やしました。優れたテストを記述してから各種不具合の修正を続け、
97 2015年08月末までに不具合の修正を完了しました。
98 大量のテストを用意して自動化することは、製品の安定化で大いに役に立ちました。
99
100 2015年09月12日に取扱説明書の大部分を執筆しました。
101 Facebook ページへアラビア語の記事を投稿して、広報活動を開始しました (Ring の公開前に、手短な説明を読んでいただき、 Ring の考えに興味をもった貢献者を探すためです)。
102 同日、開発貢献に興味がある開発者、そして友人たちから多数の電子メールを受け取りました!
103
104 2016年01月25日に Ring 1.0 を公開しました。わずか数日で数千回のダウンロードを達成しました! そして、世界中の開発者が学習と使用をはじめました。Ring の発展と成功は、皆様から寄せられた声のお蔭でございます。また、皆様から Ring を用いて短時間で作成した素晴らしい用例をいただきました。
105
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件 を超えました。
107
108 2018年10月06日に公開の Ring 1.9 では Heroku に対応し、クラウド・アプリケーションも開発可能です。
109
110 2019年01月25日に公開の Ring 1.10 ではパッケージマネージャーが導入されました。
111
112 2019年09月15日に公開の Ring 1.11 では Allegro, SDL に加えて 2D/3D ゲームプログラミングライブラリである `RayLib <https://www.raylib.com/>`_ に対応しました。また、ZeroLibの導入により、リストと文字列で 0 ベースのインデックスを使用できるようになりました。
113
114 2020年01月25日に公開の Ring 1.12 では RayLib のサンプルソース集強化、 Load Again コマンドによるソースコードに記述された定数の動的再読み込みに対応しました。また、記念すべきことに Ring は初公開から今年で五周年となりました。今後ともご愛顧いただけますよう宜しくお願い致します。
115
116 Ring は、今後広く使われるプログラミング言語と大成すべく着実に成長を続けています。
117
118 公開履歴:
119
120 * Ring 1.0  (2016年01月25日)
121
122 * Ring 1.1  (2016年10月06日)
123
124 * Ring 1.2  (2017年01月25日)
125
126 * Ring 1.3  (2017年05月15日)
127
128 * Ring 1.4  (2017年06月29日)
129
130 * Ring 1.5  (2017年08月21日)
131
132 * Ring 1.6  (2017年11月30日)
133
134 * Ring 1.7  (2018年01月25日)
135
136 * Ring 1.8  (2018年06月25日)
137
138 * Ring 1.9  (2018年10月06日)
139
140 * Ring 1.10 (2019年01月25日)
141
142 * Ring 1.11 (2019年09月15日)
143
144 * Ring 1.12 (2020年01月25日)
145
146 .. index:: 
147         pair: はじめに; 特徴
148
149 特徴
150 ====
151
152 このような特徴が Ring にあります。
153
154 .. tip:: Ring は即戦力です。今すぐ製品開発を行うことができます!
155
156 * 自由なオープンソース (MIT ライセンス)
157 * ハイブリッド実装 (コンパイラ + 仮想計算機)
158 * オブジェクト指向プログラミングによる宣言型プログラミング
159 * オブジェクト指向プログラミングによる自然言語プログラミング
160 * 自然言語プログラミング・ライブラリ
161 * 三種類の異なる記法によるコード記述、および記法を自作可能
162 * 柔軟性のあるシンタックス (言語のキーワードと演算子は変更可能)
163 * 言語キーワードは英語から他の外国語 (アラビア語、フランス語、日本語など) へ翻訳可能
164 * ステートメントへの明示的な end が不要であるため、シンタックスは簡潔です (; や ENTER は不要)
165 * 括弧 { } でオブジェクトへのアクセス、および変数、属性としてメソッド、関数を使えます。
166 * 透過型実装 (プログラムごとに字句、構文、およびバイトコードを表示) 
167 * ビジュアル実装 - ビジュアル言語 Programming Without Coding Technology (PWCT) で実装
168 * ANSI C で記述  (コード生成 + 手書きのコードと同一記法)
169 * 小規模プログラミング言語
170         * コンパイラ + 仮想計算機 (20,000 行の C コード)
171         * そのほか 500,000 行のコードはライブラリ関連です!
172 * 移植性 (Windows, Linux および macOS, Android など)
173 * コメント (一行と複数行)
174 * 英数大小文字同一視
175 * 動的型付け
176 * 弱い型付け (数値と文字列間でのみ自動変換)
177 * レキシカルスコープ (グローバル、ローカル、およびオブジェクトのステート)
178 * 関数内変数のデフォルトスコープ (ローカル)
179 * 関数外変数のデフォルトスコープ (グローバル)
180 * ライブラリごと、またはサブプロジェクトで独立したグローバルスコープがあります。
181 * ガベージコレクター - メモリの自動管理 (エスケープ解析と参照カウント)
182 * ほとんどの場合 (90%)、エスケープ解析によりガベージコレクターの実行を不要にしています (高速です)。
183 * 構造化プログラミング
184 * 豪華な制御構造と演算子
185 * For in では値ではなく参照により項目を取得するため、項目を読み書きできます
186 * exit による一階層以上のループからの脱出 (小規模プログラミングに限り使用してください)
187 * 手続き、関数
188 * メイン関数 (オプション扱い - グローバルスコープの使用回避)
189 * 定義前の関数呼び出し (トップダウンプログラミング)
190 * 再帰処理
191 * 複数行リテラル
192 * インデックスによる文字列内の文字へのアクセス (読み書き)
193 * リストのインデックスは 1 から開始
194 * クラス、パッケージ、関数には end キーワードは不要
195 * 範囲演算子。用例: 1:10 および \"a\":\"z\"
196 * 第一級変数、リスト、オブジェクトと関数
197 * 値による格納、リストのコピー、オブジェクト (深いコピー)
198 * 参照によるリスト、オブジェクト渡し
199 * オブジェクト指向への標準対応
200
201         * カプセル化
202         * Setter/Getter (オプション扱い)
203         * プライベートステート (オプション扱い)
204         * インスタンス化
205         * 多態性
206         * コンポジション
207         * 継承 (単一継承)
208         * 演算子のオーバーロード
209         * パッケージ
210
211 * リフレクションとメタプログラミング
212 * 明瞭なプログラム構造 (ステートメントの後に関数、そしてパッケージとクラス)
213 * 例外処理
214 * Eval() によるアプリケーション実行中のコード実行
215 * 8-bit クリーン設計であるためバイナリデータは直接処理します。
216 * I/O 命令
217 * 算術関数
218 * 文字列関数
219 * リスト関数
220 * ファイル処理関数
221 * データベースへの対応 (ODBC, SQLite, MySQL および PostgreSQL)
222 * セキュリティ関数 (OpenSSL)
223 * インターネット関数 (LibCurl)
224 * Zip ファイル処理関数
225 * CGI ライブラリ (Ring にて記述)
226
227         * HTTP Get
228         * HTTP Post
229         * ファイルのアップロード
230         * クッキー
231         * URL エンコード
232         * HTML テンプレート
233         * HTML 特殊文字
234         * 関数を使用した HTML の生成
235         * クラスを使用した HTML の生成
236         * CRUD の用例 (MVC を使用)
237         * ユーザーによる用例 (登録、ログインと確認)
238
239 * クラウド経由によるウェブアプリケーションの配布 (Heroku)
240 * C/C++ による拡張機能の使用 (単純明快なAPI)
241 * C/C++ プログラムへの組み込み
242 * Ring プログラムへの Ring 組み込み
243 * 手軽に C/C++ ライブラリと接続するためのコード生成器 (Ring にて記述) を標準装備。
244
245         * Allegro に対応するために RingAllegro の作成で使用
246         * LibSDL に対応するために RingLibSDL の作成で使用
247         * Qt に対応するために RingQt の作成で使用
248
249 * デスクトップとモバイル用の 2D ゲーム作成 (Allegro ライブラリ)
250 * RingLibSDL 拡張機能
251 * シンプルな 2D ゲームエンジンを添付
252 * RingOpenGL 拡張機能
253 * RingFreeGLUT 拡張機能
254 * RingRayLib 拡張機能
255 * デスクトップとモバイル用の GUI アプリケーションの作成 (Qt フレームワーク)。
256 * コードエディタ (Ring Notepad) とフォームデザイナーを搭載した統合開発環境 (IDE)
257 * RingREPL (Read-Eval-Print-Loop)
258 * トレースとデバッグ
259 * 型ヒントライブラリ
260 * アプリケーションの配布用に Ring2EXE を添付
261 * RingLibuv 拡張機能
262 * インタプリタ (VM) 全体の停止 (global interpreter (VM) lock) は起こりません (GIL なし) - これはスレッドと平行性において優れています (高速化)
263 * RingPM (パッケージ管理プログラム)
264 * 豊富なサンプルソースとアプリケーション
265 * 完成度の高い取扱説明書
266
267 .. index:: 
268         pair: はじめに; ライセンス
269
270 ライセンス
271 ==========
272
273 プログラミング言語 Ring
274
275 http://ring-lang.net/
276
277 Version 1.12
278
279 MIT ライセンス (MIT)
280
281 Copyright (c) Mahmoud Fayed
282
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:
289
290 The above copyright notice and this permission notice shall be included in all
291 copies or substantial portions of the Software.
292
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
299 SOFTWARE.
300