4

ちょっとしたサービスを開発するために emacs と slime を使い始めました。

変更後にコードをリロードする方法を見つけましたが、これをより便利で高速にしたいと考えています。

これは私が今それを行う方法です:

  • 1) emacs を起動し、slime を起動してから、slime で:

    2) (load "init.lisp") ; 変更されない初期化コードをロードする

    3) ("myseervice.lisp" をロード); これには、私が取り組んでいるコードが含まれています

    4) (マイサービス:開始)

    5) この時点で seeervice が実行されており、テストできます。次に、myseervice.lisp を変更して修正します。コードを新しいバージョンに交換するには、次のようにします。

    6) (マイサービス:ストップ)

    7) ("myservice.lisp" をロード)

    8) 4) に進み、もう一度開始します...


これはこれまでのところ機能します。しかし、手動で停止、再ロード、開始するのは面白くありません。また、呼び出しの間にスライムに大量の出力があるため、以前に入力したコマンドを再利用するのは容易ではありません 4)-7)。

解決策を得るために、1つのコマンドだけでこれを行うdevhelperパッケージを開始しましたが、機能しません:

(defpackage :devhelper
  (:use :common-lisp :myservice)
  (:export :start :reload))

(in-package :devhelper)

(defun start ()
  (myservice:start))

(defun reload ()
  (myservice:stop)
  (load "myservice.lisp") ;I think it is not possible to load it here, 
                          ;because this module is using the file that it is just loading
                          ;But it does not have to work this way, 
                          ;I just like any good solution
  (myservice:start))

そして、私は今このようにできると思いました:

  • 1) emacs を起動し、slime を起動してから、slime で:

    2) (load "init.lisp") ; 変更されない初期化コードをロードする

    3a) (「myseervice.lisp」をロード); これには、私が取り組んでいるコードが含まれています

    3b) (「devhelper.lisp」をロード)

    4) (devhelper:開始)

    5) この時点で seeervice が実行されており、テストできます。次に、myseervice.lisp を変更して修正します。コードを新しいバージョンに交換するには、次のことができると夢見ていました。

    6) (devhelper:リロード)

しかし、この時点でフリーズします。

そして、私はこの開発ヘルパーのアイデアに固執しているわけではなく、よりスムーズな開発サイクルが欲しいだけです。

本当のリスパーはどうやってそれをするでしょうか? 私はこれらすべてに非常に慣れておらず、従来のプログラミングのバックグラウンドから来ています;) IDEとインポートを使用しています。

4

1 に答える 1

5

歴史

SLIME/Emacs では、以前のコマンドを再利用することは難しくありません。

コマンドM-pM-n前または次の入力を取得します。M-r入力をM-s(正規表現を使用して)検索できます。

バッファからの実行

もう 1 つの方法は、コマンドを Lisp ファイルに書き留めて、そのファイルをバッファーで開き、そこから実行できるようにすることです。

リロード

リロードのアイデアは大丈夫​​です。サービスをシャットダウンし、新しいコードをロードして、サービスを再開することができます。フリーズする理由を調べる必要があります。それをデバッグする必要があります。マニュアルとコード化されたバージョンの違いの 1 つは、次のとおりです。コード化されたバージョンでは、停止、読み込み、開始の間の時間が大幅に短縮されます。問題がないか確認する必要があります。

より高度なコード編成

通常、複数のファイルがある場合、1 つまたは複数のシステムを使用してコードを整理するのが理にかなっています。また、コードがファイル内にある場合、ファイル コンパイラを使用してコードをコンパイルすることも理にかなっています。このようにして、早い段階で警告とエラーを受け取ります。多くの場合、Common Lisp 開発者ASDFはシステム ツールとして使用します。多くの実装には、さらに独自の機能があります (多かれ少なかれ機能があります)。

システム ツールは、システムで使用できるいくつかのコマンドを提供します。

  • load: 必要に応じて (または強制的に) コンパイル済みコードまたはソース コードをロードします。
  • compile: 必要に応じて (または強制的に) コードをコンパイルします
  • コンパイルとロード: 必要に応じて (または強制的に) コードをコンパイルしてロードします...

通常、コードをコンパイルまたはロードするために必要な最小限のコマンドを発行します。ただし、強制的にすべてをリロードまたは再コンパイルすることができます。

通常、システムはサブシステムを持つことができます。サブシステムは、たとえばコンパイルサービスです。コードを変更した場合は、コードとcompile and loadサブシステムを保存します。ASDF (または同様のツール) は、変更されたファイルをコンパイルしてロードします。

より高度な: システム ツール用の独自のコマンドを記述します。これにより、実行中のサービスが停止し、変更がコンパイル/ロードされ、サービスが開始されます。

おすすめ:

バージョンを動かして、ハングする理由を見つけてください。

于 2012-06-24T16:25:48.477 に答える