Русская версия | English version
serpent — это компилятор подмножества языка программирования Eiffel, который позволяет компилировать код в Java-байткод и выполнять его на JVM.
-
Интеграция с Java:
Легко подключайте и используйте произвольный Java-код для расширения возможностей ваших приложений. 🔌☕ -
Мощное наследование:
Поддержка как одиночного, так и множественного наследования для гибкого построения иерархий классов и переиспользования кода. 🏛️✨ -
Встроенны коллекции: Стандартная библиотека содержит реализацию динамического массива и хэш-таблицы — просто, понятно и эффективно для работы с данными. 📊✅
-
Простой и интуитивный синтаксис:
Определяйте классы, методы и управляющие конструкции легко и понятно, сосредотачиваясь на логике приложения. 📝👌 -
Богатый набор встроенных инструментов:
Встроенные операции ввода/вывода, сортировки, поиска, веб-сервер и многое другое для быстрого старта разработки. 🔍💡
Компилятор состоит из двух частей - парсер, написанный на C, собираемый при помощи gcc, flex и bison (под Windows рекомендуется воспользоваться MSYS2 для установки требуемого ПО) и семантический анализатор с генератором кода, написаннные на Python.
Далее необходимо установить serpent через pip как пакет Python:
git clone https://github.com/samedit66/serpent.git
cd serpent
pip install .После установки доступна команда 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. По умолчанию:11.--outputdir (-d)— Папка для сборки (генерации class-файлов). По умолчанию:classes.--no-verbose— Выключает отображение прогресс-бара статуса компиляции.
Запускает скомпилированные классы проекта.
Команда:
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. По умолчанию:11.--outputdir (-d)— Папка для сборки (генерации class-файлов). По умолчанию:classes.--no-verbose— Выключает отображение прогресс-бара статуса компиляции.
Создаёт 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.jarserpent — is a compiler for a subset of the Eiffel programming language that compiles code to Java bytecode and runs it on the JVM.
-
Java integration: Easily call and use arbitrary Java code to extend your applications. 🔌☕
-
Powerful inheritance: Supports both single and multiple inheritance for flexible class hierarchies and code reuse. 🏛️✨
-
Built-in collections: The standard library contains implementations of a dynamic array and a hash table — simple, clear and efficient for working with data. 📊✅
-
Simple and intuitive syntax: Define classes, methods and control structures easily and clearly, focusing on the application logic. 📝👌
-
Rich set of built-in tools: Built-in I/O, sorting, searching, a web server and much more to get you started quickly. 🔍💡
The compiler consists of two parts — a parser written in C which is built using gcc, flex and bison (on Windows it is recommended to use MSYS2 to install the required tools) and a semantic analyzer with a code generator written in Python.
Next, install serpent as a Python package with pip:
git clone https://github.com/samedit66/serpent.git
cd serpent
pip install .After installation the serpent command becomes available in the terminal.
Creates a minimal project with the file app.e:
serpent init
cd appAfter running the command, the folder app will contain app.e:
class
APPLICATION
create
make
feature
make
do
print ("Hello, world!%N")
end
endCompile the code from the current app folder:
serpent buildAfter that, compiled .class files will appear in the classes/ directory.
Run the compiled bytecode:
serpent run
Hello, Eiffel!Create an executable .jar:
serpent jarThe file app.jar will be saved to the current folder. Run it with:
java -noverify -jar app.jarThe compiler does not generate stack map frames, so bytecode verification must be disabled with -noverify.
Creates a minimal Eiffel project.
Command:
serpent init [name]Parameters:
name— Project name. If omitted, the default isapp.
Compiles the Eiffel project.
Command:
serpent build [source]Parameters:
source— Directory with the project's source files. Default: current directory (.).
Flags:
--mainclass (-m)— Main class. Default:APPLICATION.--mainroutine (-r)— Main (entry) routine. Default:make.--javaversion (-j)— Java version. Default:11.--outputdir (-d)— Output directory for generated.classfiles. Default:classes.--no-verbose— Disables the compilation progress bar.
Runs compiled classes of the project.
Command:
serpent run [classpath]Parameters:
[classpath]— Directory with class files. Default:classes.
Flags:
--mainclass (-m)— Main class. Default:APPLICATION.
Compiles the project and then runs the compiled files. Equivalent to:
serpent build
serpent runCommand:
serpent exec [source]Parameters:
source— Directory with the project's source files. Default: current directory (.).
Flags:
--mainclass (-m)— Main class. Default:APPLICATION.--mainroutine (-r)— Main routine. Default:make.--javaversion (-j)— Java version. Default:11.--outputdir (-d)— Output directory for generated.classfiles. Default:classes.--no-verbose— Disables the compilation progress bar.
Creates a JAR file from compiled classes.
Command:
serpent jar [classpath]Parameters:
[classpath]— Directory with class files. Default:classes.
Flags:
--mainclass (-m)— Main class. Default:APPLICATION.--outputdir (-d)— Directory to save the JAR file. Default: current directory (.).--jarname (-n)— Name of the generated JAR. Default:app.jar.
Running JAR files:
Generated class files cannot be run without the -noverify flag because serpent does not generate stack map frames.
java -noverify -jar app.jar