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

====================
Ring 1.16 の改訂履歴
====================

Ring 1.16 (2021年10月23日) の新機能と変更点です。

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

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

Ring 1.16 の新機能！

* 軽量版の GUILib
* UTF-8 形式のファイル名 (Microsoft Windows)
* 複数行に渡るメソッドの多重呼び出し
* Code Runner 拡張機能の Ring サポート
* ゼロと文字列
* インストール処理用スクリプトの改善
* 取扱説明書の改善
* MDI ウィンドウのサンプル
* そのほかの改善

.. index::
	pair: Ring 1.16 の改訂履歴; 軽量版の GUILib

軽量版の GUILib
===============

RingQt アプリケーションの大半は QtCore, QtGui & QtWidget モジュールだけを使用しています。

このようなアプリケーションでは

.. code-block:: ring

	load "guilib.ring"

の代わりに、以下を使えます。

.. code-block:: ring

	load "lightguilib.ring"

また、 Ring ノートパッドの配布メニューに新規オプション「軽量版 RingQt アプリケーションの配布」を追加しました。

このオプションで軽量版の GUILib アプリケーションを配布します。

例えば、このオプションを指定してライフゲームを配布するとします: target/windows フォルダ

.. image:: lightguilib.png
	:alt: lightguilib

* 容量 : 35 MB (無圧縮)
* 容量 : 13 MB (zip 形式)
* 容量 : 9 MB (exe) 7Zip で圧縮

つまり、インストール用のプログラムを組み込んだ GUI プログラムでも 10 MB 以下の容量で配布可能になります。

.. tip:: これより少ない容量 (1MB ) にする必要がある場合は LibUI などのライブラリへ変更してください。


.. index::
	pair: Ring 1.16 の改訂履歴; UTF-8 形式のファイル名 (Microsoft Windows)

UTF-8 形式のファイル名 (Microsoft Windows)
==========================================

Ring 1.16 より Load コマンドは UTF-8 形式のファイル名に対応に対応しました。

例えば、アラビア文字、漢字や平仮名・片仮名などでファイル名を記述可能です。

以下の関数でも UTF-8 形式のファイル名に対応しています。

.. code-block:: ring

	read()
	write()
	fopen()

.. index::
	pair: Ring 1.16 の改訂履歴; 複数行に渡るメソッドの多重呼び出し

複数行に渡るメソッドの多重呼び出し
==================================

Ring 1.16 では改行直後にメソッドの先頭へドット演算子を付けると続けて別のメソッドを呼び出せる機能をコンパイラへ追加しました。

用例:

.. code-block:: ring

	myobj = new Start
	myobj.one()
	     .two()
	     .three()
	     .go()

	class start
		func one
			? "One"
			return new one

	class one
		func two
			? "Two"
			return new two

	class two
		func three
			? "Three"
			return new three

	class three
		func go
			? "Go!"

実行結果:

.. code-block:: ring

	One
	Two
	Three
	Go!


.. index::
	pair: Ring 1.16 の改訂履歴; Code Runner 拡張機能の Ring サポート

Code Runner 拡張機能の Ring サポート
====================================

Microsoft Visual Studio Code をお使いの皆様へ朗報です！

Code Runner 拡張機能にプログラミング言語 Ring のサポートが加わりました。 

.. image:: coderunner.png
	:alt: coderunner

Code Runner のインストール後、

以下のファイルの修正を推奨します :

.. code-block:: batch

	"C:\Users\{ユーザ名}\.vscode\extensions\formulahendry.code-runner-0.11.6\package.json"

プロパティ ``code-runner.fileDirectoryAsCwd`` を ``True`` へ設定します。

この設定では Ctrl+Alt+N で起動する場合にファイルの存在するディレクトリを Code Runner で移動可能にします。

.. code-block:: json

	"code-runner.fileDirectoryAsCwd": {
		"type": "boolean",
		"default": true,
		"description": "ファイルのあるディレクトリを作業用ディレクトリの処理で使います。",
		"scope": "resource"
	},


.. tip:: Microsoft Visual Studio Code (VSCode) での Ring のサポートについては ring/tools/editors/vscode フォルダをご確認ください。

.. image:: tetrisvscode.png
	:alt: tetrisvscode

.. index::
	pair: Ring 1.16 の改訂履歴; ゼロと文字列

ゼロと文字列
============

Ring 1.0 以降、数値と文字列との間で暗黙的な変換を言語で行います。

これは画面出力など数値と文字列を併用する状況で有用です。

.. code-block:: ring

	x = 10		# 数値
	? "x = " + x 	# x は数値から文字列へ変換

また、算術処理でも使えます。

.. code-block:: ring

	x = "10"	# 文字列
	? 5 + x		# x は文字列から数値へ変換

質問: x の内容が数値でなければどうなりますか？

回答: 変換後の結果はゼロになります。

.. code-block:: ring

	x = "Test"	# 文字列 - x の内容は数値ではありません
	? 5 + x		# 5 の表示 - x は文字列から数値へ変換 (ゼロ)

このほかに "=" や "!=" などの演算子でも同じ変換処理を行います。

Ring 1.16 以降、ゼロとナニかを比較するときはご用心を。

用例:

.. code-block:: ring

	x = "Test"
	? 0 = x		# 結果は FALSE
	? 0 != x	# 結果は TRUE

これは空リストに存在する値と文字列を比較する場合に有用です。

.. code-block:: ring

	aList = list(10)	# 10 項目 - アイテムごとの内容はゼロ
	? aList[1] + 5		# 5 の表示
	? aList[1] = "Test"	# False
	? aList[1] = 0		# True

その他の値 (ゼロ以外) は通常の変換規則に従います。

.. code-block:: ring

	x = "5"
	? 5  = x	# True
	? 6 != x	# True

.. index::
	pair: Ring 1.16 の改訂履歴; インストール処理用スクリプトの改善

インストール処理用スクリプトの改善
==================================

Ring 1.16 において Linux と macOS のインストール用スクリプトを改善しました。

* install.sh - 既存のシンボリックリンクを強制上書き
* install.sh - quarantine フラグの削除
* uninstall.sh - /usr/local のシンボリックリンクを削除

.. index::
	pair: Ring 1.16 の改訂履歴; 取扱説明書の改善

取扱説明書の改善
================

取扱説明書全体の校正と改善をしました。

.. index::
	pair: Ring 1.16 の改訂履歴; MDI ウィンドウのサンプル

MDI ウィンドウのサンプル
========================

以下のフォルダへサンプルを追加

	* samples/UsingQt/MDIWindows/mdi_windows.ring

.. image:: mdiwindowssample.png
	:alt: mdiwindowssample

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

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

* サンプル: samples/AQuickStart/GUILib/gui1.ring - コードの改善
* フォームデザイナー - ボタンテキストからボタンイベントを設定 (空の場合)
* フォームデザイナー - 位置に沿ったコントロールの順列 (作成順ではない)
* フォームデザイナー - ファイルシステム - ファイル名の文字コード
* フォームデザイナー - プロパティのウィンドウ - プロパティ名の列 - 配色の改善
* StdLib - IsPrime() 関数 - コードの改善
* RingQt - QListWidget クラス - AddItem() メソッド - 数値から文字列への変換
* RingQt - Qt 関連の定数を多数定義
* Ring2EXE - 使用方法の表示
* Ring2EXE - ファイルのコピー時においてフォルダの作成に対応
* Ring VM - ring_vm_error() - コードの改善
* Ring コンパイラ - ソースコードファイルの存在時に使用できないオプションを非表示
