はてなキーワード: emacs Lispとは
私、emacsって知ったのってエディタ戦争を知ってからで、専門学校の1年生の頃だったかなぁ。
秀丸とかしか知らなかったから、emacsやvimっていうのを知って、なんだかワクワクしちゃったんだよね。
Andy Huntさんもエディタに詳しくなれって言ってるし、カスタムキーバインドやオートコンプリートでめっちゃ効率アップできるって聞いて、自分も試しにやってみたんだよ。
結局、私にはemacsが一番しっくりきて、emacs lispも勉強して、エディタを自分好みにカスタマイズする方法を覚えたんだけど、他の人が作った可愛い.elライブラリを使うことが多かったな。
bashも最初からemacsキーバインドを使ってるし、覚えておいて超便利だったよ。
最終的にはemacsを常に立ち上げて、開発やメール、TODO管理も全部emacsでやっちゃうようになったんだけど、でもff14はやっぱりemacsじゃできなかった(笑)。
ストールマン先生がペド疑惑で騒動になったりして、ちょっと混乱した時期もあったけど、それでもemacsをやめるってことはなかったな。
まあ、とにかく小指がちょっと痛いんだよねぇ。
Emacsのカスタマイズにハマると幾らでも時間が消えていくと言われていたが、私はC言語でタブ幅の設定をするくらいだった。
Strutsの開発でTomcatのプラグインが要ると書いてあったのでEclipseにインストールするとか、会社の人からメールで送られたVimの設定をそのままペーストするとかくらいで積極的にカスタマイズすることは無く。
IntelliJやVisual Studio Codeの無数の拡張機能にも興味が無い。
シェルの設定ファイルを頑張るのは時間の無駄!という主張に共感したわけでもなく、普通に関心が無かった。
1990年代からコンピューターを使っているにもかかわらず……
急に凝り出した。「Emacs Lispっていうプログラミング言語でいろいろできるのか」「Visual Studio Codeのマーケットプレイスには同じファイルを対象にした拡張がいろいろあるな」と、今更。
なぜ。
俺は Emacs を使っているが、 まあ時代にそぐわない部分は多いわな。
時代ごとのモダンな機能も取り入れてはいるんだよ。
ただ、パッケージの仕組みなんかはいろんな方法を取り入れてはいかん。
一貫して管理できることに意味があるから。
かといって古めかしいスタイルをいつまでも引きずってても駄目だし、もうどうしようもないね。
そういう人は spacemacs で優勝。
キーバインドも基本的なカーソル移動などを除けば「キーバインドを覚える」ということは実はそれほどしなくていい。
コマンドでも入力できるし、それっぽい単語を入れたら補完候補も出してくれるから。
その内で特に日常的に有用だと思うものを覚えておくなり、自分の好きなキーに割り当てるなりして使うもんなんだよ。
で、なんでまた Emacs を使ってるかというと、使ってるプログラミング言語が Lisp 系だからなんだ。
VSCode は好きなエディタだし Rust とか C++ とかを書くときには使ってるが、 Lisp 系言語の対応はマジでクソ。
かといって自分で拡張を書くほどの根性もないから Emacs が比較的マシという判断なの。
使っているのが Lisp 系だからといって Emacs Lisp が好きというわけでもなく、むしろ現代的な Lisp 系言語を知ってたら Emacs Lisp はクソクソクソのクソとしか思えないんだが、それでも Lisp 系言語に積極的に対応しているエディタとしては今でも Emacs が最強なのだ……。
かつてはVim対Emacsでガチ戦争があったが、最近ではどっちも大差ないと認識が広まってきのこたけのこ戦争となった。
対してこれらのエディタとVisualStadioやEclipseのようなIDEの間には今こそガチ戦争が勃発している。
数で圧倒的に有意に立つIDEユーザと本物のプログラマを自称するエディタユーザの争いである。
エディタユーザはIDEユーザを能なしと罵っていて、それに一理あるという風潮があると思うが、騙されてはいけない。
致命的なのはエディタではIDEのような補完入力ができないのだ。
これなしでどうプログラミングするというのか。
あるいは自分一人でコーディングするような場合も問題ないだろう。
まさかいちいち対象クラスのコードやドキュメントを読むというのか。
覚えておけばいいと言う人もいるが、バカも休み休み言えといった感じだ。
そういうことを言う人は、コンパイラも使わず機械語直打ちなプログラミングやってればいいよ。
きっと素晴らしい情報処理能力でみるみるうちにコードを完成させてくれるだろう。
まあ、実際には一月かかっても2分木ヒープも実装できないだろうけど。
また、リファクタリングやプロジェクト管理も一貫してできるIDEは単なるテキストエディタなど物ともしない。
エディタ勢は、これらより便利なツール類がvim scriptやemacs lispで書かれているかのように言っているが、そんなものは実在しない。
あるなら、誰もが使っているはずだ。
というより、そんなものがあったなら、そもそもIDE自体作られることはなかったはずなのだ。
実態はない。
実態があるというなら、実際にエディタでIDEより優れた生産性でコードを書いている動画がYoutubeにあふれるはずである。
だが実際にはそんなものはない。
なぜか?
もちろん、やりたくてもできないからだ。
エディタ対IDEの戦争の正体は、エディタの生産性の低さがいつ暴かれるかと戦々恐々している自称スーパープログラマ達の、自己弁護と時代に取り残されたという怨嗟の声の集まりである。
「大規模開発に向いてる」なんていってない。「大規模開発にも使える」といっている。
はっきりいって、世にあふれる軽量言語は大規模開発には使えない。
根拠の一つは、大規模ソフトウェアの代表であるIDEだ。私は、軽量言語の中で主要な開発環境として自身で実装されたIDEが使用されている例を知らない。Python IDELを常用している人は少ないだろうし、Emacs Lispを軽量言語にふくめていいかも疑問だ。PHPでかかれたPHP開発環境があるか? PerlでかかれたPerl開発環境は広く使われているか?
(この点、Visual Studioで開発されているVisual Studioは立派な環境だと思う)
Javaは軽量言語でできることの大部分を同じようにこなせる。そのうえ大規模開発にも使える、といっているのだ。同じように「奴隷向け言語」ともいってない。「奴隷でもつかえる言語」といっている。
普通にクロージャという場合、レキシカルスコープを持つことを期待されると思うけど、DLLやらsoからエクスポートされる関数は普通のCのスコープだからクロージャとは言わないと思うよ。(そもそもDLLもsoも標準C/C++じゃないから、もしこれらがクロージャ的な動きをするとしてもこれを以て「Cのクロージャ」と呼ぶのはおかしいというのは置いといても。)
ダイナミックスコープなemacs Lispのlambdaとか、ダイナミックスコープもどき(っていうのか?なんて表現したらいいか分からん)なPHPのcreate_functionは動的に作りはしてもクロージャとは言わないんじゃないかな。
http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3
いやー、Emacsがもてはやされたのは歴史の流れだから。歴史の視点で見ないとわからないよ。
viが比較的エディタの世界にとどまったのに対し、emacsはシェルにヒストリ機能をつけてみたり(bshにはなかった)、gdbにきちんとしたUIをつけてみたり(gdbの生のコマンドはひどい)、マルチウインドウを提供((テキスト画面で!))したりした。
だから、それらが全部洗練されたGUI環境で提供される現代、Emacsが統合環境だとかいっても通じない。結局、Emacsの今の利点は、統合開発環境すら作れそうなくらい強力なEmacs Lispマクロを持っている、ことだけだと思う。それが欲しい人は、それだけでEmacsを唯一絶対神と認めるよ。