言語ネタ

C言語の正しいヘッダファイルの書き方

最近、仕事でC言語での組み込み系の開発に携わっています。 開発中のコードを眺めていると、ヘッダファイル内にstatic関数のプロトタイプ宣言を記述していたり、ヘッダファイル内で不必要に他のヘッダファイルをインクルードしているなど、ヘッダファイルの…

Rubyメソッドのアラウンドエイリアスについて

Rubyで末尾再帰最適化をする。を読んで思ったこと。 このエントリやメタプログラミングRubyでメソッドのアラウンドエイリアスを定義する際に、古いメソッドに別名をつけてから新しいメソッドを定義しています。以下はメタプログラミングRubyの例。 class Str…

Matlabでポインタ(間接参照)を実現する

私は、このブログではPythonやRubyのことばかり書いていますが、仕事ではMatlabという数値計算ソフトを使っています。 このMatlabというソフトは、ツールとしては非常に便利ですが、ことプログラミング言語として見ると、非常に大きな欠陥があります。 それ…

PythonとRubyの変数のスコープのまとめ

僕が普段使用するPythonとRubyの変数のスコープについてまとめてみました。 Python 1. if文やfor文などの制御構造はスコープを作らない。 次のプログラムでは、if文の内側と外側のスコープは共通なので、if文内でaが上書きされてa=1が出力されます。 a = 0 i…

高階関数としてのデコレータに関する考察

デコレータはPython2.4で追加された構文で、関数やメソッドのラッピングを行ないます。 @deco1 def foo() pass @deco2(args) def bar() pass このプログラムは以下のプログラムと等価です。 def foo() pass foo = deco1(foo) def bar() pass bar = deco2(arg…

Pythonのcontextlibが便利

Python2.5から使用可能なwith文を使用すると、try...except...finally パターンをカプセル化することができます。 (Python2.5の場合、次の一文をファイルの先頭に記述する必要があります。) from __future__ import with_statement このwith文を使うと、例え…

PythonでRubyのStruct風の構造体を実現する

Rubyでは,Structクラスを用いることによって,特定のフィールドを持つクラスを簡単に作成することができます。 Foo = Struct.new("Foo", "foo", "bar") f = Foo.new(1, 2) p f.foo # 1 p f.bar # 2 一方、Pythonの場合、namedtupleというライブラリで同様の…