8thをローカルにインストールする

8thをローカルにインストールして、自分のマシンでExercismの演習を解く方法を学びます


8thのインストール

8thはオールインワンのZIPファイルとして配布されています。このファイルには、ダウンロードしたバージョンが対応するすべてのプラットフォーム向けの8thが含まれています。8thの各バージョンはライセンスを受けた本人だけが使えるもので、共有することはできません。

ZIPファイルを入手する

まずはGet 8thのページで、

  • フォームに名前とメールアドレスを入力し、Free版を選択します。8thのライセンスに同意する必要があります。
  • 8th-devから確認用のメールが届きます。登録メールに記載されたリンクをクリックします。
  • 8th-devが専用のZIPファイルを作成し、その旨を伝えるメールを送ります。そのメールにある"download here"のリンクを探してください。

インストール

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自体はコマンドラインプログラムであり、デスクトップのアイコンをクリックして起動するものではありません。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をオペレーティングシステムに返します
  • Ctrl+Cを素早く2回押すか、Ctrl+Dを1回押します。どちらでも8thは即座に終了します
  • 実行中のアプリケーションでthrowを呼び出すと、例外が発生します。8thコンソールから実行している場合は、ほとんどの場合そのコンソールに戻ります。ファイルやパッケージ化されたアプリケーションを実行している場合は、メッセージが表示されてアプリが終了します。

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
  • コードの1行目を次のようにする:#! /usr/bin/env 8th
  • 対応する8thの実行ファイルがPATHにあることを確認する

これはパッケージ化されたappdataでも同様に機能します。bin/buildで実行ファイルを作成した場合は、そこで作成されたappdataを同じように使えます。

cat - path/to/appdata > newappdata
#! /usr/bin/env 8th<ENTER><CTRL+D>
chmod +x newappdata