2011-02-02 12 views
6

LispやClojureプログラマのように見えますが、プログラマはREPLで直接プログラムを開発することがよくあります。 cf. Clojure Development: IDE or REPL?REPLスタイルの開発がRubyでより一般的ではないのはなぜですか?

私の質問は、Rubyではなぜこのアプローチが一般的ではないのですか?irb?これはちょうど文化的な違いか、REPL中心の開発がRubyやPythonのような言語よりもLispsの方が一般的である構造的(言語固有)の理由はありますか?

答えて

8

Lispの構文は、REPLとソースファイルを組み合わせたアプローチでは非常にうまくいくように思えます。各フォームのテキストの制限が明確な場合、プログラムでコードスニペットを移動する方がはるかに簡単です。

2

私はClojureとRubyにEmacsを使用しています。私はREPLと同じ方法で、自分のRubyモジュールをirbに読み込み、対話的にemacsで再生します。

+1

をこれはきちんとしているが、それは質問に答えていません。彼はそれが不可能であったと主張しなかった(実際は逆でした)。彼はなぜそれが普及していないのか尋ねました。 – Ken

+0

彼らはemacsを使用していないかもしれませんし、私よりもTest Driven Developmentではるかに優れています。 – thattommyhall

0

実際には、です。Rubyを開発する方法。

通常、私は自分のコードを書いて、その部分をirbに貼り付け、それに適応させて、再度貼り付けます。

あなたはプログラムでREPLスタイルを開発した "現在の状態"を印刷する方法はありませんか?私はそれがルビーでは不可能だと思う。

1

頻繁にユニットテストを実行するのは、REPLに相当するvia Rubyのものを入力するよりも簡単です。次に、コードにprintfデバッグを追加する必要がある場合があります。

+1

それは文化的なものだと私は思います。 RubyはUnixのクイックスタートの伝承を持っています。終了したら終了しますが、Lispの文化は生活環境に関するものです。しかし、Rubyをこのように使うことはできないという技術的な理由はありません。 – technomancy

2

Rubyistsが使用する傾向があるエディタが原因です。私はvimを使っていますが、これはREPLとやりとりする素晴らしい方法はありません。 Textmateは同じボート(AFAIK)にあります。一方、Emacs、Dr Racketなどは、すべてREPLと対話する素晴らしい仕組みを持っています。私はLispersがこれらのタイプのエディタ/環境を使いがちだと信じています。

+0

slime.vimはまともではありません:http://technotales.wordpress.com/2007/10/03/like-slime-for-vim/ –

+0

@Ben Mabey:それは本当にクールに見えます。私はそれを確認する必要があります。 – cam

1

たぶん、これらが役立ちます。

  • interactive_editorはvimの、emacsの、MacVim、ナノとTextMateのを開き、IRBバッファの編集を行う能力に加えIRB拡張機能です。
  • irbtoolsには、interactive_editorとその他の素晴らしい機能が追加されています。
  • Utility Beltは、機能を拡張するIRBの宝石の別のコレクションで、バッファの編集を可能にするものも含まれています。

私は古い学校ですので、私は通常、エディタを開いてirbをターミナルウィンドウで実行しています。古い習慣はあなたが知っていることを知っている。私はirbtoolsを使っていますが、ユーティリティベルトに切り替えて、どのように感じるかを見ていきます。

0

私はRuby開発者ではありません。しかし、私は理由が参照透明性だと思う。

ほとんどのイディオム的なClojure関数は、参照透過性に従う純粋な関数です。その結果、独立したスタンドアロンユニットである関数をテストする方がはるかに簡単であり、ユニットテストの目的をいくらか提供します。 Clojureは、多くの機能が無国籍であることを強く主張しています。 varrefsagentsatomsなどのようなさまざまな代替手段を使用して状態が維持されるだけでなく、副作用が発生するコードとコードを明確に区別し、コードの大部分を清潔にし、副作用がなく、

私はRubyやその他のプログラミング言語であっても、自動的にREPLの恩恵を受けることができます。

Read, Eval, Print and Loopのコンセプトは、他の言語で提供されているCLIと同じではありませんが、ほとんどの場合、他の言語で提供されるCLIも同じです。どんなnon-homoiconic言語もREADフェーズを持たず、テキスト表現や文字列を読み込むだけですが、LISPではREADフェーズは実際にs-expressionという形で解析できます。それについての詳細は、以下の2の回答参照してください。

Is Lisp the only language with REPL?

How is Lisp's read-eval-print loop different than Python's?

関連する問題