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

上位階層で使用される言語ほど寿命が短い

例えば、Perlは、PHP、Ruby、Pythonに完全に置き換えることが可能だが、C++は、Java、C#に置き換えることはできない。上位階層で使用される言語は開発サイクルが短いが、下位階層(つまりベース)として使用されるプログラムは使用期間が長いので、新しい言語…

デバッグの方法

デバッガを使用できる環境にあるのなら積極的に使用すべきだが、一般的な方法を考えてみた。以下の手順である。 1) 問題のある処理に関連するデータを知る 2) そのデータの初期化、代入、参照している箇所を見つける 3) そのデータの値を表示してみる もちろ…

ソースコードの可読性

最近あるソースを見ていて、実は多少複雑な処理でも、動きさえすれば良いソースを書くことは非常に簡単で、読みやすいソースを書くことは非常に難しいのではないかと思っている。以前はコードを書くのもそれなりに難しいと思っていたが、保守性など何も考え…

IronPython

IronPythonは、非常に気になっているが、作者はJythonと同じというのも面白い。それにしても、IronPythonにしろ、Jythonにしろ、流行っている気配は全く感じられない。 これから流行るとしたらOSがVistaになれば、CLI上でGUIの作成やテストができるので(XPで…

ハッカーと画家

ネットでいくつか読んだが、Paul Grahamのエッセイは結構面白い。特にお気に入りは、「簡潔さは力なり」である。 http://www.shiro.dreamhost.com/scheme/trans/power-j.html これを初めて読んだとき、まさに「これだ!」と思った。しかしながら、スクリプト…

みんなのPython

http://www.amazon.co.jp/gp/product/479733665X/ref=pd_bxgy_img_a/250-8382914-9906617?ie=UTF8今さら初心者向け?のPython本が出るみたいだが、どうなのだろう…。

enumerate

シーケンスのループでインデックスを使用するには以下のようにする。 >>> seq = ('a', 'b', 'c') >>> for idx, val in enumerate(seq): ... print idx, val ... 0 a 1 b 2 cenumerate(seq)の代わりに、range(len(seq))を使用しても良いのだが、enumerate()が…

SWIG

最近、SWIGというものを知った。 http://www.swig.org/ SWIGとは、Pythonなどのスクリプト言語からC/C++を呼び出すためのコードを自動生成してくれるツールである。標準のツールに入っていてもおかしくない機能であるが、実用性に関しては使用してみないこと…

GC

例外安全とは関係ないが、Pythonは、参照カウントによりメモリ管理を自動化していると最近知ってびっくりである。またもやRubyに負けたと思ったが、参照カウントでも十分なのかもしれない。 とにかくメモリ管理は面倒であるが、参照カウント程度であれば、C+…

例外安全について

C++

「Exceptional C++」の例外安全の部分を読んだが、印象に残ったのは、 メモリ管理の部分を別のクラスに切り出す という部分だった。メモリ管理は実装詳細だと思うので、常にカプセル化すべきだが、データ構造をカプセル化した上で、さらにもう一段階カプセル…

シーケンスとインデクシングとスライシング

(0, 1, 2, 3)を(1, 2, 3, 0)にする方法は、以下が一番簡単だと思われる。 >>> a = (0, 1, 2, 3) >>> a[1:] + a[0:1] (1, 2, 3, 0)結局、2つのスライシングで取り出したタプルを単に結合している。しかし、新たなタプルを作成しているので効率はあまり良くな…

データの塊を持ち歩く方法

一般的な話だが、複数のデータをまとめる方法としてすぐに思いつくのは以下の3つである。 リスト ハッシュ クラス 特に、ハッシュは処理のロジックを非常に分かりやすくしてくれる便利なデータ構造であるので、ハッシュをうまく使えるようになるだけで、可…

zip関数

zip関数は、リストの横の並びを縦に見てくれる。 a = (1, 2, 3) b = (4, 5, 6) c = (7, 8, 9) print zip(a, b, c) #=> [(1, 4, 7), (2, 5, 8), (3, 6, 9)] a = (0, 1, 2, 3) print zip( a, a[1:]+(a[0],) ) #=> [(0, 1), (1, 2), (2, 3), (3, 0)]これは、1…

型なし言語の欠点

以前から動的言語の型宣言がないことの欠点は何かを疑問に思っていたが、2点ほど気がついたのでメモ。問題が発生するのは以下のケース。 既に使用されている変数を使おうとしてスペルをミスした場合 ある変数を追加するときに、同じスコープ内に同じ名前の…

Direct3D

OpenGLを少し勉強したが、資料が少なく勉強が難しい。3D CGはDirect3Dでやることにした。 お遊びなのでとりあえず動けば良いことにした。いつものごとく完成する前にやる気なくなりそうな勢いもあるので。 追記: OpenGLに比べて、Direct3Dの欠点は、Windows …

OpenGL

最近、FEMのプリポストを作りたくて、OpenGLの勉強を始めた。GUIは、wxPythonを使用するつもりだが、3D CGとGUIは共に色々選択肢はある。 とりあえず、メジャーなライブラリを使いたいので、3D CGはOpenGLでOKとして、GUIは、Tkinterが標準なので、どちらが…

XAML

最近、MSDN TVのデモでXAMLが気になっている。XAMLとは時期Windows OSで使用できるアプリケーション記述用のマークアップ言語であるが、GUIのプロトタイプを作ったり、ドキュメントの作成用としても使えるらしい。 C#やIronPythonと密に連携できるみたいなの…

OOPのメリット(再考)

OOPのメリットの「データ型の抽象化」に関してもう少し分かりやすい表現を考えてみた。結局、以下のように考えられる。 書く側(supplier側)は、複数のクラスを独立して実装できる 呼び出し側(client側)は、違った型のクラス(のオブジェクト)を同じものとして…

O(n) vs O(nlogn)

Pythonは、インタプリタ型の言語なので、インタプリタのオーバーヘッドに気をつけなければならない。以下のようなパフォーマンスのテストを行ってみた。 import time def min1(lst): min_v = lst[0] for v in lst: if min_v > v: min_v = v return min_v def…

C++はグッドか?

C++

はてなの日記経由でC++に関する面白いサイトを見つけた。 Bjarne Stroustrupインタビュー http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html この記事は明らかに作り物で、C++に対する皮肉だと思うのだが、目の付け所は面白い。私はC++は勉…

変数に関して

6月20日の自分の日記でPythonの変数の概念を勘違いしていた。私は、整数型の値を持つ変数は、値型として扱われると思っていたが、そうではなかった。つまり、型によって値型と参照型を内部で自動的に分けていると思っていたが、それは間違いだった。 以下の…

データの状態遷移

OOPの構造的な側面を考えてみると、設計時に以下の2つの手順を踏むことになる。 step1) オブジェクト(の範囲)を決める step2) オブジェクト間の関係性を決める しかし、構造的な側面よりもデータの状態遷移の方が重要に思える。 結局、デバッグの作業という…

GCは偉大

プログラミングをしていると、メモリ管理がかなり面倒くさいし、バグも起きやすい。 メモリ管理は本来やりたいこととは全くの別モノで、単なる実装上の都合である。 GCのあるプログラミング言語はすばらしい。自動的にメモリ領域を拡張してくれるリストなど…

Web系の動向など

Web

最近よく聞くWeb2.0というのは明確な定義がなされてないらしい。私はWeb系は専門ではないので、AjaxやRuby on Railsが流行っているくらいにしか知らないし、JSPとかまだ使われているのかさえ知らない。PHPもかなり使われているらしいが、実際どれくらい使わ…

静的 vs 動的

面白いページを見つけた。 RubyについてJavaプログラマが知るべき10の事柄 http://d.hatena.ne.jp/brazil/20050816/1124136877 その中で、次のような記述がある。 長い間私は、頑固な静的な型付け支持者でした。Cを使っていた頃に、身をもって教訓を得ていき…

事前条件

事前条件(契約)とは、契約プログラミングでは、関数が呼び出される前に満たすべき条件ということだが、あるモジュールや処理において、ある条件を既に満たしていることを前提として処理を書くことで汎用性やモジュール性が高めることができる。 例えば、A → …

ふつける

今日、「ふつうのHaskellプログラミング」(「ふつける」)を地元の書店で買ってきた。「Exceptional C++」も買おうと思ったのだが、なぜか売り切れていたので、アマゾンで予約した。「ふつける」は、まだ少ししか読んでないが、「入門Haskell」よりも読みやす…

OOPのメリット

昨日の日記でOOPのメリットを説明している記事を見かけたことないと書いたが、少し考えてみて思い出した。 私が良く見るサイトの掲示板で、OOPのメリットは、以下の2つであると書かれていたのを思い出した。 データの抽象化 マルチプルインスタンス マルチ…

仕事と趣味とOOP

プログラミング言語に何を使用するかの選択は難しい。仕事では当然、過去の資産やアプリの都合など色々な要件によって決定される。ある意味始めから決まっていたり、選択肢がないことも多いと思う。 しかし、趣味でプログラミングするなら、面白い機能がある…

関数呼び出し vs forループ (再検討)

今月の16日の日記の内容を再検討してみた。 実戦のケースで計測してみたり、簡単なサンプルを作成してみたりした結果、forループの方が若干早い傾向にあるような気がする。 関数呼び出しを伴ったリスト内包表記の方が若干速くなるケースもあると思うが、ほと…