2011/06/11現在のステータス。
id:eel3:20100614:1276517766 から1年経て、こうなっている。
よく使っている
- AWK (gawk)
- 単純なテキストレコードの処理にはAWKで十分。自作ツール実装での使用頻度は減りつつあるが、依然としてワンライナーでは重宝している。自作ツールで使う場合も、全てAWKで書くのではなくてシェルスクリプトやmakeと組み合わせてワンライナーすることが多くなった。
- C++
- 時々お仕事で使う。最近はツール自作時にbetter Cとして使うこともある。というかSTLを含むC++の標準ライブラリって、Cの標準ライブラリと比べると涙が出るほど充実していると思う*1。低水準の処理を行いつつ便利な機能で実装時間を短縮できる点は便利。だけど機能多すぎ/複雑すぎな所は何とかならないものか。
- C言語
- お仕事での主力言語。シンプルで且つ低水準の世界が垣間見れる所が大好き。だけど最近の他の言語と比較すると、シンプルすぎて安全機構が欠けていたり標準の便利機能が少なかったりするので、入門用の言語としては薦められないと思う。
- DOSバッチファイル
- プログラミング言語に含まれるかどうか不明だけど、含めてしまう*2。ちょっとした自動化や、複数ツールを組み合わせて使う時のラッパーとしてよく使う。コマンドプロンプトはシェバング(shebang)に対応していないので、スクリプト言語で書いたツールを起動するラッパーとしても多用している。
- JScript on WSH
- 他人が使うテキスト処理ツールの実装に使って以来、時々触っているのだが、今やWindows用の配布可能な小ツールを実装する時の定番言語となりつつある。HTAと組み合わせて簡易なGUIツールを実装できる点も便利*3。自分の中では「Windows上で他人も使えるツールを書くためのLL」という扱い。一番のメリットは「JavaScript(ECMAScript)でフィルタを書ける」というか、普通にOS上で動作するツールを書ける所だと思う。無名関数もクロージャも大好き。
- Lua
- なかなか使う機会が無いと思っていたが、Wiresharkのパケット解析スクリプトを書く機会があった。これはもう「職業柄」の範疇だと思う。ところでCのプログラムに組み込む辺りを本格的に勉強して、仕事が楽になるなら応用してみたいのだが、何か適当なお題はないだろうか?
- Ruby
- AWKに代わって自作ツール実装での使用頻度が増えている。テキスト処理でも重宝するけど、バイナリデータへの変換が絡んでくるとAWKよりもRubyを使った方が効果的だと思う。最近はirbやワンライナーで電卓代わりに使うスタイルが習慣化してきて、ますます手放せない。やはりto_s(16)やto_s(2)で基数変換して表示できる所が大好き。
- VBScript on WSH
- JScriptほどではないが「Windows上で他人も使えるツールを書くためのLL」扱いしている言語。Windows Server管理の関係で触っている。というかWebで入手可能なWSHのサンプルの大半がVBScriptで書かれていたり、ADSI関連のコレクションをJScriptで舐めれなかったりするので、半ば必要に駆られて使用しているところ。明快に記述できる文法は評価に値すると思うけど、スクリプト言語としては少々冗長な気がする。配列は自動拡張しないし、組み込み関数はプリミティブ気味だし、冗長気味な文法との合わせ技で更にコードが冗長気味になっていく気が……。ところで文法というか言語仕様的なものの詳細なドキュメントが見つからないのだが、どこかに無いだろうか?*4
- Windows PowerShell
- その昔(まだv1.0だった頃に)ワンライナーで弄くってみたけど全く歯が立たなかった。現在v2.0でリベンジ中。ツールとして色々と興味深いし、言語としても結構便利で使いやすいのだが、コマンドプロンプト上に構築した既存の作業環境との親和性が微妙にイマイチなのが玉に瑕。それにしてもPowerShell 2.0に対応した言語解説本(日本語)は出ないのだろうか。1.0の頃の本だと思うけど『Windows PowerShell イン アクション』を買うべきなのかなあ。
- XSLT
- プログラミング言語に含まれるかどうか不明だけど、DSL扱いで。昔、力任せに書いたレガシーコード(XMLからXHTMLに変換)を現在も使用中。最近久しぶりに触ったけど、やっぱり定型的なXMLの変換はXSLTで記述するのが一番楽だと思う。
- make (Makefile)
- プログラミング言語に含まれるかどうか不明だけど、DSL扱いで。よく使うけど、大抵は先人の遺産をコピペしてガシガシ書き換えているだけで、中身はあまり理解できていない気がする。
- sed
- プログラミング言語に含まれるかどうか不明だけど、DSL扱いで*5。テキスト処理用。シェルスクリプトやmakeやawkと組み合わせて使う。
- シェルスクリプト (/bin/sh)
- プログラミング言語に含まれるかどうか不明だけど、含めてしまう。基本的な用途はバッチファイルと同じ。MSYSを使っていることもあり、シェルスクリプトで主要な処理を記述しておき、コマンドプロンプトからラッパーのバッチファイル経由でシェルスクリプトを叩くこともある。ただWindows上では処理速度が妙に遅くなる点が不満*6。
あまり使っていない
- Common Lisp
- 2009年に勉強しようと思い立ったものの、未だに進んでいない。階乗とかハノイの塔とかiotaとかは書いたけど、目標は「ちょっとしたツールを自作する」ことなので、まだ道は遠い。最近は時々CLISPをワンライナー等で簡易電卓代わりにしている。
- Emacs Lisp
- 「.emacsにコピペ」限定で。Common LispやSchemeを触った為か、最近何となく内容を追えるようになってきた気がする。でも書けない。
- Go
- hello, worldとFizzBuzzぐらいは書いたが、もう少し文法的に深入りしたいと思う今日この頃。時間ができたら並列処理周りも勉強したい。goroutinesか……。
- Perl
- 時々、やむをえない事情で触ることがある。だけど基本的によく分からない。何というか、あの記号の羅列っぽさに中々慣れないというか、自分は余りに自由度が高すぎる言語は苦手だと気づいたというか。
- Scheme
- GaucheのWindowsネイティブ環境用バイナリは実験版だけど、私が触る分には何の支障も無い*7ことに気づいた今日この頃。Common Lispの代わりにGaucheでSchemeの勉強をする方向に転換しようか検討していたら『Scheme手習い』が出たので、本を片手に少しずつ勉強中*8。一応、階乗とかハノイの塔とかiotaとかは以前書いたのだけど、もう忘れてしまった。
最近使ってないが、縁は切れてない
- Active Basic
- VBScripを触りだした影響で、時々思い出しては弄くっている。昔ほんのちょっとだけ触ったことがあったが、すっかり忘れてしまっていた。なので実質的に初めて触っているのと同じ状態。String型をバシバシ使用中 :)
- C#
- 勉強を兼ねてC# 2.0を少し触ってみた……のだが、気づいたらVisual Studio 2010をインストールしていた。C# 4.0で勉強し直すべきだろうか? 匿名メソッド等を使うスタイルでコードを書くのは問題ないけど、Javaみたいなオブジェクト指向プログラミングなスタイルでコードが書けない。私の頭の中には「オブジェクト=何らかの内部状態を抱え込んでいる」というイメージがあって、サンプルソース程度の短いコードではクラスを定義してオブジェクトを生成する意義を見出しにくい*9。クラスが必須ではないC言語やC++に慣れてしまった弊害かもしれない。
- CASL II
- 生まれて初めて触れたプログラミング言語その1。何だかんだで、後でCプログラマになってからも低水準での思考ツールとして微妙に役に立っている。
- COBOL
- FizzBuzzする為だけにOpenCOBOL 1.0をWindows上に用意して触ってみた。何というかCOBOLの名前と生まれた時代が示すように基幹業務(というかお金や帳簿が絡んでくるところ)向けの言語だよなあ、といった感じ。COBOL 2002のフリーフォーマットを採用するだけでも使い勝手が変わってくると思うのだが、世の中にはまだ広まってないのだろうか。
- Fortran
- Fortran 90やFortran 95あたりを触ってみたが、結構近代的な言語になっている。用途次第ではC言語よりもFortranの方が遥かにマシな選択になると思う。配列がらみの処理はFortranの方が得意だし、あと内部副プログラム的なものぐらいはC言語にも欲しい。一方で可変長な文字列の扱いに微妙な制限がある点はマイナスな気もするけど、まあ基本的に数値計算プログラム用の言語だからなあ。
- HSP (Hot Soup Processor)
- FizzBuzzで楽しんでみたが、何というか他言語経験者には受けが悪そうな命令体系だと思う。もっとも初心者がプログラミングという行為に深入りしないでWindows用のGUIな何かを作る分には、あの命令体系でも十分な気がしないでもない。ところで元々は「HSPで職業プログラマ的な良いコードを書くと、どんな感じになるか?」というネタを思いついて処理系を用意したのだが、そちらは全く進展がない。
- m4
- その昔テキスト処理用に触ろうとして、Windows用のどの処理系も日本語の置換に何かしらの問題を抱えていたので泣く泣く諦めた。思うところがあって最近少し触ってみたけど――なるほど、確かに中毒性のある言語*10だと思う。
- Objective Caml
- Common Lispを勉強するはずが、いつの間にか触っていた言語。一応、階乗ぐらいは書いた。時間が取れたらもうちょっとしっかりと勉強したい。
- REXX
- Open Object REXXの処理系を入手したのに、何故かReginaを入れてClassic REXXっぽい方向に走っていた。何というか、COMコンポーネントや.NET Frameworkと無関係でいられるのなら、バッチファイルの代替としてはREXXあたりが程よい塩梅だと感じる。
- T4 Text Template
- 「へえ、こんなものがVisual Studioに入っていたのか。機能多すぎで色々と便利なツールを見逃しているんだな、やっぱり」と思いつつ触ったが、なるほど、確かにテンプレート変換の用途ではピカ一だと思う。ただ処理系を手に入れる方法が「Visual Studioをインストールする」or「MonoDevelopをインストールする」なので、何となく「単体で手軽に使えるツール」ではないというイメージが……。まあC#やVBで処理を記述するので、それらの処理系が必要だという面での制約もあるのかもしれないけど。
- Tcl/Tk
- Tclでテキスト処理ツールを書いてみたことがあるけど、Tkは触ったことがない。Tclは結構独特な言語だと思う。構文が全てコマンドだったり、値が全て文字列だったり、実はリスト構造で構成されてたり、意外とTCPソケット通信が得意だったり……。それでも慣れれば結構使いやすい言語だと思う。プロトタイピングに向いている気もする。
- Vim script
- 少し触ってみたけど、その程度ではexコマンドの拡張(=コマンドの羅列)とは気づかない程度にはプログラミング言語らしいと思う。とはいえ妙なところで嵌ったり微妙に一貫性のない部分があったりするので、その辺りで好き嫌いが別れる気がする。
- 秀丸マクロ
- もう5年以上も秀丸エディタを使っているが、実は殆ど弄くったことがない。少しだけ触って感じたのだが、最近の便利な言語に慣れた身としては色々とモヤモヤ感のある言語だと思う。とはいえちょっとした拡張ツール的なものを手軽に作れそうではある。
これから(また)使うかもしれない
- F#
- OCamlは「Windows上で日本語を扱う」という視点では処理系がちょっと微妙なので、いっそのことF#に乗り換えようかと……。『実践F#』が積読状態になっている。
- Forth
- pForthをMinGWでビルドしたので処理系は手元にある。スタック指向の言語はいつか勉強したい。
- Object REXX
- 思うところがあって処理系とIBM謹製のドキュメントを入手したものの、そこから先の進展は無いまま。ReginaでClassic REXXっぽい感じで触っているからなあ。
- Objective-C
- 一時期なぜかMac用アプリの開発に片足の小指ぐらい関わっていて、今後また関わるかもしれないのでソースを読めるようになりたいところ。ただMacを持っていないので、自習するとしてもGNUStepぐらいしか選択肢がない*11。
- Oz
- ふと思い立ってUbuntuにMozartを入れた。『Scheme手習い』の次はCTMCP片手にOzで勉強かなあ。
- flex
- プログラミング言語に含まれるかどうか不明だけど、DSL扱いで。字句解析の勉強の一環で触ったが、肝心の字句解析の勉強が頓挫してそのまま。でも一応、今後も触る予定ではある。
今は全く使っていない
*1:もっともPerlやRubyなどのLLな言語と比べると貧弱さは否めないのだけど。
*2:まあ「バッチプログラミング」という言葉があるぐらいだから……違うか。
*3:JScriptで共通モジュールを実装して、HTAとWSHの両方で使いまわす。WSHでモジュール化に対応する為に、少なくとも最上位層をWSFで記述することになる。
*5:これでもsedはチューリング完全な言語だと証明されているらしい。
*6:ウイルスバスターを使用していることが大きく影響している模様。
*7:支障がある部分を触るほど深入りするには、あと20年ぐらい掛かるのではないか?
*9:staticを付けてクラス変数/定数/メソッドにすればよいかもしれないけど、それって無茶苦茶ダメコードだよなあ。
*10:m4はマクロプロセッサなのでプログラミング言語ではないはずだけど……。
*11:GCCでもObjective-Cの勉強はできるけど、ライブラリを含めて考えるとGNUStepに手を出す方がいいらしい。