8thをローカルにインストールして、自分のマシンでExercismの演習を解く方法を学びます
8thはオールインワンのZIPファイルとして配布されています。このファイルには、ダウンロードしたバージョンが対応するすべてのプラットフォーム向けの8thが含まれています。8thの各バージョンはライセンスを受けた本人だけが使えるもので、共有することはできません。
まずはGet 8thのページで、
8thを使うには、ZIPファイルをアクセス可能な任意のフォルダーに展開する必要があります。
ZIPファイルには、次のようないくつかのフォルダーが含まれています。
| folder | description |
|---|---|
| bin | 対応するすべてのプラットフォーム向けの8th実行ファイル |
| docs | マニュアルとチュートリアル |
| libs | 8thのサポートライブラリ(8thのコード) |
| samples | チュートリアルとマニュアルを補足するサンプルコード |
| keys | キーと登録情報を含む'id.blob' |
Pro+ユーザーの方へ:id.blob内の暗号化キーは、ダウンロードする8thのバージョンごとに固有のものであり、暗号化されたデプロイ可能なアプリケーションをビルドするうえで重要です。8thを配布パッケージの外に移動してid.blobが見つからなくなった場合、8th -vを実行するとcustid: id.blob?と表示され、識別情報が見つからないことが知らされます。
開発に使うプラットフォームに関係なく、8thが対応するあらゆるプラットフォーム向けのアプリケーションを作成できます。
ZIPファイルを展開したら、すぐに8thを実行できます。たとえば64ビットLinuxの/opt/8thにインストールした場合は、/opt/8th/bin/lin64/8thを好きなパラメーターとともに実行すれば、正しく動作するはずです。macOSやWindowsでも同じようにしてください。
8thのバイナリがあるフォルダーをシステムのPATH環境変数に追加しておけば、長いパスを入力しなくても、8thと入力するだけで済みます。
8th自体はコマンドラインプログラムであり、デスクトップのアイコンをクリックして起動するものではありません。8thで作成した通常のGUIプログラムはアイコンから起動できますが、8thコンパイラー自体はCLI(コマンドラインインターフェース)プログラムです。
WindowsでMSysやCygwinのシェルを使っている場合は、コンソールモードのプログラムを正しく動作させるために、無料で利用できるwinptyプログラムも必要になることがあります。最近のWindows 10では不要なようです。
MacOSで実行している場合は、こちらの8thフォーラムのスレッドをお読みください。
8thのコマンドラインは次のようになります。
8th [options] [[-f] file...] [-e 'code'...]
ここで[-f] fileオプションは「ファイルの内容を解釈する」という意味で、-e codeは「その8thコードを解釈する」という意味です。どちらのオプションもコマンドラインで複数回指定でき、効果は累積します。つまり、次のようになります。
8th -f first.8th -f second.8th
これはfirst.8thの内容を解釈してから、second.8thの内容を解釈します。8thのファイルを1つだけ実行したい場合は、8th -f first.8thと入力する必要はなく、8th first.8thと入力するだけでよいことに注意してください。
8thが解釈できるCLIオプションは次のとおりです。
| option | description |
|---|---|
| -b | bin/buildユーティリティを呼び出します |
| -D dir | homedirをdirに設定します(デフォルトはOSによって異なります) |
| -e str | 文字列strを8thコードとして解釈します |
| -ee str | 文字列strを8thコードとして解釈し、その後終了します |
| -f nm | nmというファイルを解釈します |
| -g | SEDのデバッグ/チェックを有効にします |
| -G | 必要なGLバージョンを設定します(例:3.1) |
| -h | ヘルプを表示します |
| -H N | コンソールの履歴サイズをN行に設定します(デフォルト:100) |
| -k N | データスタックとrスタックのサイズをN項目に設定します(デフォルト:128K) |
| -l | より詳しいデバッグ情報を表示します |
| -r N | コールバックのデータスタックサイズをN項目に設定します(デフォルト:256) |
| -s N | 再帰スタックのサイズをNバイトに設定します(デフォルト:0。システムのデフォルトを意味します) |
| -S | 検出されたSDLドライバーを一覧表示して終了します |
| -v | 8thのバージョンを表示して終了します |
| -vv | -vと同じですが、デバッグ用の追加情報が付きます |
| -x | スタックの型チェックと境界チェックを無効にします |
| -z | データ項目のカウントを有効にします |
| -Z | -zと同様ですが、'debug/allocs'ライブラリを含めます |
| -? nm | 項目'nm'のヘルプを表示します |
| -- | 8thオプションの終わりを示します |
一般に、-k、-r、-sオプションを使う必要はないはずです。これらは、たとえばスタック上の128K項目が一度に少なすぎる場合など、役に立つと感じたときのために用意されています(正直に言うと、そうなっているならアルゴリズムを変えるべきです…)。
コマンドラインスイッチをよく使うようであれば、お好みのオプションで8thを起動する「シェルスクリプト」(macOSやLinuxの場合)や「バッチファイル」(Windowsの場合。コマンドファイルとも呼ばれます)を使うとよいでしょう。
app:datadirフォルダーにsettings.8thという名前の8thソースファイルを作成することもできます。このファイルがあると、8thのREPLは起動時にそれを読み込み、その旨のメッセージを表示します。セキュリティ上の理由から、パッケージ化されたアプリではこのファイルは探されず、読み込まれません。
8thを終了するには、次のいずれかを行います。
byeと入力してENTERを押します。これで8thは正常に終了します1 dieと入力してENTERを押します。これで8thは異常終了し、ステータスコード1をオペレーティングシステムに返しますthrowを呼び出すと、例外が発生します。8thコンソールから実行している場合は、ほとんどの場合そのコンソールに戻ります。ファイルやパッケージ化されたアプリケーションを実行している場合は、メッセージが表示されてアプリが終了します。8thでは、いくつかのモードでプログラムを実行できます。
| mode | description |
|---|---|
| interactive | 8thを起動して、コンソールにコードを入力するだけです |
| script | コードをテキストファイルに書いて、8th mycode.8thなどで実行します。下のヒントも参照してください… |
| app | ビルドスクリプト(または-b CLIオプション)を使って、コードをパッケージ化されたアプリケーションに変換します |
Pro+ユーザーの方へ:暗号化されたアプリケーションを作成すると、ハッカーなどの悪意ある相手を抑止できます。
後の2つのシナリオでは、コードはプレーンテキストファイル(ワープロ形式ではないもの)である必要があります。関連するファイルは、コードと同じフォルダーかそのサブフォルダーに置いてください。これらのファイルには、8thでapp:assetを呼び出すことでアクセスできます。
「アプリ」とは、対象プラットフォームの他のプログラムと同様に単独で動作するスタンドアロンのプログラムで、8thがコマンドラインから実行する必要はありません。先ほど述べたように、内容を暗号化してハッカーを抑止できます。スタンドアロンアプリケーションの作成方法の詳細は、ビルドツールの使用方法のセクションにあります。
ヒント:macOS、Linux、RPIシステムで実行している場合は、次のようにするとスクリプトを通常のシステムコマンドのように実行できます。
chmod +x scriptname
#! /usr/bin/env 8th
これはパッケージ化されたappdataでも同様に機能します。bin/buildで実行ファイルを作成した場合は、そこで作成されたappdataを同じように使えます。
cat - path/to/appdata > newappdata
#! /usr/bin/env 8th<ENTER><CTRL+D>
chmod +x newappdata