Действительно ли автоматический рефакторинг возможен на динамических языках?

Возможно, я ограничен моим опытом с динамическими языками (Ruby на Netbeans и Groovy на Eclipse), но мне кажется, что природа динамических языков лишает возможности осуществлять рефакторинг (переименование методов, классов, продвижения, получения по запросу вниз, и т.д.) автоматически.

Действительно ли возможно осуществить рефакторинг АВТОМАТИЧЕСКИ на каком-либо динамическом языке (с каким-либо IDE/инструментом)? Я особенно интересуюсь Ruby, Python и Groovy, и как рефакторинг выдерживает сравнение с 100%-м автоматическим рефакторингом, доступным во всех IDE Java.

10
задан Dan Rosenstark 23 February 2010 в 11:14
поделиться

4 ответа

Учитывая, что автоматический рефакторинг был изобретен на динамическом языке (Smalltalk), я должен был бы сказать «Да».

В частности, Джон Брант, Дон Робертс и Ральф Джонсон разработали Браузер рефакторинга , который является одним из основных инструментов, например, в Squeak.

Мой Google-fu сегодня слаб, но вы можете попробовать найти эту статью: Дон Робертс, Джон Брант и Ральф Джонсон, Инструмент рефакторинга для Smalltalk, «Теория и практика объектных систем», (3) 4, 1997.

16
ответ дан 3 December 2019 в 13:47
поделиться

То же самое с браузером рефакторинга ... он очень эффективен в Smalltalk. Однако я полагаю, что существуют определенные типы рефакторинга, которые были бы невозможны без информации о типе (получение с помощью явной аннотации типа на языке или с помощью некоторой формы вывода типов в динамическом языке не имеет значения). Один пример: при переименовании метода в Smalltalk переименовываются все разработчики и отправители этого метода, что чаще всего нормально, но иногда нежелательно. Если у вас есть информация о типе переменных, вы можете ограничить переименование только разработчиками в текущей иерархии классов и всеми отправителями, когда сообщение отправляется в переменную, объявленную как относящуюся к типу в этой иерархии (однако я мог представить себе сценарии где даже с объявлением типа это сломалось бы и привело бы к нежелательным результатам).

1
ответ дан 3 December 2019 в 13:47
поделиться

Smalltalk не объявляет никаких типов. Браузер рефакторинга успешно выполняет правильные рефакторинги коммерческого кода с 1995 года и включен почти во все современные IDE Smalltalk. - Дон Робертс

13
ответ дан 3 December 2019 в 13:47
поделиться

Автоматический рефакторинг был изобретен в Smalltalk, очень динамичном языке. И с тех пор это работает как шарм.

Вы можете попробовать себя в бесплатной версии Smalltalk (например, http://pharo-project.org )

На динамическом языке вы также можете самостоятельно выполнить рефакторинг сценариев или запросить {{1 }}система. Простой пример получения количества тестовых классов:

TestCase allSubclasses size

9
ответ дан 3 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: