LoginSignup
0
0

モジュールバンドラstkpackを利用してStackスクリプトを配布する

Last updated at Posted at 2024-04-25

こんにちは、今回はStackのモジュールハンドラstkpackについて紹介します。
stkpackは、Stackスクリプトの依存関係を1つのファイルに纏め、余分なスペースを削除してファイルを軽くするための便利なツールです。

stkpackの特徴

  • Stackスクリプトの依存関係を1つの.pack.stkファイルにパック
  • 不要なスペースを削除し、スクリプトファイルを軽くする
  • 簡潔なコマンドラインインターフェース

使い方

以下はこれからパックするStackのスクリプトファイルです。

これは素数判定をするアプリなのですが数学ライブラリmath.stkに依存しています。
このままだと配布する際にユーザがmath.stkも一緒にインストールして貰わなければいけません。

prime.stk
(../library/math.stk) read-file eval

cls (Prime number judgement apps) println
(> ) input (target) var

(
    cls (Prime number judgement apps) println
    
    (
        (exiting...) println 
        0 exit
    ) (
        (
            now-time (start) var ( 
                target ( is a prime number \(time: ) concat time concat ( second\))
                concat println target set-clipboard
            ) (
                target ( is not a prime number \(time: )  concat time concat ( second\))
                concat println
            )
            target prime? eval now-time start sub (time) var if  
        ) (
            (Please enter the number.) println
        ) 
        target ([0-9]) regex () join (target) var target if
    )
    target (exit) regex if
    (> ) input (target) var
) 
(true) while

こんな状況こそstkpackの出番です!

ターミナルのstackの所をstack-langの処理系のパスに置き換えて実行してください。既にパスが通ってるならそのままでOKです。
起動するとウェルカムメッセージの後に入力プロンプトが出るので、パックしたいStackスクリプトファイルのパスを入力します。

$ stack ./stkpack.stk
Welcome to stkpack !!!
Please enter Stack script file you want to pack
> prime.stk
Deleted verbose spaces.
Loading ../library/math.stk
The packing is done.
Deleted verbose spaces.
All of the packing is completed!
Created pack file at ./prime.pack.stk

すると、以下のファイルが作成されます。

prime.pack.stk
# This file was created by stkpack # # Stack programming language mathematics standards library # # Pi # 3.141592653589793 (pi) var ( # Solve abs # (num) var num (-) () replace (number) cast ) (abs) var ( # Solve sum of list # (array) var array (i) (  i total add (total) var ) for total ) (sum) var ( # Solve radian form angle # pi mul 180 div ) (radian) var ( # Solve average of list # (array2) var array2 sum eval array2 len div ) (average) var ( # Solve cumulate value from the range # (max) var (count) var (count copy 1 add max cumulate eval add) (count) count max less if ) (cumulate) var ( # Solve max value in list # (array) var array 0 get (temp) var array (i) (  (i (temp) var) ()  temp i less if ) for temp ) (max) var ( # Solve max value in list # (array) var array 0 get (temp) var array (i) (  (i (temp) var) ()  i temp less if ) for temp ) (min) var ( # Judgement is it prime number # (number) var 2 (i) var true (flag) var ( (false) (true)  number 2 less if (flag) var ) (  (false (flag) var) (  ( ( false (flag) var ) () number i mod 0 equal if i 1 add (i) var  )  (i number 0.5 pow 1 add less flag and) while  ) number 2 mod 0 equal number 3 mod 0 equal or if ) number 4 less if flag ) (prime?) var ( # Split the number # (num) var 1 num 1 range rand (r) var [r num r sub] ) (split-number) var cls (Prime number judgement apps) println (> ) input (target) var ( cls (Prime number judgement apps) println  (  (exiting...) println  0 exit ) (  (  now-time (start) var (  target ( is a prime number \(time: ) concat time concat ( second\))  concat println target set-clipboard  ) (  target ( is not a prime number \(time: ) concat time concat ( second\))  concat println  )  target prime? eval now-time start sub (time) var if ) (  (Please enter the number.) println  )  target ([0-9]) regex () join (target) var target if ) target (exit) regex if (> ) input (target) var ) (true) while 

これでStackスクリプトの依存関係が1つのファイルに纏められ、さらに余分なスペースが削除された事によってファイルも軽くなりました。
これで素数判定アプリを皆に使ってもらえます(Stack自体のインストールは必要ですが)。

ソースコード

stkpackのソースコードは以下のGithubリポジトリにあります。
ぜひご覧ください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0