プログラミング言語で最強(スケーラブル)なのは、
Lispだと思われます。
http://jp.franz.com/index.html
しかし、
世間ではマイナー言語のようです。
なぜでしょうか。
習得が難しいのだとしたら、
どのくらい難しいのでしょうか。
昔買ったエディタのマクロがLispだったので、Lispでマクロを少し書いたと言うだけの経験ですが。
習得は、簡単だと思います。
(マニュアルを見ただけで書けましたし)
中級のプログラマーになるのは、
(頭の中が関数型のプログラマーになっているので)
難しいと感じました。
上級プラグラマーのレベルになったら
なぜ世間は関数型の言語が流行しているのか腹立たしくなるらしいです。
なぜマイナーかと言うと
それは風評の影響が大きいと思います。
また高速なプログラムが書けるかと言う問題もあると思います。
(Cの方が機械語に近い言語なので高速なプログラムを書きやすいと言う意味)
多くのプログラマーは問題解決にLISPを習ってLISPでコードを書こうと言う発想をもてないと思います。
■スケーラブルとは言えないでしょう。
スケーラブルかどうかを問う環境と言えばアプリケーション開発ということになると思いますが、アプリケーションを作る上で重要な部分はユーザーインターフェースだったりしますので、そういった意味ではVBやVCなどには太刀打ち出来ないでしょう。
スケーラビリティって意味では、仮想コンピュータまでひっぱりこんだJAVAが一番だと思いますけど、主流には成りえてませんし、、、
■マイナーな理由は、初期のパソコンにはほぼ必ずBASICが搭載されていたって事が一番じゃないかな。。。
(SHARPのMZシリーズでは別売りでLISPやPlologなんかも1万円くらいであったけど当時の1万円は高価だったし、カセットテープだったので読み込みに数分かかって苦労した。。。)
■習得というよりはデバッグが大変でしたね。
BAISICは幾つかのコマンドを覚える事から入ってステップを追加していく形でプログラムを形成していけますし、今のVisualBasicなんかだと部品をくっ付けていってプロパティを操作するだけみたいなものでも格好が付きますから、、、、
それに対してLispは関数の塊というか(かっこ)の塊でしたし使えるメモリが16KBなんて世界だったのでインデントを使うのは躊躇いましたしねぇ。。。。Lispでまともに使えたって記憶はCPUが16ビットの時代に入って以降ですね。
■ご紹介のACLのページにはいろいろ書いてありますけど、
Windows関連ならVBやVC、WEB関連ならPHPやJAVAといったように既にシェアを握っているものの牙城を崩すほどの必要性は感じられませんから、これらに取って代わるということもないでしょう。
必要な人には必要な物だけど、それ以上ではないって事で、、、
URL必須って事でMZ関連を探したけど古すぎたようなのでX68000時代のお話を扱ったページですが、、、、
ありがとうございます。
一夜漬けしてみます。
Lispは大学時代齧ったことがあります。20年以上コンピュータ業界にいましたが、大学などを除いて一般的に使われているのを見たことがありません。普及しない理由としては以下の理由が挙げられると思います。
(1) 表記法が一般的でなく、習得が難しい。必要なスタッフの確保ができない
(2) ある程度の大きさのアプリケーションを作ろうと思うと、リソースの消費が多きい。実行時間も大きくなる。
ありがとうございました。
参考になりました。
http://local.joelonsoftware.com/mediawiki/index.php/言語をめぐる論争
文中に、以下のパラグラフがあります。
最先端であるかどうかは別に問題でない大きなエンタープライズ向けシステムでは、安全な選択はC#、Java、PHP、Pythonであり、それはこれらの言語でクリティカルなビジネスアプリケーションを構築している人たちが山ほどいるからで、何か問題があったとしても、致命的な問題にはならないのだ。
流行らなかった理由ではなくて、これから流行らない理由ですが、どうでしょう。
ありがとうございます。
リンク先も参考になりました。
最近はやりのRubyやPythonといった言語は、Lispの長所を上手く取り込んでいるといえるでしょうね。これらの言語はC言語などに慣れているプログラマーにとっては極めてとっつきにくいですが、ゼロからプログラミングを習うのであればむしろC言語などよりずっと理解しやすいと思われます(考え方が人間の直感に近いことや、メモリ空間とかややこしいことに常に気を配っていなければならないC言語の面倒くさいところが一切無いため)
実際、GoogleやYouTubeはじめ最近のWeb2.0的なサービスはほとんどPythonで書かれているという話もあるくらいです。
一昔前まで、これらのスクリプト系の言語は「とてつもなく遅い」のが嫌われる最大の要因でしたが、最近のコンピューターの性能向上でようやくRuby,Python,Lispといった言語が実用的な速度で動くようになりました(それでもRubyは遅いといわれていますが)
下記に速度の比較があり、これを見るとLispという言語は極めて高速であると思われます。
http://www.unixuser.org/~euske/doc/python/python-lisp-j.html
※ なおこの表ではPythonが極めて遅いと記載されていますが、実際にはPythonには非常に優秀なライブラリ(C言語で開発されており極めて高速で安定している)があり、遅い処理はライブラリがやってくれますから速度的には十分な場合が多いようです。こうした世界標準的なライブラリが極めて整理されており、高速で安定していることが、Pythonが欧米で大流行している理由の一つでしょう。
以上の事実を踏まえて、以下は私の推測ですが、Lispが流行らない原因は、
「安定していて世界標準的な言語環境がない」のが原因ではないかと思います。(つまり、今作ったLispのプログラムが、3年後に安定して動く環境があるかどうか確信できないので作る気にならない。Pythonも、Ver.3になってようやくまともに使える言語になってきました。)
従って今後、こうした環境が整備されてくれば、Lispが大流行することもあるのかもしれません。
一方で、言語構造的に言って、C/C++言語とこれらの言語は全く異なりますので、C/C++が廃れることは当面ないでしょう。
ただし、C/C++言語は作り手(プログラマー)の力量でパフォーマンスや安定性がン10倍も変わってしまう言語なので、ヘタにC/C++で書くよりもRuby,Python,Lispで書いたほうが良い(こともある)と私は考えています。
ありがとうございます。
参考になりました。
1.Lispがマイナーな理由
Lispは知名度で言うと別にマイナー言語だとは思いませんが、確かにGUIや業務系アプリケーションなどで利用される言語としてはマイナー言語なのかもしれません。私はWeb開発関連の仕事をしていますが、JavaやC#やPerlなどが主でLispでWeb開発した話はほとんど知らないです。
任意の言語がなぜメジャーとなるのか、そのきっかけ自体は分からないですが、いったんそのきっかけをつかむとメジャー言語の良循環(※)に乗ります。言語自体の元々の文法や思想の良し悪しとは関係なく。
※良循環(なんとなくのイメージ):言語のシェアアップ⇒ライブラリや開発環境の充実⇒メジャー業務やAPLへの適用⇒ノウハウや実事例の充実⇒(初めに戻る)
2.Lispの習得
Lispの習得についていうと、シンプルで美しい構造を持った言語なのでその習得は簡単なのですが、構造がシンプルな分、利用にコツが必要で、かつ、利用方法の情報を入手しにくいため、そういう意味での習得は難しいです。(Smalltalkなども今となってはシンプルで美しいと感じますが、知った当初は条件分岐や繰り返しの文法が全くなくてプログラムできるのか?と思ったものでした。)
なお、Lispの習得の導入については、やはり例のこの本が最も役立つのではないでしょうか。英語版は無料ですべて閲覧できますし。
ありがとうございます。
ご紹介いただいた本は以前挫折した覚えが。。
数学的センスを問われる言語なのですかね。
自分が考える理由はいくつかあります。
■ プログラミング言語には、向き不向きがあります。
例えばVisual Basicは、GUIをサクサク作るのには向いてますが、複雑で重い処理には向いていません。これは良い・悪いの問題ではなく、方向性の問題です。
そこで、Lispがどのような方面に向いているのかと言えば、複雑なアルゴリズムで難しい問題を処理しなくてはならない場合などでしょう。
しかし、現実の問題(企業のシステム開発やWeb開発など)は、複雑なアルゴリズムや処理が要求されることはあまりありません。ですから、そういう意味で言えば、Lispが向いている世界が、現実の商売としてのシステム開発では「少数派」であると言うことだと思います。
■ 記法が独特
これは否定できません。確かにそうです。
Lispに特に苦手意識を覚えず、サクサク使える人は意外と存在しています。しかし、プログラマの格差は激しいので、「なれた(C風の)プログラミング言語以外は拒否反応を起こす」というプログラマーが大多数います。そこまで考えて、企業としての開発プランを立てるとなると、やはりLispは捨てざるを得ません。少数精鋭でないとLispは使えないと思います。
■ 規格
Common LispはANSIで規格が決まっています。すると、実装系が複数でてくることになりますが、ANSIの規格の範囲外のところで相違が出てきます。その相違が意外と重大で普及の障害になったりする場合がままある、というのが公的な規格で定められた言語の泣き所であると思います。OSとのインターフェイスとか、Cレベルでのインターフェイスとか。
なので、最近の言語を規格にしてもらうときには、昔は考慮されなかった低レベルの機能まですべてを申請する、という感じになるようです。バイナリの互換性とか。C#も、環境まで含めて規格ですしね(あんまり詳しくないんで嘘ついてるかもしれませんが)。
ありがとうございました。
複雑なアルゴリズムが必要となるシステムを少数精鋭で組む時には、Lispが選択肢として有効だということですね。
確かに、CADシステムなどで使われているようです。
一般に,プログラミング言語は万能ではなく,ある特定の用途に向いています。つぎに,適用先である分野の流行廃りに寄ると考えます。
前者については,LispはGUIには向いていないのではないか,という回答が
よせらているので,中年プログラマーの昔話として,後者について回答します。
実際,80年代の後半に,知識工学という分野が研究されており,
国内においても一部で,エキスパートシステムとかAIという名前で
製品化もなされました。90年代になると下火になりました。
実際,製品を開発するのに,LispあるいはPrologを採用する例が多かった
です。とくにLispは,名前のとおり,リスト処理が比較的楽だったので,
単語や文節を入力として,文字の出力をなすという点で,専門家の振舞いを
模すのには適切だと思われました。しかし,言うほどに実用的なシステムが
つくれなかった性で,流行は長続きしませんでした。
http://jp.franz.com/base/product_applications.html
でしめされた事例がどの程度実用的なのか,他分野でも
有用なのかによるなのでしょう。
昨今,ロボットが再び流行っていますので,
人間の思考を模すのに,Lispが適切だということになれば
またメジャーになるかもしれません。
繰り返しになりますが,
言語習得の難易度よりも,Lispの適用先がメジャーではないこと,
したがって,それを使って対価を得られるプログラマーが増えない
ということによると思います。
ありがとうございます。
なぜ"言うほど有用なシステム"がつくれなかったか、そのあたりの事情も少し調べてみたいと思います。
言語としてのLISPが産まれた頃、他の高級言語は、FORTRANのみでこれは
数値処理用でした。これに対して記号処理用の言語として作られたのが
LISPです。例えば Y=X^2+1 で X=Z+1 なら Y=Z^2+2Z+2 とか。
LISPは、文字列の処理が簡単な他、FORTRANでは無理な、一種のオブジェクト
の取り扱いすら出来ましたから、エディタやCADなどに使われました。
ただコンピュータが非常に高価で、しかも性能が限られていた時代、
コンピュータの主要な用途は、産業的な数値処理か、その後の作られた
事務処理用言語 COBOLの出番である会計や事務処理でしたので、大学では
FORTRANが教えられ、企業の情報処理室は、COBOLが使われました。
また、UNIX系とでもいう文化では、C言語がその柔軟性ゆえ多用されること
になりました。
時代が変わって、現代では、LISP向き仕事が沢山増えたと思いますが、
時すでに遅し多くのプログラマは、FORTRANの分派とでもいうBASICや、
CやCの発展形である、C++やら、Javaやらに馴染んでしまって、もはや
LISPをかえりみることがありません。
コンピュータ言語でも、自然言語でも、現在使っている言葉を換えるは
それなりの抵抗があります。構文解析といった用途でも、C等から様々な
ライブラリが利用できますし、LISP向きの処理をこなせて、しかもC等から
の移行が簡単な、各種のスクリプト言語が既に色々ありますから、敢えて
馴染みの薄いLISPで新たなプログラムを書こうという人が少数なのでしょう。
他の方が書かれた、一昔前のAI(人工知能)開発ブームでは、LISPも一部で
使われたと思いますが、そもそも見積もりが甘すぎただけで、未だに、
実用化された人工知能はほとんどないと言って良いでしょう。
敢えてまとめれば、産まれるの早すぎた、ということでしょうか。
既に読まれたかも知れませんが、/.J に次のようなストーリがありました。
俺は○○言語のプログラマーよりは上だ
http://slashdot.jp/developers/article.pl?sid=06/12/14/1233207
ありがとうございます。
手続き型に慣れた頭を切り替えるのが難しいのですね。