本当は仕事初めなのだが、
があるのに、今日になって
4日前に〆切だった原稿についてどうなってますか
というメールが来た。がーん、完全に忘れてたよ。 っていうか、そういう奴なんで、〆切当日に催促してください、お願いします。> 担当の人
仕方がないので、オフィスには行かないで(移動時間もったいない)、 自宅で超特急でスライドを仕上げて(今日〆切)、 夕方から東京に向かう飛行機で4日前〆切の原稿を仕上げ、 ホテルについてから日経Linuxの原稿。
これで私も立派なライターです(〆切を忘れる人は立派じゃありません)。
今回の日経Linuxのテーマは「AJAXとJavaScript」。
ちなみに4日前〆切の原稿は「Rubyレシピブック第二版」の前書き。 この調子だともうすぐ出るはず。
は、IDEであるという話。
あんまり、リファクタリングツールとか使ったことないんだけど (私にとってはEmacs全体が巨大なリファクタリングツールなので)、 慣れ親しんだ人には必須なのかもしれない。
動的言語にはリファクタリングツールは難しいって思ってる人もいるみたいだけど、 リファクタリングツールの元祖は動的言語そのものであるSmalltalkなんだから、 難しいってことはないだろう。RubyだとRipperみたいな構文解析をする ライブラリの使い勝手がもっと良いとリファクタリングツールが作りやすい かもしれない。ParseTreeとか?
「なぜLispを学ぶべきか」という話。
このエントリだけを見るとRubyでいいじゃんって思っちゃうんだけど、 S式を使った自己書換とかマクロの駆使とかはRubyでは逆立ちしてもできないね。 あと、MOPという概念がRubyにはないので、それを使いたい人も Lispが良いと思う。
今風のプログラマ。
この分類で見る限り、私は限りなく1.0的だなあ。 以前の「ニュータイプ/オールドタイプ」の時もオールドタイプだったし。
まあ、結構古いプログラマなんで仕方がないと言えばそうだし、 昨今の2.0ブームも下積みになる1.0の層があってこそ存在できるわけだし。
1.0万歳。
でも、真似しなさいとは言えないな。
当日催促じゃ間に合わないような。
分量によるでしょうね。今回はA5版1ページでしたから。
それでも4日後は....。
> リファクタリングツールの元祖は動的言語そのものであるSmalltalkなんだから、難しいってことはないだろう
クラス名やローカル変数名の変更とかはそれほど難しく無い
と思いますが、メソッド名の変更はかなり難しいんじゃないか
と思います。例えばクラスAのメソッドfooをbarに変更したい
として、比較的安全にできるのは、クラスAを継承してる
クラスのメソッドfooをbarに変更することくらいですよね。
duck typingを使ってる可能性があるため、継承関係に無い
クラスのメソッドfooをbarに変更する必要がありますが、
これは無関係のメソッドfooをbarに変更してしまう危険性
があるので、できない。あと、メソッドの呼び出し側の
名前も変更する必要がありますが、そもそもどの型に対して
メソッドを呼び出しているかの情報がテキスト上は存在しない
ので、うまく型推論してやるとかしないと難しそうな気が。
その変換を機械的に行うのは難しいでしょうね。
でも、人間がちょっと手助けしてやればいいんじゃないですかね。
Smalltalkのリファクタリングブラウザの仕様経験はありませんが、
だいたいそういうことをするツールのような。
人間がちょっと手助けをしてあげるようにすることで、
確かに使えるものにはなると思うんですけど、その手助け
の部分で人間が間違うことがあるわけで、安心感という点で
微妙だと思うんですよね。それだったら、grepして置換する
のとあまり変わらないじゃん、みたいな。
一方、Java/C#のリファクタリングツールによる名前変更は、
基本的に間違えない(リフレクションを使用している
場合などを除く)ですから、安心して行うことができます。
で、結局何が言いたかったかというと、やっぱり動的型言語
で、特に名前変更のリファクタリングをちゃんと行うツールを
作るのは難しいのでは、ということです。
えーと、難しいという点を否定したことはない(っていうか、厳密な安心という意味では不可能では?)ので「そうですね」以上の返答はないのですが。
Smalltalkの話を伝え聞く範囲内では「間違う可能性のあるリファクタリングブラウザ」でも嬉しいと思う人はそれなりにいるだろうということは分かります。
あと、「名前変更のリファクタリングをちゃんと行うツール」が欲しいと言う理由で静的言語を選ぶ人も、リファクタリングツールは間違えてもいいから動的言語を選ぶ人もいるだろう(私は断然後者)ということも分かります。