読者です 読者をやめる 読者になる 読者になる

kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

今までどのくらいプログラミング言語を触ってきたか(3秒で飽きたものも含む)

今までどのくらいプログラミング言語を触ってきたか(3秒で飽きたものも含む)

今までどのくらいプログラミング言語を触ってきたか(3秒で飽きたものも含む)

King of Programming Language - 今までどのくらいプログラミング言語を触ってきたか(3秒で挫折したものものも含む)

何か一部で流行っているみたいなので便乗して。どのくらいのプログラミング言語が使えるかと言われるとちょっと悩むけど、(3秒で飽きたものも含む)なら、とにかく触ったことがあるのをひたすらリストアップすればいいので楽で良いね。おおむね触った順に書いてるけど、特に真ん中辺りは順番があやふや。3秒で飽きたものを含むものの、一応、処理系を最低一度でも動かしてみたことあるのだけにしてある(調べてみただけのは載せてない)。

大学に入る前
  • Java
    • 確か、中学2年か3年の頃に一度挫折して、高校2年くらいの時に再度挑戦して理解できるようになった気がする。現在の自分のメイン言語。
  • Visual Basic 5(のLearning Editionか何かだった気がする)
  • C++(Borland C++ Builder)
    • 当時、高校の文化祭で展示するためのクイズプログラムを作るためにやっつけで学習。
  • C
  • Ruby
    • 研究でプログラムのベンチマーク取って、データ処理したり、コード自動生成したりするのに主に使ってる。
大学に入った後
  • Perl
  • HSP
  • Python
  • Pnuts
    • 結構好きな言語。開発は休止してるっぽいけど、完成度は結構高い。あと、今ではどうかわからないけど、アクティブに開発が続いてたときは、JVM系の動的言語の中では最速の部類だった。
  • JIS Full Basic(のセブセット)
    • なんで触ったのかよく思い出せない。
  • D
  • Prolog
    • Toyプログラムを書いた程度。
  • Brain F**k
  • Standard ML(Moscow ML,SML/NJ)
    • 大学の主専攻実験で、SchemeモドキをMLで作るという課題があって、MLを学習しながら書いてた気がする。まともに関数型プログラミング言語触ったのはこのときが最初?
  • OCaml
    • なんとなくToyプログラムを書いて遊んでた。
  • Common Lisp(CLisp)
    • Lispマクロの勉強のために。
  • Scheme(Kawa,SISC,Gauche)
    • JavaAPIを呼び出すためのインタフェースが煩雑だったので、簡略化するためのマクロとか作って遊んでた気がする。
  • Haskell(GHC)
  • Smalltalk(Squeak)
  • C#
    • C# 2.0の新機能がどんな風にコンパイルされるのか逆アセンブルして調べるために触った。
  • G
    • 自動ダウンキャストとか、Onionに入れて失敗だった機能も含めて、なにげに結構参考にした記憶がある。今、G言語でぐぐっても、もはや公式ページが上位にヒットしない(というか、開発続いてるのか怪しい)。
  • JVMバイトコード
    • Onionの実装のために学習した。というか、実装しながらJVMのクラスファイルベリファイアの挙動とか学んだ。スタックサイズがあるプログラムカウンタにおいて常に一定であることの保証とか、ベリファイアはかなり色々な仕事やってるんだなーというのを実感した。
  • Onion
    • まあ、自作の言語ということで。ときどき思い立ってちょっといじってはいるけど、あんまり開発は進んでない。
  • AspectJ
  • MixJuice
  • Whitespace
    • 変態言語としてはセマンティクスがあまりにも平凡で落胆した覚えが。
  • R
  • E
    • みたいな感じで、URIリテラルで扱えるのに当時驚いた(http:の部分は、自分で定義すれば好きなプロトコルを扱えるようにできる)。
  • Eiffel(SmallEiffel)
  • ObjectScript
    • 動的言語で、それほど特徴的な機能は無いのだけど、functionをinterface型に自動変換するための機能があったのは良かった。
  • BeanShell
  • Groovy
  • Nikes
    • 言語というか、k.inabaさんが名前推論という機能?で実験的にJavaを拡張した処理系。名前推論という響きに惹かれて遊んでみて、なんかのメソッド名の場合に名前がコンフリクトして呼び出せないよーとかいうのを報告してみたりとかした覚えが。
  • Nice
    • マルチメソッド、Generics、高階関数など近代的な機能をJavaベースの構文で実現した、名前の通りナイスな言語。?が付いた型がnullable型で?無しがnon-nullable型(ちゃんと静的型チェックされる)という仕様もナイスだった(nullable型の変数xについて、if(x != null) { ... } でガードするとif文の中ではxがnon-nullable型になるとかそんな感じ)。でも、最近は開発が続いてないっぽい…。
  • Nemerle
    • とにかくマクロ機能が非常に強力な言語。かなり好きだったのだけど、開発者がMicrosoftに入ったか何かの理由で(本当かは知らない)、開発がストップしてしまった。残念。
  • VB.NET
  • Scala
    • 今、一番好きな言語。そろそろ研究で書くプログラムは全部Scalaに切り替えようかなと思ってるけど、なかなか踏ん切りがついてなかったりする。
  • Fortress
    • ときどき思い出したように触ってるけど、まだ静的型チェックがちゃんと実装されてないっぽいのはちょっとがっかり(実行パスによって通らない箇所に型エラー出る式書いても普通に実行できてしまう)。言語仕様的にはかなり好き。具象クラスが継承グラフの末端にしか来れない仕様は思い切りが良いと思う。
  • haXe
  • なでしこ
    • パーザコンビネータを色々な言語で書いてたときに、「なでしこで日本語パーザコンビネータ」とかやればネタになるかなーと思って調べた。結局、よくわからない仕様との格闘の結果、単純な組み合わせなら動くけど、複雑なパーザ組み立てると何も言わずに処理系が落ちたりして、挫折。
  • Factor
    • ちょっと触ってみただけ。
  • Clojure
    • ちょっと触ってみただけ。Javaとのインタフェース部分は結構使いやすい。

他にもまだあった気がするけど、とりあえず、比較的すぐに思い出せたのはこんなところ。JVM上で動作する処理系にやけに偏ってたり、最初の言語がJavaだったりするのは、人によっては世代の違いを感じるのではないかなあとか思ったり。Satherなんかは、言語仕様とかはそこそこ調べてみたんだけど、結局一度も処理系動かした事が無い(というか、処理系のビルドが当時の環境でうまくできなくて諦めた記憶がある)。