HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0808
名無し1.userdef.asに書いておくといいこと 2.hspに欲しい機能29解決


名無し

リンク

2014/8/8(Fri) 16:01:56|NO.63580




この記事に返信する


cats

リンク

2014/8/8(Fri) 20:54:25|NO.63590

エディタについてはアドオン機能を付けて欲しいです。

言語の方ではクラスみたいなのがあったらいいなと思います。
個人的にオペレータ演算子をクラスで変えたい事情があるので。
それからこういう記述方法を許してほしいです。

if hoge = hogehoge { ... }
今のままの状態でも大した不自由は思いつきませんが。



Flat (元Tetr@pod)

リンク

2014/8/8(Fri) 20:59:11|NO.63592

モジュールにpublicな変数がほしいです。



check

リンク

2014/8/8(Fri) 21:42:14|NO.63598

クラスだとかそういったオブジェクト指向な物を実装するよりは、
連想配列等の使いやすい機能を実装したほうがHSPの理念には合っていると思う。

という訳で連想配列かな。



掘木

リンク

2014/8/8(Fri) 21:49:38|NO.63600

一行が致命的に長くなって非常に読みづらいのが困りもの。
せめて\[改行] で行分け記述をプリプロセッサ以外にも使えるようにしてほしい。
特にif文の中にorやandが混じるケースが最悪です・・・横にばっかり伸びやがって・・・
(早い話複数行に跨ってコード書きたいことがあるんです;;)

そのついでにorやandに関しては論理演算関連のがあると混乱が減ってありがたいところ。(&&,||,!)

stick keycode,64 if ( (keycode & 64 )&&(checkflag) ) : 〜〜〜
こんなのに何度嵌められたことやらorz("&&"じゃなくて"*"で対策するのは妥当なのか・・・。


userdef.asに関してこちらは、
#cmpopt varinit 1
を記述したのを使っていますよ。変数名・定義名間違い怖い。。。
これがなくても結果レポートで未初期化変数あることは分かるけど、どこにあるねん(怒
モノによってはincludeした時点で未初期化で怒られるのが困るケド(対策しておいてくれよ・・・

――どうでもいいこと(すれち?)――
そういえばtimeEndPeriodって呼びっ放しでいいんでしょうかね。
終了時HSP内部が呼ぶはずだから、終了前にtimeBeginPeriod呼び直す必要があるような?



saracena

リンク

2014/8/8(Fri) 21:55:16|NO.63603

#constなしで定数畳み込みしてほしいです。



ぴょぴょ

リンク

2014/8/9(Sat) 02:47:16|NO.63618

> モジュールにpublicな変数がほしいです。
同感ですね。
#module〜#globalで囲むよりも
正式にユーザ定義命令などはローカル変数にして、
#variable〜#globalで囲まれたpublicな変数を定義したい。

> クラスだとかそういったオブジェクト指向な物を実装するよりは、
> 連想配列等の使いやすい機能を実装したほうがHSPの理念には合っていると思う。
こちらも同感。
というか説明書には連想配列が使えるように書かれてるが、使えるのか?
こちらはVer.3.3.2ですが使えないような気がします。
皆様はどう?

掘木さんへ
> 特にif文の中にorやandが混じるケースが最悪です・・・横にばっかり伸びやがって・・・
こちらは次のようにすると回避できるかもしれません。
if(条件式1 and 条件式2 and 条件式3 and 条件式4){
処理 } ↓ repeat 1 if(条件式1 != 0):break if(条件式2 != 0):break if(条件式3 != 0):break if(条件式4 != 0):break 処理 loop
シューティングとかの当たり判定は上記のような感じで
1行を長くならないように工夫してます。
(条件式を反転すれば != 0 で判定しなくても良い)

> stick keycode,64
> if ( (keycode & 64 )&&(checkflag) ) : 〜〜〜

stick keycode,64 n=0 if(keycode & 64):n++ if(checkflag):n++ if(n==2){処理}

こちらもお勧め。

> そのついでにorやandに関しては論理演算関連のがあると混乱が減ってありがたいところ。(&&,||,!)
if(条件式1 && 条件式2){処理}

if(条件式1 != 0)and(条件式2 != 0):{処理}

私の要望は構造体が使えないが、構造体っぽい記述をしたい。
次の質問で不具合があるので修正して欲しいな。

・列挙定数の不具合?発見!
http://hsp.tv/play/pforum.php?mode=pastwch&num=58681

列挙定数名の構文解析で正しく解釈できれば、
構造体が使えなくても変数・配列の管理がずっと向上すると思います。
私が望む機能は、今の所は上記のみかな。

欲を言えば #elif も欲しいですけど。



skyblue

リンク

2014/8/9(Sat) 10:26:36|NO.63624

それ以前に、DLLとかのディレクトリを公式とそれ以外で分けてほしい。
もしくは、アップデータか管理機能



KOMARI

リンク

2014/8/9(Sat) 11:11:30|NO.63627

>>モジュールにpublicな変数がほしいです。
モジュール変数のことですか?C++のクラスでprivate強制指定みたいなもんですよね(・ω・)……

さっき初めてモジュール変数を使ってみましたがなるほど、ただのクラスのようだ……。せめて継承ください('A`)



Flat (元Tetr@pod)

リンク

2014/8/9(Sat) 11:38:50|NO.63628

>skyblueさん
たぶんWindowsの仕様なので、テキトーなディレクトリ作ってそれを環境変数PATHに通せば
できるかと思います。

>KOMARIさん
そうです。
命令とか関数とかを介さないと値の取得設定ができないのが面倒なのです。



osakana

リンク

2014/8/9(Sat) 12:39:54|NO.63630

> 列挙定数の不具合?発見!
> http://hsp.tv/play/pforum.php?mode=pastwch&num=58681

リンク先の問題のスクリプトをいじってて
定数名を変えたら問題が出なくなったので更に試してたら、
どうやら HSPの数値に指定できるサフィックス(e, f, d)が頭文字に小文字で使われている定数を
以前の添字指定方法で "数値." の直ぐ後に書いた場合におかしくなる見たいですね。
更にデバッグウィンドウの変数の欄を見ると、
定数として定義したはずの名前が変数としても作られているようで何やらおかしい。


それと関連して、マクロに指定したパラメータから空白文字を取り除いて扱えたら個人的には嬉しい。
例えば、

#define TEST(%1,%2) mes "\"%1,%2\"" TEST abc , 123
とした場合の実行結果が
" abc, 123" こうなるのを、
"abc,123" こうできる手段があればなと。



KOMARI

リンク

2014/8/9(Sat) 13:28:20|NO.63634

>>"abc,123" こうできる手段があればなと。

#define ctype TEST(%1,%2) mes "\"%1,%2\"" TEST(abc,123)



y.tack

リンク

2014/8/9(Sat) 18:40:17|NO.63643

マクロの中でstrtrimするとか
文字列で渡さないなら空白あってよさそうだし
やってみたら 上手く出来てびっくりしたことあります

ctypeでも良さそうなんですが
使う時の括弧が長ったらしい気分の時もありますよね



y.tack

リンク

2014/8/9(Sat) 18:54:17|NO.63644

こんなかんじで

#define TEST(%1,%2) s="\"%1,%2\"":mes strtrim(s,3,' ') TEST abc , 123



osakana

リンク

2014/8/10(Sun) 08:02:27|NO.63653

> KOMARI さん
> >>"abc,123" こうできる手段があればなと。
> #define ctype TEST(%1,%2) mes "\"%1,%2\""
> TEST(abc,123)

それはもちろんそうなんですが、
マクロを公開などした場合に使う人によっては

TEST( abc , 123 )
などと書きたい場合もあると思うので、
そういう時にも適切に扱えたらなと。
利用者に説明して書き方を強制さえすれば
ctype でも別に問題は無いんですけどね。


> y.tack さん
> マクロの中でstrtrimするとか

説明不足でしたすみません、
マクロのパラメータの結合結果を表示するため "%1,%2" としましたが、
実際は文字をくっつけて新しい変数名として使えたらという事でした。

#define TEST(%1,%2) dim %1_%2 TEST abc , 123

> ctypeでも良さそうなんですが
> 使う時の括弧が長ったらしい気分の時もありますよね

そうなんですよね、
できれば自然な文法で書ければ言うこと無いですから。



skyblue

リンク

2014/8/10(Sun) 12:09:19|NO.63664

>命令とか関数とかを介さないと値の取得設定ができないのが面倒なのです。
カプセル化とか汎用化という面では言ったらおしまいな気がします。



drksugi

リンク

2014/8/10(Sun) 23:14:29|NO.63696

下のように「{」(中かっこ)で一行使うスタイルのコードを書くと,
エラーとなってしまいます. このエラーが初めて出たときはどうしていいのか
分からず, 困ってしまった記憶があります.


n = 2 if (n == 2) { mes "変数nの値は2です" }

エラー内容 :

#HSP code generator ver3.32 / onion software 1997-2013(c) ???(5) : error 16 : if命令以外で{〜}が使われています (5行目) --> {

Java言語やその他のプログラミング言語のコーディング規約によれば,
以下のような書き方を推奨していますが,
先程の書き方でもエラーにはなりませんよね?


n = 2 if (n == 2) { mes "変数nの値は2です" }

C#のコーディング規約では「{」(中かっこ)で1行と定められていて,
Visual StudioでC#を使っている人ならご存知でしょうが,
「{」(中かっこ)直前で改行するように, 自動でコードを整形してくれます.

長い間Visual StudioでC#を使ってソフトを作っている私は,
すっかり慣れてこの書き方が体に染みついており, しかもその方が見やすいと思っています.

とりあえず上の書き方でもエラーが出ないようにして欲しいです.



アナザーX

リンク

2014/9/23(Tue) 17:35:04|NO.65164

>>drksugiさん
確かにそういった書き方も出来るようにしてもらえるといいですね。
あと、個人的に機能として実装、許してほしい機能が色々あったので書いて見ます。

・関数定義において、値を返さないタイプを作成できるようにしてほしい
└若しくは現行の「命令」を呼び出し時に「関数の書式」でも呼び出せるようにする感じでもいいかも。

・配列の書式を「変数名(要素番号)」では無く「変数名[要素番号]」としてほしい
└これは関数を使っているのか配列にアクセスしているのか分からなくなるため。

・配列変数に「連想配列」機能がほしい
└私の独断と偏見ですが、配列を扱うなら対応していて良いはずの機能だと思います。

・複数行にわたる、条件式の記述を許すようにしてほしい
└以下のような書き方のことです。
 if ( a == 0
 || b == 1 ) {
  /*何かのコード*/
 }
 ※上記の場合は「aが0」か「bが1」なら「/*何かのコード*/」を実行という文です。

こんなところですかね。
やっぱり、他言語をやってから戻ってくるとHSPの中途半端さが身にしみます。
ただ、やっぱり、手軽にプログラミングが出来ると言う観点からは
とても良い言語だと思うのでもっともっと使いよくしていってもらいたいですね。



ふぁるこn

リンク

2014/9/23(Tue) 17:39:32|NO.65166

Visual Studioに搭載されているフォームデザイナーが欲しい。

http://fast-uploader.com/file/6967017112964/
↑これ



名無し

リンク

2014/9/23(Tue) 18:44:56|NO.65168

>>ふぁるこnさん
WYSIWYGって呼ぶんだった気がします。
前HSPでそれ作ろうとして諦めたんですが、mod_guiobj(だったかな)で作れる気がする



ななし

リンク

2014/9/23(Tue) 18:50:03|NO.65170

hspに欲しい機能としては、
・可変長引数に対応して欲しい
・オブジェクト(モジュール変数)を返せるようにしたい
・GC

フォームデザイナもあれば便利ですよね。



名無し

リンク

2014/9/23(Tue) 18:53:11|NO.65172

dialog("test",0,"title")みたいなのもいいな



やぎ

リンク

2014/9/24(Wed) 17:34:32|NO.65216

>・関数定義において、値を返さないタイプを作成できるようにしてほしい
>└若しくは現行の「命令」を呼び出し時に「関数の書式」でも呼び出せるようにする感じでもいいかも。
「命令」というのが#funcのことならhttp://hsp.tv/play/pforum.php?mode=all&num=39275にあります。

#module #deffunc kansuninare #define STRUCTDAT_OT_STATEMENT 2 #define STRUCTDAT_OT_FUNCTION 4 #define STRUCTPRM_SUBID_DLL (-3) #define STRUCTPRM_SUBID_DLLINIT (-4) mref hspctx,68 dupptr hsphed,hspctx,96 if hsphed.15>0{ dupptr structdat,hspctx.210,hsphed.15 repeat hsphed.15/28 subid=structdat(7*cnt)>>16 if (subid==STRUCTPRM_SUBID_DLL | subid==STRUCTPRM_SUBID_DLLINIT) & (structdat(7*cnt+5)==STRUCTDAT_OT_STATEMENT){ structdat(7*cnt+5)|=STRUCTDAT_OT_FUNCTION } loop } return #global kansuninare #include "user32.as" MessageBox hwnd,"","命令でも",0 ret=MessageBox(hwnd,"","関数でも使えます",0)

#deffuncでも同じような方法が使えるかも。



ななし

リンク

2014/9/24(Wed) 18:59:17|NO.65219

>#deffuncでも同じような方法が使えるかも。

私が調べた限りでは、#deffuncではその方法は使えません。
命令は命令、関数は関数にするしかないようです。



GrapeColor

リンク

2014/9/24(Wed) 21:36:15|NO.65224

私のuserdef.asの中身はこんな感じです。

#define null 0 #define false 0 #define true 1 #define elseif else:if



drksugi

リンク

2014/9/25(Thu) 22:21:29|NO.65241

フォームデザイナならいくつかありましたね.

HSP Visual Designer(HSPプログラミングコンテスト2011)
HSPの画面レイアウトの設計を行うツール
http://hsp.tv/contest2011/entry.php?id=98

SoupDevelop(HSPプログラミングコンテスト2013)
GUIエディタ付きのHSP総合開発環境(IDE)
http://dev.onionsoft.net/seed/info.ax?id=621

でも個人でVisual Studioに似たフォームデザイナを作るとなると...
並大抵のことではないですね.
それでもいつかC#かC++/CLIで挑戦してみたいと思っています.

無料のC#の総合開発環境にSharpDevelopというのがあって, そのソースコードを見れば
作れるかもしれないです.



ふぁるこn

リンク

2014/9/25(Thu) 23:00:47|NO.65243

>それでもいつかC#かC++/CLIで挑戦してみたいと思っています.
頑張れ。



3k

リンク

2014/9/26(Fri) 01:39:20|NO.65246

特に流れは汲まず、2の方で(書いてもおそらく本家からは何もリアクション無いんだろうなと思いつつ):


・連想配列
入ってほしいですね、本当に…。。。
しかし、一見HSPとの相性よさそうだと思いつつも、関数が変数に代入できないことを鑑みると他のLLに比べて若干恩恵が微妙なのかなという気がしつつ…。

(ここからは生憎と推測になってしまうんですが)
ただ、OpenHSPでHSP自体のコードを追うと、連想配列対応というのはどうも連想配列用の拡張として添字に数値以外が扱えるような修正を指しているようなんですよね。
で、現状連想配列の土台は作ったものの連想配列自体の実装は全くされていない、と。
上記から察するに、どう連想配列型を文法的に適合させるのか決まってないのかもしれないな、という気がしてます。

例えば、連想配列として思い浮かべる代表的なコードは次のようなものだと思いますが。
m("key") = value// 連想配列:keyにvalueを代入
mes m("key")
しかし、単純に添字に数値以外が使える拡張なら、HSPの型は標準で4次元までサポートするので二次元以上の連想配列はどういう扱いになるのか、とか。
m("key1","key2") = value// 連想配列:「key1」の「key2」にvalueを代入??

または、実際に連想配列が使えるならこれだけの用法にとどまるハズもなく、例えば連想配列の要素として連想配列を入れたい(ジャグ配列のようなもの)時とかどういう書き方になるのか。
m("key1")("key2") = value// 連想配列:「key1の連想配列のkey2」にvalueを代入???
この辺どれが最も現在のHSPの文法に適合した形になるのか不明。
ついでに言うならキーの削除や空っぽの連想配列作る時にどうすればいいのから辺も不明。(やっぱり新しい命令追加で対応?)
今ままで可変長配列や要素型がキーによって可変な配列などがなかったシワ寄せもあるのではないかなと勝手に思ってます。(可変長配列の方はモジュール変数の配列があるみたいですが。。。)
そして、連想配列自体のコピーなどはシャローコピー&ディープコピーの話も付き纏いますし…。

上記ら辺もある程度揉んでHSPユーザ的にこうあって欲しい、みたいなのがもし開発者に示せたりしたらちょっとはリアクション違うのかもしれないですね、適当に書いてますけど。


・関数と命令
現状#deffuncと#defcfuncは動作的に違いはありつつも、例えば現状の関数でも戻り値使わない場合でさえ「v = f()」な書き方をしないのは格好悪いなという時がたまにあります。
また、関数と命令でそれぞれ同名のものが作れるのかというと作れず、その制限は一体誰が得するの、という気がしてます。

いっそ定義側で関数と命令を分けるのではなく、呼び出し側の書き方で動作が変わるといいとは思うんですが…。
例えば関数形式で呼んだら戻り値はそのまま評価され、命令形式で呼んだら戻り値の型に応じてシステム変数に入る、とかなら下位互換もある程度担保できそうなもんですが。


・関数を値として扱う機能
現在はサブルーチンのラベルを変数の値として扱うことができますが、そうではなく直接関数を値として扱えたらどれだけ便利かと思ったことが何回か。
ついでにいうとクロージャみたいなのも作れたら幸せですが、そこまでは言わずともこれは実装して欲しいですね、連想配列と一緒に。
(可能であればゲーム用スクリプト言語ですしコルーチンも欲しいですね、既にyieldと次の実行コードをラベルで返す機能はあるっぽいですが…。。。)

ただ、呼び出しが関数呼び出しなのか、変数の添字アクセスなのか不明になってしまうという問題がありますが…。
そういう意味で添字アクセスはブラケット([])にして欲しいですね。


個人的に欲しいのは上記3つです。
モジュール型をクラスライクに使いたいのかは…私には分からない問題ですね…。



レノス

リンク

2014/9/26(Fri) 21:42:48|NO.65262

文字列をキーとする連想配列、要素型が可変な配列、変数に入れられる関数のようなもの、は
いずれもプラグインとしてなら実装がありますね。

HSPは、全体的に「非 再帰的」な雰囲気を持っているように感じます。
単純さ、わかりやすさという点をかんがえると、新しい変数型を導入するのではなく、
notepad のような命令系によって、ランタイム側に預けたバッファを操作する形の方が
とっつきやすいのではないかと思います。

dict_sel : id = stat ; 新しい連想配列/dictionaryのid dict_add "key", value ; dict_unsel dict_sel id ; 上で作った辞書を設定 dict_get "key", var mes var ; = value ; dict_delete id ; 必要に応じて
あ、というかこれならモジュールでできる。もうありそう。

> 命令と関数
この話題はよく聞きますが、HSPの標準の関数系をみるかぎり、
HSPにおけるこの2つの区別は、「関数は副作用をもたない」ということだと (勝手に) 思っています。

そう考えると、ダミー変数への代入

dummy = f()
が意味を持つような関数 f、というものを定義(#defcfunc)すること自体が
非HSP的なのではないかというきがします。

※個人の感想です



zakki

リンク

2014/9/26(Fri) 22:15:41|NO.65263

・連想配列
文字列キーにする構文自体はvariant型で既にあるので問題なさそうです。
新しいvartypeを追加して、連想配列のキーは文字列、値は配列で無いスカラー値に限定すれば
結構素直に実装出来るんじゃないでしょうか。
連想配列の連想配列のようなことをやろうとするとdim系の命令拡張か
全般的なGCの導入かが必要そうですね。

・GC
https://github.com/fujidig/openhsp_/blob/struct-gc/openhsp-gc.txt
結構前にfujidigさんが実装されていて機能の割に変更は少なめなので興味のある方はどうでしょう。
しかし互換性はなくなるのでメジャーバージョンアップでないと辛そうです。

・クロージャー
HSPにスコープの概念が無いのでそもそもキャプチャされる環境が何になるのか良くわかりません。
他言語だと便利ですがHSPの現行の文法と整合性とろうとするとちょっと想像つきません。

・命令の返り値無視
これも誰かOpenHSPで実装されていた気がするのですが見つけられませんでした。



ONION software Copyright 1997-2023(c) All rights reserved.