Ремесло программиста

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Ремесло программиста » Кумир » Исполнители и их хтоничность


Исполнители и их хтоничность

Сообщений 1 страница 10 из 10

1

Исполнители - это как-бы объекты, которые что-то делают (хранят состояния и имеют методы).

Можно сказать, что Кумир - это почти объектно-ориентированный язык,
только классы надо описывать снаружи и на языке C++.
Ну или не "снаружи", а "под капотом".
Или "в тёмных глубинах" - именно в этом суть хтоничности исполнителей Кумира.

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

Итак, если мы хотим программировать для Web, то в обычных терминах нам нужны
объекты
"запрос" (заголовки, параметры запроса, куки, данные POST если есть),
"ответ" (заголовки ответа, куки) и
"контекст" (например хранить в памяти данные соответствующие сессии).

Делаем из этого одного исполнителя, называем его исполитель "Собеседник",
внутрь засовываем реализацию сразу всего, что относится к запросу, ответу и контексту,
кодируем на C++, добавляем в проект и затем
пользуемся из Кумира в синтаксисе Кумира.

На примере исполнителя "чертёжник":
src/actors/draw
мы видим функции-члены на C++
и биндинги к ним при помощи json

на C++:
    void runSetupPen();
    void runReleasePen();
    void runSetPenColor(const Color& color);
    void runMoveTo(const qreal x, const qreal y);
    void runMoveBy(const qreal dX, const qreal dY);

в json:
    "methods": [
        {
            "name": {"ascii": "setup pen", "ru_RU": "опустить перо"},
            "async": false
        },
        {
            "name": {"ascii": "release pen", "ru_RU": "поднять перо"},
            "async": false
        },
        {
            "name": {"ascii": "set pen color", "ru_RU": "выбрать чернила"},
            "async": false,
            "arguments": [
                {"baseType": "color", "name": "color"}
            ]
        },
        {
            "name": {"ascii": "move to", "ru_RU": "сместиться в точку"},
            "arguments": [
                {"baseType": "double", "name": "x"},
                {"baseType": "double", "name": "y"}
            ]
        },
        {
            "name": {"ascii": "move by", "ru_RU": "сместиться на вектор"},
            "arguments": [
                {"baseType": "double", "name": "dX"},
                {"baseType": "double", "name": "dY"}
            ]
        },

Яр, мне непонятно, что тебе непонятно с написанием вебсайта на Кумире... Пару недель и ты там.
По крайней мере не прийдётся писать парсер и кодогенератор, только код для исполнителя (готовый я не нашел)
учитывая злобность C++ можно делать интеграцию хоть для CGI, хоть для FastCGI.

2

эм, честно говоря я пока читал запутался.

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

3

Да вы должны писать на Си++ что-бы потом писать на Кумире. Как и в любом другом DSL языке.
Абстракция это обобщение по русски. А тут просто ещё один слой обёртки.

4

Павиа написал(а):

Абстракция это обобщение по русски. А тут просто ещё один слой обёртки.

Вы что-то перепутали))  абстракция это как раз отделение или выделение.
Это выделение общего свойства предметов.
нужнo посмотреть как кумир по итогу преобразуется в исполняемую программу.

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

было бы очень странно если бы программситы сначала писали язык программирования под себя,а потом на нем писали проэкт
и так каждый раз.

5

Яр написал(а):

Вы что-то перепутали)) абстракция это как раз отделение или выделение. Это выделение общего свойства предметов.

Вы оба правы, каждый по-своему. У слова "абстракция" несколько значений, разные в разных контекстах.

Яр написал(а):

ситуация более чем странная писать на си что бы иметь возможность писать на Кумир

это следствие (принятого мной архитектурного) решения не переписывать ядро операционной системы и веб-сервер ( для задачи написать обработку web-запроса на языке с кирилицей).

Яр написал(а):

язык-инвалид, не самостоятельный в решении системных задач

верно. Но
1) для написания конкретно веб-страниц его может хватить (при условии, что будет исполнитель, предоставляющий доступ к технологиям на C - веб-серверу nginx например, или apache)
2) чтобы сделать более мощный язык, нужно понять ограничения существующего языка. Чтобы понять - нужно наблюдать и делать выводы.

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

Яр написал(а):

нужнo посмотреть как кумир по итогу преобразуется в исполняемую программу.

несколькими способами. Да, верно, нужно.

6

нужнo посмотреть как кумир по итогу преобразуется в исполняемую программу.

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

Яр написал(а):

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

Ну да как и большинство интерпретаторов. Но это не значит что его нельзя превратить в самодостаточный язык.

Яр написал(а):

было бы очень странно если бы программситы сначала писали язык программирования под себя,а потом на нем писали проэкти так каждый раз.

Да странно, но факт остаётся фактом. За первые 5 лет было создано около 2 000 языков. За 30 лет около 70 000 языков.

7

Павиа написал(а):

Так Кумир это интерпретатор, а не компилятор.

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

8

ВежливыйЛис
Знаний предостаточно.  Более 13 книг:
http://ru.complang.wikia.com/wiki/Список_литературы
Есть авторские стати:
http://ru.complang.wikia.com/wiki/Авторские_затеи
И ещё в догонку
https://www.opennet.ru/docs/RUS/bison_yacc/

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

Смотрел я тут https://habrahabr.ru/post/274083/
Так вот секрет в том что за 40 дней автор скопировал готовое решение с LCC. Плюс качество компилятора не выдерживалось, упрощалось в угоду ускоренной разработке. Конечно и высокая производительность автора тоже играет роль.

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

9

ага и я нашел вчера этот LCC очень заинтересовало.

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

10

Павиа написал(а):

Другое дело что меня не устраивает способ изложения.

- Полностью согласен. Способ изложения "хромает" также и у многих наших "технописцев". (даже у пишущих на родном языке)))

Отредактировано Сандро (2016-12-23 03:04:39)


Вы здесь » Ремесло программиста » Кумир » Исполнители и их хтоничность