1

Тема: Пакетный менеджер

Во вступлении к очередной хабрастатье про Rust удачно сформулированы назначение и преимущества языка:

Он такой же низкоуровневый, как Си или C++, имеет хорошую систему типов (с обобщениями (generics) и типажами (traits)), дружелюбный компилятор и отличный менеджер пакетов Cargo.

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

Про Кантор можно вообще говорить, что он создается вокруг идеи пакетного менеджера, только не называет его этим словом. В Канторе нет пакетного менеджера, а есть БД кода, выполняющая те же функции. Имеется также принцип наложения патчей "как в играх", который я до сих пор не раскрыл.

Развитию темы помогут наводящие вопросы, для того ее и создал.

2

Re: Пакетный менеджер

В языке Эйфель используется трехуровневая система организации кода:

An Eiffel "system" or "program" is a collection of classes. Above the level of classes, Eiffel defines cluster, which is essentially a group of classes, and possibly of subclusters (nested clusters). Clusters are not a syntactic language construct, but rather a standard organizational convention. Typically an Eiffel program will be organized with each class in a separate file, and each cluster in a directory containing class files. In this organization, subclusters are subdirectories. For example, under standard organizational and casing conventions, x.e might be the name of a file that defines a class called X.

Вообще, для отображения иерархии кода на файлы и каталоги мне известны две системы:

  • Как в Java — пространства имен в каталогах, классы в файлах.

  • Как в .NET — пространства имен задаются точечными именами файлов, объединение в каталоги произвольно.

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

Помимо задачи хранения кода, подсистема «пакетного менеджера» Кантора обеспечивает функциональность патчей. В отличие от Rust и Pijul, работа с кодом ведется на уровне понятий внутренней модели Кантора, а не исходных текстов. О хранилище кода можно говорить как о специализированной БД, а ядро Кантора обеспечивает целостность данных по экспорту/импорту, наследованию и агрегации (с учетом патчей, то есть перекрытия). Тем самым ядро Кантора реализует функциональность объектно-ориентированной СУБД, во многом пересекающуюся с функциональностью ядра объектно-ориентированной ОС в понятиях Кантора:

favicon.ico  Помимо задач, характерных для ядра обычной ОС, ядро объектно-ориентированной ОС должно поддерживать программную среду с контролем целостности наследования, полиморфизма и агрегации.