Apakah layak untuk melakukan pengembangan web (serius) di Lisp? [Tutup]


100

Jelas dimungkinkan untuk menulis hampir semua jenis aplikasi di hampir semua bahasa pemrograman, terutama dalam bahasa yang kuat seperti Lisp (baik itu Skema atau Lisp Umum). Tapi apakah praktis menggunakannya untuk pengembangan web? Jika ya, apa yang seharusnya menjadi titik awal yang baik? Di manakah dapat ditemukan sumber daya yang tepat (alat, perpustakaan, dokumentasi, praktik terbaik, contoh, dll.) Untuk proyek semacam ini?


2
Tergantung pada apa yang Anda maksud dengan "praktis". Mungkin ya. Praktis, mungkin tidak untuk kebanyakan orang. Apakah Anda berencana membuat situs Anda dihosting? Apakah Anda akan mengoperasikan kotak khusus Anda sendiri di mana Anda akan memiliki kontrol root? Seberapa besar upaya yang ingin Anda lakukan untuk itu?
inti

Leonardo, saya sedang menyusun buku tentang subjek ini sekarang, dan ingin mendapatkan umpan balik dari pengembang web yang tertarik pada Lisp. Jika Anda mau, dapatkah Anda memberi tahu saya bagaimana Anda mendapatkan ide untuk menggunakan Lisp, dan apa yang ingin Anda lihat dalam buku semacam itu? vsedach@gmail.com
vsedach

@chris - Saya baru saja menyiapkan hosting Skema untuk beberapa proyek sampingan saya; itu lebih mudah daripada yang saya kira - gcbhacks.dreamhosters.com/scheme-web-apps
gcbenison

2
Bacalah esai Paul Graham. Saya ragu ada yang terlewat dalam diskusi tentang penggunaan LISP untuk aplikasi web, ditambah lagi dia adalah penulis yang hebat. paulgraham.com/avg.html beranda rumahnya adalah: paulgraham.com/index.html
Kelly S. Prancis

Rekan-rekan Google: ada lebih banyak jawaban terkini di daftar CL yang mengagumkan .
Ehvince

Jawaban:


82

Ya, pengembangan web adalah salah satu kekuatan Common Lisp saat ini.

  • Sebagai server web, gunakan Hunchentoot , sebelumnya dikenal sebagai tbnl, oleh Dr. Edmund Weitz.

    Anda dapat menjalankannya sebagai back-end ke Apache menggunakan mod_proxy sebagai proxy terbalik, atau sebagai server yang berdiri sendiri.

  • Berbagai solusi pembuatan HTML tersedia, dari template gaya PHP hingga peretasan makro Lisp hingga XSLT. Silakan pilih.

    HTML-TEMPLATE adalah salah satu contohnya.

  • Closure XML tersedia untuk parsing XML, serialisasi, XPath 1.0, XSLT 1.0. Ada juga HTML Penutupan untuk penguraian sup tag HTML.

    (Pengungkapan penuh: Saya adalah pengelola Closure XML dan Closure HTML.)

  • Jika Anda suka, Parenscript dapat membuat pengalaman JavaScript Anda lebih keren, tetapi Anda juga dapat menulis JavaScript lama sendiri, tentunya.

    Solusi peningkatan JavaScript keren lainnya di jwacs , yang ditulis dalam Common Lisp dan mengubah JavaScript untuk menambahkan dukungan lanjutan.

  • Proyek layanan web mungkin memerlukan klien HTTP selain server.

    Drakma adalah perpustakaan yang digunakan untuk hari ini.

    PURI berguna untuk manipulasi URI.

    Dan masih ada lagi! Salah satu titik awal adalah cliki, misalnya cliki.net/web .

Di web, tidak ada yang tahu server Anda ditulis dalam Common Lisp :-)


1
dan ini hanya untuk cadel biasa dan hanya satu set alat ...
Attila Lendvai


1
@Tokopedia menyalak. melolong.
tidak tersinkronisasi

Di internet tidak ada yang bisa mendengar jeritan cadel server Anda.
kd4ttc

31

Pengembangan web di Common Lisp efektif dan menyenangkan.

Beberapa contoh:

CL-WHO memungkinkan Anda untuk menulis HTML tanpa melupakan tag penutup lagi.

Weblocks memungkinkan Anda menentukan formulir secara deklaratif dengan validasi bawaan :

(defview signup (:type form :caption "Sign up")
  (username :satisfies #'valid-username)
  (password :present-as dual-password :parse-as dual-password)
  (receive-newsletter-p :present-as checkbox :parse-as predicate))

Ini juga mendukung AJAX dengan cara yang sepenuhnya otomatis, kembali ke tautan normal jika browser tidak mendukungnya.

cl-prevalence adalah alternatif yang sangat sederhana untuk SQL.

Cukup banyak orang yang menggunakan teknologi ini akhir-akhir ini untuk aplikasi yang sangat penting - dengan sukses.

Proyek open-source CL yang paling penting sebenarnya memiliki dukungan komunitas yang sangat baik.


19

Ada beberapa kerangka web di luar sana untuk pengembangan web. Lihat di:

Jika Anda ingin alat cadel yang didukung dengan baik maka Anda harus membayarnya. Tidak ada komunitas yang sangat besar di sekitar alat sumber terbuka sehingga mereka tidak memiliki tingkat dokumentasi / adopsi yang sama seperti, katakanlah, Django pada Python.

Berikut beberapa produk cadel komersial:

Perlu juga dicatat bahwa Reddit awalnya dibangun di Lisp, tetapi penulis kemudian bermigrasi ke Python, mengutip kurangnya pustaka yang digunakan dan didokumentasikan dengan baik. ( tautan )


Dia mengatakan bahwa perpustakaan adalah "masalah terbesar", tetapi sebelum itu dia mengatakan "reddit tidak akan berjalan di Mac saya"; pada saat itu, hanya ada satu CL berulir untuk Mac, yang tidak dapat menjalankan kode soket level rendah. Kedengarannya setidaknya seperti dealbreaker.
Ken

3
Saya penggemar berat Lisp, ini menggantikan Python untuk saya. Tapi saya bekerja di C ++. Saya dapat menemukan programmer Python lain yang akan memahami prototipe Python, tetapi hingga kebangkitan Lisp saat ini lebih berhasil, saya tidak dapat menggunakannya di tempat kerja tanpa pertanyaan yang tak ada habisnya "mengapa Anda tidak menggunakan Python atau Ruby?"
Aaron

11

Saya tidak dapat berbicara dengan kerangka kerja lain, tetapi saya sangat beruntung menggunakan Hunchentoot untuk server web (ini berfungsi dengan baik sendiri, atau Anda dapat meletakkannya di belakang Apache ). Apa yang benar-benar membuatnya bersinar (ini mungkin akan mengejutkan beberapa orang) adalah perpustakaannya!

  • Gunakan CL-WHO untuk menulis HTML dengan mudah dalam sintaks gaya cadel
  • Parenscript memungkinkan Anda menulis kode yang dikompilasi ke javascript
  • Untuk konektivitas database, gunakan Postmodern untuk berbicara dengan PostgreSQL

Apa yang saya sangat suka tentang menggunakan CL untuk web adalah Anda dapat menyesuaikan semuanya saat sedang berjalan. Anda selalu memiliki REPL dan menjalankan kode server Anda, Anda kemudian dapat terhubung ke REPL itu dan mengubah atau memeriksa cara kerja kode, semua tanpa harus menghentikan apa pun. Saya telah mendefinisikan ulang fungsi saat situs berjalan, saat berikutnya fungsi tersebut dipanggil, ia hanya mengambil kode baru dan berfungsi.


Apakah Anda mengetahui sesuatu yang akan membuat LISP dapat dihubungkan dengan MongoDB?
MadPhysicist

9

Untuk lebih membantu menghilangkan mitos bahwa tidak ada kerangka kerja Lisp web, berikut adalah yang belum disebutkan:

Jelas banyak orang tampaknya berpikir Lisp cukup baik untuk menulis banyak kerangka web.

Saya tidak menggunakan atau mendukung kerangka web apa pun. Saya lebih suka membangun aplikasi web dengan menggabungkan bersama alat ortogonal (David Lichteblau telah menyebutkan beberapa yang bagus) menggunakan pola desain dengan cara yang benar-benar sesuai dengan aplikasi yang Anda bangun, dan itulah pendekatan yang saya rekomendasikan. Common Lisp menyediakan banyak alat seperti itu, dan kemampuan yang tak tertandingi untuk menggabungkannya.

Adam Petersen menerbitkan tutorial pengantar yang sangat baik tentang cara mulai membangun aplikasi web Lisp dengan gaya ini tahun lalu:

http://www.adampetersen.se/articles/lispweb.htm


8

Saya pikir orang bisa mengatakan ya tanpa banyak terpesona.

  1. salah satu server HTTP pertama adalah cl-http

  2. Skema yang dilakukan orang-orang di sekitar DrScheme telah menghabiskan banyak waktu untuk itu:

  3. www.franz.com berjalan di Webserver (AllegroServer) dan webframework (webactions) mereka sendiri

  4. Jika Anda ragu, periksa paket cadel umum dari Edi Weitz. Mereka biasanya bekerja.

Jadi ya, seseorang dapat melakukan pemrograman web "serius" dengan Common Lisp. Saya sendiri saat ini ragu-ragu untuk mengikuti beberapa rute Common Lisp atau Ruby on Rails. Saya lebih suka keduanya daripada apa pun. NET ....


4

Perusahaan Paul Graham, Viaweb, menulis produk di Common Lisp yang kemudian menjadi Yahoo Shops. Rupanya Yahoo kemudian menulis ulang dalam C ++. Ada beberapa sumber daya web untuk pemrograman Lisp.


1
Jika itu benar tentang Yahoo, beberapa orang mungkin melihat ini sebagai kegagalan CL sebagai bahasa web. Tapi saya akan melihatnya sebagai keberhasilan CL sebagai bahasa prototipe web.
gcbenison

3
Saya tidak akan menganggap penulisan ulang itu gagal, seperti yang dikatakan Paul Graham sendiri dalam catatan tentang Beating the Averages: "Pada Januari 2003, Yahoo merilis versi baru editor yang ditulis dalam C ++ dan Perl. Sulit untuk mengatakan apakah program itu tidak lebih lama ditulis dalam Lisp, karena untuk menerjemahkan program ini ke dalam C ++ mereka benar-benar harus menulis juru bahasa Lisp: file sumber dari semua templat pembuat halaman masih, sejauh yang saya tahu, kode Lisp. "
protista

viaweb tidak dibuat prototipe dengan cadel umum untuk menulis ulang dalam bahasa lain, c ++. itu dimaksudkan oleh produsennya untuk ditulis dan dijalankan dalam cadel karena berbagai alasan yang jelas dikemukakan olehnya, kekuatan bahasa, cepat, ya prototyping, dan produksi cepat, dia tahu lisp dengan sangat baik dll. mereka menjalankannya dengan versi mereka telah ditulis dengan cadel, sebagian sebenarnya ditulis dengan cadel. setelah ahoo memperolehnya mereka menurut rumor menulis ulang, saya tidak yakin. itu adalah pilihan pengakuisisi, bahkan dapat menggunakan vbasic, atau pascal fortran.
sçuçu

2

Anda dapat menemukan beberapa hal tentang perkakas untuk aplikasi web Lisp di pertanyaan ini .

Mungkin juga layak untuk mendengarkan Stack Overflow Podcast 27 di mana orang-orang Reddit berbicara sedikit tentang pengalaman mereka menjalankan situs web di Lisp (dan peralihan mereka ke Python).


2

Pendapatnya beragam. Kebijaksanaan umum adalah: Lebih baik gunakan bahasa yang berbeda, atau lebih tepatnya tumpukan web yang berbeda, seperti LAMP, .NET, Ruby on Rails, Java. Proyek web sukses yang terkenal di cadel adalah ViaWeb milik Paul Graham . Reddit awalnya diimplementasikan dalam cadel, tetapi kemudian dialihkan ke python . Jika Anda memutuskan untuk menggunakan cadel, cobalah buku Seibel: Practical Common Lisp .


1
Adakah kemungkinan Anda dapat menambahkan lebih banyak FUD ke posting Anda?
jrockway

@Yuval benar. Ini adalah kebijaksanaan umum. Reddit memang beralih. Saya pikir posting menanyakan apakah ada kebenaran di balik kebijaksanaan umum itu.
Steve Rowe

1
@jrockway dan Steve Rowe - Kebijaksanaan umum ada karena suatu alasan. Menurut saya ini bukan FUD. Saya belum pernah mendengar tentang situs web sukses yang ditulis di LISP sejak ViaWeb. Tolong perbaiki saya jika saya salah. Saya percaya bahasa pemrograman harus digunakan sesuai dengan kelebihannya, bukan ideologi.
Yuval F


0

Lihat Allegro Common Lisp. Ini memiliki beberapa perpustakaan, termasuk server web, khusus untuk pengembangan web.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.