Apa cara terbaik untuk melakukan GUI di Clojure ?
Apakah ada contoh dari beberapa fungsional swing atau SWT wrapper? Atau beberapa integrasi dengan deskripsi GUI deklaratif JavaFX yang dapat dengan mudah dibungkus dengan ekspresi s menggunakan beberapa makrologi?
Ada tutorial?
java
user-interface
lisp
clojure
Marko
sumber
sumber
Stuart Sierra baru-baru ini menerbitkan serangkaian posting blog tentang pengembangan GUI dengan clojure (dan swing). Mulai dari sini: http://stuartsierra.com/2010/01/02/first-steps-with-clojure-swing
sumber
Jika Anda ingin melakukan pemrograman GUI saya akan menunjuk ke Konverter Suhu atau koloni semut .
Banyak hal di Swing dilakukan dengan subklasifikasi, terutama jika Anda membuat komponen kustom. Untuk itu ada dua fungsi penting / makro: proxy dan gen-class .
Sekarang saya mengerti ke mana Anda akan pergi dengan cara yang lebih Lispy. Saya kira belum ada yang seperti itu. Saya akan sangat menyarankan untuk tidak mencoba membangun kerangka kerja pembangunan GUI yang megah a-la CLIM , tetapi untuk melakukan sesuatu yang lebih Lispy: mulai menulis aplikasi Swing Anda dan abstraksi pola umum Anda dengan makro. Ketika melakukan itu, Anda mungkin berakhir dengan bahasa untuk menulis GUI jenis Anda, atau mungkin beberapa hal yang sangat umum yang dapat dibagikan dan tumbuh.
Satu hal yang hilang ketika menulis GUI di Clojure adalah penggunaan alat seperti Matisse. Itu bisa menjadi titik kuat untuk menulis beberapa bagian di Jawa (GUI) dan beberapa bagian di Clojure (logika). Yang sebenarnya masuk akal karena dalam logika Anda akan dapat membangun bahasa untuk jenis logika Anda menggunakan makro dan saya pikir ada lebih banyak untuk mendapatkan di sana daripada dengan GUI. Jelas, itu tergantung pada aplikasi Anda.
sumber
Tidak ada yang menyarankannya, jadi saya akan: Browser sebagai platform UI. Anda dapat menulis aplikasi Anda di Clojure, termasuk server HTTP dan kemudian mengembangkan UI menggunakan apa saja dari HTML ke cegukan , ClojureScript dan salah satu dari miliaran perpustakaan JS yang Anda butuhkan. Jika Anda ingin perilaku browser yang konsisten dan "tampilan aplikasi desktop" merasa "Anda dapat menggabungkan Chrome dengan aplikasi Anda .
Ini sepertinya bagaimana Light Table didistribusikan.
sumber
Dari halaman ini :
Dan, tentu saja, ada baiknya melihat bagian interoperabilitas dari situs web clojure.
sumber
Ada pembungkus untuk MigLayout di clojure contrib. Anda juga bisa melihat intinya . Saya pada dasarnya memasang kode apa pun yang saya tulis saat saya belajar swing / miglayout.
Contoh dsm ditulis ulang dengan cara lispy menggunakan contrib.swing-utils
sumber
Sudah ada pembicaraan di milis tentang beberapa Cell (a la Kenny Tilton's Cells ) implementasi. Ini cara yang cukup rapi untuk melakukan pemrograman GUI.
sumber
Saya lebih suka pergi untuk clojurefx, ini agak terlalu dini, tetapi berhasil dan menghemat waktu Anda.
Saya memulai GUI saya dengan jungkat-jungkit dan kemudian mencoba komponen lain di clojurefx.
Saya telah menyelesaikan keduanya, dan saya yakin bahwa saya akan memperbaiki yang jungkat-jungkit menjadi clojurefx.
Bagaimanapun, JavaFX adalah cara untuk maju.
Rasanya lebih ringan dari jungkat-jungkit. Atau setidaknya, menulisnya ..
Binding bekerja, pendengar bekerja, sebagian besar komponen bekerja, jika tidak, cukup gunakan salah satu makro untuk membuat konstruktor untuk kasus tertentu dan pekerjaan yang dilakukan. Atau, jika Anda merasa kesulitan, tulis beberapa metode di Jawa dan minta bantuan untuk meningkatkan clojurefx.
Orang yang menulis clojurefx sedang sibuk saat ini, tetapi Anda dapat melakukan fork proyek dan melakukan beberapa perbaikan.
sumber
Berikut ini contoh pembungkus ayunan yang sangat mendasar:
sumber
Saya bertanya pada diri sendiri pertanyaan yang sama menulis GUI di Clojure dengan Swing dan datang dengan perpustakaan Signe
Ini memungkinkan Anda menggunakan mewakili model domain Anda sebagai struktur data Clojure tunggal yang dibungkus atom.
Lihat contoh di sini .
sumber
Saya telah mengembangkan applet Java di mana semuanya ditulis dalam Clojure kecuali kode applet, yang ditulis dalam Java. Applet memanggil callback kode Clojure tentang init, paint, dll dari hook java untuk metode-metode yang didefinisikan oleh model applet. Jadi kode akhirnya menjadi 99,999 persen Clojure dan Anda tidak perlu memikirkan tentang potongan Java kecil sama sekali untuk sebagian besar.
Ada beberapa kelemahan dari pendekatan ini, yang saya harap dapat didiskusikan lebih terinci di Clojure Google Group. Saya pikir pengembang Clojure harus memasukkan cara asli untuk membangun aplikasi. Saat ini Anda dapat melakukan hal-hal GUI apa pun yang Anda suka dari REPL, tetapi jika Anda menginginkan aplikasi GUI yang dapat dikirim, Anda perlu menulis beberapa Java untuk memanggil kode Clojure. Selain itu, sepertinya arsitektur Java Applet memberi Anda kekuatan di luar praktik terbaik Clojure yang lebih idiomatis, yang mengharuskan Anda menggunakan keadaan bisa berubah, dll.
Tetapi juga, saya belum terlalu jauh dengan Clojure dan mungkin itu adalah hal yang mungkin dan saya belum menemukan cara melakukannya dengan benar.
sumber
Lingkungan UI Clojure pilihan saya menggunakan IO.js (Node untuk ES6) + Electron (Container) + Quiescent (wrapper ReactJS) .
sumber
Jadi saya tidak melihat Fn-Fx dalam daftar ini, dari Timothy Baldridge (halgiri). Ini adalah perpustakaan Clojure yang menyediakan abstraksi fungsional atas JavaFX.
Itu dapat ditemukan di Github di https://github.com/halgari/fn-fx .
Untuk menggunakan, pastikan Anda menggunakan versi terbaru Java (1,8 90+) dan tambahkan dependensi ke repo github dengan menambahkan yang berikut ke project.clj Anda:
Saya sudah mencobanya, dan berhasil di luar kotak.
sumber
Clojure dan SWT adalah pendekatan terbaik untuk melakukan GUI. Pada dasarnya, SWT adalah pendekatan gaya plug and play untuk mengembangkan perangkat lunak.
sumber
Saya tidak berpikir ada yang resmi, tetapi secara pribadi saya akan mengambil keuntungan dari kenyataan bahwa saya menggunakan salah satu bahasa yang paling kuat di dunia dan bayangkan seperti apa bentuk kode gui yang sempurna:
Ide Anda akan berbeda tetapi semoga ini di atas memberi Anda beberapa ide.
sumber
Saya tahu Anda mengisyaratkan solusi desktop klasik, tetapi web sangat cocok dengan clojure. Saya telah menulis aplikasi audio lengkap di mana semuanya terhubung sehingga jika Anda menambahkan musik ke folder audio itu tercermin di UI web. Hanya mengatakan bahwa aplikasi Desktop bukan satu-satunya jalan :)
sumber