Мне нравится писать код в Visual Studio Code. А иногда установить и настроить компилятор для некоторых языков и заставить его работать — это боль. Итак, я придумал идею.

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

Я написал эту статью, чтобы поделиться с вами своими мыслями и опытом создания такого компилятора. Это руководство будет разделено на 4 части, в противном случае было бы слишком много всего, чтобы охватить его, и слишком много, чтобы вникнуть в него. Ура!

ОБНОВЛЕНИЕ: часть 2 теперь доступна здесь.

Требования:

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

В нашем случае есть 2 основных момента.

  1. Автоматически определять язык программирования на основе расширения файла.
  2. Вызовите соответствующий API с кодом и необходимыми входными данными и отобразите результат.

План атаки:

Как только пользователь закончит писать свой код, он может нажать команду «Выполнить».

Это сделает запрос API к прокси-серверу. Причина для прокси-сервера в том, что,

1. Это позволяет нам иметь один URL-адрес для нескольких серверов языков программирования.

2. При необходимости его можно использовать в качестве балансировщика нагрузки.

3. Он может позаботиться об аутентификации и авторизации запросов API.

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

Обратный прокси — это сервер, который находится перед другими веб-серверами и перенаправляет запросы клиентов на эти веб-серверы.

Для каждого языка программирования будет своя служба компилятора языка, в которой будут установлены все необходимые библиотеки и компиляторы для компиляции/интерпретации этого конкретного языка.

Откуда прокси-сервер знает, какой язык?

Наш запрос будет POST запросом со следующим телом

Прокси-сервер просто просматривает поле language и выясняет, на какой сервер перенаправить запрос.

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

Ознакомиться с готовым расширением можно здесь