日本語プログラミング言語Mindのバージョン９βで最小Tcllibのビルドを試みる

# はじめに
日本語プログラミング言語Mindの開発元@killyさんの御厚意により日本語プログラミング言語Mindのバージョン９βをご提供いただいております。[前回の記事](https://qiita.com/mylifewithviolin/items/172f91ba20abbb2b3869)までは９βの言語拡張機能「評価」でTcl乱数関数を定義してみております。現状の９の仕様では言語拡張機能「評価」はguilib側に組み込まれているとのことで、わたしとしては若干想定外でした。今後の予定としてはtclのRDBM接続機能todbcとかでCGIのバックエンドとか構築できないかとか妄想しておりました。

昨年の3月ごろまではMind8のC言語ランタイムを拡張してMind単語を拡張するということもチャレンジしておりましたので、Mindの内部構造はおぼろげながらハンドインレベルである程度理解しております。

https://qiita.com/mylifewithviolin/items/5e7995f34e38d1bb721e

ということから、現在公開されている情報を元に最小Tcllibというのをビルドできないかというお題にチャレンジでしてみます。今回はC/C++2020のmake環境が整っていないので、Mind側だけでどこまでいけるかというのがお題です。

# お題のソースコード
[前々回の記事](https://qiita.com/mylifewithviolin/items/dc4f24de6e949725204e)への@killyさんのコメントであきらかになった、「評価」の前段階のユーティリティ単語を下記のようにライブラリ化してみます。

## tclライブラリ
```mind:tcllib.src
コマンドラインは　文字列実体　長さ　２０４８桁。

コマンドラインにトークンを設定とは		処理単語　.S　（トークン　→　・）
	（トークンを）	コマンドラインに　入れ。

コマンドラインにトークンを追加とは		処理単語　.S　（トークン　→　・）
	（トークンを）	コマンドラインに　追加し。

コマンドラインにトークンを一文字追加とは	処理単語　.N　（文字　→　・）
	（トークンを）	コマンドラインに　一文字追加し。

コマンドラインに空白とトークンを追加とは	処理単語　.S　（トークン　→　・）
	半角空白を	コマンドラインに　一文字追加し
	（トークンを）	コマンドラインに　追加し。

コマンドラインに空白と数値トークンを追加とは	処理単語　.N　（数値　→　・）
		＿バッファは　文字列実体　長さ　２４桁
	半角空白を	コマンドラインに　一文字追加し
	（トークンを）　＿バッファをつかい　文字列変換し
			コマンドラインに　追加し。
```
# お題のソースコードのMind9βでのビルド
これをfileライブラリにリンクしてビルドしてみます。

```cmd:
C:\developments\vscode\mind9>mind tcllib file       

日本語プログラミング言語 Ｍｉｎｄ Version 8.11 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了

C:\developments\vscode\mind9>
```

これはいけました！@killyさんが例示されたMind9のユーティリティ単語に
>コマンドラインに空白と囲みトークンを追加

というのがあったのですが、これはかっこ関連の単語が未定義となりましたので、とりあず除外しました。Tclコマンドの「 { 」「 } 」はとりあえず文字列側で対応できそうなので、最小限のインターフェースをとれればよいという点ではマストではないかなと判定しました。

## 乱数ライブラリ
[前回の記事](https://qiita.com/mylifewithviolin/items/172f91ba20abbb2b3869)で、とりあえず乱数ライブラリ部分だけの定義としたソースファイルです。前回と同じです。「捨て」てるのは手抜きです:joy:

```mind:randomtcl.src
疑似乱数とは　関数　小数出力 （・ → 小数）
    ※ 0.0以上～1.0未満 の 乱数を戻す

    「expr { rand() }」を　コマンドラインにトークンを設定し
    　コマンドラインを　評価した値を　数値変換・小数として
     捨てる。

種子指定の疑似乱数とは　関数　整数入力　小数出力 （変数 → 小数）
    ※ シード値指定の0.0以上～1.0未満 の 乱数を戻す  
        種子は　変数

    種子に　入れ
    「expr { srand(」を　コマンドラインにトークンを設定し
    種子を  文字列変換し　コマンドラインにトークンを追加し
    「)}」を　コマンドラインにトークンを追加し
    　コマンドラインを　評価した値を　数値変換・小数として
    捨てる。
```

## テスト用コード
前回のテストコードはGUIで書いていましたが、今回はコンソールベースです。

```mind:randomtcl3.src
"randomtcl.src"を　コンパイルする。
簡易小数表示とは　（小数　→　・）
	8桁で　小数形式で表示し　改行すること。

    ※ テスト用
メインとは

    疑似乱数()を 簡易小数表示し
    疑似乱数()を　簡易小数表示し
    種子指定の疑似乱数(１０)を　簡易小数表示し
    種子指定の疑似乱数(１０)を　簡易小数表示し
    種子指定の疑似乱数(３０)を　簡易小数表示すること。  
```
# お題のソースコードのMind9βでのビルド
これを先ほどビルドしたtcllibライブラリにリンクしてビルドしてみます。ポイントは標準fileライブラリがC言語定義された中核単語「評価」「評価した値」をインクルードしているかどうかです。

```cmd:
C:\developments\vscode\mind9>mind randomtcl3 tcllib

日本語プログラミング言語 Ｍｉｎｄ Version 8.11 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
2 個のエラーが有ります。
```

残念！はやりだめでした:joy:

```mind:randomtcl3.inf
randomtcl3.src 5 行目でエラー。行内容は、
    　コマンドラインを　評価した値を　数値変換・小数として
      要因１："評価した値"は未定義の単語です。

randomtcl3.src 16 行目でエラー。行内容は、
    　コマンドラインを　評価した値を　数値変換・小数として
      要因１："評価した値"は未定義の単語です。

2 個のエラーが有ります。
```

今回は「評価」は使っていないので、「評価した値」で２か所未定義エラーとなっていますね。

```mind:cwordsw.wrd
評価は　アセンブラ定義の処理単語。
評価した値は　アセンブラ定義の処理単語。
```

ソースはmind2tcl.cとそのインクルードにあるみたいなので、makeしなおせる環境があればtcllib（最小限版）をビルド通過させることもできなくはなさそうですね。このあたりは開発元の@killyさんの企画しだいかと思いますが、Mind９．ｘとかでぜひご検討ください。

# おわりに
いかがでしたでしょうか？なにかの参考になれば幸いです。まだほんのさわりの部分ですが、今年で生誕４０周年を迎える日本語プログラミング言語Mind、ついに新バージョンがベールをぬぎはじめます！