Ring 1.15 の変更履歴

Ring 1.15 (2021年09月24日) の新機能と変更点です。

新機能と変更リスト

Ring 1.15 の新機能!

  • 新作の解説書 (アラビア語版)

  • Chess Endgame アプリケーション

  • Chess 3D (Qt3D サンプル)

  • Ring ノートパッドの改善

  • StdLib の改善

  • Better RingQt の改善

  • RingLibCurl の改善

  • Heroku (サポートの改善)

  • ':' に続けて数値を記す

  • 新作サンプル集

  • そのほかの改善

新作の解説書 (アラビア語版)

こちらはアラビア語で執筆された新しい解説書です。

本書では Ring によりアラビア語の詩歌を解析するプロジェクトの構築方法について扱います。

arabicbook

Chess Endgame アプリケーション

Chess Endgame はデータセットの可視化を行います

このアプリケーションは Microsoft Azure の機械学習により対戦結果の予測します。

スクリーンショット:

chessendgame chessendgame chessendgame

Chess 3D (Qt3D サンプル)

Qt3D の使いかたに関する用例です。

  • 盤面の視点移動

  • 駒の選択と移動

  • キャスリング (入城) - キングとルークを味方にする

  • アンパッサン (通過捕獲) による攻略

  • ポーン (歩兵) からクィーン (王妃) へのプロモーション (昇格)

このサンプルは Ring パッケージマネージャでインストールします

ringpm install Chess3D-Qt3D
ringpm run Chess3D-Qt3D

スクリーンショット:

chess3dshot1 chess3dshot2

ノートパッドの改善

  1. イベント関数の自動的生成

フォームデザイナーでは、イベント関数名の判定時、

autoevent1

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

autoevent2

StdLib の改善

  1. RandomList() 関数

文法:

RandomList(aList) --> リストの内容は無作為順序を用いた同一項目となります。

用例:

load "stdlib.ring"
aList = 1:5
? RandomList(aList)
  1. RandomItem() 関数

リストから項目を選択します (無作為抽出による選出)。

文法:

RandomItem(aList) --> 項目

用例:

load "stdlib.ring"
aList = 1:5
? RandomItem(aList)
  1. List2Code() 関数

  • リスト文字列内におけるダブルクォートの対応

  • 整形処理の改善 - 項目の前にタブを追加

  1. 区切り文字として空文字列の使用に対応

  2. 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()
}

スクリーンショット:

usingclipboard

用例 (文字列での用法):

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 アプリケーションより抜粋)

URL: https://github.com/ring-lang/ring/blob/master/applications/chessendgame/predictionController.ring#L67

# ヘッダ
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

スクリーンショット:

Jump3D

そのほかの改善

  • フォームデザイナー - 翻訳の改善

  • 顧客情報フォームアプリケーション - 新訳ファイル (ポルトガル語)

  • 拡張機能用のコード生成器 - 関数プロトタイプ - 型の出力時に付加される余分な空白文字の除去処理を追加

  • 拡張機能用のコード生成器 - 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 コンパイラ - 誤ったオプションをコンパイラへ渡した場合に警告 (認識不能なオプション) を表示