Ранас Мукминов
OpenAI Codex: полное руководство» Архитектура, CLI, API и практика AI-ассистированной разработки

Глава 1

Уважаемый читатель, перед вами – наиболее полное техническое руководство по ChatGPT OpenAI Codex, революционной платформе искусственного интеллекта для программирования, разработанной компанией OpenAI. Эта книга задумана как фундаментальный академический труд, сопоставимый по глубине охвата с классическими учебниками по компьютерным наукам – в традициях Эндрю Таненбаума, Дональда Кнута и Брайана Кернигана. Однако предметом нашего исследования является не операционная система и не язык программирования, а нечто принципиально новое: технология, которая меняет саму природу процесса создания программного обеспечения.

Мы живём в эпоху, когда граница между человеком-программистом и машиной-программистом становится всё более размытой. Ещё десять лет назад идея о том, что искусственный интеллект способен написать работающий код по описанию на естественном языке, казалась научной фантастикой. Сегодня это повседневная реальность миллионов разработчиков по всему миру. OpenAI Codex – и в особенности последняя версия, основанная на модели GPT-5.3, – представляет собой кульминацию этого революционного развития: от простого автодополнения кода до полноценного автономного агента, способного самостоятельно проектировать, реализовывать, тестировать и отлаживать программные системы.

Эта книга – не сборник рецептов и не поверхностный обзор функций. Это систематическое, глубокое исследование технологии, которое начинается с теоретических основ – архитектуры нейронных сетей-трансформеров, механизмов внимания, токенизации кода – и прослеживает весь путь до практического применения в реальных проектах промышленного масштаба. Мы стремились создать книгу, которая будет одинаково полезна студенту, изучающему основы машинного обучения, и опытному архитектору программного обеспечения, внедряющему AI-инструменты в процессы enterprise-разработки.

Для кого предназначена эта книга

Книга адресована широкому кругу специалистов в области информационных технологий. Мы выделяем несколько основных категорий читателей, и каждая из них найдёт в тексте материал, соответствующий её уровню подготовки и профессиональным задачам.

Студенты и начинающие разработчики получат фундаментальное понимание того, как работают большие языковые модели, на которых основан Codex. Главы, посвящённые архитектуре Transformer, механизмам внимания и токенизации, написаны с расчётом на читателя, знакомого с основами линейной алгебры и теории вероятностей, но не обязательно имеющего опыт в глубоком обучении. Практические главы проведут вас от установки инструмента до создания первого проекта.

Опытные программисты, уже использующие AI-ассистенты в своей повседневной работе, найдут здесь систематизацию знаний, которая позволит выйти за рамки интуитивного использования. Вы узнаете, почему определённые промпты работают лучше других, как оптимизировать взаимодействие с моделью, как применять Codex для задач, о которых вы, возможно, не задумывались: архитектурного проектирования, рефакторинга legacy-систем, генерации тестов для сложных граничных случаев.

Архитекторы и технические лидеры найдут в девятой части книги исчерпывающее руководство по внедрению Codex в командных процессах разработки. Мы рассматриваем вопросы стандартизации, метрик производительности, управления стоимостью, безопасности и compliance – всё, что необходимо для принятия обоснованных решений о масштабном внедрении AI-инструментов.

Исследователи и преподаватели могут использовать эту книгу как справочник по современному состоянию AI-ассистированного программирования. Обширный библиографический аппарат, исторические обзоры и теоретические разделы обеспечивают академическую строгость изложения.

Менеджеры продуктов и руководители найдут в последних главах анализ бизнес-импликаций AI-ассистированной разработки: как изменится рынок труда, какие навыки будут востребованы, какова экономика использования AI-инструментов.

Методология и структура изложения

Книга организована в десять частей, каждая из которых может быть прочитана относительно независимо, хотя для получения максимальной пользы мы рекомендуем последовательное прочтение.

Часть I (главы 1–10) закладывает фундамент: история AI-ассистентов для программирования, эволюция OpenAI и линейки GPT, появление Codex, архитектура моделей GPT-5.3-Codex и GPT-5.3-Codex-Spark, теория больших языковых моделей и экосистема OpenAI. Эта часть необходима для понимания «почему» и «как» – она объясняет принципы, на которых построена технология.

Часть II (главы 11–20) углубляется в архитектуру: механизм Transformer, Self-Attention и Flash Attention, позиционное кодирование, токенизация кода, контекстное окно, inference-оптимизации, квантизация моделей, законы масштабирования, мультимодальность и безопасность модели. Это наиболее теоретически насыщенная часть книги.

Часть III (главы 21–30) посвящена практическому инструменту – Codex CLI. Установка, настройка, режимы работы, файл AGENTS.md, Git-интеграция, мультиязычная разработка, отладка и продвинутая конфигурация.

Часть IV (главы 31–40) раскрывает программный интерфейс: OpenAI API, модели, эндпоинты, streaming, Function Calling, Structured Outputs, embeddings, fine-tuning, Batch API и управление стоимостью.

Часть V (главы 41–55) – самая объёмная часть, посвящённая программированию на различных языках с использованием Codex: Python, JavaScript/TypeScript, Go, Rust, Java/Kotlin, C/C++, SQL, веб-разработка, мобильная разработка, тестирование, документирование, рефакторинг, паттерны проектирования и архитектурное проектирование.

Часть VI (главы 56–65) рассматривает продвинутые агентные возможности: мультиагентную оркестрацию, sandbox-окружения, Skills, Automations, настольное приложение, IDE-расширения, параллельное выполнение, CI/CD-интеграцию, контейнеризацию и мониторинг.

Часть VII (главы 66–75) углубляется в вопросы безопасности, этики и регулирования: безопасность генерируемого кода, prompt injection, конфиденциальность, лицензирование, этика, регулирование (EU AI Act), аудит, bias и стандарты.

Часть VIII (главы 76–85) представляет десять полноценных проектов, которые читатель может воспроизвести от начала до конца: REST API, SaaS-платформа, CLI-утилита, Telegram-бот, Data Pipeline, микросервисная система, Chrome Extension, мобильное приложение, IaC-инфраструктура и миграция legacy-кода.

Часть IX (главы 86–95) адресована вопросам масштабирования: внедрение в команде, стандартизация, метрики, обучение, управление стоимостью, enterprise-архитектура, hybrid AI workflows, Continuous AI, compliance и кейсы внедрения.

Часть X (главы 96–100) завершает книгу взглядом в будущее: тренды AI-разработки, перспективы AGI, новые парадигмы программирования, карьера разработчика в эпоху AI и дорожная карта будущего.

Приложения A–F содержат справочные материалы: команды CLI, API-эндпоинты, таблицу совместимости моделей, глоссарий, ресурсы и шаблоны AGENTS.md.

Стилистические соглашения

В тексте книги используются следующие соглашения:

Моноширинный шрифт применяется для фрагментов кода, имён файлов, команд терминала, URL-адресов и технических идентификаторов.

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

Курсив применяется для иноязычных терминов, названий книг и статей, а также для логического ударения.

Каждая глава начинается с краткой постановки задачи и мотивации, завершается разделом «Итоги главы» с перечислением ключевых выводов. В конце глав приведены вопросы для самопроверки, которые помогут закрепить изученный материал.

Блоки кода содержат фрагменты, которые читатель может ввести в терминал или редактор. Если блок кода содержит консольные команды, строка начинается с символа доллара ($).

Примеры промптов – запросов к Codex – выделяются курсивом и предваряются специальной пометкой.

Об актуальности материала

Область AI-ассистированного программирования развивается стремительно. На момент написания этой книги (февраль 2026 года) актуальными являются модели GPT-5.3-Codex и GPT-5.3-Codex-Spark, выпущенные OpenAI в феврале 2026 года. Мы приложили все усилия для обеспечения точности и актуальности описаний API, команд CLI и возможностей платформы на момент публикации.

Тем не менее, читателям рекомендуется сверять детали с официальной документацией OpenAI, поскольку некоторые аспекты интерфейса и функциональности могут измениться после выхода книги. Фундаментальные принципы – архитектура моделей, теория машинного обучения, паттерны взаимодействия с AI – сохраняют свою актуальность значительно дольше, чем конкретные номера версий API.

Благодарности

Эта книга стала возможной благодаря открытости и прозрачности команды OpenAI, опубликовавшей обширную документацию, исследовательские статьи и открытый исходный код инструментов. Отдельная благодарность мировому сообществу разработчиков, активно осваивающих AI-инструменты и делящихся своим опытом в блогах, на конференциях и в открытых репозиториях.

Автор надеется, что после прочтения этой книги вы не только овладеете практическими навыками работы с OpenAI Codex, но и приобретёте глубокое понимание технологических основ, которое позволит вам адаптироваться к любым будущим изменениям в этой стремительно развивающейся области.

Февраль 2026 года

Глава 2

История попыток автоматизировать процесс написания программного кода насчитывает не одно десятилетие и уходит корнями к самым истокам вычислительной науки. Задолго до появления нейронных сетей и машинного обучения исследователи и инженеры стремились облегчить труд программиста – от создания первых компиляторов до разработки сложных систем автоматического порождения кода.

В 1952 году Грейс Хоппер создала первый компилятор – A-0 System – для компьютера UNIVAC I. Этот инструмент выполнял, по сути, первую в истории автоматическую трансляцию: он преобразовывал математические формулы в машинный код. По сегодняшним меркам это может показаться тривиальным, однако в контексте эпохи это была подлинная революция. Программисты того времени писали код непосредственно в машинных инструкциях; идея о том, что машина способна «сама» генерировать корректный код на основе высокоуровневого описания, вызывала скептицизм и даже сопротивление. Руководство компании Remington Rand, где работала Хоппер, первоначально отказалось поверить в осуществимость такого подхода.

Появление языка FORTRAN в 1957 году стало следующим поворотным моментом. Джон Бэкус и его команда в IBM создали не просто язык программирования, а оптимизирующий компилятор, способный генерировать машинный код, по эффективности приближающийся к рукописному ассемблеру. Это было первое крупномасштабное доказательство того, что автоматическая генерация кода может быть не только возможной, но и практичной. Примечательно, что проект FORTRAN занял around три года и задействовал часть лучших умов IBM – масштаб, который перекликается с современными проектами по созданию AI-ассистентов для кодирования.

В 1960–1970-е годы развитие компиляторных технологий привело к появлению целого семейства инструментов автоматической генерации кода. YACC (Yet Another Compiler Compiler), созданный Стивеном Джонсоном в Bell Labs в 1975 году, позволял автоматически генерировать парсеры на основе формальной грамматики языка. Lex, разработанный Майком Леском и Эриком Шмидтом (впоследствии ставшим CEO Google), автоматизировал создание лексических анализаторов. Эти инструменты – по сути, программы, пишущие программы – заложили концептуальную основу для идеи автоматизированной генерации кода.

Параллельно развивалось направление автоматического доказательства теорем и верификации программ. В 1967 году Роберт Флойд опубликовал работу «Assigning Meanings to Programs», заложившую основы формальной верификации. Тони Хоар в 1969 году предложил аксиоматическую семантику – формальный аппарат для доказательства корректности программ. Эдсгер Дейкстра развил эти идеи в концепцию «вычислительных предикатов» и «слабейших предусловий». Хотя эти работы не были направлены на генерацию кода как таковую, они создали математический фундамент для рассуждений о программах, который впоследствии оказался востребован в AI-ассистентах.

В 1980-е годы наступила эпоха экспертных систем. Проект R1/XCON, разработанный Джоном Макдермоттом для Digital Equipment Corporation, автоматизировал конфигурирование компьютерных систем VAX (задача, которую сегодня мы бы отнесли к Infrastructure-as-Code). К 1986 году система обрабатывала порядка 80 000 заказов в год и, по оценкам DEC, экономила компании около 25 миллионов долларов ежегодно. Экспертные системы для программирования – такие как Programmer’s Apprentice, разрабатывавшийся в MIT, – пытались формализовать знания опытных программистов в виде правил и использовать их для автоматической генерации кода. Однако эти системы оказались хрупкими: они работали хорошо в узких предметных областях, но не обладали гибкостью, необходимой для общего программирования.

Отдельного упоминания заслуживает концепция четвёртого поколения языков программирования (4GL), получившая распространение в 1980–1990-е годы. Инструменты вроде dBASE, SQL, MATLAB и различные генераторы отчётов позволяли описывать «что нужно получить», а не «как это вычислить». Идея декларативного программирования – указания цели без детального описания алгоритма – концептуально предвосхитила современный подход к AI-ассистированному кодированию, где разработчик описывает желаемый результат на естественном языке, а модель генерирует реализацию.

1.2. Первые попытки: статистические модели для кода

Переход от правиловых систем к статистическим моделям для работы с кодом начался в 2010-х годах, когда исследователи осознали, что программный код, подобно естественному языку, обладает статистическими закономерностями – повторяющимися паттернами, идиомами и конвенциями, которые можно захватить вероятностными моделями.

Ключевой работой стала статья «On the Naturalness of Software» Абрама Хинди и Премкумара Десилвы (2012), которая продемонстрировала удивительный результат: программный код на практике оказывается более предсказуемым, чем естественный язык. Измеряя перплексию (меру неопределённости предсказания следующего токена) на корпусах кода на языке Java, авторы показали, что статистическая модель языка может с высокой точностью предсказывать следующий токен в программе. Этот результат был неожиданным: теоретически пространство возможных программ бесконечно, но на практике программисты используют ограниченный набор паттернов и конвенций, что делает код статистически регулярным.

Вслед за этой работой появилась волна исследований, применяющих методы обработки естественного языка (NLP) к программному коду. N-граммные модели, скрытые марковские модели и рекуррентные нейронные сети (RNN) использовались для различных задач:

• Автодополнение кода на основе статистических закономерностей

• Обнаружение дефектов и аномалий в коде

• Автоматическое именование переменных и функций

• Предсказание типов в динамически типизированных языках

• Генерация комментариев к коду

• Поиск похожего кода и обнаружение клонов

В 2015 году группа исследователей из Microsoft Research опубликовала работу, в которой была представлена система PHOG (Probabilistic Higher-Order Grammar), способная предсказывать свойства программ на JavaScript на основе вероятностной модели синтаксических деревьев. Система достигала точности 69% в предсказании типов, 63% в предсказании имён переменных и 50% в предсказании значений свойств объектов.

В 2016 году появился DeepCoder – совместная работа Microsoft Research и Кембриджского университета. DeepCoder использовал нейронную сеть для предсказания компонентов программы на основе примеров ввода-вывода, а затем применял эти предсказания для ускорения процесса поиска правильной программы. Хотя DeepCoder работал с ограниченным предметно-ориентированным языком (DSL), он продемонстрировал возможность использования нейронных сетей для синтеза программ.

Компания Bayou (2018), созданная исследователями из университета Райса, пошла дальше. Она использовала вариационные автокодировщики для генерации минимальных программ на Java на основе коротких описаний. Пользователь мог задать набор ключевых слов (например, «read file, parse JSON, sort list»), и система генерировала семантически корректный Java-код, используя обучение на большом корпусе программ с GitHub.

Эти ранние работы имели серьёзные ограничения: они работали с узкими доменами, генерировали короткие фрагменты кода и не могли поддерживать контекст за пределами нескольких строк. Однако они заложили критически важные основы:

Во-первых, они продемонстрировали, что код можно моделировать статистически – он не является «случайным», а подчиняется определённым паттернам.

Во-вторых, они показали, что нейронные сети способны улавливать семантические связи в коде, а не только синтаксические паттерны.

В-третьих, они выявили ключевые проблемы, которые предстояло решить: масштабирование моделей, увеличение контекстного окна, обеспечение семантической корректности генерируемого кода и работу с множеством языков программирования.

1.3. Революция Transformer: attention is all you need

2017 год стал поворотным для всей области искусственного интеллекта. Команда исследователей Google – Ашиш Васвани, Ноам Шазир, Ники Пармар, Якоб Ушкорейт, Лион Джонс, Эйдан Гомез, Лукаш Кайзер и Илья Полосухин – опубликовала статью «Attention Is All You Need», представившую архитектуру Transformer. Эта работа, вероятно, является самой влиятельной научной публикацией 2010-х годов в области компьютерных наук.

До Transformer доминирующими архитектурами для обработки последовательностей были рекуррентные нейронные сети (RNN) и их усовершенствованные варианты – LSTM (Long Short-Term Memory) и GRU (Gated Recurrent Unit). Принципиальная проблема рекуррентных сетей заключалась в их последовательной природе: для обработки n-го элемента последовательности необходимо было сначала обработать все предыдущие n-1 элементов. Это создавало два серьёзных ограничения:

Невозможность параллельной обработки, что делало обучение медленным на современных GPU, оптимизированных для параллельных вычислений.

Затухание градиентов при обработке длинных последовательностей, что ограничивало способность модели «помнить» информацию из отдалённых частей входных данных.

Transformer решил обе проблемы одновременно с помощью механизма самовнимания (Self-Attention). Вместо последовательной обработки каждый элемент входной последовательности напрямую «смотрит» на все остальные элементы, вычисляя степень их релевантности. Формально, для каждого элемента вычисляются три вектора – Query (запрос), Key (ключ) и Value (значение), – а затем внимание вычисляется как взвешенная сумма Value, где веса определяются скалярным произведением Query и Key.

Для задачи генерации кода Transformer оказался особенно подходящей архитектурой по нескольким причинам. Программный код обладает как локальными зависимостями (переменная используется через несколько строк после объявления), так и дальними (функция вызывается из другого файла, тип определяется в другом модуле). Механизм самовнимания позволяет модели одновременно учитывать и те, и другие зависимости. Кроме того, синтаксическая структура кода – вложенные блоки, соответствие открывающих и закрывающих скобок, пространства имён – теоретически требует умения поддерживать иерархические связи, что Transformer делает значительно лучше RNN.

Первые применения Transformer к задачам, связанным с кодом, появились в 2019–2020 годах. Модель CodeBERT от Microsoft (2020) использовала архитектуру BERT (двусторонний Transformer-энкодер) для изучения представлений программного кода. CodeBERT обучалась на парах «код – описание на естественном языке» и продемонстрировала способность понимать семантику кода на нескольких языках одновременно. Модель достигла state-of-the-art результатов на задачах поиска кода по естественноязыковому запросу и генерации документации.

GraphCodeBERT (2021), расширение CodeBERT, дополнительно учитывал граф потока данных в программе. Вместо обработки кода как простой последовательности токенов GraphCodeBERT анализировал отношения «откуда пришло значение» между переменными, что позволяло лучше понимать семантику программ.

CuBERT (2020) от Google применил аналогичный подход к Python-коду, обучаясь на массивном корпусе из 7,4 миллиона функций Python. Модель успешно решала задачи обнаружения ошибок, определения эквивалентности функций и исправления ошибок.

Однако все эти модели были энкодерами – они понимали код, но не генерировали его. Для генерации кода потребовались модели-декодеры, работающие по принципу авторегрессии: получая на вход начало последовательности, они предсказывают следующий токен, затем добавляют этот токен ко входу и предсказывают следующий, и так далее.

1.4. GPT и рождение генеративных моделей для кода

Линейка моделей GPT (Generative Pre-trained Transformer) от OpenAI сыграла центральную роль в развитии генеративного AI для кода. Хронология развития GPT представляет собой одну из самых впечатляющих историй технологического масштабирования в истории компьютерных наук.

GPT-1 (июнь 2018) содержал 117 миллионов параметров и использовал 12-слойный Transformer-декодер. Модель обучалась на корпусе BookCorpus (около 7 000 неопубликованных книг) задачей языкового моделирования – предсказания следующего слова в тексте. Хотя GPT-1 не была специализирована для кода, она продемонстрировала ключевой принцип, который определил всё дальнейшее развитие: если обучить модель предсказывать следующее слово на достаточно большом и разнообразном корпусе, она начинает демонстрировать удивительные «эмерджентные» способности – решение задач, которым она никогда не обучалась явно.

GPT-2 (февраль 2019) совершил количественный и качественный скачок: 1,5 миллиарда параметров, обучение на WebText (40 ГБ текста из интернета, отфильтрованного по качеству). GPT-2 продемонстрировал способность генерировать связные тексты длиной в несколько абзацев и – что важно для нашей темы – впервые показал заметную способность генерировать программный код. OpenAI первоначально отказалась публиковать полную модель, опасаясь возможного злонамеренного использования – решение, вызвавшее бурную дискуссию в научном сообществе.

GPT-3 (июнь 2020) стал переломным моментом: 175 миллиардов параметров, обучение на 570 ГБ текста. GPT-3 ввёл концепцию «few-shot learning» – способность решать новые задачи, получив всего несколько примеров в контексте запроса, без какого-либо дополнительного обучения. Для программирования это означало, что GPT-3 мог генерировать код на различных языках, отвечать на вопросы по API, объяснять алгоритмы – всё это «из коробки», на основе знаний, полученных при предобучении.

Важно понимать масштаб скачка от GPT-2 к GPT-3. Увеличение числа параметров более чем в 100 раз привело не просто к количественному улучшению, а к качественному изменению поведения модели. Этот феномен – появление новых способностей при масштабировании, которые отсутствовали при меньшем размере – получил название «фазовых переходов» или «эмерджентных способностей» и стал предметом интенсивных научных исследований.

Именно наблюдение за кодогенеративными способностями GPT-3 подтолкнуло OpenAI к созданию Codex – специализированной модели для программирования.

1.5. OpenAI Codex: первое поколение (2021)

В августе 2021 года OpenAI представила Codex – модель, которая стала первым широко доступным AI-инструментом для генерации кода промышленного качества. Codex был основан на GPT-3, но дополнительно дообучен на 159 гигабайтах кода из публичных репозиториев GitHub. Дообучение на коде позволило значительно повысить качество кодогенерации по сравнению с базовой GPT-3.

Техническая статья «Evaluating Large Language Models Trained on Code», опубликованная командой OpenAI в июле 2021 года, представила как саму модель, так и бенчмарк HumanEval – набор из 164 задач по программированию на Python, ставший стандартом для оценки кодогенеративных моделей. Codex (модель code-davinci-002, 12 миллиардов параметров) решал 28,8% задач HumanEval при однократной попытке (pass@1) и 72,3% при выборке из 100 вариантов (pass@100).

Эти цифры заслуживают пояснения. Метрика pass@k означает вероятность того, что хотя бы одно из k сгенерированных решений пройдёт все тесты задачи. Значение pass@1 = 28,8% может показаться скромным, но необходимо учитывать контекст: задачи HumanEval включают реализацию алгоритмических функций средней сложности, и модель генерирует работающий код «с нуля», без каких-либо подсказок, кроме сигнатуры функции и докстринга. Для сравнения, базовая GPT-3 (без дообучения на коде) достигала лишь 0% pass@1 на тех же задачах.

Codex отличался от GPT-3 не только качеством кодогенерации, но и рядом архитектурных и тренировочных решений:

Во-первых, контекстное окно было увеличено до 4096 токенов (впоследствии до 8192), что позволяло модели «видеть» значительный объём окружающего кода при генерации.

Во-вторых, токенизатор был адаптирован для кода: стандартный BPE-словарь GPT-3 плохо обрабатывал типичные конструкции кода (пробелы для отступов, составные идентификаторы вроде camelCase и snake_case, специальные символы). Codex использовал модифицированный токенизатор, лучше отражающий структуру кода.

В-третьих, процесс дообучения включал специальную фильтрацию и очистку данных. Из 159 ГБ кода на GitHub были удалены файлы размером более 1 МБ и файлы со средней длиной строки более 100 символов (вероятные минифицированные или сгенерированные файлы). Финальный обучающий набор содержал код на десятках языков программирования, с доминированием Python (составлявшего около 50% данных по размеру).

Коммерческим воплощением Codex стал GitHub Copilot – продукт, разработанный совместно OpenAI и GitHub (принадлежащим Microsoft). Copilot был запущен в июне 2021 года в режиме технического превью и получил широкое распространение в 2022 году. Copilot интегрировался в Visual Studio Code и другие IDE в виде плагина, предлагающего автодополнение кода «на лету» – по мере того, как программист печатает, AI предлагает продолжение в виде сероватого текста, который можно принять нажатием Tab или отклонить.

Влияние Copilot на индустрию было колоссальным. По данным GitHub, к концу 2023 года Copilot насчитывал более 1,3 миллиона платных подписчиков и использовался в более чем 50 000 организациях. Опрос разработчиков, проведённый GitHub, показал, что 88% пользователей Copilot чувствовали себя более продуктивными, 77% отметили, что инструмент помогает им оставаться «в потоке» (в состоянии creative flow), и 74% заявили, что могут сосредоточиться на более интересной работе.

Однако первое поколение Codex/Copilot имело существенные ограничения:

Модель работала как автодополнитель кода – она предсказывала следующий фрагмент, но не могла планировать сложные многошаговые изменения.

Контекст ограничивался текущим файлом (и частично соседними файлами в IDE). Модель не «понимала» структуру проекта в целом.

Конец ознакомительного фрагмента.

Текст предоставлен ООО «Литрес».

Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.