kikeroga3 / tinyhsp

12 stars 0 forks source link

CuteHSPの本が出ました。

cutehsp_book

「CuteHSP」ではじめるプログラミング入門 (I・O BOOKS)

CuteHSP ミニマム

kakigetlandingmaze

CuteHSPは Windows, macOS, Linux, Raspberry Pi で同じプログラムが実行できるクロスプラットフォームなトイ言語です。 (一つの共通ソースファイルを各プラットフォーム上でビルドし、実行ファイルを生成しています) ※ココ重要!

画面処理にはGLFW3(OpenGL)、サウンド処理にOpenALライブラリを使用し、dolphiliaさんがお作りになった「TinyHSP」を母体としてちょっとだけカスタマイズしています。

特に、ミニマム版の実行ファイルサイズは100KBに満たないとてもコンパクトな処理系となっています。

このページにある実行ファイルは今のところ Windows, Linux(x86), macOS, Raspberry Pi版ですが、C言語で書かれたCuteHSPのソースをコンパイルできる環境であれば、実行可能なバイナリを作成できるはずです。

言語仕様は、20年以上もライトユーザの支持を得ているHSP(Hot Soup Processor)を元に、実装する命令や機能を絞り、最小、軽量化を目指してつくられました。

初心者にとって覚えやすい言語仕様かどうかは、本家HSPの長年の実績が証明していますが、CuteHSPはさらに最小限の構成に絞ることで全体を把握しやすくし、利用環境も広くするため、ソースレベルでクロスプラットフォーム対応を目指して設計されているのが特徴です。

CuteHSPを構成するソースは標準C言語とオープンな2つのライブラリ「GLFW3(OpenGL)」と「OpenAL」のみです。

標準C言語、GLFW3(OpenGL)、OpenALの対応環境であればソースをそのままコンパイル/ビルドし、CuteHSPの実行ファイルを生成することが可能です。

また、標準C言語で記述されていることと、元々あらゆる点で最小限を意識して開発されているため、ソースの構成も非常にシンプルですので、例えば命令の追加や改良等も容易であると思われます。

使い方、導入方法、仕様など、もしこのページで不足のものがあったら下記ページも参照してみてください。

TinyHSP

https://github.com/dolphilia/tinyhsp

neteruhspをベースにGUI機能を追加したTinyHSP。作者のdolphiliaさんは元々はmacOSで開発され、さらにソースをC++からC言語化しています。 本ページのCuteHSPはこちらをほんのちょっとカスタマイズしただけの派生バージョンとなっています。

neteruhsp

https://github.com/exrd/neteruhsp

コンソール版TinyHSPといえるもので、dolphiliaさんのTinyHSPのベースともなっています。 exrdさんが(気まぐれで?)作った、このクロスプラットフォームなソースがなければ今のTinyHSPもなかったと思われます。

命令

命令      書式          説明
end     end         プログラムを終了
run     run p1          実行中のプログラムを破棄してプログラムファイルp1を読み込み、実行する
goto        goto p1         ラベルp1へジャンプする
gosub       gosub p1        サブルーチンのラベルp1へジャンプする
return      return p1       サブルーチンから戻る
                    returnで戻る際にp1を指定(省略可)するとシステム変数にその値が代入される。
                    値が整数型ならstat,浮動小数点型ならrefdval,文字列型ならrefstrに代入される
repeat      repeat p1       repeat~loopで囲まれた範囲をp1回繰り返し処理する
loop        loop            繰り返し処理の終端命令
continue    continue        繰り返し処理中でrepeat命令まで戻る
break       break           繰り返し処理から抜ける
if      if p1           条件p1を満たしていればその行の以降の命令を実行する
else        else            if条件が満たされなかった場合にelse命令以降が実行される
dim     dim p1,p2       変数名p1、配列数p2の配列変数(整数)を作成する
ddim        ddim p1,p2      変数名p1、配列数p2の配列変数(実数)を作成する
sdim        sdim p1,p2,p3       変数名p1、文字数p2、配列数p3の文字列型配列変数を作成する
bload       bload p1,p2     ファイル名p1の内容を文字型変数p2に読み込む。
bsave       bsave p1,p2     文字型変数p2の内容をファイル名p1で保存する
poke        poke p1,p2,p3       文字型変数p1のp2バイトめにバイト値p3を書き込む。
wait        wait p1         p1ミリ秒待つ
stop        stop            ウィンドウが[×]でクローズされるまで待つ
title       title p1        タイトルバーに文字列p1を表示する
pset        pset p1,p2      座標p1,p2にドットを描画する。
                    p1,p2が省略された場合はカレントポジションに描画する
line        line p1,p2,p3,p4    座標p1,p2から座標p3,p4まで線を描画する
boxf        boxf p1,p2,p3,p4    座標p1,p2から座標p3,p4まで矩形を塗りつぶす
circle      circle p1,p2,p3,p4  座標p1,p2から座標p3,p4までの矩形内に収まる円形を描く
paint       paint p1,p2     座標p1,p2を含む閉領域を現在の色で塗りつぶす
redraw      redraw p1       p1が0なら再描画スイッチをオフに、1またはp1が省略されたらオンにする
pos     pos p1,p2       座標p1,p2をカレントポジションに設定する
color       color p1,p2,p3      RGBカラーp1,p2,p3をカレントカラーに設定する
stick       stick p1        数値変数p1にキー情報を格納する。
                (本家HSPの stick p1,1+2+4+8+16+32+64+128+256+512+1024 相当の動作)
[キー情報]
   1   カーソルキー左(←)
   2   カーソルキー上(↑)
   4   カーソルキー右(→)
   8   カーソルキー下(↓)
  16   スペースキー
  32   Enterキー
  64   Ctrlキー
 128   ESCキー
 256   マウスの左ボタン
 512   マウスの右ボタン
1024   TABキー

関数

命令      書式          説明
int     int(p1)         p1を整数値として返す
double      double(p1)      p1を実数値(倍精度浮動小数点)として返す
abs     abs(p1)         p1を絶対値として返す
str     str(p1)         p1を文字列として返す
rnd     rnd(p1)         0からp1-1までの乱数値を返す
powf        powf(p1,p2)     p1のp2乗(べき乗)の結果を実数値で返す。
peek        peek(p1,p2)     文字型変数p1のp2バイトめのバイト値を取得して返す。

システム変数

変数名     説明
stat        命令や関数実行後のステータス(整数値)が格納される
refdval     実数型の戻り値はstatではなくrefdvalに格納される
refstr      文字列型の戻り値が格納される
strsize     bload命令で読み込んだファイルのバイト数が格納される。
cnt     repeat-loopのカウンタ値
mousex      マウスのx座標
mousey      マウスのy座標
mousel      マウスの左ボタンが押されていれば1、押されていなければ0
mouser      マウスの右ボタンが押されていれば1、押されていなければ0

表示画面は640×480ドット固定の1枚だけ、命令(29個)、関数(7個)、システム変数(9個)の所作は本家のHSP(Hot Soup Processor)とほぼ同じですが、全部あわせても50にも満たない、まさにタイニーなプログラム言語となっています。

こんなに少ない機能で一体何ができるんでしょう?

…いいえ、オモチャは出来るだけシンプルなほうがいいんですよ。

マー、とりあえず始めてみてください(゚ー゚)σビシッ

インストール方法

以下はWinodws版での説明になります。

任意のフォルダでよいので cutehsp.exe と glfw3.dll を同じフォルダに置いてください。

実行方法

プログラムファイル(例:start.hs)を cutehsp.exe にドラッグ&ドロップするか、 拡張子「.hs」を cutehsp.exe に関連付けしてプログラムファイルをダブルクリックします。 (※プログラムファイルは文字コードUTF-8のテキスト形式です)

あるいはコマンドラインから次のように入力しても実行できます。

cutehsp start.hs

また「start.hs」というファイル名はデフォルト(既定)のプログラムファイル名なので cutehsp.exe と同じフォルダにあれば、単に

cutehsp

と入力するだけでもプログラム「start.hs」の内容が実行されます。

補足1:サンプルプログラム

「sample」フォルダにサンプルプログラムがいくつか入っています。 試してみるだけでも何が出来るのか、ざっとわかると思いますので一通り実行してみましょう。

補足2:TeraPadから実行

TeraPadなら「ツールの設定」から実行コマンドを追加すればプログラムをエディタ上で編集しながら実行することができます。

1. TeraPadを開いてメニューの「ツール」→「ツールの設定」→「追加」を選択。
2. 開いた「ツールの編集」画面上で、
    「名前」に「CuteHSP実行」(任意)
    「実行ファイル」に cutehsp.exe を置いたフルパスを指定
    「コマンドラインパラメータ」に %t を指定
    最後に「OK」で設定を保存します。
3. 以後、メニューの「ツール」を選ぶと「CuteHSP実行」が追加されているはずです。
   エディタ上でCuteHSPのプログラムを書いて、このメニューを選択すれば
   TeraPadで編集中のプログラムを実行できるようになります。

軽快に動作するフリーのテキストエディター「TeraPad」

terapad_tool_set

http://forest.watch.impress.co.jp/library/software/terapad/

補足3:エラーメッセージ

自分でプログラムを組みながら試すとき、もしプログラムに間違いがあれば、実行時にタイトルバーにエラーが表示されます。

sdim 10,256,16  ;(誤)第1引数は変数を指定すべき!

titlebar_err

※エラーメッセージは英文


提言:教育用プログラム言語としての適性について

プログラミングが義務教育化される可能性もあり、最近は子供向けのプログラミング教室が増えてきました。 スクラッチ(Scratch)とかスクイーク(Squeak etoys)のようなヴィジュアルな開発環境で実践されるところが多いようです。

絵から入るので難しさを感じずに触れ、触っているうちに何となく覚えていけるのが大きなメリットだと思います。

ただ、これだとロジック的思考は身につくかもしれませんが(スクラッチの目的もまさにそこだとは思いますが)、 実際にコードを記述するレベルの思考とは大きな壁というか、隔たりがあると思います。

スクラッチを習得しても、そこからコードを書けるようになるには、またゼロからとまでは言いませんが、 結局はそれに近い労力を要することになるでしょう。

もし最終的な目標がプログラミングを身につけることなのであれば、そんなまわりくどいアプローチをしなくても 命令が超簡単で、すぐに実行を試せるようなもの(往年のBASICのような言語)であれば、 コードによるプログラミングも決して入りづらい、難しいものではないと思っています。

CuteHSPは、絶妙なチョイスで絞られた最小限の命令で、ユーザによる工夫が活かせる仕様が持ち味です。 すぐに全体を把握できて、使いこなすのが簡単なトイ(玩具)感覚のプログラム言語となっています。

「命令がいっぱいあってわかんなーい!」じゃなくて 「これしかない」から始められるのが実は大きなメリットになるのではないかと考えています。 ビギナーは命令や機能がたくさんあると気持ちが飽和してかえって迷うものです。

「この位なら出来るかも…」と感じる動機づけからスタートし、慣れてくれば今度は、 少ない命令数だからこその「工夫して目的を果たす」という頭のひねり方や、 「ないと作れない」じゃなくて「なければ作る!」という強気な発想をもてるようになる。 そんな逞しい学習効果が見込めると思います。

CuteHSPで「できた!」という成功体験をへて、CuteHSPに限界を感じてから次のプログラム言語へステップアップする。 プログラミング(コーディング)のファーストステップとして楽しみ、利用してもらえればうれしく思います。

…決して機能が少ないことへのいいわけではありません!(^^;

CuteHSPを使ってワークショップや教室をやりたい方

CuteHSPに関するスキル習得を支援します。「cutehsp@outlook.jp」までご連絡ください。


ソース「cutehsp.c」のコンパイル方法のメモ

Windowsでの例ですが、MinGW(gcc)とGLFW3で開発環境をつくって以下コマンドでコンパイルします。

コンソール付アプリケーション生成
gcc -static cutehsp.c -o cutehsp -lopengl32 -lglfw3dll

Windowsアプリケーション生成
gcc -static cutehsp.c -o cutehsp -lopengl32 -lglfw3dll -mwindows

各環境用のコンパイル方法についてはdolphiliaさんのページが詳しいです。


The MIT license

Copyright (c) 2017 Kikeroga3

以下に定める条件に従い、本ソフトウェアおよび関連文書のファイル(以下「ソフトウェア」)の複製を取得するすべての人に対し、ソフトウェアを無制限に扱うことを無償で許可します。 これには、ソフトウェアの複製を使用、複写、変更、結合、掲載、頒布、サブライセンス、および/または販売する権利、およびソフトウェアを提供する相手に同じことを許可する権利も無制限に含まれます。 上記の著作権表示および本許諾表示を、ソフトウェアのすべての複製または重要な部分に記載するものとします。 ソフトウェアは「現状のまま」で、明示であるか暗黙であるかを問わず、何らの保証もなく提供されます。 ここでいう保証とは、商品性、特定の目的への適合性、および権利非侵害についての保証も含みますが、それに限定されるものではありません。 作者または著作権者は、契約行為、不法行為、またはそれ以外であろうと、ソフトウェアに起因または関連し、あるいはソフトウェアの使用またはその他の扱いによって生じる一切の請求、損害、その他の義務について何らの責任も負わないものとします。