.. index:: 
	single: Ring 1.15 の改訂履歴; はじめに

====================
Ring 1.15 の改訂履歴
====================

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

.. index:: 
	pair: Ring 1.15 の改訂履歴; 新機能と変更リスト

新機能と変更リスト
==================

Ring 1.15 の新機能！

* 新作の解説書 (アラビア語版)
* Chess Endgame アプリケーション
* Chess 3D (Qt3D サンプル)
* Ring ノートパッドの改善
* StdLib の改善
* Better RingQt の改善
* RingLibCurl の改善
* Heroku (サポートの改善)
* ':' に続けて数値を記す
* 新作サンプル集
* そのほかの改善

.. index:: 
	pair: Ring 1.15 の改訂履歴; 新作の解説書 (アラビア語版)

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

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

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

.. image:: arabicbook.jpg
	:alt: arabicbook

.. index:: 
	pair: Ring 1.15 の改訂履歴; Chess Endgame アプリケーション

Chess Endgame アプリケーション
==============================

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

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

スクリーンショット:

.. image:: chessendgame1.png
	:alt: chessendgame

.. image:: chessendgame2.png
	:alt: chessendgame

.. image:: chessendgame3.png
	:alt: chessendgame


.. index:: 
	pair: Ring 1.15 の改訂履歴; Chess 3D (Qt3D サンプル)

Chess 3D (Qt3D サンプル)
========================

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

* 盤面の移動

* 駒の選択と移動

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

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

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

Ring パッケージマネージャでサンプルをインストールするには

.. code-block:: none

	ringpm install Chess3D-Qt3D
	ringpm run Chess3D-Qt3D

スクリーンショット:

.. image:: chess3dshot1.png
	:alt: chess3dshot1

.. image:: chess3dshot2.png
	:alt: chess3dshot2

.. index:: 
	pair: Ring 1.15 の改訂履歴; Ring ノートパッドの改善

ノートパッドの改善
==================

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

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

.. image:: autoevent1.png
	:alt: autoevent1

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

.. image:: autoevent2.png
	:alt: autoevent2

.. index:: 
	pair: Ring 1.15 の改訂履歴; StdLib の改善

StdLib の改善
=============

(1) RandomList() 関数

文法:

.. code-block:: none

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

用例:

.. code-block:: ring

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

(2) RandomItem() 関数

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

文法:

.. code-block:: none

	RandomItem(aList) --> 項目

用例:

.. code-block:: ring

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

(3) List2Code() 関数

* リスト文字列内におけるダブルクォートの対応
* 整形処理の改善 - 項目の前にタブを追加

(4) 区切り文字として空文字列の使用に対応


(5) StdLib - StdFile クラス- FTell() 関数 - コードの改善

.. index:: 
	pair: Ring 1.15 の改訂履歴; RingQt の改善

RingQt の改善
=============

* QApp クラス - Clipboard() メソッド
* QString2 クラス - 多数のメソッド
* QMessageBox クラス - setIcon() メソッド
* QByteArray クラス - Append() メソッド - バイナリデータへの対応
* QByteArray クラス - Replace() メソッド - 複数のバージョンとコードの改善
* QTabWidget クラス - TabBar() メソッド
* QVector3D クラス - Project() と UnProject() メソッド
* QPainter クラス - DrawHSVFList() と DrawRGBFList() メソッド
* RingQt (WebAssembly) - ファイルのダウンロード - バイナリファイルへの対応
* QCompleter4 クラス
* イベントコードのサイズを 99 文字から 255 文字までに変更
* イベントコードの最大容量を超えた場合はエラーメッセージを消去

用例 (クリップボードでの用法):

.. code-block:: ring

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

スクリーンショット:

.. image:: usingclipboard.png
	:alt: usingclipboard

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

.. code-block:: ring

	load "guilib.ring"
	
	o1 = new QString2()
	o1.append("Ring")
	
	oChar = new QChar(61)
	? o1.leftJustified(20,oChar,False)
	? o1.rightJustified(20,oChar,False)

結果:

.. code-block:: none

	Ring================
	================Ring

.. index:: 
	pair: Ring 1.15 の改訂履歴; RingLibCurl の改善

RingLibCurl の改善
==================

* RingLibCurl - curl_easy_setopt() 第三引数への (CURLLIST \*) 渡しに対応

用例 (ChessEndGame アプリケーションより抜粋)

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

.. code-block:: ring

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

.. index:: 
	pair: Ring 1.15 の改訂履歴; Heroku (サポートの改善)

Heroku (サポートの改善)
=======================

Ring 1.8 から Heroku を使うことにより Ring ウェブアプリケーションをクラウドで実行可能です。

Ring 1.15 では Ring の最新版を使うためにパッケージを更新しました。

これによりインストール時に発生した報告済みの問題を回避します。

URL: https://github.com/ring-lang/RingWebAppOnHeroku

.. index:: 
	pair: Ring 1.15 の改訂履歴; ':' に続けて数値を記す

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

Ring 1.15 ではリテラルの定義で ':' の後に続けて数値を使えます

用例:

.. code-block:: ring

	? Type( :1234 )

	aList = [ :1 = "One", 
		  :2 = "Two"]

	? aList[:1]
	? aList[:2]

結果:

.. code-block:: none

	STRING
	One
	Two

.. index:: 
	pair: Ring 1.15 の改訂履歴; 新作サンプル集

新作サンプル集
==============

以下のサンプルを 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

スクリーンショット:

.. image:: jump3d.png
	:alt: Jump3D


.. index:: 
	pair: Ring 1.15 の改訂履歴; そのほかの改善

そのほかの改善
==============

* フォームデザイナー - 翻訳の改善
* 顧客情報フォームアプリケーション - 新訳ファイル (ポルトガル語)
* 拡張機能用のコード生成器 - 関数プロトタイプ - 型の出力時に付加される余分な空白文字の除去処理を追加
* 拡張機能用のコード生成器 - 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 コンパイラ - 誤ったオプションをコンパイラへ渡した場合に警告 (認識不能なオプション) を表示
