Я нахожу разочаровывающим то, как скорость разработки, которую должны предлагать динамические языки, значительно снижается из-за отсутствия дополнений и других ресурсов, которые IDE предоставили бы вам в своих статических аналогах.
Это не просто печатать меньше - это повышение производительности и простое удовольствие, которое вы получаете, просматривая API без необходимости постоянно обращаться к документации, которая не интегрирована с редактором.
На сегодняшний день все комбинации IDE + динамические языки, которые, честно говоря, не так уж и много, я пробовал:
- детская коляска
- медленный
- невежественный / чрезмерно восторженный (как в показе всех возможных завершений)
- или просто не так полно, как, скажем, Eclipse + Java.
Я знаю, что динамический анализ кода не является тривиальной задачей. Но нельзя не задаться вопросом - действительно ли этот кусок кода так сложно понять ?
Итак, мой вопрос:
Достигли ли какие-либо конкретные среды IDE (или менее все-в-одном) полностью выдающейся поддержки динамического языка, или это все еще «нерешенная» проблема?
источник
Ответы:
Smalltalk - высокодинамичный язык - всегда имел превосходную среду IDE, в которой такие мелочи, как автоматический рефакторинг, SUnit (прародитель всех * инфраструктур Unit), «кто отправляет это сообщение?», «Кто реализует этот метод?» и тому подобное были первопроходцами. Так что да, IDE действительно могут поддерживать динамические языки до уровня, который до самого недавнего времени намного превосходил уровень языков со статической типизацией.
С. Лотт говорит, что «у динамических языков не может быть такого же завершения кода, как у статических языков. По сути, это невозможно».
«По существу невозможно» в теоретическом, абсолютистском смысле? Конечно. В практическом смысле? На самом деле, нет. Существует много способов определения типа для динамических языков, статически ( k-CFA , RoelTyper ), во время выполнения ( PIC ) и других методов, например, использование недавней истории программиста - «Как история программы может улучшить завершение кода» .
Конечно, сообщества Pharo и Squeak очень довольны своими инструментами завершения кода .
источник
Почти все, что вы знаете из IDE, было впервые разработано в Smalltak, который является динамическим языком. Все остальное просто копирует их. Очевидно, что все эти функции возможны в динамических языках.
Сегодня динамические языки отстают от статических языков. Но почему?
До недавнего времени считалось, что статическая типизация превосходит динамическую типизацию. Многие программисты недавно изменили свое мнение по этому вопросу. Сосредоточиться на IDE для динамически типизированных языков не было.
Я думаю, что функции для IDE менее полезны в динамически типизированных языках. Работая в Java или Objective-C, я чувствую, что IDE необходима, чтобы помочь мне работать с языком, но это не относится к динамическим языкам.
Некоторые части задачи проще в статическом языке. Это просто, чтобы выяснить тип выражения. Выполнение того же на динамическом языке требует либо полного анализа программы, либо регистрации типов во время выполнения. Так как многое из того, что IDE вращается вокруг типов, это имеет эффект.
источник
I think that the features for IDEs are less useful in dynamically typed languages
- Забавно, я думаю, что с точностью до наоборот. Так как многие динамические языки не требуют, чтобы вы объявляли переменные заранее, неправильное написание переменной является серьезной проблемой ... проблема, которая облегчается хорошей IDE. Между тем, остальные основные функции - синтаксическая раскраска, инструменты рефакторинга, функции отладки - одинаково полезны на всех языках.workOrder
а некоторые пишутworkorder
. Это две отдельные переменные в Python> _ <Я столкнулся с этой проблемой с Python, вроде. Я хотел vim в качестве редактора, но это означало, что у меня не будет среды IDE. Итак, я свернул свои собственные с плагинами vim. В настоящее время, я думаю, у меня действительно лучшая среда для разработки, чем любая IDE, которую я использовал в прошлом.
Моя установка размещена на github , не стесняйтесь смотреть и писать, что вам нравится. Для быстрого обзора плагинов:
Есть еще кое-что, но у него есть все функции, которые есть у более популярных IDE. Это не стоило мне ни копейки, и я могу использовать всю силу Вима. Разделение, команды перемещения, регистры, прыжки, возможность запуска всей среды разработки с клавиатуры ...
источник
Учитывая, что вашу оценку трудно понять («совершенно выдающийся»? «Невежественный / чрезмерно восторженный»?), Сомнительно, что любая IDE может соответствовать подразумеваемому стандарту.
Тривиально сравнивать с Eclipse + Java глупо, потому что динамические языки не являются Java.
Не совсем.
Это, вероятно, неразрешимо. Ваши требования («отсутствие доработок и других активов») затрудняют уточнение.
Динамические языки не могут иметь такого же завершения кода, как статические языки. Это по сути невозможно.
Некоторые IDE хорошо угадывают. Например, в Eclipse есть плагины для динамических языков.
источник
Я думаю, что эта презентация Стива Йегге все еще актуальна. в ореховой оболочке есть несколько приличных идентификаторов Java-сценариев (intelliJ IDEA), но динамические языки в целом играют в догонялки, не потому что нет ничего сложнее в создании этих инструментов (или даже языков), это просто статические языки, полученные все внимание в первую очередь.
источник
Я весь день программирую на javascript / php и ruby, работая над веб-приложениями, и лучшей IDE, которую я нашел для этого, является Aptana. Он имеет завершение кода для всех трех из этих языков (и python), он берет мои локальные переменные и, кроме того, при работе с html и css он выбирает идентификаторы в html для использования в css / javascript и выбирает функцию имена, когда я делаю что-то быстрое и грязное и пишу встроенный javascript (я знаю плохо, но иногда полезно для доказательства концепции). Он имеет встроенные задачи rake и встроенную поддержку git и консоли командной строки. Мне потребовалось немного времени, чтобы встать, но однажды я обнаружил, что едва ли когда-либо покидаю свою IDE при кодировании, и это экономит мне кучу времени.
источник
Я обнаружил, что поддержка Python в Wing IDE действительно выдающаяся. Он хорошо справляется с завершением кода, и его отладчик так же мощен, как Visual Studio для нединамического C #.
Я могу засвидетельствовать, что это не глючит, медленный или невежественный. Я никогда не использовал Eclipse, поэтому я не знаю об этом, но думаю, что главный вопрос заключается в следующем: существует ли какой-то внутренний барьер для разработки полной и повышающей производительность IDE для динамических языков. Учитывая мой опыт работы с Python и Wing, я склонен сказать, что это не так. Это, однако, безусловно, сложнее.
источник
Microsoft Visual Studio - это IDE, которая используется многими программистами и поддерживает IronRuby , IronPython и F #. Большинство считает, что Ruby и Python являются динамическим языком программирования, а F # - менее.
В ответ на комментарий F # является языком программирования.
Хотя точное определение того, что именно определяет «динамический язык», все еще остается предметом дискуссий, большинство согласится с тем, что JavaScript более «динамичен», чем, например, C #. Согласно Википедии:
Я не хочу открывать здесь банку с червями. Некоторые могут предположить, что F # более правильно описывается как функциональный, а не динамический язык, и я бы не стал возражать против этого. На мой взгляд, было бы справедливо сказать, что для различных языков .Net язык F # обычно считается более подходящим для динамического программирования, чем C # или VB.
Возможно, вы захотите посмотреть: что определяет язык программирования как динамический?
источник
dynamic
встроенным. Но в любом случае, ни один из них, как правило, не является динамически типизированным, и большинство других функций (не говоря уже о культурных вещах), связанных с «динамическими языками», также отсутствуют.Основное различие между статически типизированными языками и динамически типизированными языками состоит в том, что система может точно знать, что означает ссылка на символ во время компиляции.
Это позволяет действительно легко собирать информацию, необходимую для создания хорошей IDE, непосредственно из информации, сгенерированной компилятором во время компиляции (которая по большей части просто перемещается вверх во время «редактирования»).
Если у вас есть автономная сигнатура метода, которая просто говорит, что метод требует «вещь», как редактор может помочь вам узнать, что отправлять? Как это может помочь предложить способы использования вещи?
Утиная печать здесь тоже не поможет - даже самый умный из возможных редакторов не сможет сказать вам это просто потому, что у вашего объекта есть метод .executeFooOp (), который он может завершить с кодом «.executeBarOp» для этого объекта (Хотя это может отмыть остальную часть кода и сделать некоторые умные предположения).
Однако если вы знаете, что это «строка» в сигнатуре, вы знаете все методы, которые вы можете вызывать в этой строке, и вы можете предложить эту переменную, когда этот пользователь находится в процессе ввода вызова метода, который требует Строка в качестве параметра. Вы можете даже предложить подклассы, в которые он может быть включен, если хотите.
Информации просто нет с динамически типизированными языками, если вы не можете выполнить полное сканирование всей кодовой базы с помощью чего-то НАМНОГО более умного, чем ваш типичный компилятор.
источник
По крайней мере, для PHP многие IDE "понимают" что-то вроде
Если вы документируете стандартизированным способом (в данном случае phpDocumentor ), IDE максимально использует его.
источник
Из всех IDE для динамических языков (языков, которые разрешают тип во время выполнения) лучшим является ... Visual Studio для Python
Стоит попробовать.
источник