Uważam za frustrujące, w jaki sposób szybkość rozwoju, jaką powinny oferować dynamiczne języki, zostaje znacznie zmniejszona z powodu braku uzupełnień i innych zasobów, które IDE dałyby ci w swoich statycznych odpowiednikach.
Nie chodzi tylko o pisanie mniej - chodzi o zwiększenie wydajności i zwykłą zabawę podczas przeglądania interfejsów API bez konieczności ciągłego odwoływania się do dokumentacji niezintegrowanej z edytorem.
Do tej pory wszystkie dynamiczne kombinacje językowe IDE + - które uczciwie nie są aż tak bardzo - próbowałem:
- powozik
- powolny
- nieświadomy / nadmierny entuzjazm (jak pokazanie wszystkich możliwych uzupełnień)
- lub po prostu nie tak kompletne jak, powiedzmy, Eclipse + Java.
Wiem, że dynamiczna analiza kodu nie jest trywialnym zadaniem. Ale nie można przestać się zastanawiać - czy naprawdę trudno jest zrozumieć ten fragment kodu ?
Więc moje pytanie brzmi:
Czy jakieś konkretne środowiska IDE (lub mniej konfiguracji typu „wszystko w jednym”) uzyskały całkowicie wyjątkową obsługę dynamicznego języka, czy też jest to nadal problem „nierozwiązany”?
źródło
Odpowiedzi:
Smalltalk - wysoce dynamiczny język - zawsze miał doskonałe IDE, w którym drobne rzeczy, takie jak automatyczne refaktoryzowanie, SUnit (dziadek wszystkich * frameworków Unit), „kto wysyła ten komunikat?”, „Kto wdraża tę metodę?” i tym podobne były pionierami. Tak więc, IDE mogą rzeczywiście obsługiwać języki dynamiczne do poziomu, który do niedawna znacznie przekraczał język języków o typie statycznym.
S. Lott mówi, że „Języki dynamiczne nie mogą mieć tego samego rodzaju uzupełniania kodu, co języki statyczne. Jest to w zasadzie niemożliwe”.
„Zasadniczo niemożliwe” w sensie teoretycznym, absolutystycznym? Pewnie. W sensie praktycznym? Nie całkiem. Istnieje wiele sposobów wnioskowania o typach dla języków dynamicznych, statycznych ( k-CFA , RoelTyper ), w czasie wykonywania ( PIC ) i innych metodach, takich jak używanie najnowszej historii programisty - „Jak historia programu może poprawić uzupełnianie kodu” .
Z pewnością społeczności Pharo i Squeak są bardzo zadowolone z narzędzi do uzupełniania kodu .
źródło
Prawie wszystko, co znasz z IDE, zostało po raz pierwszy opracowane w Smalltak, który jest językiem dynamicznym. Cała reszta to tylko ich kopiowanie. Oczywiście wszystkie te funkcje są możliwe w dynamicznych językach.
Obecnie języki dynamiczne stoją za językami statycznymi. Ale dlaczego?
Do niedawna powszechnie uważano, że pisanie statyczne jest lepsze niż pisanie dynamiczne. Wielu programistów ostatnio zmieniło zdanie w tej sprawie. Nie było skupienia się na IDE dla języków dynamicznie wpisywanych.
Myślę, że funkcje IDE są mniej przydatne w dynamicznie pisanych językach. Pracując w Javie lub Objective-C, uważam, że IDE jest konieczne, aby pomóc mi w pracy z tym językiem, ale to samo nie dotyczy języków dynamicznych.
Niektóre części zadania są łatwiejsze w języku statycznym. Zrozumienie rodzaju wyrażenia jest proste. Wykonanie tego samego w języku dynamicznym wymaga analizy całego programu lub zarejestrowania typów w czasie wykonywania. Ponieważ wiele z tego, co IDE obraca się wokół typów, ma to wpływ.
źródło
I think that the features for IDEs are less useful in dynamically typed languages
- Zabawne, myślę wręcz przeciwnie. Ponieważ tak wiele języków dynamicznych nie wymaga wcześniejszego deklarowania zmiennych, błędne pisanie zmiennej jest poważnym problemem ... problemem, który jest łagodzony przez dobre IDE. Tymczasem pozostałe główne funkcje - kolorowanie składni, narzędzia do refaktoryzacji, funkcje debugowania - są równie przydatne we wszystkich językach.workOrder
a inni będą pisaćworkorder
. Są to dwie oddzielne zmienne w Pythonie> _ <Zetknąłem się z tym problemem z pythonem. Chciałem vima jako mojego edytora, ale to oznaczało, że nie miałbym środowiska IDE. Więc stworzyłem własne z wtyczkami vim. Obecnie myślę, że mam lepsze środowisko do programowania niż IDE, z którego korzystałem w przeszłości.
Moja konfiguracja jest hostowana na github , możesz rzucić okiem na to, co lubisz. Szybki przegląd wtyczek:
Jest kilka innych rzeczy, ale ma wszystkie funkcje, które mają bardziej popularne IDE. Nie kosztowało mnie to ani grosza, a ja mogę wykorzystać całą moc vima. Dzieli, komendy ruchu, rejestry, skoki, możliwość uruchamiania całego środowiska programistycznego za pomocą klawiatury ...
źródło
Biorąc pod uwagę, że twoja ocena jest trudna do zrozumienia („całkowicie wybitny”? „Nieświadomy / nadmiernie entuzjastyczny”?), Wątpliwe jest, aby jakiekolwiek IDE pasowało do domyślnego standardu.
Trywialne porównywanie z Eclipse + Java jest głupie, ponieważ dynamiczne języki to nie Java.
Nie do końca.
Prawdopodobnie jest to nierozwiązywalne. Twoje wymagania („brak uzupełnień i inne zasoby”) utrudniają precyzję.
Języki dynamiczne nie mogą mieć tego samego rodzaju uzupełniania kodu, co języki statyczne. Jest to w zasadzie niemożliwe.
Niektóre IDE dobrze zgadują. Na przykład Eclipse ma wtyczki do dynamicznych języków.
źródło
Myślę, że ta prezentacja Steve'a Yegge jest nadal aktualna . w skorupce orzecha znajduje się około połowa przyzwoitych idów skryptów Java (intelliJ IDEA), ale generalnie języki dynamiczne odgrywają nadrabianie zaległości, nie dlatego, że tworzenie tych narzędzi (lub języków) jest z natury trudniejsze, to tylko statyczne języki cała uwaga pierwsza.
źródło
Programuję cały dzień w javascript / php i ruby, pracując na aplikacjach internetowych, a najlepszym IDE, jakie znalazłem do tego, jest Aptana. Ma uzupełnianie kodu dla wszystkich trzech języków (i python), pobiera moje lokalne zmienne, a ponadto podczas pracy z HTML i CSS pobiera identyfikatory w HTML do użycia w css / javascript i pobiera funkcję nazwiska, kiedy robię coś szybkiego i brudnego i piszę wbudowany javascript (znam kiepski, ale czasem przydatny jako dowód koncepcji). Ma wbudowane zadania prowizji i wsparcie dla git i konsoli wiersza poleceń. Trochę zajęło mi wstawanie, ale kiedy to zauważyłem, prawie nigdy nie zostawiam swojego IDE podczas kodowania i to oszczędza mi mnóstwo czasu.
źródło
Przekonałem się, że obsługa Wing IDE dla Pythona jest naprawdę znakomita. Wykonuje dobrą robotę z uzupełnianiem kodu, a jego debugger jest tak samo wydajny jak Visual Studio dla niedynamicznego C #.
Mogę zaświadczyć, że nie jest wadliwy, powolny ani pozbawiony pojęcia. Nigdy nie korzystałem z Eclipse, więc nie znam się na tym, ale myślę, że większe pytanie brzmi: czy istnieje jakaś nieodłączna bariera w rozwoju kompletnego i zwiększającego produktywność IDE dla języków dynamicznych. Biorąc pod uwagę moje doświadczenie z Pythonem i Wingiem, jestem skłonny powiedzieć, że tak nie jest. Jest to jednak z pewnością trudniejsze.
źródło
Microsoft Visual Studio to IDE, które jest używane przez wielu programistów i obsługuje IronRuby , IronPython i F #. Większość uważa, że Ruby i Python są dynamicznym językiem programowania, podczas gdy F # byłby mniejszy.
W odpowiedzi na komentarz F # jest językiem programowania.
Chociaż dokładna definicja tego, co dokładnie definiuje „język dynamiczny”, jest nadal przedmiotem dyskusji, większość zgadza się, że JavaScript jest bardziej „dynamiczny” niż na przykład C #. Według Wikipedii:
Nie chcę tutaj otwierać puszki robaków. Niektórzy sugerują, że F # jest bardziej poprawnie opisany jako język funkcjonalny niż dynamiczny, i nie wziąłbym od tego wyjątku. To, co uważam za słuszne, by powiedzieć, że jest z różnych języków .Net, F # jest ogólnie uważane za bardziej odpowiednie do programowania dynamicznego niż C # lub VB.
Możesz chcieć zobaczyć: co kwalifikuje język programowania jako dynamiczny?
źródło
dynamic
wbudowane. Ale w obu przypadkach żadna z nich nie jest generalnie dynamicznie wpisywana, a brakuje też większości innych funkcji (nie wspominając o kulturach) związanych z „dynamicznymi językami”.Główną różnicą między językami o typie statycznym a językiem o typie dynamicznym jest to, że system może na pewno wiedzieć, co oznacza symbol w czasie kompilacji.
To sprawia, że bardzo łatwo jest zebrać informacje potrzebne do stworzenia dobrego IDE bezpośrednio z informacji generowanych przez kompilator w czasie kompilacji (które w większości są po prostu przenoszone do czasu „edycji”).
Jeśli masz samodzielny podpis metody, który mówi, że metoda przyjmuje „Rzecz”, w jaki sposób edytor może pomóc Ci wiedzieć, co wysłać? Jak może pomóc zasugerować sposoby korzystania z tego przedmiotu?
Pisanie kaczką też tu nie pomaga - nawet najinteligentniejszy edytor nie jest w stanie powiedzieć, że po prostu dlatego, że Twój obiekt ma metodę .executeFooOp (), która może uzupełnić kodem „.executeBarOp” na tym obiekcie (Chociaż może to przeszukać resztę kodu i dokonać pewnych inteligentnych domysłów).
Jeśli wiesz, że jest to „ciąg” w podpisie, znasz wszystkie metody, które możesz wywołać w tym ciągu ORAZ możesz zasugerować tę zmienną, gdy użytkownik jest w trakcie pisania wywołania metody, które wymaga Ciąg jako parametr. Możesz nawet zaproponować podklasy, w które można by rzucić, jeśli chcesz.
Informacji nie ma w dynamicznie wpisywanych językach, chyba że możesz wykonać pełne skanowanie całej bazy kodu za pomocą DUŻO inteligentniejszego niż typowy kompilator.
źródło
Przynajmniej dla PHP wiele IDE „rozumie” coś takiego
Jeśli dokumentujesz w znormalizowany sposób (w tym przypadku phpDocumentor ), IDE w pełni go wykorzysta.
źródło
Ze wszystkich IDE dla języków dynamicznych (języków, które rozwiązują typ w czasie wykonywania) najlepszym jest ... Visual Studio for Python
Warto spróbować.
źródło