LISP (dan dialek seperti Skema, Common LISP dan Clojure) belum mendapatkan banyak dukungan industri meskipun bahasa pemrogramannya cukup baik. (Saat ini tampaknya mereka mendapatkan daya tarik).
Sekarang, ini tidak berhubungan langsung dengan pertanyaan, yang akan Anda gunakan dialek LISP untuk program produksi? Program apa dan mengapa? Penggunaan jenis yang diintegrasikan ke dalam beberapa kode lain (misalnya C) juga disertakan, tetapi perhatikan bahwa itulah yang Anda maksud dalam jawaban Anda. Konsep luas lebih disukai tetapi aplikasi spesifik juga oke.
Jawaban:
Apakah Anda akan menggunakan dialek LISP untuk program produksi?
Benar
Program apa dan mengapa?
Lisp adalah bahasa dinamis tujuan umum. Saat ini, ia memiliki kesulitan dasar yang sama dengan bahasa dinamis tujuan umum lainnya yang tidak diterbitkan oleh Microsoft: Utas asli, integrasi GUI, operasi deterministik GC, dan jejak memori kecil.
Utas asli diraih oleh LispWorks dan SBCL, saya percaya. Mungkin orang lain Saya belum menyelidiki sepenuhnya.
LispWorks dan Franz Common Lisp - produk komersial - terintegrasi ke dalam GUI hingga tingkat keberhasilan. Tidak memiliki $$ untuk membelinya, saya tidak tahu seberapa baik kerjanya. Saya menduga mereka bekerja dengan sangat baik ...
Operasi GC deterministik dapat dilakukan (dilakukan di Jawa untuk beberapa tingkat keberhasilan), tetapi saya tidak tahu apakah sistem Lisp yang ada (yang dikelola) memiliki kode untuk melakukan itu.
Jejak memori kecil saya percaya dicapai oleh beberapa Lisps.
Poin dasar saya adalah, Common Lisp secara teknis siap membuat sistem produksi. Dan itu benar .
Sebagian besar pengembang takut dengan (memilih satu) bahasa dinamis, makro, tanda kurung, kurangnya IDE favorit, pengalaman buruk di perguruan tinggi, tidak banyak pekerjaan di dalamnya, dan kemudian tidak menggunakannya.
Secara pribadi saya akan melompat membangun sistem produksi penuh di Common Lisp dari awal di lingkungan tim.
sunting: Saya tidak benar-benar menjawab mengapa Lisp dibandingkan dengan bahasa lain.
Dalam pengalaman Lisp saya - tidak signifikan, tetapi jauh lebih dari 'hello world' - saya telah menemukan bahasanya sangat berguna setelah rasa sakit "bahasa baru Argh" pertama. Mayoritas bahasa cocok dalam mode yang sangat teratur dan cukup jelas sehingga saya tidak benar-benar menemukan bahasa lain untuk dioperasikan. Bagian dari ini adalah penggabungan ekspresi dan pernyataan. Bagian dari ini adalah tipe data daftar inti. Bagian dari ini adalah sistem tipe. Bagian dari ini adalah sistem makro. Tapi jangan salah paham, ada beberapa poin yang menyakitkan. Tapi mereka tidak menendang wajah saya sebanyak poin rasa sakit bahasa lain.
Salah satu contoh sederhana adalah rutin daftar panjang Python. Pendekatan Python adalah memanggil
len(mysequence)
. Tetapi, jika kita memikirkannya, panjang adalah properti dari suatu urutan. Jadi,mysequence.len()
itu ide yang lebih tepat. Lisp pada dasarnya menghilangkan perbedaan sintaksis itu.(length thing)
adalah sintaks pemanggilan fungsi dan sintaks metode. Tentu saja, beberapa orang merasa frustasi dan menginginkan perbedaan sintaksis. Saya lebih suka memiliki keteraturan.edit2: Saya mengonversi bagian dari tesis MS saya yang berjalan di desktop ke Common Lisp dan sangat menyenangkan untuk bekerja dengan sejauh ini.
sumber
Saya pribadi tahu orang yang menggunakan Lisp dalam bentuk Clojure di beberapa bank investasi dan perusahaan pemula di London. Saya juga memilih Clojure sebagai bahasa pengembangan utama untuk startup saya sendiri, jadi saya bersedia untuk menaruh uang saya di tempat mulut saya :-)
Saya telah menemukan itu menjadi pengalaman yang sangat mencerahkan untuk belajar Clojure selama setahun terakhir (setelah banyak pengalaman dengan Java dan C #). Alasan utama untuk ini adalah:
Ini juga tampaknya menjadi pilihan praktis untuk penggunaan produksi nyata karena alasan berikut:
sumber
Saya akan menggunakan LISP jika itu adalah pilihan terbaik untuk pekerjaan itu. Hanya beberapa hal yang memengaruhi "pilihan terbaik":
Semua faktor ini harus dipertimbangkan ketika memutuskan apakah LISP sesuai untuk suatu proyek. Di dunia korporat, saya belum pernah mengalaminya.
sumber
Benar. Paul Graham menjelaskannya dengan baik .
sumber
Di mana: Emacs adalah aplikasi dunia nyata yang menggunakan LISP.
Mengapa: Ini adalah cara yang bagus untuk mengekspresikan pemetaan antara penekanan tombol dan tindakan. Ini ditafsirkan dan cepat dan didefinisikan dengan baik dan sederhana.
sumber
Baik Macsyma dan Autocad didasarkan pada dialek Lisp. Saya akan mengklasifikasikan mereka sebagai 'dunia nyata' serta Emacs.
sumber
Tentu saya akan mempertimbangkannya. Terutama untuk pekerjaan pengembangan baru yang memiliki beberapa potensi komputasi paralel. Itu tampaknya menjadi titik manis untuk jenis bahasa fungsional ini.
sumber
Lisp adalah salah satu pilihan terbaik untuk mengimplementasikan kompiler. Dan, karena penggunaan DSL dan eDSL meningkat sekarang, Lisp menjadi lebih berharga. Saya menggunakan dialek Lisp untuk semua tugas terkait DSL saya.
sumber
Saat ini saya sedang mencoba menggunakan newLisp sebagai pengganti Php di situs web pribadi saya melalui Dragonfly kerangka . Jika saya bisa mencari cara untuk membuat Apache bermain bagus, saya akan menggunakannya (server web bawaan bekerja dengan sangat baik, tetapi saya lebih suka bekerja melalui Apache). Dan begitu itu terjadi, saya akan menggunakan newLisp di mana saja saya akan menggunakan Php, karena saya datar tidak suka Php dan saya suka newLisp.
Saat ini, Clojure bukan pilihan yang baik untuk aplikasi Android, tapi saya tahu orang-orang sedang mengerjakannya. Jadi jika itu diketahui, itu akan menjadi tempat lain untuk saya akan menggunakan dialek Lisp untuk aplikasi dunia nyata ... tapi sekali lagi, ini karena saya hanya tidak suka Java.
Tapi jujur, saya lebih suka Ruby daripada Lisp ... tapi ini sebagian besar masalah komunitas dan dokumentasi.
sumber
Saya menerapkan aplikasi komersial berpemilik di Common Lisp yang disebut Tankan yang berjalan pada Microsoft Windows sebagai executable asli.
Ini adalah program untuk melatih diri Anda untuk menghafal karakter kanji Jepang.
Program ini berjalan sebagai server HTTP latar belakang. Eksekusi server ini dan menavigasi ke halamannya, dikoordinasikan oleh aplikasi ikon area notifikasi sistem kecil (alias "Baki") yang saya kembangkan menggunakan Visual C ++.
Aplikasi ikon baki kecil ini memulai, memantau dan menghentikan server berbasis Lisp, dan berkomunikasi dengannya menggunakan pipa Win32 yang terikat pada input dan output standarnya. Melalui pipa, server Lisp menginformasikan aplikasi ikon baki dari URL yang tepat dengan nomor port yang tepat, dan aplikasi ikon baki itu dapat meluncurkan browser melalui API Shell untuk menelusuri URL itu. Pengguna hanya mengklik dua kali pada ikon untuk membuka UI.
Program Lisp mempertahankan dalam memorinya keadaan sesi yang cukup kompleks yang berisi riwayat masukan pengguna dan berbagai hubungan di antara berbagai objek. Notasi objek melingkar Lisp (diaktifkan oleh
*print-circle*
variabel) dan cara kerjanya di custom CLOSprint-object
metode adalah bantuan luar biasa dalam menerapkan kegigihan: pengguna dapat menyimpan status ke disk dan melanjutkan di mana mereka tinggalkan. Semuanya disimpan, termasuk keadaan UI. Ada banyak substruktur bersama dalam grafik objek, serta siklus. Plus, banyak cruft statis yang tidak harus bertahan, seperti konten objek entri kamus. Dengan metode ANSI Common Lisp custom print object, Anda dapat membuat representasi tercetak kental untuk objek yang dapat dibaca dengan mesin,Hampir tidak ada JavaScript yang digunakan di UI web. Bahkan kontrol untuk menyembunyikan dan menampilkan bagian-bagian UI dilakukan dengan mengirimkan formulir dan merender ulang HTML. Setiap detail dari keadaan UI karenanya di server dan bertahan saat pengguna menyimpan. Pembuatan ulang HTML sangat cepat. Ini dilakukan oleh ekspresi backquote Lisp raksasa yang memberi makan makro penghasil HTML. Kode yang dikompilasi oleh Clozure Common Lisp (CCL) membuat ini terjadi begitu cepat sehingga Anda hampir tidak menyadari bahwa ketika Anda mengklik tombol [+] pada UI untuk membuka sesuatu, Anda mengirimkan permintaan ke server yang membuat ulang seluruh halaman darn, dan tidak hanya menjalankan beberapa JavaScript lokal untuk mengubah visibilitas elemen dokumen lokal.
Program ini awalnya dikembangkan dengan CLISP. Berkat ANSI CL menjadi bahasa standar, dengan implementasi yang sesuai dengan baik dan tidak terlalu banyak jebakan licik dalam bahasa (perilaku "tidak terdefinisi" atau "ditentukan-implementasi") dengan mudah dipindahkan ke CCL.
CLISP belum ditinggalkan; masih digunakan untuk menyalakan ujung belakang lisensi, menggunakan banyak basis kode umum yang sama.
Saya mengembangkan sistem lisensi asli untuk program, menggunakan cryptto curve eliptik yang disediakan oleh perpustakaan IronClad, yang digunakan oleh server lisensi untuk menandatangani lisensi untuk mengesahkannya. (Sepertinya saya ingat saya mungkin telah menggunakan program command line OpenSSL untuk menghasilkan parameter EC untuk kunci server.)
Lisensi direpresentasikan sebagai objek Lisp. Ini adalah penghargaan untuk portabilitas Lisp yang program Windows yang disusun oleh Clozure Common Lisp dapat menghasilkan lisensi berbasis ekspresi-S, program CLISP yang berjalan pada server Debian dapat mengisi bidang tanda tangan digital yang hilang di objek itu, dan mengirimkannya kembali ke program Windows yang dapat memvalidasi tanda tangan.
Di server, selain layanan lisensi berbasis CGI, saya menggunakan API baris perintah sederhana untuk mengelola lisensi. Anda dapat membuat daftar lisensi, menemukan yang spesifik, dan mengedit atributnya: seperti misalnya mengedit tanggal kedaluwarsa lisensi sementara untuk memberikan pengecualian kepada pengguna. Back-end lisensi juga menghasilkan email. Saya tidak menggunakan pustaka untuk penanganan CGI di sisi server: hanya linting kode tangan untuk berurusan dengan variabel lingkungan Apache dan argumen baris perintah. (Meskipun kode perpustakaan digunakan untuk menangani penyandian URL dan pembuatan HTML.) Tidak ada database yang digunakan untuk penyimpanan; lisensi dipatenkan menjadi file yang dipanggil
licenses.lisp
dan hanya itu.sumber
Jika seseorang membayar saya, tentu saja.
Mereka mungkin akan lebih tertarik membayar seseorang yang tahu bahasa itu. Saya hanya bermain dengan elisp dan skema beberapa kali.
sumber