Dinamik diller için IDE'ler - ne kadar uzağa gidebilirsiniz?


56

Dinamik dillerin sunması gereken gelişme hızının, IDE'lerin statik meslektaşlarında size vereceği tamamlama ve diğer varlıklar eksikliğinden nasıl önemli ölçüde ödün verdiğini sinir bozucu buluyorum.

Sadece daha az yazmakla ilgili değil - sürekli olarak editörle entegre olmayan bir belgeye başvurmak zorunda kalmadan API'lere göz atarak elde ettiğiniz verimlilik artışı ve kolaylıktır.

Tüm IDE + dinamik dil kombinasyonlarını denemek için -ki adil olmak o kadar da değil- denedim:

  • böcekli
  • yavaş
  • clueless / overenthusiastic (mümkün olan tüm tamamlamaları göstermek gibi)
  • ya da sadece Eclipse + Java kadar tam değil.

Dinamik kod analizinin önemsiz bir iş olmadığını biliyorum. Fakat kimse merak etmeye yardımcı olamaz - bu kod parçasını anlamak gerçekten zor mu?

Yani sorum şu:

Herhangi bir IDE (ya da daha az hepsi bir arada kurulum), dinamik bir dil için tamamen olağanüstü bir destek sağladı mı, yoksa bu hala 'çözülmemiş' bir sorun mu?


30
+1 Denedim her PHP IDE, Visual Studio + C # / C ++ ile karşılaştırıldığında çok kötüydü.
Matěj Zábský

5
Genel sorudan emin değilim, ancak JetBrains IDE'lerine bir göz atmak isteyebilirsiniz. Onların yaklaşımı "zaten harika bir IDE'ye sahibiz, hadi $ DİL için çalışalım." Denediğiniz sorunların yerine şu yaklaşımı benimsemiş olabilir: "$ DİL'in bir IDE'si yok, birisinin yapması gerekir".
saat

2
IDEA’yı gerçekten harika buldum, özellikle Java ve proje ile ilgili görevler için. Ancak JavaScript için ad alanında veya içerdiği nesnelerde tanımlanan 'yöntemleri' tanımadığı görülüyor.
vemv

IntelliJ IDEA veya JetBrains'in dile özgü IDE'lerinden herhangi biri.
sylvanaar

1
@FrustratedWithFormsDesigner Komodo kullandım. Gördüğüm diğer RoR IDE'lerden çok daha iyi bir otomatik tamamlama var ... ama Ruby için otomatik tamamlama bile olsa çok az IDE gördüm. Yani, hiç yoktan iyidir
Earlz

Yanıtlar:


21

Smalltalk - son derece dinamik bir dil - her zaman mükemmel bir IDE'ye sahipti; içinde otomatik yeniden düzenleme, SUnit (tüm bu * ünite çerçevelerinin büyük ebeveynleri), "bu mesajı kim gönderir?", "Bu yöntemi kim uygular?" ve benzeri öncülük etti. Bu yüzden evet, IDE'ler dinamik dilleri gerçekten de yakın zamana kadar statik olarak yazılmış dilleri aşan bir seviyeye kadar destekleyebilirler.

S. Lott , “Dinamik diller, statik dillerin yaptığı gibi aynı kod tamamlama işlemine sahip olamaz. Aslında imkansız” diyor.

Teorik, mutlakiyetçi anlamda "esasen imkansız" mı? Elbette. Pratik anlamda? Pek sayılmaz. Dinamik diller, statik ( k-CFA , RoelTyper ), çalışma zamanında ( PIC'ler ) ve bir programcının son geçmişini kullanmak gibi diğer yöntemler - "Program Geçmişi Kod Tamamlamayı Nasıl Geliştirebilir" gibi bir tür çıkarımda bulunmanın birçok yolu vardır .

Kesinlikle Pharo ve Squeak toplulukları kod tamamlama araçlarından çok memnunuz .


3
Benden +1. Bugünlerde Java dünyasında çalışmama rağmen, Smalltalk'te bildiğim diğer dillere kıyasla ne kadar üretken olduğunuzu hala hatırlıyorum. IDE ve kodun resminize entegrasyonu, kodun her zaman "canlı" olması (Smalltalkers ne demek istediğimi anlayacaktır), sadece eşsizdir. Pharo ve Seaside, birçok insanın "olmuş bir dil" olarak düşündüğü şeye yeni bir hayat enjekte ederken, Eclipse bir IDE kadar iyidir, Smalltalk ile daha da fazla keman yapmak için geri dönüyorum. Smalltalk'ın mükemmel adlandırma kuralları kesinlikle öngörülü kod tamamlama işlemine yardımcı olur.
Amos M. Carpenter

16

IDE'lerden bildiğiniz her şey ilk önce dinamik bir dil olan Smalltak'ta geliştirildi. Geriye kalan her şey onları kopyalamak. Açıkçası, tüm bu özellikler dinamik dillerde mümkün.

Bugün, dinamik diller statik dillerin arkasında. Ama neden?

Yakın zamana kadar, evrensel olarak statik yazmanın dinamik yazmadan daha üstün olduğu düşünülüyordu. Çoğu kodlayıcı bu noktada fikirlerini daha yakın zamanda değiştirdi. Dinamik olarak yazılmış diller için IDE'lere odaklanmak yoktu.

IDE'lerin özelliklerinin dinamik olarak yazılmış dillerde daha az faydalı olduğunu düşünüyorum. Java veya Objective-C'de çalışırken, IDE'nin dille çalışmama yardımcı olması için gerekli olduğunu hissediyorum, ancak aynı dinamik diller için de geçerli değil.

Görevin bazı kısımları statik bir dilde daha kolaydır. Bir ifadenin türünü bulmak kolaydır. Aynısını dinamik bir dilde yapmak ya tüm program analizini ya da çalışma zamanı sırasında türlerin kaydedilmesini gerektirir. IDE'nin türler etrafında döndüğü şeylerin çoğunun etkisi vardır.


2
Squeak ve Pharo'da RoelTyper, kendisine hangi mesajları yolladığınızı bakarak bir türün türünü anlama konusunda oldukça iyi bir iş çıkarır. Aksi takdirde, Shivers & Might'ın k-CFA'sı maliyetleri doğru bir şekilde işlemden geçirebilmeniz için ayarlanabilir tipte çıkarım sağlar.
Frank Shearar

13
I think that the features for IDEs are less useful in dynamically typed languages- Komik, tam tersini düşünüyorum. Pek çok dinamik diller gerektirmez olmadığından beyan önceden değişkenleri, ... değişken ciddi endişe iyi bir IDE, bastırılmış bir endişeyi yanlış yazımı. Bu arada, ana özelliklerin geri kalanı - sözdizimi renklendirme, yeniden düzenleme araçları, hata ayıklama özellikleri - tüm dillerde aynı derecede faydalıdır .
BlueRaja - Danny Pflughoeft

2
@Winston: O zaman hiçbir zaman bildirimi olmayan bir dilde birden fazla kişiyle bir proje yapmadınız :) Dil, büyük / küçük harf duyarlı olduğunda özellikle can sıkıcıdır. Kişisel deneyimlerden örnek: "İş Emri" kelimesi bazen tek kelime ("İş Emri") olarak yazılır, bu nedenle değişken oluştururken, bazı insanlar yazacak workOrderve bazıları yazacaktır workorder. Bunlar Python> _ <
BlueRaja - Danny Pflughoeft'daki

1
@ BlueRaja-DannyPflughoeft, aksine, Python'da birden fazla kişiyle projeler yaptım. Sorun olduğunu söylediğinizde: var olmayan bir değişkeni referans aldığınız için bir istisna alıyorsunuz, kodunuz ilk testte başarısız oluyor, çünkü verilerinizi yanlış bir yerde saklıyorsunuz veya buggy ile sonuçlanan tespit edilemeyen hatalar alıyorsunuz kod üretime kaçıyor?
Winston Ewert,

2
“Birçok kodlayıcı bu noktada fikirlerini daha yakın zamanda değiştirdi.” Bu neden?
Pubby

10

Python ile bu problemle karşılaştım. Editörüm olarak vim istedim, ancak bu bir IDE ortamım olmayacağı anlamına geliyordu. Böylece, vim eklentileri ile kendime yuvarlandım. Şu anda, geçmişte kullandığım herhangi bir IDE'nin geliştirme için daha iyi bir ortamım olduğunu düşünüyorum.

Kurulumum github'da barındırılıyor, bir göz atmaktan ve beğendiklerinizi silmekten çekinmeyin. Eklentilere hızlı bir bakış için:

  • patojen
  • python modu, ip, pyflakes ve pydoc entegrasyonu için
  • bir python hata ayıklayıcı için vimpdb
  • bir projedeki dosyaların bir listesi için proje
  • etiket atlama için etiket listesi
  • sekme tamamlama için supertab
  • snippets için snipmate
  • Entegre bir kabuk için conqueterm, komut istemi, bash, python veya ipython

Başka şeyler var, ama daha popüler IDE'lerin sahip olduğu tüm özelliklere sahip. Bana bir kuruşa mal olmadı ve ben de vimin gücünden yararlanacağım. Bölünmeler, hareket komutları, kayıtlar, atlama, tüm dev ortamımı klavyeyle çalıştırabilmek ...


4

Herhangi bir IDE'nin (veya hepsi bir arada kurulumların) dinamik bir dil için tamamen üstün bir destek sağlamasını sağlayın,

Değerlendirmenizin anlaşılması zor olduğu düşünülürse ("tamamen olağanüstü"? "Clueless / overenthusiastic"?) Herhangi bir IDE'nin ima edilen standarda uyduğu şüphelidir.

Dinamik diller Java olmadığı için önemsizce Eclipse + Java ile karşılaştırma aptalca.

ya da bu hala 'çözülmemiş' bir sorun mu?

Tam değil.

Muhtemelen çözülemez. İhtiyaçlarınız ("tamamlama ve diğer varlıkların eksikliği") daha kesin olmayı zorlaştırır.

Dinamik diller, statik dillerle aynı tür kod tamamlama işlemlerine sahip olamaz. Aslında imkansız.

Bazı IDE’ler iyi bir tahminde bulunur. Örneğin Eclipse, dinamik diller için eklentilere sahiptir.


3

Steve Yegge'nin bu sunumunun hala alakalı olduğunu düşünüyorum . Bir ceviz kabuğundaki bazı iyi terbiyeli Java betiği kimlikleri (intelliJ IDEA) var, ancak genel olarak dinamik diller yetişiyor, çünkü bu araçların yapımında zorlaşan herhangi bir şey yok (veya gerçekten diller) önce tüm dikkat.


Aslında Yegge'nin sunumu sorumun temel nedeni idi: eğer sezgisel tarama ve tarif edilen diğer teknikler varsa, tüm serin uygulamalar nerede? IntelliJ hakkında: orijinal
yayınımda

2014 - en iyi statik IDE'ler için hala eşleşme yok
Den

3

Tüm günleri javascript / php ve ruby'de web uygulamaları üzerinde çalışarak programlıyorum ve bunun için bulduğum en iyi IDE . Bu üç dilde de (ve python) yerel kodlarımı ve html ve css ile çalışırken kimliklerini html'de css / javascript'te kullanmak için alır ve fonksiyonu kaldırır. hızlı ve kirli bir şey yaptığımda ve satır içi javascript yazarken kullandığım isimler (Kötü biliyorum, ama bazen kavram ispatı için kullanışlıdır). Tırmık görevleri oluşturdu ve git ve bir komut satırı konsolu için destek sağladı. Kalkmam biraz zaman aldı ancak bir kez kodladığımda IDE'den ayrılmayacağımı ve tonlarca zaman kazandırdığımı fark ettim.


Aşağılık neden benim deneyimimden 'tamamen üstün bir deneyim' elde ettiğim bir IDE içindeki dinamik olarak yazılmış dil gelişimi hakkında konuşan bir cevaba oy veriyor. Operasyon neyi istedi?
Ryan

2

Wing IDE'nin Python'a desteğinin gerçekten olağanüstü olduğunu öğrendim. Kod tamamlama ile iyi bir iş çıkarır ve hata ayıklayıcısı Visual Studio'nun dinamik olmayan C # için olduğu kadar güçlüdür.

Buggy, yavaş ya da clueless olmadığını kanıtlayabilirim. Eclipse'i hiç kullanmadım, bu yüzden bu konuda cahilim ama bence daha büyük bir soru şudur: Dinamik diller için eksiksiz ve verimlilik artırıcı bir IDE geliştirmenin doğasında bir engel var. Python ve Wing ile olan deneyimim göz önüne alındığında, böyle olmadığını söylemeye meyilliyim. Ancak, kesinlikle daha zor.


2

Microsoft'un Visual Studio'su , birçok programcı tarafından kullanılan bir IDE'dir ve IronRuby , IronPython ve F #'yi destekler . Çoğu, Ruby ve Python'un dinamik bir programlama dili olduğunu düşünürken, F # daha az olurdu.

Yoruma cevap olarak, F # bir programlama dilidir.

F # (telaffuz edilen F Sharp), zorunlu ve nesne yönelimli programlama disiplinlerinin yanı sıra fonksiyonel programlamayı da kapsayan .NET Framework'ü hedefleyen çok paradigma bir programlama dilidir. Bir ML çeşididir ve OCaml uygulaması ile büyük ölçüde uyumludur.

Tam olarak "dinamik bir dil" olarak tanımlayan şeyin tanımı hala tartışmaya hazır olsa da, çoğu örneğin JavaScript'in C # 'dan daha "dinamik" olduğunu kabul eder. Wikipedia'ya göre:

Dinamik bir dilin tanımı belirsizdir, çünkü kod ve veriler arasında ve ayrıca evrensel olmayan derleme ve çalışma zamanı arasında ayrım yapmaya çalışır. Sanal makineler, tam zamanında derleme ve bazı sistemlerdeki programlama dillerinin makine kodunu doğrudan değiştirme becerisi, bu farkı soyutlaştırır. Genel olarak, bir dilin dinamik olduğu iddiası, dinamik özelliklerin kullanım kolaylığı konusunda dilin yeteneklerinin açık bir ifadesinden çok daha fazla bir iddiadır.

Burada bir kutu solucan açmak istemiyorum. Bazıları F # 'nın dinamik bir dil yerine işlevsel olarak daha doğru bir şekilde tanımlandığını ve bunun istisnasını kabul etmemeyi önerir. Bunun çeşitli. Net dillerinde olduğunu söylemenin adil olacağını düşünüyorum, F # genellikle dinamik programlama için C # veya VB'den daha uygun olarak kabul edilir.

Görmek isteyebilirsiniz: Bir programlama dilini dinamik olarak niteleyen nedir?


4
"F # [...] dinamik bir dildir" derken neyi kastettiğinizi açıklayabilir misiniz ve C # 'dan daha dinamik olan nasıl?
Arseni Mourzenko

1
İkincisi, F # 'yı dinamik bir dil olarak görmezdim. Heck, C # olabilir (F # 'ın hazır bir eşdeğerine sahip olup olmadığından emin değilim) dynamicŞimdiye kadar yerleşik olan “daha ​​dinamik” . Ancak, her iki durumda da, ikisi de genellikle dinamik olarak yazılmamaktadır ve “dinamik diller” ile ilişkili diğer birçok özellik (kültürel şeylerden bahsetmiyorum) da eksiktir.

2

Statik olarak yazılmış diller ve dinamik olarak yazılmış diller arasındaki temel fark, sistemin bir sembol referansının derleme zamanında ne anlama geldiğini kesin olarak bilmesidir.

Bu, derleyici zamanında derleyicinin oluşturduğu bilgilerden doğrudan iyi bir IDE hazırlamanız için gereken bilgiyi toplamanızı gerçekten kolaylaştırır (çoğu zaman sadece "düzenleme" zamanına getirilir).

Yalnızca yöntemin bir "Şey" aldığını söyleyen tek başına bir yöntem imzanız varsa, bir düzenleyici ne göndereceğinizi nasıl bilmenize yardımcı olabilir? Bu şeyi kullanmak için yollar önermek nasıl yardımcı olabilir?

Duck-yazarak da burada yardımcı olmuyor - mümkün olan en akıllı editör bile, nesnenizde ".executeBarOp" kodunu tamamlayabildiği bir .executeFooOp () yöntemine sahip olduğunu söyleyemez. (Her ne kadar kod tabanının kalanını araştırabilir ve bazı akıllı tahminler yapabilir).

Ancak, imzada "Dize" olduğunu biliyorsanız, bu dizgede arayabileceğiniz tüm yöntemleri bilirsiniz ve bu kullanıcı bir yöntem çağrısı yazmanın ortasındayken, bu değişkeni önerebilirsiniz. Parametre olarak dize. Eğer istersen, kullanabileceği alt sınıflar bile önerebilirsin.

Tipik derleyicinizden çok daha akıllı bir şeyle kod kodunun tamamını tam olarak tarayamadığınız sürece, bilgiler dinamik olarak yazılmış dillerle sunulmaz.


1
"Statik olarak yazılmış diller ve dinamik olarak yazılmış diller arasındaki temel fark, sistemin kesin olarak, bir sembol referansının derleme zamanında ne anlama geldiğini bilmesidir." - Evet, ama yapmak zorunda değil. IDE derleme zamanı yerine çalışma zamanında çalışıyorsa, derleme zamanında bu bilgiyi bilmesi gerekmez. Çalışma zamanında, bilgi ise aksi programı bile çalışamadı, mevcut.
Jörg W Mittag

1
IDE çalışma zamanında çalışamaz - veya daha doğrusu bir seferde yalnızca bir olası dalda çalışabilir. Çalışma zamanı durumsaldır, verilen bir sembol MAYİ bir seferde bir şey ve başka bir girişte başka bir şey anlamına gelir, yani "Editör" ününüz "Çalışıyor" ise (bu nasıl çalışır? metin tamamlama yapmak için "Başka Geçiş" den bilgi al? Bu konuda, henüz yazılı olmayan bir modüle takılacak bir kütüphane yazıyorsanız ne olacak?
Bill K,

@billk Uygulamada, IDE çalışma zamanında gayet iyi çalışıyor. Test-ilk çalışırsanız, çalışma süreniz beklediğiniz nesneyi bilir. Bir süre küçük bir konuşma yapmayı deneyin.
Stephan Eggermont,

0

En azından PHP için birçok IDE "gibi" bir şey "anlamak"

/** @var $foo ClassA **/

Standart bir şekilde belgelerseniz (bu durumda phpDocumentor ), IDE bundan en iyi şekilde faydalanacaktır.


2
Yani, statik olarak derlenmiş bir dilin yazmanızı gerektirecek her şeyi yazarsanız, bu konuda herhangi bir statik olarak yazılmış dilden bulabileceğinizle ilgili aynı bilgileri bulabileceğinizi söylüyorsunuz - doğru statik olarak yazılmış bir dile gitmek?
Bill K,

Çünkü yine de en azından php basit tipler için bazı otomatik dökümler yapar. Ayrıca bunu yaptığınız için dinamik bir dil, bir türün nerede belirleneceğine karar vermenize izin verir. Çevik gelişmeyle "Sınıfı bir tür veya arayüz olarak kullanıyor muyum?"
ACNB

@ ACNB: Bol miktarda "statik" dil, aynı zamanda otomatik döküm ve tür çıkarımı sağlar. Örneğin, C ++, C # ve benzerleri.
Arafangion

0

Dinamik diller için tüm IDE'lerden (çalışma zamanında yazıyı çözen diller) en iyisi ... Python için Visual Studio

  • Intellisense için zorlayıcı tip bilgisi
  • navigasyon
  • debuging

Denemeye değer.


Özel olarak, Python için VS'nin hangi yönlerden daha iyi olduğunu belirtebilir misiniz?
Jörg W Mittag
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.