2003-01-01から1年間の記事一覧

Luabind

Lua

http://luabind.sourceforge.net/ メタプログラム系のC++ラッパ。lua_stateの取り回し方法として module(L) [ //lua_state Lの有効範囲 ]; と記述させるのはもはや感動的ですらある。C++を読んでいるとは思えん。本当に動くのかこれ^^;と思ったら現在beta…

覚書き

Lua

関数名を指定せずにcallした場合http://lua-users.org/wiki/CppLuaDataPassingTutorialグローバルが実行される……のかな? という事は、グローバルコードはロードされただけでは実行されないって事? ああ、まあそりゃそうか グローバルのチャンク=グローバ…

で、なにが言いたいのかというと

理解はできるんだけど、lua_getglobalっていう名前は直感的じゃ無いですよ旦那(笑)lua_pushLuaFuctionとかに#defineしますかねー、、、

環境テーブル

環境テーブルとはなんでしょうか? Luaでは、グローバルに記述したあらゆるコードは環境テーブルのフィールド要素として格納されます。関数は、関数名をキー、関数の中身を値として連想配列に格納します。値として格納されるのは、実際には関数への参照を持…

lua_getglobal

lua_getglobalは、以下のようなマクロです。文字列をスタックトップに積んだ後に、その文字列をキーにして、環境テーブルを検索し、対応するキーをスタックトップと差し替えます。 #define lua_getglobal(L,s) \ (lua_pushstring(L, s), lua_gettable(L, LUA…

内部関数呼び出し

Lua

C++からLua内の関数を呼び出す際、関数名をlua_getglobalでスタックに積むわけですが、なぜ「lua_getglobal」なのでしょうか? 以下に解説します

作業中

Lua

毎回lua_stateを渡さなければならないCっぽさがむかつくので、lua_stateをラップするだけの単純なC++クラスを作っていたのですが、よく考えたら、Luaから呼び出されるC関数は、引数にlua_stateを取るので、その時このクラスは役に立たない(もげー)。な…

Luaについて気になる事

日本語の資料が少ないですね。元々特殊なライブラリがあるわけでもないので、サンプルコードを作る程でも無いのでしょうが、、、。 気になるのは、4.0でタグメソッドという、なんというか、Luaでオブジェクト指向言語もどきを実現する技術があったのですが、…

Luaリファレンスマニュアル読了

Lua5.0のリファレンスマニュアルが読み終わりました(日本語訳を作った方に感謝)。もしかしたら今後数年間使い続ける事になるかもしれない言語なので、導入には慎重になります。基本的には問題なさそう。 注目すべきは「たいしたことができない」事でしょう…

組み込み指向スクリプト(?)Lua

Lua

年内の作業は、まずLuaをタスクシステムに組み込む事です。LuaはVBやPascalライクなスクリプト言語で、言語思想自体が別言語から呼び出される事を前提に設計されており、多くのソフトウェアで採用されている、オープンソースな言語です。 コト、ゲームにおい…

今後の方針決定

次のプロジェクトがC++ベースになることが決定してしまった為、YaneSDK4D*1を利用する事が出来なくなってしまいました。そんなわけで、独自にYaneSDK3rdの拡張(というかライブラリの追加)を行うことになりました(トホホ……)。 *1:奇跡のゲームライブラリY…

C言語のアルゴリズム辞典を読んでいると

"getchar()でEOFを取得したらプログラム終了"みたいなコードが散見するんですが、その「EOF」とやらを打ち込む方法がわからないよ!(笑)EOFのエスケープシーケンスは「^Z」です

最近気になっている物

YAMLというXMLの簡易記述フォーマット(だと思う)。 これ、パーサの実装は結構あるみたいなんだけど、仕様書の日本語訳が見つから無い。なんでだろう? ……とか行ってたら、RubyでもD言語でもパーサの実装があるわ、誰でも話題にしているわでちょっとビック…

自分がプログラマであると言い切れない理由

仕事ではイントラ内Webシステムしか作ってない自分にはわかりやすいコンプレックスがあります。アプリケーションが作れない。はずかしっ

プログラミングの限界を感じるとき

みはえるはプログラミング哲学として「同じ事を記述するのに複数の方法があるのは効率が悪い」と考えています。これは、あまり多く賛同を得られないようです^^;。 なぜこう考えているかと言うと、多人数でプログラミングする際に、人によって異なるコーデ…

C99を知ってますか?

D言語リファレンスを和訳されたK.INABAさんに、トークンの説明の訳について質問メールをしたところ、面白い話を聞かせて頂きました。ちなみに質問自体は原文自体が間違っていて、かつみはえるの質問は的を外していました^^;C言語には、現在「C99標準」と…

目に見えない物

「オブジェクト指向スクリプト言語Ruby」を飛ばし飛ばし読みました。若輩者が言うのもなんですが、なんとまあ精緻な言語でしょうか。スクリプト言語としての特性(短いコードで必要な処理がすぐ書ける)を犠牲にせずに、オブジェクト指向言語体系が組み上げ…

まだかなまだかな〜

『ヴィルトのコンパイラ構成法(Niklaus Wirth著・滝沢 徹/牧野祐子訳/アジソン・ウェスレイ・パブリッシャーズ・ジャパン株式会社)』ISBN:4795297061発送が1週間延びた。やっぱ手に入らないのかな……。

Welcome to D world

ながらく巷の間で、といっても私とチーム仲間の2人ですけども(ちっとも巷じゃないよ!)、ホットなプログラミング談義は「いつになったらやねうらお(師匠)は次世代言語とやらの開発を始めるのか!?」という物でした。当然羨望と期待を込めて、ですよ。…

さて、ではMix-inとはなんでしょうか。

Mix-inは方法論であり、クラス実装上の技術の事です。多重継承を行う代わりに、単一継承と、Mix-inクラスと言う、決められた形式で実装されたクラスを継承をする事をMix-in継承と呼びます。以下の2つの条件を果たしたクラスがMix-inクラスと呼ばれます。・…

Mix-in(2)

C++

前回多重定義がもたらす問題点をいくつか挙げました。どれも致命的な問題では無く、プログラマが細心の注意を払えば回避できる所です。が、そもそもなぜプログラマがそんな事に注意を払わなければならないんだという文句があるわけです(笑) Javaでは単一継…

で、なにがいいたいのかと言うと

1で書いたダイアモンド継承の問題は、読んでいただければわかるとおり「ダイアモンド継承が起きる(または起きない)危険性をどこかで処理しなければならない」という点にあります。しかし、これは実装上の問題であって、プログラマ考慮する事では無いと思…

4愚痴(笑)

C++やってりゃわかると思うんですが、多重継承で実装を再利用するタイプのコードを書いてると、インターフェイスベースのJavaと違って、実装が散逸してしまって非常に可読性が低いコードが出来上がってしまいます。え? 俺が悪いの?(笑)

3複雑さ

1,2を見てもらえばお分かりかと思いますが、多重継承は(プログラマ)にとって大変複雑な物です。ただでさえツリーのように継承図が出来てしまう上に、ダイアモンド継承*1があると継承図がグラフ化してしまうためより複雑になってしまいます。正直、誰か…

2名前衝突

これは多重継承とは別に存在する問題だと思うのですが一応 複数のクラスを継承して新しいクラスを作りたいとします。この時、個々のクラスにおいて同じ名前のメンバがあった場合、名前衝突になります。実際問題として、外部からこのメソッドを呼び出しても、…

1 ダイアモンド継承の問題

クラスAから派生したクラスA1とA2があるとして、このA1とA2を多重継承したクラスBを作った場合、このような継承の形を(継承のパスがひし形になる事から)「ダイアモンド継承」と呼びます*1。 話はちょっとずれてキャストという物についてちこっと説明します…

Mix-in

C++

最近(?)のオブジェクト指向の流れの一つにMix-inという技術があるのですが、いまいちなんの役に立つのか良くわかってませんでした。言語によって"Mix-in"自体の意味も異なるようだし。で、最近Rubyの本読んでてこのMix-inの説明があり、自分的に納得でき…

タスクベースプログラミング言語

最近友人と「コンピュータゲーム専用のプログラミング言語というのは可能か?」という話をしていました。これはゲーム用のライブラリルーチンが豊富という意味ではありません。そういう類の物なら良質な物が多数発表されています。 サウンドノベルなど、ジャ…

最近買った本

『プログラミング言語C第2版』 いわゆるK&R本(カニ本という蔑称もある)。基本中の基本なのだろうが、今更という気がして持って無かったので一応買いました。『プログラミング言語理論への招待(Bertrand Meyer著・酒匂 寛訳/アスキー出版)』ISBN4-7561-…

日本語プログラミング

さて、日本語識別子をC++で使う為には障害がいくつもあります。なんせ、言語仕様で対応していない訳ですから^^; 1:コンパイルできない 2:1に対応できたとしてもデバッグできない 3:エディタ上でインテリセンスが効かない 1や2は致命的なのでなに…