Lispワークフローはどのように見えますか?[閉まっている]


39

私は現在Lispを学んでいます。LocomotiveBASIC-> Z80 Assembler-> Pascal-> C-> Perl-> C#-> Rubyという言語の進歩から来ています。私のアプローチは同時に:

  • SBCL、QuickLisp、closure-html、およびdrakmaを使用して簡単なWebスクレーパーを記述します
  • SICP講義を見る

これはうまく機能していると思います。私はLispを合理的に簡単に読むことができるという点で、良い「Lispゴーグル」を開発しています。また、依存関係のQuicklispなど、Lispエコシステムがどのように機能するかについても感じています。

私は本当に欠けている何か、しかし、味付けLisperが実際にどのように感ある作品

.NET向けにコーディングするときは、ReSharperとVisualSVNを使用してVisual Studioをセットアップします。私はテストを書き、実装し、リファクタリングし、コミットします。それから、ストーリーを完成させるのに十分なことが終わったら、AUATをいくつか書きます。その後、TeamCityでリリースビルドを開始し、テストとできれば承認のために新しい機能を顧客にプッシュします。インストーラーが必要なアプリの場合は、WiXまたはInnoSetupを使用します。明らかに、CIシステムを介してインストーラーを構築します。

だから、私の質問は:経験豊富なLisperとして、あなたのワークフローはどのようなものですか?あなたは主にREPLで働いていますか、それともエディターで働いていますか?ユニットテストはどのように行いますか?継続的インテグレーション?パッケージングと展開?あなたが机に座って、片方にコーヒーのマグカップを、もう片方にジョン・マッカーシーの額入りの写真を蒸しているとき、あなたはそれをどうますか?

現在、私はLispコーディングを理解しているように感じていますが、Lisp開発ではありません...


2
この質問は世論調査であり、サイトに永続的な価値を提供しない回答を集める可能性が高いため、トピックから外れているように見えます。

回答:


13

comp.lang.lispとLisp Forumのほとんどの人々は、EmacsとSLIMEの組み合わせを推奨しています。ただし、AllegroやLispWorksのような商用実装にお金を払いたくないと仮定しています。SLIMEビデオは、作業プロセスを示しています。私は自宅で個人的なプログラムを開発するためにEmacsとSLIMEを使用していますが、その組み合わせは非常に効率的です。

SLIMEはEmacsとREPLを統合します。私が通常行うことは、すべてのファイルをロードし、Emacsで作業中のファイルを開くことです。各関数を入力または変更した後、を押しC-x C-eて、REPLの関数定義を実行します。その後、REPLバッファーに切り替えて機能を試すことができます。REPLのすべての履歴は、標準のEmacsキーシーケンスを使用して使用および編集できるため、さまざまなパラメーターを使用して関数呼び出しを簡単にやり直すことができます。


4

私は主にClojureを使用していますが、これが私のセットアップです。

  1. Eclipse IDE(これは、Clojureと同じプロジェクトで多くのJavaの作業を行うために使用します)
  2. Clojureの反時計回りプラグイン(これにはREPLが含まれます)
  3. 依存関係とビルド管理のためのMaven
  4. ソースコード管理用のEgit

コーディング中のワークフローは一般的に次のようになります。

  1. REPLを開き、現在のすべてのソースファイルをロードします
  2. REPLでのコードとテスト
  3. コードに満足したら、コピー/ソースファイルに貼り付けます
  4. 時々REPLをリブートします(名前空間を取り返しのつかないように混乱させたとき、または単にソースファイルですべてがまだ機能していることを確認するために)
  5. また、すべてのMavenビルドによって自動的に実行されるテストをソースファイルに書き込みます。REPLで行った非公式のテストが、ユニットテストに直結する場合があります。
  6. この時点でコミットなど-ほぼ定期的な開発ワークフロー

全体的に、開発中のREPLのよりインタラクティブな使用を除けば、通常のJava / C#ワークフローとそれほど違いはありません。


nrepl + emacsに言及することもできます。私が知る限り、slimeに似た環境を提供します。
ジョルジオ

4

他の答えを補うために、「問題について一生懸命考えてから解決策を書き留める」という種類の開発と、「replから始めて、プログラムを繰り返し形に整える」スタイルの組み合わせを行います。通常はその中間です。私がしていることは、自分のプログラムをどのように見せたいかという一般的な考えから始め、それを書き始め、私のアプローチを修正するために、問題の領域に関する新しい知識を獲得しようとしています。実際には、私は多くの実験を行い、大量のコードを書きます。さまざまなアプローチを試してみて、非常に高速に方向を切り替えることができます。Lispはこの種の開発に適しています。だから、TDDがあまり好きではないので、TDDを効果的に行うには、まず何をしたいかを知る必要があります。

私がやろうとするもう一つの重要なことは、プログラムの異なる部分間のプロトコルについてもっと考えることです。他のオブジェクト指向言語とは異なり、In Common Lisp CLOSはジェネリック関数の概念に重点を置いており、IOWメソッドはクラスの外に存在し、開発の焦点です。必要なプロトコルを定義するGFのセットから始めて、実際の実装を作成する前に、単純な実装を作成し、それを使用してプロトコルを具体化することもあります。多数のブログ投稿を保存するレイヤーを書いているとします。ブログ投稿の作成、編集、検索方法を定義する一連のGFがあり、ブログ投稿をメモリ内のリストに保存する簡単な実装を作成します。 、プロトコルに満足したら、ブログの投稿をデータベースに保存するか、ファイルに書き込む実装を作成します。

Lispを使用すると、現在のソリューションが最適ではないことがわかっているため、方向を変えて別のアプローチを簡単に実行できます。

また重要な点:環境を最大限に活用し、さまざまなコンパイル設定を使用してより多くのデバッグ情報でコードをコンパイルする方法を学び、lispをコンパイルおよび解釈できるという事実を活用します。MOPなどのlispsの内省機能を使用し、スライム機能を使用してドキュメントを検索し、インスペクターを使用してオブジェクトの内部を調べ、ハイパースペックを定期的に参照し、コードの静的コンパイラーではなく、システムをOSのように扱います。それよりも強力です。

初心者にとっては、lispはpythonやrubyほどの勝利ではありませんが、経験を積むにつれて、より小さな環境で多大な勝利を得ることができます。

最も重要なのは、この言語を楽しんで愛さなければならないということです。時には、落胆して、現在人気のあるブラブ言語を使いやすくすることもあります。Lispを使い続けると、返済されます。


2

私は、REPL(通常、emacsで編集し、Common Lisp環境へのブリッジとしてSLIMEを使用)に接続しているエディターで作業する傾向があります。私は、「下」と「上」の両方から始め、真ん中に向かって作業し、行くにつれてデザインを修正する傾向があります。

テストに関しては、これがREPLの理由です。私が行くようにコードをテストするのに役立ちます。時々、より正式なテストまたはベンチマークを作成します(通常、最適化段階に達したら)。機能のより遅く、既知の良い実装を行い、最適化されたバージョンのコードを(エディターウィンドウで)実験し、それを基礎となるLispコードに送信し、それがより速く、より遅いと同じ結果を返すことを確認しますコード。

パッケージングに関しては、ASDFでインストール可能なプロジェクトをまとめ、ダウンロードリポジトリに平手打ちし、バージョニングを処理するのに役立つユーティリティコードがいくつかあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.