SORU
6 Mart 2010, CUMARTESİ


En iyi ve Clojure uygulamaları dağıtmak: uygulamaları dersler iyi mi?

Clojure yeni duyuyorum, ve bir uygulama bina denemeye başlıyorum.

Şimdiye kadar, derleme Clojure programları hakkında dersler hakkında gördüğüm her şey etkileşim içerir. Örneğin, ÇOĞALTMA ve tipi yük (load-file "bu o") çalıştırın. Bu iyi, ama yeterli değil.

C veya Delphi gibi dilleri Düzenle-derle-Çalıştır cümleler alışkınım, içgüdüsel düzenler, sonra hit yapmak için motive oluyorum "M-x derlemek".

Sorun şu "lein uberjar", anladığım kadarıyla bu eşdeğerdir "", acı Merhaba Dünya için bile çalıştırmak için yavaş. "Etkileşimli geliştirme" işler, bu gibi uberjar kullanarak durdurmak hızlı olun ve günün sonunda sadece Sakla. ne olduğunu keşfetmek için gidiyorum

İnşa ederken fark ettim başka bir şey (lein uberjar kullanarak) üzerinde çalışıyorum küçük bir GUI uygulaması eğer onlar gibi derleme işlemi çerçeve açılıryürütülüyorderleme sırasında. Sadece bana biraz mantığa aykırı; oldukça benzer "olduğu gibi" diye düşündü. yapmak değil gibi görünüyor

Gelişmekte olan şeylerden Lisp şekilde etkileşimli olarak ÇOĞALTMA çalışıyor, ve bunu değiştirmeye çalışmıyorum biliyorum: hayat bu şekilde adapte etmek istiyorum. Ne yazık ki, bunun nasıl yapılacağı ile ilgili belgeler şeklinde küçük gördüm. Makinenin mevcut durumu nasıl sıfırlanır mesela. Sadece biraz dağınık sadece reset çeşit yapmak mümkün olmadan anında bireysel parçacıkları derleme tutmak gibi görünüyor.

Genel olarak Clojure (Lisp) gördüğüm en öğreticiler ÇOĞALTMA hack odaklanmak gibi görünüyor. Uygulamaların dağıtımını en iyi uygulamalar hala bir gizem benim için. Benim kullanıcılar sadece kullanıcı olacak, bir ÇOĞALTMA içine dosyalarını yüklemek için gidiyoruz geliştiriciler için gidiş değildir.

İşte benim sorum: tüm süreci üzerinde iyi bir bilgi ya da dersler için herhangi bir kaynak Clojure bir uygulama, dağıtım da dahil olmak üzere bina?

(Not: Önkoşullar yüklü ve çalışıyor (örneğin Emacs, Balçık, Leiningen, vb.), her şey kontrol altında bu bir soru değil.

CEVAP
6 Mart 2010, CUMARTESİ


Hızlı ipuçları, bazı bağlantılar bir çift vardır:

Geliştirme sırasında lein uberjar kullanmayın; tercih lein jar. Bunu fark lein uberjar koyar tüm bağımlılıkları içinde oluşturulan jar (dahil olmak üzere Clojure kendisi), böylece tek bir kavanoz tamamen müstakil paketi ile uygulama içinde; lein jar sadece kavanoz kendi kodu. uberjar yaklaşma dağıtım için bariz faydaları vardır, ama gelişme için, sadece app çalıştırırken uygun bir sınıf kullanmak mümkün, kendinize zaman bir uberjar hazırlamak için gerekli tasarruf olmalıdır. Eğer el-Yönet test çalışmaları için sınıf olmak istemiyorsan eğer, lein run plugin check out.

Ayrıca, büyük olasılıkla kodunuzu çoğunluğu aslında SİZ derlenmesi değil. SİZ bazı Java birlikte çalışabilirlik senaryolarda gereklidir, ama çoğu zaman bir Clojure farklı sürümleri ile ikili uyumluluğu ile hızlı ve can sıkıcı sorunları başlangıç olarak hafif bir artış getiriyor. İkinci sorun, project uberjar-ed tek başına uygulama bir tür için geçerli değildir sanırım, ama herhangi bir kod Kütüphanesi en az JİT-ed takdirde bırakılmalıdır. İle Leiningen, sen-ebilmek koymak bir :namespaces fıkra defproject şeklinde project.clj belirleyen ad alanları için derlenmiş; ne yaparsan bırakmamasını şu anda olması JİT-ed tarafından varsayılan. Leiningen eski sürümleri gerçekten iyi bir sebep olduğu varsayılan, her şeyi yükseltmek için derlemek için kullanılan!

Windows derlenirken için dışarı çıkıyorum, dışarı penceresi-haşhaş kodu herhangi bir fonksiyon dışında makro genişleme sırasında ya da benzer bir tanım inşa kaçıyorsun ya öyle tahmin ediyorum. (Bir üst düzeyinde (println "Foo!") gibi.) Sadece yapmaman gereken bir şey, bir senaryo olarak kodunuzu çalıştırmak için planlama sürece -- sanırım, her neyse. Bu sorunu önlemek için, kaydırma yan etki kodunda tanımlar işlev ve uygulama için bir giriş noktası project.clj 12 *maddesini kullanarak sağlar. Eğer diyorsan (:main foo foo ad -main fonksiyon uygulaması için giriş noktası olarak kullanılacaktır. Varsayılan, her neyse, en azından yukarıda lein run adı kodlanmış ... emin değilim kendisi lein gibi bahsetmişti.)

ÇOĞALTMA -- durumunu sıfırlamak için bunu yeniden başlatabilirsiniz. BALÇIK, Emacs diğer tüm devlet korurken M-x slime-yeniden-alt-lisp sanki bu oturum.

Ayrıca Clojure Google grup: bu tartışmalara bakın

  1. Clojure for system administration
  2. Prepping clojure for packaging (was: Re: Clojure for system administration)
  3. Leiningen, Clojure and libraries: what am I missing?

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Trevor Eckhart

    Trevor Eckha

    19 Aralık 2009
  • wafflepwn

    wafflepwn

    14 AĞUSTOS 2008
  • WK

    WK

    9 Ocak 2006