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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1004
ponyAPIの命令・関数の区別撤廃についての提案10解決


pony

リンク

2008/10/4(Sat) 16:26:45|NO.19952

現在kernel32.asなどのヘッダファイルに含まれるAPIは全て#func、つまり命令になってます。
関数として使いたい場合は自分で#cfuncで登録しなくてはならないので、せっかく用意されて
いるヘッダファイルを使うことがあんまりありません。
かといって膨大な数のAPIを一個一個これは命令、これは関数としてヘッダファイルを書き換
えるのも面倒だと思います。
それに同じ関数でも場合によっては戻り値が不要で命令として使いたい場合もあると思います。
そこで提案なのですが#funcと#cfuncの区別を無くして、関数・命令どちらとして使うかはプロ
グラムを書く人が決めるようにするのはどうでしょう。
↓みたいに。

#uselib "test.dll" #func test "_func@16" var,int,int,int ;#funcだけで関数・命令どちらでも使える test a,1,2,3 ;命令として使う res=test(a,1,2,3) ;関数として使う。

互換性も保てますしHSP3.2で採用して貰えたらとおもいます。
皆さんはどう思うでしょう?



この記事に返信する


S&R

リンク

2008/10/5(Sun) 04:46:20|NO.19956

3.1にはじまったことではないです。
3.0から要望としてあります。



pony

リンク

2008/10/7(Tue) 10:10:12|NO.20000

そうですか。
つまり以前にも要望はあったが却下されたということですね。
反応がほとんど無いことからも、自分のように不便に感じている人はほとんどいないのかもしれません。
提案が採用される見込みは、ほとんど無さそうですね。
残念です。



S&R

リンク

2008/10/7(Tue) 17:19:50|NO.20006

一応APIは上級者向け機能って扱いになってるんで。



lim7000

リンク

2008/10/7(Tue) 18:32:03|NO.20009

> 一応APIは上級者向け機能って扱いになってるんで。

なっているとして、何?
"上級者"はこの構文を有り難がるとでも?
それとも、上級者向けの機能だから使い勝手に文句を付けるなと言いたいの?



S&R

リンク

2008/10/8(Wed) 06:29:42|NO.20018

っはぁ・・・'ヘ`=3
めくじらたてなさんなって。



suppi-

リンク

2008/10/8(Wed) 18:39:08|NO.20022

APIリストを書くときに#funcにすべきか#cfuncにすべきか迷うことがたまにありますよね。
スクリプト互換も保てますし、いい提案だと思います。

3.0のときはなぜ採用されなかったのかご存知ありませんか?



begriff

リンク

2008/10/11(Sat) 15:31:10|NO.20047

私としては
関数の戻り値を使用しないことを許容すればいいのかなぁ っと


ret_var = EnableWindow(hoge,hoge) //通常 EnableWindow(hoge,hoge) //これもOKにすればいいかと void的な感じで…



soral

リンク

2008/10/11(Sat) 19:04:43|NO.20049

3.0 開発時の議論は旧HSP3掲示板(昔はHSP-beta掲示板だったかな?)の過去ログ8として残っています。

元スレッドでは数人のユーザーから 命令・関数 の位置づけについて意見が出されているのですが、
過去ログに直接リンクを張ることが出来ませんので、以下におにたま氏の回答のみを引用しておきます。

# [386] Re: 関数の返り値無視 - 投稿者:おにたま(管理人) 投稿日:05/01/13(木) 22:36 >関数の返り値は必ず受け取らなければならないですが、 >これを受け取らずにいる事って出来ませんか? >(ダミー変数を使ったりせずに。) 単純に関数の返り値無視することは、わりと少しの変更で可能ですが、 導入には不安な点もあります。 Irisawaさんが書かれているように、HSP3において関数は式の中で値を加工するもの として働いており、命令(ステートメント)とは区別されています。 命令は、パラメーターをそのまま記述して、関数はカッコ内にパラメーターを記述する という統一されたルールを維持していけるといいのですが、返り値の無視と ユーザー定義関数やDLL関数の定義なども入ってくると、それが崩れて一気にC言語的な 記述が増える気がしています。(関数のパラメーターに指定された変数の内容を変更 するといったステートメントに近い動作をするもの。) それはそれで一般的な言語の利用者にとっては便利で構わないのですが、HSP2からの移行や、 初心者が目にするソースということを考えると、標準で用意する命令や関数については 現状のルールを大きく変更せずにおきたいと考えています。 ちなみに、標準で用意されている関数と命令の区分け基準としては、 ・関数 式の内部で値を加工するために利用する パラメーターとして値の入力を行ない、そこから導かれる1つの値を返す 実行速度や負荷が低コストのもの ・命令 特定の動作・指示・設定を行なう のような区分けをしています。たとえば、stickやgetkeyは関数にもできますが 実行負荷が高いため、何度も参照することを考慮して一度変数に代入させるように なっています。
もちろん既にHSP 3.0のリリースから3年以上が経っていますし、
結局は今のおにたまさんがどう考えていらっしゃるかによりますが・・・



pony

リンク

2008/10/12(Sun) 17:18:15|NO.20067

>suppi-さん
>いい提案だと思います。
ありがとうございます。
同じように行ってくださる方がもっといらっしゃれば提案も通りやすくなるかも。
>soralさん
過去ログ貼り付けありがとう御座います。
>おにたまさん
過去ログよむと、おにたまさんは関数と命令はソース上で区別したいという事みたいですが、
自分の提案とは衝突しないように感じます。
一考してみてもらえればとおもいます。



pony

リンク

2008/11/4(Tue) 17:53:19|NO.20628

すでに過去のものになったログを掘り起こしてしまいますが、思ったよりも
簡単に実現できそうなので報告します。
Hot Soup Processor SDK ver3.1 (プラグイン開発セット・アーカイブ版)
http://www.onionsoft.net/hsp/file/hspsdk31.zip
このファイルのhsp3extlib.cppの485行目に一行追加するだけで可能みたいです。
コンパイルして試してみればうまくいきましたがこれで問題ないかはあまり自信ないです。
もし簡単に実現できるなら一考してみてもらえればとおもいます。

if (( st->otindex & mask ) == 0 ) throw ( HSPERR_SYNTAX );

if (mask==4) mask=6;  //追加
if (( st->otindex & mask ) == 0 ) throw ( HSPERR_SYNTAX );



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