OSDN Git Service

1b438bd5559a35e60445e2ce52d15e42e6174a7f
[ring-lang-081/ring.git] / docs / ja-jp / source / whatisnew12.txt
1 .. index:: 
2         single: Ring 1.12 の変更履歴; はじめに
3
4 ====================
5 Ring 1.12 の変更履歴
6 ====================
7
8 Ring 1.12 公開版の新機能と変更点を学びます。
9
10 .. index:: 
11         pair: Ring 1.12 の変更履歴; 新機能と変更リスト
12
13 新機能と変更リスト
14 ==================
15
16 Ring 1.12 の新機能!
17
18 * Go ゲーム
19 * ASCII コード表アプリケーション
20 * BMI 計算機アプリケーション
21 * カレンダーアプリケーション
22 * ユリウス積日カレンダーアプリケーション
23 * チュートリアル: 数値を単語表記へ変換
24 * Load Again コマンド
25 * ring_state_filetokens() 関数
26 * 組込型オブジェクトファイルの生成
27 * RingRayLib の改良
28 * そのほかの改善
29
30 .. index:: 
31         pair: Ring 1.12 の変更履歴; Go ゲーム
32
33 Go ゲーム
34 =========
35
36 囲碁ゲームの実装です
37
38 .. image:: go.png
39         :alt: Go Game
40
41 .. index:: 
42         pair: Ring 1.12 の変更履歴; ASCII コード表アプリケーション
43
44 ASCII コード表アプリケーション
45 ==============================
46
47 ASCII コード表を表示するアプリケーションです。
48
49 .. image:: asciitable.png
50         :alt: ASCII Table
51
52 .. index:: 
53         pair: Ring 1.12 の変更履歴; BMI 計算機アプリケーション
54
55 BMI 計算機アプリケーション
56 ==========================
57
58 BMI を計算するだけのアプリケーションです。
59
60 .. image:: BMI.png
61         :alt: BMI 計算機
62
63 .. index:: 
64         pair: Ring 1.12 の変更履歴; カレンダーアプリケーション
65
66 カレンダーアプリケーション
67 ==========================
68
69 これは 2020 年カレンダーです。
70
71 .. image:: calendar.png
72         :alt: calendar
73
74 .. index:: 
75         pair: Ring 1.12 の変更履歴; ユリウス積日カレンダーアプリケーション
76
77 ユリウス積日カレンダーアプリケーション
78 ======================================
79
80 これはユリウス積日カレンダーアプリケーションです。
81
82 .. image:: juliancalendar.png
83         :alt: juliandaycalendar
84
85
86 .. index:: 
87         pair: Ring 1.12 の変更履歴; チュートリアル: 数値を単語表記へ変換
88
89 チュートリアル: 数値を単語表記へ変換
90 ====================================
91
92 フォルダ : ring/samples/other/number2words
93
94 .. image:: number2words.png
95         :alt: Number2Words
96
97 .. index:: 
98         pair: Ring 1.12 の変更履歴; Load Again コマンド
99
100 Load Again コマンド
101 ===================
102
103 Ring 1.12 から Load Again コマンドが使えるようになりました。
104
105 このコマンドを使うと Ring ソースファイルにある定数を何度でも読み込めます。
106
107 これはグローバル定数による翻訳用 Ring ソースファイルを使用するときに便利です。
108
109 用例:
110
111 下記はアラビア語と英語に対応するプロジェクトからの引用です。
112
113 english.ring と arabic.ring ファイルには翻訳で使う定数があります。
114
115 これらのファイルはプログラムの開始時に読み込まれます。
116
117 Load コマンドで同じファイルの再読み込みはできません。
118
119 Load コマンドは同じソースファイルを一度だけ読み込み、それ以降の読み込み指定は無理するからです。
120
121 しかし Load Again コマンドならできます。
122
123 よって、下記のコードを使うと実行中にファイルの再利用ができます。
124
125 .. code-block:: ring
126
127         func setLang nLanguage
128                 if C_ENV_DEFAULT_LANG = nLanguage
129                         return
130                 ok
131                 C_ENV_DEFAULT_LANG = nLanguage
132                 # 言語の変更
133                         switch nLanguage 
134                                 on C_TRANSLATION_ENGLISH
135                                         load again "translation/english.ring"
136                                 on C_TRANSLATION_ARABIC 
137                                         load again "translation/arabic.ring"
138                         off
139
140 .. index:: 
141         pair: Ring 1.12 の変更履歴; ring_state_filetokens() 関数
142
143 ring_state_filetokens() 関数
144 ============================
145
146 ring_state_filetokens() 関数は Ring ソースコードファイルにあるトークンを一括取得します。
147
148 .. code-block:: ring
149
150         C_FILENAME      = "test_tokens.ring"
151         C_WIDTH         = 12
152
153         # ファイルの書き込み
154                 write(C_FILENAME,'
155                                 see "Hello, World!"
156                                 ? 3*2+3
157                                 Name = "Ring"
158                                 ? Name
159         ')
160
161         # トークンの種類
162                 C_KEYWORD       = 0
163                 C_OPERATOR      = 1
164                 C_LITERAL       = 2
165                 C_NUMBER        = 3
166                 C_IDENTIFIER    = 4
167                 C_ENDLINE       = 5
168
169         # キーワードリスト
170         aKEYWORDS = ["IF","TO","OR","AND","NOT","FOR","NEW","FUNC", 
171         "FROM","NEXT","LOAD","ELSE","SEE","WHILE","OK","CLASS","RETURN","BUT", 
172         "END","GIVE","BYE","EXIT","TRY","CATCH","DONE","SWITCH","ON","OTHER","OFF", 
173         "IN","LOOP","PACKAGE","IMPORT","PRIVATE","STEP","DO","AGAIN","CALL","ELSEIF", 
174         "PUT","GET","CASE","DEF","ENDFUNC","ENDCLASS","ENDPACKAGE", 
175         "CHANGERINGKEYWORD","CHANGERINGOPERATOR","LOADSYNTAX"]
176
177         pState = ring_state_new()
178         aList = ring_state_filetokens(pState,C_FILENAME)
179         PrintTokens(aList)
180         ring_state_delete(pState)
181
182         func PrintTokens aList
183                 for aToken in aList
184                         switch aToken[1]
185                         on C_KEYWORD 
186                                 ? Width("Keyword",C_WIDTH) + ": "  + aKeywords[0+aToken[2]]
187                         on C_OPERATOR 
188                                 ? Width("Operator",C_WIDTH)  + ": " + aToken[2]
189                         on C_LITERAL 
190                                 ? Width("Literal",C_WIDTH)  + ": " + aToken[2]
191                         on C_NUMBER 
192                                 ? Width("Number",C_WIDTH)  + ": " + aToken[2]
193                         on C_IDENTIFIER 
194                                 ? Width("Identifier",C_WIDTH)  + ": " + aToken[2]
195                         on C_ENDLINE 
196                                 ? "EndLine"
197                         other
198                                 
199                         off
200                 next
201
202         func Width cText,nWidth
203                 return cText+copy(" ",nWidth-len(cText))
204
205 実行結果:
206
207 .. code-block:: none
208
209         EndLine
210         Keyword     : SEE
211         Literal     : Hello, World!
212         EndLine
213         Operator    : ?
214         Number      : 3
215         Operator    : *
216         Number      : 2
217         Operator    : +
218         Number      : 3
219         EndLine
220         Identifier  : name
221         Operator    : =
222         Literal     : Ring
223         EndLine
224         Operator    : ?
225         Identifier  : name
226         EndLine
227
228 .. index:: 
229         pair: Ring 1.12 の変更履歴; 組込型オブジェクトファイルの生成
230
231 組込型オブジェクトファイルの生成
232 ================================
233
234 -geo オプションはソースコードファイル (\*.ring) から組込型オブジェクトファイル (C ソースコード) を生成します。
235
236 コマンド:
237
238 .. code-block:: ring
239
240         ring test.ring -geo
241
242 このコマンドは最低でも 3 ファイルを生成します。
243
244 .. code-block:: ring
245
246         test.c
247         ringappcode.c
248         ringappcode.h
249
250 プロジェクトの規模により、大量のファイルを生成します。
251
252 生成後のファイルは Ring VM のバイトコードとして実行されます。
253
254 .. index:: 
255         pair: Ring 1.12 の変更履歴; RingRayLib の改良
256
257 RingRayLib の改良
258 =================
259
260 RingRayLib の新作サンプル集を追加しました。
261
262         * 音声の読み込みと再生
263         * テクスチャの入力
264         * 音楽のストリーミング再生
265         * 長方形の拡縮
266         * カラーパレット
267         * 視線追従
268         * 当たり判定の領域
269         * ベジェ曲線
270         * 画像生成
271         * 15パズルゲーム
272         * キュービックマップ
273
274 スクリーンショット:
275         
276 .. image:: raylib_cubicmap.png
277         :alt: RayLib の用例
278
279 .. index:: 
280         pair: Ring 1.12 の変更履歴; そのほかの改善
281
282 そのほかの改善
283 ==============
284
285 * 新作サンプル集
286         * ring/samples/other/Hex2UTF8.ring
287         * ring/samples/other/CalmoSoftPrimesTable.ring
288         * ring/samples/other/CalmoSoftTicTacToeGame.ring
289         * ring/samples/other/CalmoSoftSimpleGoGame.ring
290         * ring/samples/other/arabicmysql.ring 
291         * ring/samples/other/CalmoSoftExtraCube.ring
292         * ring/samples/other/DynamicCode/anonfunc.ring
293         * ring/samples/other/DynamicCode/deletethisfile.ring
294         * ring/samples/other/DynamicCode/modifythisfile.ring
295         * ring/samples/other/changesyntax/ArabicDemo.ring
296         * ring/samples/other/changesyntax/EnglishDemo.ring
297         * ring/samples/other/changesyntax/ChangeKeywordsArabic.ring
298         * ring/samples/other/changesyntax/ChangeKeywordsEnglish.ring
299         * ring/samples/other/changesyntax/pascal.ring
300         * ring/samples/other/hijridate.ring
301
302 * Ring ノートパッド - プロジェクトファイル - デスクトップ画面の幅による最小幅の設定
303 * Ring ノートパッド - 実行結果ウィンドウ - テキスト末尾へのカーソル移動
304 * Ring ノートパッド - 実行結果ウィンドウ - 改行を正しく表示できるようになりました
305 * フォームデザイナー - スタイルの改善 - 色と寸法の制御
306 * VideoMusicPlayer を RingQt 更新後に正常動作させるために更新
307 * FlappyBird3000 - Android での応答速度を向上
308 * Snake ゲーム : デフォルトのウィンドウ寸法を変更 (800x600)
309 * Maze ゲーム : デフォルトのウィンドウ寸法を変更 (800x600) 
310 * Maze ゲーム : プレイヤによるカメラ移動
311 * Maze ゲーム : ゲームをやり直すときに You Win メッセージを消去
312 * ゲームエンジン : ゲームウィンドウが生成できないときにエラーメッセージを表示
313 * Ring テスト : Linux と macOS 用のビルドファイル build.sh を追加
314 * RingQt : Qt 5.12.6 へ更新
315 * RingQt : QQMLEngine クラスの追加
316 * RingQt : Bluetooth 対応を除く RingQt ビルドファイルの追加
317 * RingQt : イベントコードの大きさを従来の 100 文字から 200 文字へ変更
318 * RingQt : RingQt クラスの章において Qt ドキュメントのリンクを修正
319 * RingQt for Android : Ring オブジェクトファイル (ringo) の実行用コードの改善
320 * RingQt アプリケーションを正常に配布できるようにするために Ring2EXE の RingQt 用の構成ファイルを更新
321 * コード生成器 : 構造体関数の生成時に関数名を英数小文字へ変換するようになりました
322 * OSCopyFolder() 関数でも下位フォルダのファイルをコピーできるようにするために更新
323 * fgetpos() 関数は想定した動作になるよう更新
324 * IsFunction() 関数は英数大小同一動作になるよう更新
325 * Space() 関数は空白文字列の出力を消去するよう更新
326 * Ring コンパイラ : Windows 用の Clang コンパイラのビルドファイル buildclang.bat を追加
327 * Ring VM - 内部ハッシュ関数の更新
328 * Ring VM - オブジェクトの新規作成時における pVM->aSetProperty 設定用コードの改善
329 * Ring VM - ステート管理用のコードを改善