Интеллектуальное завершение кода - это контекстно-зависимая функция завершения кода в некоторых средах программирования, которая ускоряет процесс кодирования приложений за счет уменьшения количества опечаток и других распространенных ошибок. Попытки сделать это обычно делаются с помощью всплывающих окон автозавершения при вводе текста, запроса параметров функций, подсказок запроса, связанных с синтаксическими ошибками и т. Д. Интеллектуальное завершение кода и связанные инструменты служат в качестве документации и устранения неоднозначности для имен переменных, функции и методы с использованием отражения.
Интеллектуальное завершение кода появляется во многих программных средах, примером реализации является автозаполнение + и Visual Studio IntelliSense. Первоначально термин был популяризирован как «список выбора», и некоторые реализации до сих пор называют его таковым.
Как и в других системах автозаполнения, интеллектуальное завершение кода удобный способ доступа к описаниям функций, особенно к их спискам параметров. Это ускоряет разработку программного обеспечения за счет уменьшения объема запоминания имен и ввода с клавиатуры. Это также позволяет меньше обращаться к внешней документации, поскольку интерактивная документация по многим символам (т. Е. Переменным и функциям) в активной области отображается динамически в форме всплывающих подсказок во время программирования.
Интеллектуальное завершение кода работает с использованием автоматически созданной в памяти базы данных классов, имен переменных и других конструкций, которые редактируемое приложение определяет или на которые ссылается. «Классическая» реализация IntelliSense работает, обнаруживая символы-маркеры, такие как точки или другие символы-разделители, в зависимости от языка. Когда пользователь вводит один из этих символов сразу после имени объекта, имеющего один или несколько доступных членов (например, содержащихся переменных или функций), IntelliSense предлагает совпадения во всплывающем окне. Пользователь может принять предложение, введя символ завершения оператора (Tab ↹или ↵ Enter) - или маркер для конкретного языка (например, точка с запятой для C ++), или продолжить введите имя. Со временем IntelliSense определяет, какая переменная или функция наиболее вероятна для пользователя.
Эта функция также позволяет пользователю выбирать из ряда перегруженных функций на языках, которые поддерживают объектно-ориентированное программирование. IntelliSense также отображает краткое описание функции во всплывающем окне - в зависимости от объема документации в исходном коде функции .
Некоторые из исходных компонентов интеллектуального автозавершения кода Система была разработана и изобретена Гейл Кайзер, профессором Колумбийского университета факультета компьютерных наук. Она создала многие из основных методов интеллектуального завершения кода в большинстве, если не во всех современных средах программирования, начиная с 1988 года, работая в Колумбии.
Исследования ведутся еще с 1957 года, включая средства проверки орфографии для растрового изображения изображения скорописи и специальные приложения для поиска записей в базах данных, несмотря на неправильные записи. В 1961 году Лес Эрнест, возглавлявший исследования этой многообещающей технологии, счел необходимым включить первую программу проверки орфографии, которая обращалась к списку из 10 000 допустимых слов. Ральф Горин, в то время аспирант Эрнеста, создал первую настоящую программу проверки орфографии, написанную в виде прикладной программы (а не исследования) для общего английского текста: Spell для DEC PDP-10 в Лаборатории искусственного интеллекта Стэнфордского университета в феврале. 1971. Горин написал ЗАКЛИНАНИЕ на языке ассемблера для более быстрых действий; он сделал первый корректор орфографии, выполнив поиск в списке слов на предмет правдоподобных правильных написаний, которые отличаются одной буквой или перестановками соседних букв, и представив их пользователю. Горин сделал SPELL общедоступным, как это было сделано с большинством программ SAIL (Стэнфордская лаборатория искусственного интеллекта), и вскоре он распространился по миру через новый ARPAnet, примерно за десять лет до того, как персональные компьютеры стали широко использоваться. Spell, его алгоритмы и структуры данных вдохновили Unix-программу ispell.
IntelliSense - это реализация завершения кода Microsoft, наиболее известная в Visual Studio. Впервые он был представлен как функция основного продукта Microsoft в 1996 году, основанный на многих уже изобретенных концепциях завершения кода и проверки синтаксиса, с Visual Basic 5.0 Control Creation Edition, который, по сути, был общедоступным прототипом для Visual Basic 5,0. Первоначально Visual Basic IDE была основным «испытательным полигоном» для этой технологии, но IntelliSense был включен в Visual FoxPro и Visual C ++ в период времени Visual Studio 97 (одна ревизия после первого появления в Visual Basic). Поскольку он основан на возможностях самоанализа COM, версии IntelliSense для Visual Basic всегда были более надежными и полными, чем версии Visual C ++ 5.0 и 6.0 (97 и 98 в последовательности имен Visual Studio), который не был полностью основан на COM. Эти недостатки (подвергавшиеся критике со стороны многих разработчиков VC ++ после выпуска 97) были в значительной степени исправлены в линейках продуктов .NET. Например, одной из наиболее востребованных возможностей, отсутствующих в продуктах до.NET, была поддержка шаблонов, которая теперь полностью реализована.
IntelliSense вступил в новую фазу разработки с унифицированная среда Visual Studio.NET, впервые выпущенная в 2001 году, дополненная более мощными возможностями самоанализа и документирования кода, предоставляемыми платформой.NET. IntelliSense теперь поддерживается редакторами Visual Studio для C ++, C#, J#, Visual Basic, XML, HTML и XSLT среди других. Начиная с Visual Studio 2005, IntelliSense теперь активируется по умолчанию, когда пользователь начинает вводить текст, вместо того, чтобы требовать символы маркера (хотя это поведение можно отключить). IDE имеет возможность вывести больший объем контекста на основе того, что вводит разработчик, до такой степени, что базовые языковые конструкции, такие как дляи , в то время кактакже включены в список выбора. В 2017 году Microsoft объявила, что использует машинное обучение, чтобы точно определять, какой язык или функция библиотеки, вероятно, будет использоваться при каждом нажатии клавиши. Первоначально доступный как расширение только для C #, ожидается, что он будет встроен в будущие выпуски Visual Studio.
Другие продукты Microsoft, включающие IntelliSense, включают Expression Web, FrontPage 2003, Small Basic, Visual Basic для приложений IDE в продуктах Microsoft Office, Visual Studio Code и многих других. SQL Server 2008 Management Studio имеет автозаполнение для синтаксиса SQL.
Eclipse IDE известна своими интуитивно понятными инструментами автозавершения кода, которые поставляются вместе с программой. Эти функции сделали программу популярным решением для разработки кода Java, C ++ и JavaScript. Проект Code Recommenders Eclipse, который использовался для обеспечения мощного интеллектуального завершения, но из-за нехватки ресурсов был исключен в Eclipse 2018–12, а затем заархивирован в июле 2019 года.
Vim Intellisense - это продвинутая система автозавершения кода для редактора.
Предположим, что приложение C ++, редактируемое в Visual Studio, имеет класс Fooс некоторыми функциями-членами:
class Foo {public: void bar (); void foo_bar (char c, int n); };
Когда разработчик ссылается на этот класс в исходном коде, например:
Foo foo; фу.
как только пользователь вводит точку после foo
, IntelliSense автоматически выводит список всех доступных функций-членов (например, bar ()
и foo_bar ()
) и все доступные атрибуты членов (частные и защищенные члены могут быть идентифицированы по изображению замка рядом с их именами). Затем пользователь может выбрать один, используя клавиши со стрелками и нажав символ завершения, когда выделена правильная функция-член. Когда доступно, IntelliSense отображает краткое описание функции-члена, как указано в документации к исходному коду.
IntelliSense идет дальше, указывая необходимые параметры в другом всплывающем окне по мере того, как пользователь вводит параметры. Когда пользователь вводит имя переменной, функция также предлагает дополнить переменную по мере их ввода. IntelliSense продолжает показывать параметры, выделяя подходящий по мере ввода пользователя.
Пользователь может «заставить» IntelliSense отображать свой всплывающий список без контекста, используя Ctrl+Jили Ctrl+ Пробел. В Visual Studio здесь отображается вся объектная модель предметной области приложения, доступная разработчику.