マイグレーションガイド#

これは、既存の記法やイディオムを等価な新しいものに書き換え、スクリプトを新しいAPIバージョンに追従させるためのガイドです。

APIバージョン6#

浮動小数点数の除算・剰余で整数の0を分母に指定できなくなりました#

APIバージョン5までは、分子がDOUBLEの場合、整数の0で割ると無限大やNaNを返していました。

APIバージョン6からは、分子がDOUBLEでも、分母がINTまたはBIGの0の場合はエラーになります。

対象は、/・%演算子と、DIV・FLOOR_DIV・MOD・REM関数です。

従来の挙動を維持するには、分母の値をDOUBLE型に変換してください。

- 1.0 / y
+ 1.0 / DOUBLE.of(y)

DIV関数の整数によるゼロ除算がJavaScript環境でもエラーになりました#

APIバージョン5までのJavaScript環境では、INT同士のDIVは、分母が0の場合に整数の0を返していました。

APIバージョン6からは、JavaScript環境でも、分母が0の場合はエラーになります。

従来の挙動を維持するには、分母が0の場合に0を返す条件分岐を追加してください。

- DIV(x; y)
+ y == 0 ? 0 : DIV(x; y)

APIバージョン5#

ネイティブでないエラーで終了したときの終了コードが1になりました#

APIバージョン4までは、ネイティブでないエラーで終了した場合は、プロセスの終了コードは0でした。

APIバージョン5からは、ネイティブでないエラーで終了した場合でも、プロセスの終了コードは1になります。

厳密に動作を維持したままマイグレーションを行う方法は存在しません。

多くの場合は何もしなくても問題ありませんが、エラー時の終了コードに依存しているスクリプトでは、動作が変わる場合があります。

INが標準入力全体を1個の文字列として読み取るようになりました#

APIバージョン4までのINは、標準入力を1行ずつ読み取るストリームでした。

APIバージョン5からは、標準入力全体を1個の文字列として読み取るようになりました。

従来の挙動を維持するには、INをINL(またはその別名I)に置換してください。

- IN
+ INL

FILES関数の戻り値にディレクトリのパスが含まれるようになりました#

APIバージョン4までのFILES関数は、指定ディレクトリ直下のファイル名のみを返していました。

APIバージョン5からは、指定ディレクトリそのものを先頭に含むパスを返すようになりました。

従来の挙動を維持するには、FILESの呼び出しをFILE_NAMESに置換してください。

- FILES("dir")
+ FILE_NAMES("dir")

READ関数が単一の文字列を返すようになりました#

APIバージョン4までのREAD関数は、READLの別名であり、ファイルの内容を1行ずつのストリームとして返していました。

APIバージョン5からは、ファイル全体を単一の文字列として返すようになりました。

従来の挙動を維持するには、READの呼び出しをREADLに置換してください。

- READ("file")
+ READL("file")

EXEC関数の戻り値が標準出力全体の単一の文字列になりました#

APIバージョン4までのEXEC関数は、標準出力を1行ずつ読み取るストリームを返していました。

APIバージョン5からは、標準出力全体をUTF-8としてデコードした単一の文字列を返すようになりました。

従来の挙動を維持するには、EXECの呼び出しをEXECLに置換してください。

- EXEC("command")
+ EXECL("command")

$&演算子の出力にインデントが付くようになりました#

APIバージョン4までの$&演算子は、インデントなしのコンパクトな出力を返していました。

APIバージョン5からは、2個の半角空白によるインデント付きの出力を返すようになりました。

従来の挙動を維持するには、$&演算子をJSON[indent: NULL]に置換してください。

- $&value
+ value >> JSON[indent: NULL]

JSON関数のデフォルトの出力にインデントが付くようになりました#

APIバージョン4までのJSON関数は、indentを省略するとインデントなしのコンパクトな出力を返していました。

APIバージョン5からは、2個の半角空白によるインデント付きの出力を返すようになりました。

従来の挙動を維持するには、indentにNULLを明示的に指定してください。

- value >> JSON
+ value >> JSON[indent: NULL]

JSONS関数が削除されました#

APIバージョン4までのJSONS関数は、JSONL関数の別名でした。

APIバージョン5からは、JSONS関数は削除されました。

従来の挙動を維持するには、JSONSの呼び出しをJSONLに置換してください。

- JSONS
+ JSONL

SLEEP関数の引数が秒単位になりました#

APIバージョン4までのSLEEP関数は、引数をミリ秒として解釈していました。

APIバージョン5からは、引数を秒として解釈するようになりました。

従来の挙動を維持するには、引数を1000で割ってください。

- SLEEP(1500)
+ SLEEP(1.5)

#による行コメントが行頭か空白の直後以外では開始できなくなりました#

APIバージョン4までは、#による行コメントは、直前の文字に関わらず開始できました。

APIバージョン5からは、#による行コメントは、行頭、もしくはスペースやタブの直後以外では開始できなくなりました。

従来の挙動を維持するには、直前に空白を挟まずに#から始めていた行コメントの#の前に、スペースを補ってください。

- 1#comment
+ 1 #comment