Ring 1.15 の改訂履歴¶
Ring 1.15 (2021年09月24日) の新機能と変更点です。
新機能と変更リスト¶
Ring 1.15 の新機能!
新作の解説書 (アラビア語版)
Chess Endgame アプリケーション
Chess 3D (Qt3D サンプル)
Ring ノートパッドの改善
StdLib の改善
Better RingQt の改善
RingLibCurl の改善
Heroku (サポートの改善)
':' に続けて数値を記す
新作サンプル集
そのほかの改善
新作の解説書 (アラビア語版)¶
こちらはアラビア語で執筆された新しい解説書です。
本書では Ring によりアラビア語の詩歌を解析するプロジェクトの構築方法について扱います。

Chess Endgame アプリケーション¶
Chess Endgame はデータセットの可視化を行います
このアプリケーションは Microsoft Azure の機械学習により対戦結果の予測します。
スクリーンショット:



Chess 3D (Qt3D サンプル)¶
Qt3D の使いかたに関する用例です。
盤面の移動
駒の選択と移動
キャスリング (入城) - キングとルークを味方にする
アンパッサン (通過捕獲) による攻略
ポーン (歩兵) からクィーン (王妃) へのプロモーション (昇格)
Ring パッケージマネージャでサンプルをインストールするには
ringpm install Chess3D-Qt3D
ringpm run Chess3D-Qt3D
スクリーンショット:


ノートパッドの改善¶
イベント関数の自動的生成
フォームデザイナーでは、イベント関数名の判定時、

Ring ノートパッドは関数のコードを自動生成します

StdLib の改善¶
RandomList() 関数
文法:
RandomList(aList) --> リストの内容は無作為順序を用いた同一項目となります。
用例:
load "stdlib.ring"
aList = 1:5
? RandomList(aList)
RandomItem() 関数
リストから項目を選択します (無作為抽出による選出)。
文法:
RandomItem(aList) --> 項目
用例:
load "stdlib.ring"
aList = 1:5
? RandomItem(aList)
List2Code() 関数
リスト文字列内におけるダブルクォートの対応
整形処理の改善 - 項目の前にタブを追加
区切り文字として空文字列の使用に対応
StdLib - StdFile クラス- FTell() 関数 - コードの改善
RingQt の改善¶
QApp クラス - Clipboard() メソッド
QString2 クラス - 多数のメソッド
QMessageBox クラス - setIcon() メソッド
QByteArray クラス - Append() メソッド - バイナリデータへの対応
QByteArray クラス - Replace() メソッド - 複数のバージョンとコードの改善
QTabWidget クラス - TabBar() メソッド
QVector3D クラス - Project() と UnProject() メソッド
QPainter クラス - DrawHSVFList() と DrawRGBFList() メソッド
RingQt (WebAssembly) - ファイルのダウンロード - バイナリファイルへの対応
QCompleter4 クラス
イベントコードのサイズを 99 文字から 255 文字までに変更
イベントコードの最大容量を超えた場合はエラーメッセージを消去
用例 (クリップボードでの用法):
load "guilib.ring"
oApp = new qapp {
w = new qWidget() {
setWindowTitle("Using Clipboard - Press CTRL+V")
resize(400,100)
new qlineedit(w) {
move(10,10)
resize(200,30)
}
show()
}
oApp.clipboard().setText("I Love Ring Programming!",0)
exec()
}
スクリーンショット:

用例 (文字列での用法):
load "guilib.ring"
o1 = new QString2()
o1.append("Ring")
oChar = new QChar(61)
? o1.leftJustified(20,oChar,False)
? o1.rightJustified(20,oChar,False)
結果:
Ring================
================Ring
RingLibCurl の改善¶
RingLibCurl - curl_easy_setopt() 第三引数への (CURLLIST *) 渡しに対応
用例 (ChessEndGame アプリケーションより抜粋)
# ヘッダ
mylist = curl_slist_append(null,'accept-encoding: identity')
mylist = curl_slist_append(mylist,'authorization: Bearer ' + my_api_key )
mylist = curl_slist_append(mylist,'connection: close')
mylist = curl_slist_append(mylist,'content-length: ' + len(my_body) )
mylist = curl_slist_append(mylist,'content-type: application/json')
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, mylist)
Heroku (サポートの改善)¶
Ring 1.8 から Heroku を使うことにより Ring ウェブアプリケーションをクラウドで実行可能です。
Ring 1.15 では Ring の最新版を使うためにパッケージを更新しました。
これによりインストール時に発生した報告済みの問題を回避します。
URL: https://github.com/ring-lang/RingWebAppOnHeroku
':' に続けて数値を記す¶
Ring 1.15 ではリテラルの定義で ':' の後に続けて数値を使えます
用例:
? Type( :1234 )
aList = [ :1 = "One",
:2 = "Two"]
? aList[:1]
? aList[:2]
結果:
STRING
One
Two
新作サンプル集¶
以下のサンプルを samples フォルダへ追加しました
samples/Language/AnonFunctions/anonfunc1.ring
samples/Language/AnonFunctions/anonfunc2.ring
samples/Language/AnonFunctions/anonfunc3.ring
samples/Language/AnonFunctions/anonfunc4.ring
samples/Language/AnonFunctions/anonfunclib.ring
samples/Language/Numbers/powfunc.ring
samples/Language/Strings/trim.ring
samples/Language/Strings/trim2.ring
samples/Language/Loops/loopcommand.ring
samples/General/NumberTripletsGame/NumberTripletsGame.ring
samples/General/Elevator/elevator.ring
samples/General/SmallExamples/ParametersOrder/parametersorder.ring
samples/UsingArabic/WriteArabicFile/using_QFile_write.ring
samples/UsingArabic/WriteArabicFile/using_QFile_read.ring
samples/UsingRayLib/more/ex6_jump_player2D.ring
samples/UsingRayLib/more/ex7_jump_player3D.ring
samples/UsingRayLib/more/ex8_Aiming_at_3D_moving_targets.ring
samples/UsingRayLib/more/ex9_jump_player3D_collision_detection.ring
samples/UsingRayLib/more/ex10_jump_player3D_long_way.ring
samples/UsingQt/String/QCharUnicodeValue.ring
samples/UsingQt/String/QCharUnicodeValue2.ring
samples/UsingQt/String/QStringJustified.ring
samples/UsingQt/Clipboard/QTextEditClipboard.ring
samples/UsingQt/Clipboard/UsingQClipboard.ring
samples/UsingQt/Time/timemillisecond.ring
samples/UsingQt/ByteArray/Base64.ring
samples/UsingWebLib/PathInfo/pathinfo.ring
samples/Drawing/ColorWheel/ColorWheel-Animate.ring
samples/Drawing/ColorWheel/ColorWheel-FastDraw.ring
スクリーンショット:

そのほかの改善¶
フォームデザイナー - 翻訳の改善
顧客情報フォームアプリケーション - 新訳ファイル (ポルトガル語)
拡張機能用のコード生成器 - 関数プロトタイプ - 型の出力時に付加される余分な空白文字の除去処理を追加
拡張機能用のコード生成器 - init のないクラスで型のオブジェクトを返す
拡張機能用のコード生成器 - 未代入のポインタ解放時におけるパラメータ個数の修正
RingLibUV - コードの改善 (スレッド使用時)
Ring VM - コードの改善 (スレッド終了時)
Ring VM - 数値と NULL 比較時に NULL から 0 への変換に対応
Ring VM - ring_state_stringtokens() 関数
Ring VM - ring_state_scannererror() 関数
Ring VM - 無限再帰処理の発生時に表示されるメッセージの明瞭化
Ring VM - TempName() 関数 - コードの改善!
Ring VM - SubStr() 関数 - コードの改善!
Ring VM - Random() と Randomize() 関数 - コードの改善!
Ring VM - ICO_FREETEMPLISTS インストラクション - 実装の改善
Ring VM - ICO_NEWOBJ/ICO_SETSCOPE - ステートの管理 - コードの改善!
Ring VM - RING_API_RETLISTBYREF - コードの改善!
Ring VM - リストとオブジェクトにある数値の出力時に Decimals() 関数に配慮
Ring VM - 演算子 (=) または (!=) を使うときの文字列から数値への変換
Ring VM - ICO_INCPJUMPSTEP1 と ICO_JUMPVARPLENUMSTEP1 - コードの改善
Ring VM - ring_vm_newfunc() 関数 - コードの改善
Ring コンパイラ - For-In ループ - 文字列のアクセス時に必ず参照を使用
Ring コンパイラ - For-In ループ - ループ後のイテレータ値に関する処理
Ring コンパイラ - Do-Again ループ - ループ命令使用時の不要な JUMP インストラクションを無効化
Ring コンパイラ - Ring への Ring 組み込み時 - Ring キーワードの保存 (英数大小文字同一視)
Ring コンパイラ - スキャナ - オプション (コメントをトークンとして扱う)
Ring コンパイラ - 十六進数 - 数値の先頭に複数桁のゼロが使えるよう対応
Ring コンパイラ - 演算子 (++) と (--) の使用時の Setter/Getter に対応
Ring コンパイラ - 誤ったオプションをコンパイラへ渡した場合に警告 (認識不能なオプション) を表示