serpent — это компилятор подмножества языка программирования Eiffel, который позволяет компилировать код в Java-байткод и выполнять его на JVM.
-
Интеграция с Java:
Легко подключайте и используйте произвольный Java-код для расширения возможностей ваших приложений. 🔌☕ -
Мощное наследование:
Поддержка как одиночного, так и множественного наследования для гибкого построения иерархий классов и переиспользования кода. 🏛️✨ -
Удобные массивы:
Поддержка динамических массивов с элементами одного типа — просто, понятно и эффективно для работы с данными. 📊✅ -
Простой и интуитивный синтаксис:
Определяйте классы, методы и управляющие конструкции легко и понятно, сосредотачиваясь на логике приложения. 📝👌 -
Богатый набор встроенных инструментов:
Встроенные операции ввода/вывода, сортировки, поиска и многое другое для быстрого старта разработки. 🔍💡
Компилятор состоит из двух частей - парсер, написанный на C, собираемый при помощи gcc, flex и bison (под Windows рекомендуется воспользоваться MSYS2 для установки требуемого ПО) и семантический анализатор с генератором кода, написаннные на Python.
Далее необходимо установить serpent через pip как пакет Python:
pip install .
Для того, чтобы иметь возможность просматривать статус компиляции через прогресс-бар, необходимо выполнить следующий вариант установки:
pip install .[tqdm]
В результате появится возможность воспользоваться флагом -v
(описан ниже).
После установки доступна команда serpent
в терминале.
Создаёт минимальный проект с файлом app.e
:
serpent init
cd app
После выполнения в папке app
появится файл app.e
:
class
APPLICATION
create
make
feature
make
do
print ("Hello, world!%N")
end
end
Компилируем код из текущей папки app
:
serpent build
После этого в папке classes/
появятся скомпилированные файлы .class
.
Выполняем скомпилированный байткод:
serpent run
Hello, Eiffel!
Создаём исполняемый .jar
:
serpent jar
Файл app.jar
будет сохранён в текущую папку. Полученный файл необходимо запускать командной:
java -noverify -jar app.jar
Компилятор не генерирует stack map frames, поэтому проверку на их наличие необходимо отключить.
Создаёт минимальный проект Eiffel.
Команда:
serpent init [name]
Параметры:
name
— Имя проекта. Если не указано, по умолчанию используетсяapp
.
Компилирует проект Eiffel.
Команда:
serpent build [source]
Параметры:
source
— Папка с исходными файлами проекта. По умолчанию: текущая директория (.
).
Флаги:
--mainclass (-m)
— Главный класс. По умолчанию:APPLICATION
.--mainroutine (-r)
— Главный (стартовый) метод. По умолчанию:make
.--javaversion (-j)
— Версия Java. По умолчанию:8
.--outputdir (-d)
— Папка для сборки (генерации class-файлов). По умолчанию:classes
.--verbose (-v)
— Включает отображение прогресс-бара статуса компиляции. Необходима библиотека tqdm.
Запускает скомпилированные классы проекта.
Команда:
serpent run [classpath]
Параметры:
[classpath]
— Папка с класс-файлами. По умолчанию:classes
.
Флаги:
--mainclass (-m)
— Главный класс. По умолчанию:APPLICATION
.
Выполняет компиляцию проекта и запуск скомпилированных файлов. Сокращение для следующей последовательности команд:
serpent build
serpent run
Команда:
serpent exec [source]
Параметры:
source
— Папка с исходными файлами проекта. По умолчанию: текущая директория (.
).
Флаги:
--mainclass (-m)
— Главный класс. По умолчанию:APPLICATION
.--mainroutine (-r)
— Главный (стартовый) метод. По умолчанию:make
.--javaversion (-j)
— Версия Java. По умолчанию:8
.--outputdir (-d)
— Папка для сборки (генерации class-файлов). По умолчанию:classes
.--verbose (-v)
— Включает отображение прогресс-бара статуса компиляции. Необходима библиотека tqdm.
Создаёт JAR-файл из скомпилированных классов.
Команда:
serpent jar [classpath]
Параметры:
[classpath]
— Папка с класс-файлами. По умолчанию:classes
.
Флаги:
--mainclass (-m)
— Главный класс. По умолчанию:APPLICATION
.--outputdir (-d)
— Папка для сохранения JAR-файла. По умолчанию: текущая директория (.
).--jarname (-n)
— Имя создаваемого JAR-файла. По умолчанию:app.jar
.
Запуск JAR-файлов:
Генерируемые class-файлы не могут быть запущены без указания флага -noverify
, т.к. serpent
не генерирует stack map frames.
java -noverify -jar app.jar