Open taiseiue opened 6 months ago
@rokuosan
メタデータを与える意味での注釈(アノテーション, annotation)であれば、@
の利用がいいかと思います。
理由について述べると、まずC言語におけるプリプロセッサとの区別を明らかにできるためです。C/C++由来のプリプロセッサと混同して利用する場合、名前の重複を意識しなければならず、冗長な表現や、適切な表現ができない可能性が考えられます。
また、PythonとJavaではほぼ同一の機能を提供するシンボルとして@
が用いられています。利用者の多い言語に合わせて設計することは、慣習的に利用でき、学習コストが減るという利点があります。
慣習的な利用という点については、差異を理解する必要があるなど、デメリットも存在しますが、少なくともこの機能においては大きな問題にはならないと予測しています。
余談ですが、Javaでは引数付きのアノテーションは以下のように記述します。
@RestController
public class SampleController {
@GetMapping("/sample")
public Sample sample(@RequestParam(value = "hoge") String text) {
// Do something
return new Sample();
}
}
一方、Javadocでは同一の記号をJavadocタグとして利用されており、以下のように記述します。
/**
* This is a sample function.
*
* @author john doe
* @param hoge hoge_description
*/
public void Sample(String hoge) {
// Do something
}
JavaのAnnotationライクにするかぁ
注釈用関数の内部表現のプレフィクスは\ufdd5
でええかいな
WSOFT-Project/Losetta#98 のリストにも反映しとこ
これ属性の関数出だしの名前さえ未とけばAttributeFunction
クラス継承してなくてもよくないか
そうしたらユーザーも作れるし
ユーザーでも定義できるようにこんなんでもいいかも
注釈定義側
@annotation
array myannotation()
{
return data;//使い手に与えるデータ
}
注釈使用側
@myannotation
void Func();
注釈
概要
JavaのアノテーションやC#の属性のように、インタプリタやスクリプト内である式に追加のデータを通知できる機能が欲しい。
動機
デバッグモードのみ実行できる関数を定義したり、非推奨であることを通知したりすることは、コメントでは不十分で、修飾子では過剰で引数が使用できない。例えば、この機能によって関数定義時にもう使用して欲しくないことを通知するために、次のようなコードを書ける。
詳細設計
注釈を見つけたら実行時コード生成で関数呼び出しに変換する。 対応する関数は、AttibuteFunctionを継承するようにし、メインの関数を実行するまでHashSetで持っておく。 AttributeFunctionの名前の先頭は
\ufdd5
で始まるようにし、引数にはLiteralFunction(とValueFunction)のみ使用できるようにする。具体的に
をこのようにコード書き換えする
欠点
前例
なし。
未確定の設計
アーカイブ
注釈の構文は?
#name arg1 arg2 ...
前処理指令と被って変な感じ。前処理ではあるけど。@name arg1 arg2 ...
Javaっぽい。[name(arg1,arg2....)]
C#っぽい。丸括弧使えるからわかりやすい。解析めんどそう。引数にValueFunctionを使えるようにする? 変数が注釈に使えるのは変な感じ。でもValueFunctionで実装されてる
true
とかのリテラルはどうする?