Завершение кода
Завершение кода — это функция автодополнения во многих интегрированных средах разработки (IDE), которая ускоряет процесс кодирования приложений за счет исправления распространенных ошибок и предложения строк кода. Обычно это происходит через всплывающие окна при наборе текста, запрос параметров функций и подсказки по запросам, связанные с синтаксическими ошибками. Современное программное обеспечение для завершения кода обычно использует генеративные системы искусственного интеллекта для прогнозирования строк кода. Завершение кода и связанные с ним инструменты служат для документирования и устранения неоднозначности имен переменных , функций и методов с помощью статического анализа . [1] [2]
Эта функция появляется во многих средах программирования. [3] [4] Реализации включают IntelliSense в Visual Studio Code . Первоначально этот термин был популяризирован как «список выбора», и в некоторых реализациях он до сих пор называется таковым. [5]
Обзор
[ редактировать ]Интеллектуальное завершение кода, аналогичное другим системам автодополнения , представляет собой удобный способ доступа к описаниям функций и, в частности, к спискам их параметров. Эта функция ускоряет разработку программного обеспечения за счет сокращения ввода с клавиатуры и необходимости запоминания имен. Это также позволяет пользователям реже обращаться к внешней документации, поскольку интерактивная документация по многим символам (т. е. переменным и функциям) в активной области отображается динамически в виде всплывающих подсказок . [6]
Интеллектуальное завершение кода использует автоматически создаваемую в памяти базу данных классов, имен переменных и других конструкций, которые определяет или ссылается данный компьютерный код. «Классическая» реализация IntelliSense работает путем обнаружения символов-маркеров, таких как точки (или другие символы-разделители, в зависимости от языка). Когда пользователь вводит один из этих символов сразу после имени сущности, имеющей один или несколько доступных членов (например, содержащиеся переменные или функции), IntelliSense предлагает совпадения во всплывающем диалоговом окне. Пользователь может либо принять предложение, введя символ завершения оператора ( Tab ↹ или ↵ Enter) или маркер языка (например, точка с запятой для C++ ) или продолжайте вводить имя. Со временем IntelliSense определяет, какая переменная или функция, скорее всего, понадобится пользователю. IntelliSense также отображает краткое описание функции во всплывающем окне — в зависимости от объема документации в исходном коде функции .
Эта функция также позволяет пользователям выбирать из ряда перегруженных функций на языках, поддерживающих объектно-ориентированное программирование . Некоторые программы для редактирования кода обеспечивают интеллектуальное завершение кода через сервер протокола языкового сервера (LSP).
История
[ редактировать ]Исследования интеллектуального завершения кода начались в 1957 году с программ проверки орфографии растровых изображений рукописного письма и специальных приложений для поиска записей в базах данных, несмотря на неправильные записи. В 1961 году Лес Эрнест , возглавлявший исследования этой многообещающей технологии, счел необходимым включить первую программу проверки правописания, которая имела доступ к списку из 10 000 допустимых слов. [7] Ральф Горин, в то время аспирант Эрнеста, создал первую настоящую программу проверки орфографии, написанную как приложение (а не исследование) для общего английского текста. SPELL для DEC PDP-10 в Лаборатории искусственного интеллекта (SAIL) Стэнфордского университета был опубликован в феврале 1971 года. [8] Горин написал программу на ассемблере для более быстрого действия; он сделал это, найдя в списке слов возможные правильные варианты написания, которые отличаются одной буквой или транспозицией соседних букв, и представив их пользователю. Горин сделал SPELL общедоступным, как это было сделано с большинством программ SAIL, и вскоре он распространился по всему миру через тогда еще новую сеть ARPANET , примерно за десять лет до того, как персональные компьютеры стали широко использоваться. [9] SPELL, его алгоритмы и структуры данных вдохновили Unix -программу Ispell .
Поддержка в редакторах и IDE
[ редактировать ]Визуальная Студия
[ редактировать ]IntelliSense — это Microsoft реализация автодополнения кода от , наиболее известная в Visual Studio . Впервые он был представлен как функция основного продукта Microsoft в 1996 году. [10] опираясь на многие уже изобретенные концепции завершения кода и проверки синтаксиса, с помощью Visual Basic 5.0 Control Creation Edition, который, по сути, был общедоступным прототипом Visual Basic 5.0. [11] Первоначально Visual Basic IDE была основным «испытательным стендом» для этой технологии, но IntelliSense был включен в Visual FoxPro и Visual C++. [12] во временном интервале Visual Studio 97 (одна редакция после первого появления в Visual Basic). Поскольку версии IntelliSense для Visual Basic были основаны на возможностях самоанализа COM , они всегда были более надежными и полными, чем версии 5.0 и 6.0 (97 и 98 в последовательности именования Visual Studio) Visual C++, которые не имели этого преимущества. быть полностью основанным на COM. Эти недостатки (критикуемые многими разработчиками VC++ начиная с версии 97) в значительной степени исправлены в линейках продуктов .NET . Например, одной из наиболее востребованных возможностей, отсутствовавших в продуктах до .NET, была поддержка шаблонов , которая теперь полностью реализована. [13]
IntelliSense вступила в новый этап разработки с унифицированной средой Visual Studio.NET, впервые выпущенной в 2001 году и дополненной более мощными возможностями самоанализа и документирования кода, предоставляемыми платформой .NET. IntelliSense теперь поддерживается редакторами Visual Studio для C++ , C# , J# , Visual Basic , XML , HTML и XSLT , а также других. Начиная с Visual Studio 2005 , IntelliSense теперь активируется по умолчанию, когда пользователь начинает печатать, вместо необходимости использования символов-маркеров (хотя это поведение можно отключить). IDE как имеет возможность выводить больший объем контекста на основе того, что вводит разработчик, до такой степени, что базовые языковые конструкции, такие для и при этом также включены в список выбора. В 2017 году Microsoft анонсировала IntelliCode, [14] который использует машинное обучение, чтобы точно определить, какой именно язык или функция библиотеки будет использоваться при каждом нажатии клавиши. Первоначально он был доступен только как расширение для C#, но ожидается, что он будет встроен в будущие выпуски Visual Studio.
Visual Studio 2022 включает функции искусственного интеллекта, такие как GitHub Copilot , который может автоматически предлагать целые строки кода на основе окружающего контекста.
Другие продукты Microsoft, включающие IntelliSense, включают Expression Web , FrontPage 2003 , Small Basic , интегрированные среды разработки Visual Basic для приложений в продуктах Microsoft Office , Visual Studio Code и многие другие. SQL Server 2008 Management Studio имеет автозаполнение синтаксиса SQL.
Затмение
[ редактировать ]В среде Eclipse IDE имеются инструменты завершения кода, поставляемые вместе с программой. [15] [16] Он включает в себя заметную поддержку разработки кода на Java, C++ и JavaScript. Проект Code Recommenders Eclipse, используемый для обеспечения мощного интеллектуального завершения, [17] но из-за нехватки ресурсов был удален в Eclipse 2018–12, а затем заархивирован в июле 2019 года. [18] [19] [20]
Почему
[ редактировать ]Вим Интеллисенс [21] — это усовершенствованная система завершения кода для редактора Vim .
Пример
[ редактировать ]Предположим, что приложение C++, редактируемое в Visual Studio, имеет класс Foo с некоторыми функциями-членами:
class Foo {
public:
void bar();
void foo_bar(char c, int n);
};
Когда разработчик ссылается на этот класс в исходном коде, например:
Foo foo;
foo.
как только пользователь вводит точку после foo
, IntelliSense автоматически выводит список всех доступных функций-членов (т. е. bar()
и foo_bar()
) и все доступные атрибуты участников (частные и защищенные участники могут быть идентифицированы по изображению замка рядом с их именами). Затем пользователь может выбрать одну, используя клавиши со стрелками и нажимая символ завершения, когда выделена правильная функция-член. Если доступно, IntelliSense отображает краткое описание функции-члена, как указано в документации по исходному коду.
IntelliSense идет дальше, указывая необходимые параметры в другом всплывающем окне по мере того, как пользователь заполняет параметры. Когда пользователь вводит имя переменной, функция также предлагает варианты завершения переменной по мере их ввода. IntelliSense продолжает отображать параметры, выделяя соответствующий по мере ввода пользователем.
Пользователь может «заставить» IntelliSense отображать всплывающий список без контекста, используя Ctrl+ J или Ctrl+ Space. В Visual Studio отображается вся объектная модель домена приложения, доступная разработчику.
Примечания
[ редактировать ]- ^ Роббс, Ромен; Ланца, Мишель (2008). «Как история программы может улучшить завершение кода». 2008 г. 23-я Международная конференция IEEE/ACM по автоматизированной разработке программного обеспечения . стр. 317–326. дои : 10.1109/ASE.2008.42 . ISBN 978-1-4244-2187-9 . S2CID 2093640 .
- ^ «Завершение кода, эпизод 1: сценарии и требования» . Блог JetBrains . 28 мая 2021 г. Проверено 17 ноября 2023 г.
- ^ Часто задаваемые вопросы — CodeBlocks . Wiki.codeblocks.org (01 февраля 2014 г.). Проверено 4 апреля 2014 г.
- ^ Документация Qt — Завершение кода . Проверено 7 июля 2015 г.
- ^ Использование Dynamic Apex для получения значений раскрывающегося списка | Блог разработчиков Force . Blogs.developerforce.com (09 декабря 2008 г.). Проверено 4 апреля 2014 г.
- ^ Стены. С#2005 . стр. 56.
- ^ Эрнест, Лес. «Первые три средства проверки правописания» (PDF) . Стэнфордский университет. Архивировано из оригинала (PDF) 22 октября 2012 года . Проверено 10 октября 2011 г.
- ^ Петерсон, Джеймс (декабрь 1980 г.). Компьютерные программы для обнаружения и исправления орфографических ошибок (PDF) . Проверено 18 февраля 2011 г.
- ^ Эрнест, Лес. Видимое наследие 3000 года (PDF) . Архивировано из оригинала (PDF) 20 июля 2011 года . Проверено 18 февраля 2011 г.
- ^ «Архив базы данных Microsoft/165524 — BetaArchive Wiki» . www.betaarchive.com . Проверено 19 ноября 2023 г.
- ^ «Microsoft представляет Visual Basic 5.0, Control Creation Edition» . Истории . 28 октября 1996 года . Проверено 19 ноября 2023 г.
- ^ «Microsoft представляет Visual C++ 6.0» . Истории . 29 июня 1998 года . Проверено 19 ноября 2023 г.
- ^ Использование IntelliSense . Msdn.microsoft.com. Проверено 4 апреля 2014 г.
- ^ Visual Studio IntelliCode
- ^ «Угловая статья Eclipse: раскрытие возможностей рефакторинга | Eclipse Foundation» .
- ^ «Технологии» . ИБМ .
- ^ Рекомендации по коду Eclipse: все дело в интеллектуальном дополнении кода . Code-recommenders.blogspot.com (03.05.2010). Проверено 4 апреля 2014 г.
- ^ 542689 - Не включать рекомендации по коду на 2018-12 гг.
- ^ cross-project-issues-dev Отзыв рекомендателей кода из SimRel
- ^ Архивные проекты | Фонд Затмения
- ^ Вим Intellisense . Insenvim.sourceforge.net. Проверено 4 апреля 2014 г.
Внешние ссылки
[ редактировать ]- Торре, Чарльз (24 января 2008 г.). «Арджун Биджанки: понимание VC Intellisense» (видео) . Канал9 . Майкрософт.
- «Использование IntelliSense» . VS .NET 2003 (изд. 2015 г.). MSDN. Архивировано из оригинала 18 октября 2007 года . Проверено 11 сентября 2007 г.
{{cite web}}
: CS1 maint: bot: исходный статус URL неизвестен ( ссылка ) - «Учебное пособие по IntelliSpeed» (Видео) . Визуальный Пролог .