議論/MonAPI/名前空間と関数名とCインターフェース


Top / 議論 / MonAPI / 名前空間と関数名とCインターフェース

MonAPIの関数名に関する議論です

お願い

ライブラリ提供経験のありそうな、Yumeさん、shadowさん、Gakuさん、.mjtさんあたりにこのあたりの御意見をうかがいたく。

背景

MonAPI に追加した、terminal::CommandParser で itoa が欲しくなったが、MonAPI にはなかった。
MonAPI.DLL の独立性を保つためには他のライブラリをリンクするのでなく、MonAPI に同機能の関数を追加すべきなのだけど、がいろいろ迷うポイントがあり、ここに思ったことを書いてみた。

迷いポイントと仮結論

C言語インターフェースを用意すべきか?

MonAPI は基本 C++クラスライブラリであるが、一部C言語インターフェースも用意されている。
主に syscall_xxxx 系がこれにあてはまる。

今回も用意すべきだろうか?
→MonAPI内から使われる場合は不要。MonAPI外からは使われることはあまりなさそうなので用意しなくてよい。

Linuxからの利用しやすさ

MonAPIの一部をのぞいたライブラリは Linux からも利用できるように配慮されている方が望ましい。
そうすれば、MonAPI のテストが Linux 上で可能になるからである。
例えば CommandParser のテストで MonAPI の itoa を参照している場合などが想定される。
これは次項であわせて考える。

名前空間/関数名

itoa のままの名前だと、libc などと被ることが容易に想像できる。
対処方法は

  1. monapi_itoa のように monapi_xxx プレフィックスをつける
  2. Integer::toString のようにクラスで包む
  3. monapi::itoa のように名前空間を利用する
  4. monapi::interToString のように名前空間 + 名前変更

などが挙げられる。
前項「Linuxからの利用しやすさ」を考慮すると、関数単位でリンクする/しないを管理できた方がうれしそうだ。
例えば itoa を使いたいだけなのに、他の MonAPI 関数をリンクせざらるを得ない構造だと、使い勝手が悪い。
これを考慮すると4つの方法はそれぞれ

  1. monapi_itoa のように monapi_xxx プレフィックスをつける。1関数1ファイル。
  2. Integer::toString のようにクラスで包む。そのクラスが他の Mona 依存のMonAPIに依存するかどうかを慎重に吟味する
  3. monapi::itoa のように名前空間を利用する。1関数1ファイル。
  4. monapi::interToString のように名前空間 + 名前変更。そのクラスが他の Mona 依存のMonAPIに依存するかどうかを慎重に吟味する

のような制約つきの構造にすべきであろう。

→現時点で仮結論として「3.monapi::itoa のように名前空間を利用する。1関数1ファイル。」のような構造にしようと思う。

コメント

コメントはありません。 コメント/議論/MonAPI/名前空間と関数名とCインターフェース?

お名前:

MENU

now: 2

リンク


最新の20件
2018-05-03 2017-09-29 2017-04-25 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-06-05 2016-05-29 2016-04-15 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 2039, today: 1, yesterday: 1

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:02 (3769d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.029 sec.