﻿# НЕкурс про создание собственного языка программирования: вдохновляемся неожиданными открытиями, чтобы сделать свои

В этой заметке мы разберём, что такое экспертиза и в чём её суть\. Она бывает разной глубины, сферы и предназначения\. Экспертиза не может существовать без теоретических знаний, опыта и, конечно же, не рождается там, где нет трудностей и ошибок\. У каждого человека она уникальна\.

![1387_letsmakelanguage_ru/image1.png](https://import.viva64.com/docx/blog/1387_letsmakelanguage_ru/image1.png)

Из чего рождается экспертиза в программировании? Раньше — любопытство, желание упростить, справиться с трудностью\. Сегодня же — проекты, закрывающие бизнес\-задачи\. Но даже сейчас мы можем вооружится этими качествами и прийти к желаемому результату\. Ведь код позволяет нам быть гибким и попробовать новую непротоптанную тропинку\. Нередко эта тропинка приводит к началу чего\-то большего\. И история знает немало тому подтверждений\.

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

## История №1

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

## История №2

Двое разработчиков захотели решить проблему перехода с 32\-битных на 64\-битные системы\. И они создали инструмент, помогающий находить возникающие в коде ошибки\. Однако потом увидели, что полезно искать и другие ошибки, и трансформировали его в полноценный инструмент с более широким спектром действия\.

## История №3

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

## Экспертиза PVS\-Studio

Надеемся, вы догадались, что это были за открытия\. Давайте вернёмся к понятию экспертизы\. Почему мы считаем её ценной для нашей компании? И в чём она выражается у нас? Мы затронем тему нашей новой наработки, которая позволила переработать нашу экспертизу во что\-то полезное для сообщества разработчиков\. Ниже мы подробнее расскажем, как мы к этому пришли и что в итоге у нас вышло\.

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

![1387_letsmakelanguage_ru/image2.png](https://import.viva64.com/docx/blog/1387_letsmakelanguage_ru/image2.png)

Но что стоит за правилами? На что опирается анализатор при поиске ошибок? Конечно, ядро\! На нём у нас строится и [анализ потока данных](https://pvs-studio.ru/ru/blog/terms/7004/), и [сигнатурный анализ](https://pvs-studio.ru/ru/blog/terms/6776/), и [аннотирование методов](https://pvs-studio.ru/ru/blog/posts/1166/), и все другие технологии анализа\. А работает с этим и многим другим наш архитектор ядра Юра — замечательный инженер, фанат котиков и просто приятный человек\. Проходя через очередную эпопею ядровых проблем — страшно представить, с чем он ежедневно сталкивается, залезая так глубоко в мозги нашего инструмента, — Юра был оторван от своей привычной деятельности предложением коллег\.\.\.

В PVS\-Studio есть отдел, который мы зовём Te&De \(Teaching&Development\)\. Две замечательные сотрудницы, Инна и Юлия, занимаются внутренним обучением сотрудников нашей компании\. Они также организуют вебинары для менеджеров и программистов\. О предстоящих и прошедших вебинарах вы можете узнать [здесь](https://pvs-studio.ru/ru/webinar/)\. Они\-то и предложили Юре подготовить материалы, которые будут полезны при погружении новых сотрудников в работу\. В итоге курс, который наш архитектор и отдел Te&De подготовили для внутреннего использования, трансформировался и стал общедоступным и бесплатным\.

![1387_letsmakelanguage_ru/image3.png](https://import.viva64.com/docx/blog/1387_letsmakelanguage_ru/image3.png)

## Немного о курсе

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

Начинается всё с грамматики, которая описывает структуру языка\.

Когда дело доходит до разбора кода, первым на сцену выходит лексер\. Он выделяет из текста отдельные слова и классифицирует их\.

Следующий этап — составление предложений из слов\. Здесь в работу вступает парсер\. Он берёт слова и формирует из них предложения — конструкции языка\. Эти конструкции мы и организуем в синтаксическое дерево — иерархическую структуру, которая отражает взаимодействие между отдельными кусочками языка\. Дерево нам нужно для того, чтобы по нему пройтись и выполнить/вычислить то, что там написано\.

![1387_letsmakelanguage_ru/image4.png](https://import.viva64.com/docx/blog/1387_letsmakelanguage_ru/image4.png)

Ещё в языке есть разные сущности, которым мы можем дать имена\. Эти имена язык должен узнавать и понимать\. Для этого есть семантический анализ\. Также есть типы данных, которые между собой взаимодействуют\. Вычисление типов данных — часть семантики\.

Завершает всё это действие эвалюатор\. Он берёт дерево, проходится по нему и вычисляет значение переменных и выражений\.

Так примерно выглядит сферический процесс работы языка программирования в вакууме\. В видео Юра всё это показывает на практике\.

Наш основной посыл — не обучить, а прежде всего утолить свойственное большинству программистов любопытство забраться в тему глубже, а также переработать опыт создания инструмента статического анализа во что\-то интересное и распространить экспертизу\. И те этапы, которые Юра проходит для написания своего языка, — база, но она не так проста, как может показаться\. Этот определённый набор уроков, помогающий сделать свой язык, является наилегчайшим способом познать то, как работают языки программирования\.

Мы собрали курс из 10 видео и назвали его "Давайте создадим язык программирования"\. Регистрируйтесь, переходите по [ссылке](https://pvs-studio.ru/ru/blog/training/courses/davajte-sozdadim-yazyk-programmirovaniya/), это бесплатно\. Там вы найдёте более подробное описание видеоуроков\.

## Разгадка историй

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

**История №1**

![1387_letsmakelanguage_ru/image5.png](https://import.viva64.com/docx/blog/1387_letsmakelanguage_ru/image5.png)

Датчанина звали Расмус Лердорф, его изобретение — Personal Home Page \(инструменты для личной домашней страницы\)\. Оно стало популярным и теперь носит название PHP и используется как язык программирования для веб\-сайтов\. Лердорф объединил свои скрипты с библиотекой форм\. Появился базовый синтаксис и возможность обрабатывать данные из HTML\-форм\. С версией 2\.0 PHP стал полноценным инструментом для динамических сайтов, совершив революцию в веб\-разработке\.

P\.S\. Картинку рисовали не для этой статьи\. Вообще удивляюсь, какая у нас уже коллекция изображений, да ещё и в таком талантливом исполнении\. Недавно коллега написала статью о том, какие изменение претерпевал наш маскот, единорог Коди, в течение всего времени существования\. Читайте статью с отборными изображениями единорога и самыми неординарными решениями [здесь](https://pvs-studio.ru/ru/blog/posts/1372/)\.

**История №2**

Конечно, это PVS\-Studio\. Решили немного польстить себе :\)

![1387_letsmakelanguage_ru/image6.png](https://import.viva64.com/docx/blog/1387_letsmakelanguage_ru/image6.png)

2006 год — эпоха появления 64\-битных систем\. На тот момент многие думали о переходе с 32\-битных систем, однако при переходе сталкивались с 64\-битными ошибками\. В результате двое разработчиков создали механизм, помогающий находить такие ошибки, а затем трансформировали его в полноценный инструмент с более широким спектром решения проблем\. Сейчас PVS\-Studio — это целая компания, а тогда у двух разработчиков, которые ещё недавно выпустились из университета, была проблема, решение которой переросло во что\-то масштабное\. Кстати, недавно нам исполнилось 18 лет\! В честь совершеннолетия мы написали [статью](https://pvs-studio.ru/ru/blog/posts/1355/), где рассказали, что происходило в анализаторе и компании в течение этих лет\.

**История №3**

![1387_letsmakelanguage_ru/image7.png](https://import.viva64.com/docx/blog/1387_letsmakelanguage_ru/image7.png)

В 1994 году инженер компании Netscape Communications Лу Монтулли столкнулся с проблемой: изначальный протокол HTTP был "бессодержательным" \(stateless\) — сервер не мог распознать, что один и тот же человек переходит со страницы на страницу или совершает покупки\. Тогда он предложил сохранять небольшой фрагмент текстовых данных на стороне пользователя\. Это получило название cookies\-файлы\. Открытие навсегда изменило веб\-индустрию, позволив создавать удобные корзины для интернет\-магазинов и сохранять авторизацию на сайтах\.

## Напутствие

Наша команда желает вам успехов в прокачке вашей экспертизы — это довольно полезная вещь, которая позволит вам развиваться и достигать новых высот\. Ну и проходите наш курс, чтобы взглянуть на язык программирования под новым углом, набраться вдохновения для своих проектов или проектов вашей компании\. Возможно, ваше любопытство тоже приведёт к чему\-то масштабному, нужно всего [лишь](https://pvs-studio.ru/ru/blog/training/courses/davajte-sozdadim-yazyk-programmirovaniya/)\.\.\.