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

代替言語について思うこと。

さて、Qiitaにこのような記事が書かれてました。

Java 代替言語が普及しないこれだけの理由 - Qiita

この記事に関して、僕は、言語マニアとして、Javaの代替言語だけでは無く、C#、JS、Erlangなどの、他の言語の代替え言語をいろいろ使っており、それに関して思うことがいろいろあるので書きます。

ちなみに僕はQiitaのアカウントは持っているけれども、このような記事は技術tipsよりも、エッセイに近いと思ったので、はてなブログに書きました。

代替言語について思うこと

代替言語とは

まず、ここで言う「代替言語」というのを簡単にどういうものかを簡単に定義してみると、「ソースコードや 実行可能な形式にコンパイルするなどを通して、既存の言語プラットフォームで動作する、その言語とは異なる言語のこと」みたいな感じでしょうか。ちょっと、なんか上手く表現できませんが。

たとえば、Javaで言えば、ScalaClojure,Groovyなどの言語、JSで言えば、HaxeやTypeScript、Erlangで言えば,Elixir, LFE、C#で言えば、F#などのことを想定しています。そしてとりあえず、JavaやJS,Erlang,C#のような言語を代替言語に対する「ホスト言語」と言うことにします。

代替言語は普及してない?

まず、そもそも、何を持って、「普及」していないと言うべきなのでしょうか? これについて、僕はひとつなんとなく思っていることがあります。

それは、代替言語はホスト言語よりも普及することはありえないということです。たとえば、Java言語とScala言語を比較して、Java言語よりもScala言語が使われるなんて、まずありえない状況ではないか? と思うのです。基本的に代替言語は、ホスト言語に問題点があり、それを解決するために作られるものだと思います。なので、ホスト言語の問題点を知るにはまずホスト言語を知らないとダメでしょうし、まず、代替言語のユーザはまず、そのホスト言語のユーザでもありうると思うからです。

さて、個人的な意見として「代替言語」の多くはある程度は「普及」していると考えています。僕はとりあえずですが、「普及した」と思えるのは、基本的にある程度コミュニティが形成されている状態だと思います。そうすると、どの代替言語もコミュニティがあり、普及している感覚は受けています。

代替言語についてもうすこし

さて、ここで代替言語についてもうすこし簡単に整理したいと思います。

基本的に代替言語ってのは2つに分類されると考えており

  • 新規に言語を設計した言語
  • 既存の言語を、ホスト言語上に実装した、あるいは、ホスト言語と混ぜ合わせた言語

があると考えています。または、その中間も考えられると思います。

新規に設計した言語

新規に設計した言語は、例えば、Scalaや、Haxeなどがそれに当ると考えてますが、この場合は、言語設計者が、理想的な設計をしていることが多く、言語自体にプログラミングに関してすごく新しい考えが盛り込まれていることが多いと思います。このような言語を学ぶのは新しいことが発見できるかもしれません。一方、新規性が強いので、学習コストがホスト言語と比べると高くなるかもしれません。

既存の言語に近づけて設計した言語

こちらは、言語設計者は、ある言語にホレ込んでいる場合が多く、たとえば、JRubyや、ClojureやLFE、Boo、Nendo, Nuなどがそれにだろうなと思います。なんとなくですが、ここらの言語は、LispPythonRubyなどを参考にする場合が多いと思います。こちらもは、どちらかといえば、参考にされた言語のユーザにとっては取っつきやすさはあると思います。しかし、それ以外の人はたぶん、あんまり嬉しくないでしょう。Ruby好きな人はJRubyは好きになるでしょうが、Ruby嫌いな人にとっては、言語の存在自体が意味不明かもしれません。

代替言語の問題点

さて、ここで代替言語自体の問題点について一般的な事項を上げておきたいと思っています。

実行環境、開発環境の構築のし辛さ

まずは、環境自体の構築に手間が掛る場合が多いということです。基本的にはホスト言語の実行環境は用意して、その上に、代替言語の実行環境やコンパイルの環境を構築しないといけないからです。また、開発環境、エディタ環境の構築のし辛さを挙げることができるでしょう。代替言語はそもそも、文法が複雑なものが多いので、それに対して、言語解析して、開発支援する機能を構築するというのは手間が掛るものです。

ホスト言語との関係

代替言語は基本的に、ライブラリやフレームワークが少ない場合が多いので、ホスト言語のライブラリやフレームワークを利用することが多々あります。その際の、ホスト言語のライブラリを利用するためにの、バインドがなかなか手間だったりする場合が多いです。また、「ホスト言語ではこのように書くけど、それを代替え言語でどう書くのだろう?」と言った、ホスト言語と代替言語のマッピングをしなければならない場合が多く、この点が非常に調べ辛さを感じる時があります。

まとめ

さて、ざっくり、いろいろ書きましたが、代替言語を使うというのは、利点、欠点ありますから、それをしっかり選択することが大事だと考えてます。

てか ホレたら使え! それを実現するために、社内での政治力が試されるのは確かだと思います。