IDE untuk bahasa dinamis - seberapa jauh Anda bisa mendapatkan?

56

Saya merasa frustasi bagaimana kecepatan perkembangan yang ditawarkan oleh bahasa dinamis akan dikompromikan secara signifikan oleh kurangnya penyelesaian dan aset lain yang akan diberikan IDE kepada Anda dalam rekan-rekan statis mereka.

Ini bukan hanya tentang mengetik lebih sedikit - ini adalah peningkatan produktivitas dan kesenangan yang Anda dapatkan dengan menelusuri API tanpa harus terus-menerus merujuk ke dokumentasi yang tidak terintegrasi dengan editor.

Sampai saat ini semua kombinasi bahasa IDE + dinamis - yang seharusnya tidak terlalu banyak - saya sudah coba adalah:

  • kereta
  • lambat
  • clueless / overenthusiastic (seperti dalam menunjukkan semua penyelesaian yang pernah mungkin)
  • atau hanya tidak selengkap, katakanlah, Eclipse + Java.

Saya sadar bahwa analisis kode dinamis bukanlah tugas yang sepele. Tetapi orang tidak dapat menahan diri untuk bertanya-tanya - apakah ini bagian dari kode yang sangat sulit untuk diketahui ?

Jadi pertanyaan saya adalah:

Apakah ada IDE tertentu (atau kurang pengaturan all-in-one) yang mencapai dukungan yang sangat luar biasa untuk bahasa yang dinamis, atau apakah ini masih merupakan masalah yang 'belum terpecahkan'?

vemv
sumber
30
+1 Setiap IDE PHP yang saya coba sangat mengerikan dibandingkan dengan Visual Studio + C # / C ++.
Matěj Zábský
5
Tidak yakin tentang pertanyaan menyeluruh, tetapi Anda mungkin ingin melihat pada JetBrains IDEs. Pendekatan mereka adalah "kami sudah memiliki IDE yang hebat, mari kita membuatnya bekerja untuk $ LANGUAGE". Masalah dengan yang Anda coba mungkin telah mengambil pendekatan berikut sebagai gantinya: "$ LANGUAGE tidak memiliki IDE, seseorang harus membuatnya".
milimoose
2
Saya menemukan memang IDEA luar biasa, terutama untuk bekerja dengan Java dan tugas-tugas terkait proyek. Tetapi untuk JavaScript tampaknya tidak mengenali 'metode' yang didefinisikan dalam namespace atau objek yang terkandung di dalamnya.
vemv
IntelliJ IDEA, atau salah satu dari IDE khusus bahasa JetBrains.
sylvanaar
1
@FrustratedWithFormsDesigner Saya telah menggunakan Komodo. Ini memiliki pelengkapan-otomatis yang jauh lebih baik daripada IDE RoR lainnya yang pernah saya lihat ... tetapi saya telah melihat sangat sedikit IDE untuk Ruby yang bahkan mencoba mengimplementasikan pelengkapan otomatis. Yang mengatakan, itu lebih baik daripada tidak sama sekali
Earlz

Jawaban:

21

Smalltalk - bahasa yang sangat dinamis - selalu memiliki IDE yang luar biasa, di mana hal-hal kecil seperti refactoring otomatis, SUnit (kakek-nenek semua * Unit frameworks), "siapa yang mengirim pesan ini?", "Siapa yang mengimplementasikan metode ini?" dan sejenisnya dirintis. Jadi ya, IDE memang dapat mendukung bahasa dinamis ke tingkat yang, hingga baru-baru ini, jauh melampaui bahasa yang diketik secara statis.

S. Lott mengatakan bahwa "Bahasa dinamis tidak dapat memiliki jenis penyelesaian kode yang sama dengan bahasa statis. Pada dasarnya tidak mungkin."

"Pada dasarnya tidak mungkin" dalam pengertian teoretis, absolut? Tentu. Secara praktis? Tidak juga. Ada banyak cara untuk menyimpulkan jenis bahasa dinamis, secara statis ( k-CFA , RoelTyper ), pada saat dijalankan ( PICs ), dan metode lain, seperti menggunakan sejarah programmer baru-baru ini - "Bagaimana Sejarah Program Dapat Meningkatkan Penyelesaian Kode" .

Tentu saja komunitas Pharo dan Squeak sangat senang dengan alat penyelesaian kode mereka .

Frank Shearar
sumber
3
+1 dari saya. Meskipun bekerja di dunia Jawa hari ini, saya masih ingat tentang seberapa jauh Anda lebih produktif di Smalltalk dibandingkan dengan bahasa lain yang saya tahu. Integrasi IDE dan kode dalam gambar Anda, memiliki kode yang "hidup" sepanjang waktu (Smalltalkers akan tahu apa yang saya maksud), sama sekali tidak tertandingi. Dengan Pharo dan Seaside menyuntikkan kehidupan baru ke dalam apa yang banyak orang pikirkan sebagai "bahasa yang sudah ada", dan Eclipse adalah IDE, saya kembali bermain-main dengan Smalltalk semakin banyak. Konvensi penamaan Smalltalk yang luar biasa jelas membantu menyelesaikan kode prediksi.
Amos M. Carpenter
16

Hampir semua yang Anda ketahui dari IDE pertama kali dikembangkan di Smalltak yang merupakan bahasa yang dinamis. Yang lainnya hanya menyalinnya. Jadi jelas, semua fitur ini dimungkinkan dalam bahasa yang dinamis.

Saat ini, bahasa dinamis berada di belakang bahasa statis. Tapi kenapa?

Sampai saat ini cukup universal berpikir bahwa pengetikan statis lebih unggul daripada pengetikan dinamis. Banyak coder telah berubah pikiran baru-baru ini tentang hal itu. Fokus pada IDE untuk bahasa yang diketik secara dinamis tidak ada.

Saya pikir fitur untuk IDE kurang berguna dalam bahasa yang diketik secara dinamis. Ketika bekerja di Java atau Objective-C, saya merasa bahwa IDE diperlukan untuk membantu saya bekerja dengan bahasa, tetapi hal yang sama tidak berlaku untuk bahasa dinamis.

Beberapa bagian dari tugas lebih mudah dalam bahasa statis. Sangat mudah untuk mengetahui jenis ekspresi. Melakukan hal yang sama dalam bahasa dinamis membutuhkan analisis seluruh program atau mencatat jenisnya selama runtime. Karena banyak dari apa IDE berputar di sekitar jenis, itu memang berpengaruh.

Winston Ewert
sumber
2
Di Squeak dan Pharo, RoelTyper melakukan pekerjaan yang cukup baik untuk menyimpulkan tipe sesuatu dengan melihat pesan apa yang Anda kirim. Jika tidak, k-CFA dari Shivers & Might menyediakan inferensi tipe yang dapat disetel, dalam arti Anda dapat menukar biaya dengan akurasi.
Frank Shearar
13
I think that the features for IDEs are less useful in dynamically typed languages- Lucu, saya pikir justru sebaliknya. Karena begitu banyak bahasa dinamis tidak mengharuskan Anda mendeklarasikan variabel sebelumnya, salah mengeja variabel adalah masalah serius ... masalah yang diringankan oleh IDE yang baik. Sementara itu, fitur utama lainnya - pewarnaan sintaks, alat refactoring, fitur debugging - sama-sama berguna dalam semua bahasa.
BlueRaja - Danny Pflughoeft
2
@ Winston: Maka Anda tidak pernah melakukan proyek dalam bahasa non-deklaratif dengan banyak orang :) Ini sangat menjengkelkan ketika bahasa tersebut peka terhadap huruf besar-kecil. Contoh dari pengalaman pribadi: Kata "Work-Order" kadang-kadang dieja sebagai satu kata ("Workorder"), jadi ketika membuat variabel, beberapa orang akan menulis workOrderdan beberapa akan menulis workorder. Ini adalah dua variabel terpisah dalam Python> _ <
BlueRaja - Danny Pflughoeft
1
@ BlueRaja-DannyPflughoeft, sebaliknya, saya telah melakukan proyek dengan Python dengan banyak orang. Ketika Anda mengatakan Anda memiliki masalah apakah itu: Anda menjalankan dan mendapatkan pengecualian karena Anda mereferensikan variabel yang tidak ada, kode Anda gagal dalam pengujian awal karena Anda menyimpan data di tempat yang salah, atau Anda mendapatkan kesalahan yang tidak terdeteksi sehingga mengakibatkan buggy kode lolos ke produksi?
Winston Ewert
2
"Banyak coders yang berubah pikiran belakangan ini tentang hal itu." Kenapa ini?
Pubby
10

Saya mengalami masalah dengan python, semacam. Saya ingin vim sebagai editor saya, tetapi itu berarti saya tidak akan memiliki lingkungan IDE. Jadi, saya menggulung sendiri dengan vim plugins. Saat ini, saya pikir saya sebenarnya memiliki lingkungan yang lebih baik untuk pengembangan yang pernah saya gunakan di IDE sebelumnya.

Pengaturan saya di-host di github , jangan ragu untuk melihat dan boks apa yang Anda suka. Untuk ikhtisar cepat plugin:

  • patogen
  • python-mode, untuk integrasi rope, pyflakes, dan pydoc
  • vimpdb untuk debugger python
  • proyek untuk daftar file dalam suatu proyek
  • taglist untuk melompat tag
  • supertab untuk penyelesaian tab
  • snipmate untuk snippet
  • conqueterm untuk shell terintegrasi, baik command prompt, bash, python, atau ipython

Ada beberapa hal lain, tetapi memiliki semua fitur yang dimiliki oleh IDE yang lebih populer. Tidak ada biaya sepeser pun, dan saya bisa memanfaatkan semua kekuatan vim. Split, perintah gerakan, register, melompat, bisa menjalankan seluruh lingkungan dev saya dengan keyboard ...

Spencer Rathbun
sumber
4

Apakah IDE tertentu (atau kurang pengaturan all-in-one) mencapai dukungan yang sangat luar biasa untuk bahasa yang dinamis,

Mempertimbangkan evaluasi Anda sulit untuk dipahami ("benar-benar luar biasa"? "Tidak mengerti / terlalu antusias"?) Meragukan bahwa setiap IDE dapat cocok dengan standar yang tersirat.

Membandingkan secara sepele terhadap Eclipse + Java adalah konyol karena bahasa dinamis bukan Java.

atau apakah ini masih merupakan masalah yang 'tidak terpecahkan'?

Tidak terlalu.

Mungkin tidak terpecahkan. Persyaratan Anda ("kurangnya penyelesaian dan aset lainnya") membuatnya sulit untuk lebih tepat.

Bahasa dinamis tidak dapat memiliki jenis penyelesaian kode yang sama dengan bahasa statis. Ini pada dasarnya tidak mungkin.

Beberapa IDE melakukan pekerjaan menebak dengan baik. Eclipse, misalnya, memiliki plugin untuk bahasa dinamis.

S.Lott
sumber
3

Saya pikir presentasi oleh Steve Yegge ini masih relevan. di shell kacang ada beberapa setengah naskah Java script yang baik (intelliJ IDEA), tetapi bahasa dinamis pada umumnya sedang mengejar ketinggalan, bukan karena ada sesuatu yang secara inheren lebih sulit tentang membuat alat ini (atau memang bahasa) itu hanya bahasa statis yang didapat semua perhatian dulu.

jk.
sumber
Sebenarnya presentasi Yegge adalah penyebab utama dari pertanyaan saya: jika heuristik dan teknik yang dijelaskan lainnya ada, di mana semua implementasi keren? Di IntelliJ: lihat komentar yang saya tinggalkan di posting asli saya (dan beri tahu saya jika saya salah)
vemv
2014 - masih belum ada tandingan untuk IDE statis terbaik
Den
3

Saya memprogram sepanjang hari dalam javascript / php dan ruby ​​yang bekerja pada aplikasi web dan IDE terbaik yang saya temukan untuk ini adalah Aptana. Ia memiliki penyelesaian kode untuk ketiga bahasa tersebut (dan python) yang mengambil vars lokal saya dan di atas itu ketika bekerja dengan html dan css ia mengambil id di html untuk digunakan dalam css / javascript, dan mengambil fungsi nama ketika saya melakukan sesuatu yang cepat dan kotor dan menulis javascript inline (saya tahu buruk, tetapi kadang-kadang berguna untuk bukti konsep). Ini telah dibangun di tugas menyapu dan dibangun di dukungan untuk git dan konsol baris perintah. Butuh sedikit waktu untuk bangun tetapi setelah saya melakukannya saya menemukan bahwa saya hampir tidak pernah meninggalkan IDE saya ketika coding dan itu menghemat banyak waktu.

Ryan
sumber
Mengapa pilihan bawah pada jawaban yang berbicara tentang pengembangan bahasa yang diketik secara dinamis di dalam IDE yang telah dicapai dari pengalaman saya 'pengalaman yang benar-benar luar biasa.' Apa yang diminta oleh op?
Ryan
2

Saya telah menemukan bahwa dukungan Wing IDE untuk Python benar-benar luar biasa. Ia melakukan pekerjaan dengan penyelesaian kode, dan debuggernya sekuat Visual Studio untuk C # yang non-dinamis.

Saya bisa membuktikan bahwa itu tidak bermasalah, lambat atau tidak mengerti. Saya belum pernah menggunakan Eclipse, jadi saya tidak tahu tentang hal itu, tapi saya pikir pertanyaan yang lebih besar adalah: apakah ada beberapa penghalang yang melekat untuk mengembangkan IDE yang lengkap dan meningkatkan produktivitas untuk bahasa dinamis. Mengingat pengalaman saya dengan Python dan Wing, saya cenderung mengatakan bahwa bukan itu masalahnya. Namun, tentu saja lebih sulit.

Adam Crossland
sumber
2

Microsoft's Visual Studio adalah IDE yang digunakan oleh banyak programmer dan mendukung IronRuby , IronPython dan F #. Sebagian besar akan menganggap Ruby dan Python sebagai bahasa pemrograman yang dinamis sementara F # akan kurang begitu.

Menanggapi komentar, F # adalah bahasa pemrograman.

F # (diucapkan F Sharp) adalah bahasa pemrograman multi-paradigma, menargetkan Kerangka NET., Yang mencakup pemrograman fungsional serta disiplin pemrograman imperatif dan berorientasi objek. Ini adalah varian dari ML dan sebagian besar kompatibel dengan implementasi OCaml.

Sementara definisi yang tepat tentang apa yang secara tepat mendefinisikan "bahasa dinamis" masih bisa diperdebatkan, sebagian besar akan setuju bahwa JavaScript lebih "dinamis" daripada C # misalnya. Menurut Wikipedia:

Definisi bahasa dinamis bersifat ambigu karena mencoba membuat perbedaan antara kode dan data serta antara kompilasi dan runtime yang tidak universal. Mesin virtual, kompilasi just-in-time, dan kemampuan banyak bahasa pemrograman pada beberapa sistem untuk secara langsung memodifikasi kode mesin membuat perbedaan menjadi abstrak. Secara umum, pernyataan bahwa suatu bahasa dinamis lebih merupakan pernyataan tentang kemudahan penggunaan fitur dinamis daripada pernyataan yang jelas tentang kemampuan bahasa.

Saya tidak ingin membuka sekaleng cacing di sini. Beberapa akan menyarankan bahwa F # lebih tepat digambarkan sebagai bahasa fungsional daripada bahasa yang dinamis, dan saya tidak akan mengambil pengecualian untuk itu. Apa yang saya percaya akan adil untuk mengatakan bahwa dari berbagai bahasa .Net, F # secara umum dianggap sebagai yang lebih tepat untuk pemrograman dinamis daripada C # atau VB.

Anda mungkin ingin melihat: Apa yang memenuhi syarat bahasa pemrograman sebagai dinamis?

JonnyBoats
sumber
4
Bisakah Anda menjelaskan apa yang Anda maksud dengan "F # [...] adalah bahasa yang dinamis", dan bagaimana lebih dinamis itu, katakanlah, C #?
Arseni Mourzenko
1
Diperbanyak, saya tidak akan menganggap F # bahasa yang dinamis. Heck, C # mungkin (Saya tidak yakin apakah F # memiliki padanan yang tersedia) "lebih dinamis" memiliki dynamicbuilt-in sekarang. Namun demikian, keduanya tidak diketik secara dinamis, dan sebagian besar fitur lainnya (belum lagi barang budaya) yang terkait dengan "bahasa dinamis" juga tidak ada.
2

Perbedaan utama antara bahasa yang diketik secara statis dan bahasa yang diketik secara dinamis adalah bahwa sistem dapat mengetahui, dengan pasti, apa artinya referensi simbol pada waktu kompilasi.

Ini membuatnya sangat mudah untuk mengumpulkan informasi yang Anda butuhkan untuk membuat IDE yang baik langsung dari info yang dihasilkan oleh kompiler pada waktu kompilasi (yang hanya dipindahkan ke waktu "edit" untuk sebagian besar).

Jika Anda memiliki tanda tangan metode yang berdiri sendiri yang hanya mengatakan bahwa metode tersebut menggunakan "Hal" bagaimana editor dapat membantu Anda mengetahui apa yang harus dikirim? Bagaimana itu bisa membantu menyarankan cara untuk menggunakan benda itu?

Mengetik bebek juga tidak membantu - bahkan editor yang paling cerdas pun tidak akan dapat memberi tahu Anda bahwa hanya karena objek Anda memiliki metode .executeFooOp () yang dapat dikodekan dengan kode ".executeBarOp" pada objek itu. (Meskipun bisa menjelajahi sisa basis kode dan membuat beberapa tebakan cerdas).

Namun, jika Anda tahu bahwa itu adalah "String" di tanda tangan, Anda tahu semua metode yang mungkin Anda panggil pada string itu DAN Anda bisa menyarankan variabel itu ketika pengguna itu sedang mengetik panggilan metode yang membutuhkan String sebagai parameter. Anda bahkan bisa menyarankan sub-kelas yang bisa dilemparkan ke dalamnya jika Anda mau.

Informasi itu tidak ada di sana dengan bahasa yang diketik secara dinamis kecuali Anda dapat melakukan pemindaian lengkap seluruh basis kode dengan sesuatu yang JAUH lebih cerdas daripada kompiler khas Anda.

Bill K
sumber
1
"Perbedaan utama antara bahasa yang diketik secara statis dan bahasa yang diketik secara dinamis adalah bahwa sistem dapat mengetahui, tentu saja, apa artinya referensi simbol pada waktu kompilasi." - Ya, tapi tidak harus. Jika IDE berfungsi saat runtime dan bukan pada waktu kompilasi, maka IDE tidak perlu mengetahui informasi ini pada waktu kompilasi. Pada saat runtime, informasi yang tersedia, jika tidak program bahkan tidak bisa berjalan.
Jörg W Mittag
1
Idenya tidak dapat bekerja saat runtime - atau lebih tepatnya hanya dapat berjalan di satu cabang yang memungkinkan pada suatu waktu. Runtime adalah situasional, simbol yang diberikan MUNGKIN berarti satu hal pada satu pass dan satu lagi pada pass yang lain, jadi jika "Editor" Anda adalah "Running" (Bagaimana itu bekerja ???) pada "One Pass", bagaimana caranya dapatkan info dari "Another Pass" untuk menyelesaikan teks? Untuk itu, bagaimana jika Anda sedang menulis perpustakaan yang akan dicolokkan ke modul yang belum tertulis?
Bill K
@billk Dalam prakteknya, IDE berfungsi dengan baik saat runtime. jika Anda mengerjakan tes pertama kali, run-time Anda tahu objek yang Anda harapkan. Coba smalltalk sebentar.
Stephan Eggermont
0

Setidaknya untuk PHP banyak IDE "mengerti" sesuatu seperti

/** @var $foo ClassA **/

Jika Anda mendokumentasikan dengan cara standar (dalam hal ini phpDocumentor ), IDE akan memaksimalkannya.

ACNB
sumber
2
Jadi Anda mengatakan bahwa jika Anda mengetik semua yang bahasa yang dikompilasi secara statis akan meminta Anda untuk mengetik maka Anda dapat menemukan info yang sama tentang itu bahwa Anda bisa dengan bahasa yang diketik secara statis - benar saya kira tetapi mengapa tidak lewati saja langkah tambahan dan pergi ke bahasa yang diketik secara statis?
Bill K
Karena sekali lagi setidaknya php melakukan casting otomatis untuk tipe sederhana. Dan juga karena melakukannya bahasa yang dinamis memungkinkan Anda memutuskan di mana menentukan jenis. Dengan pengembangan tangkas Anda mungkin ingin menunda keputusan seperti "Apakah saya menggunakan kelas sebagai tipe atau antarmuka?"
ACNB
@ ACNB: Banyak bahasa "statis" juga memungkinkan casting otomatis dan tipe inferencing. Misalnya, C ++, C #, dan sejenisnya.
Arafangion
0

Dari semua IDE untuk bahasa dinamis (bahasa yang menyelesaikan tipe saat runtime) yang terbaik adalah ... Visual Studio for Python

  • Informasi tipe bulling untuk Intellisense
  • Navigasi
  • Debuging

Layak untuk dicoba.

Lukasz Madon
sumber
Bisakah Anda menunjukkan secara spesifik, dalam hal apa VS untuk Python lebih baik daripada, mari kita memilih satu secara acak, Hopscotch?
Jörg W Mittag