2009年5月24日日曜日

v8とC++オブジェクト

JavascriptのオブジェクトとC++のオブジェクトをつなげてみる。
まともに使うとなるとやることはたくさんあるが、
最低限必要なものはわかった。

SetInternalFieldでJavascriptからは見えない、C++ポインタを設定するのがみそ。

main内で明示的に初期化と終了をしているのは、
main前後に持ってくると不都合な場合があるから。
listが自動開放になっているのは手抜きです。

メモリリークチェックしてないや。
コメントがないのは、わざとです。

2009年2月2日月曜日

DoxyComment

自分用のDLLを作成して、コメント生成をカスタマイズしました。
ICommentProviderを実装していけばよいです。
PropertyGridで設定できるようにしておけば、
IDEからのカスタマイズが可能です。
EnvDTEやVCCodeModelのドキュメントが少なかったり、
無いに等しいドキュメントだったりなのが辛いです。


namespace MyDoxyComment
{
 [CommentProviderFriendlyName("My Provider")]
 public class MyProvider : ICommentProvider
 {
  //VisualStudioのオプションで設定できるメンバ
  //PropertyGridが使用される
  private int _property1;

  public int Property1
  {
   get;
   set;
  }

  public string[] CreateFunctionComment(
    Microsoft.VisualStudio.VCCodeModel.VCCodeFunction codeElem)
  {
   return new string[]{"hoge"};
  }
 }
}

2009年1月13日火曜日

VisualStudioにDoxygenコメントを自動挿入

Doxygenなど、コメントの書式化とドキュメント生成ができるツールがないと
仕事も趣味もやっていられません。

少しでも作業能率を上げようと、今更ながら
Doxygenのページにも紹介されているDoxyCommentを導入します。
http://doxycomment.sourceforge.net/#introduction

やはり自分の書式とは違うため、デフォルトでは使いにくいです。
軽いオプション設定はVisualStudioのオプションに統合されるのですが、
コメントの位置やインデントの有無ぐらいでした。

コメント生成部はDLLになっており、自分用のコメント生成部を作成して
拡張してもらう作りになっていました。
手が空き次第、自分用のものを作成しないと

プログラマ用のツールなので、こういう拡張部分の公開の仕方は素敵です。

2009年1月3日土曜日

引数と渡し方

新年、初出社日用のネタのため、古い記憶を整理するため。
昔のノート等を引っ張り出すのが億劫ですので、
Wikipediaや他サイトを多分に参考にします。本来のBlogっぽい。
手続き型言語についてまとめます。関数型言語はもっとややこしいので
ここでは考えないことにします。

[仮引数と実引数]
仮引数は、サブルーチンの定義において、渡されるであろう値に
名前を付けたもの。
実引数は、サブルーチンの呼び出しにおいて、実際に渡される値。

[値渡し]
別の場所に変数値のコピーを作り、コピーをサブルーチンに渡す。
サブルーチン内で値を変更してもコピー元を持つサブルーチン
呼び出し側には影響がない。

採用している言語:C言語、Java

Javaについて参考:
http://java-house.jp/ml/archive/j-h-b/026214.html#body
参照型という”型”と参照渡しという”渡し方”を一緒にしてはいけない
というお話しともとれる。

[参照渡し]
変数への参照をサブルーチンに渡す。サブルーチンで引数の値を
変更すると呼び出し側の変数の値も変わる。

採用している言語:Fortran
サポートしている言語:Pascal、C++、C#

Pascalで、仮引数名の前にvarを付けると参照になります。
inとかoutとか付けていたように思っていたのは完全に記憶違いでした。
つまり、私が仮引数名にinとかoutとか付けていたのでした。
恥ずかしいですね。

C++では計算コストに成り得るコピーを削減するため参照渡しが使われる
ことが多い。その際、呼び出し側に影響を与えないことを宣言するため
constと併用されることもある。

[名前渡し]
ALGOLを知らないのでわからないです。
名前そのものを渡す。仮引数が参照されるたびに名前が評価され、
仮引数名と実引数名が置換される。

採用している言語:ALGOL