LINUX.ORG.RU

Метапрог-прототип 43: начало переделки «на самом себе»

 , , , ,


1

4

Скачать:

https://mega.nz/file/fUhEjbCI#1LbpnccSm_SkwJi5Bugwc679tFxj7YJzCTOQxmxHvq0

За последние месяцы, прошедшие с выпуска 42 версии Метапрога, было внесено множество изменений. Несмотря на множество отвлекающих факторов, разработка Метапрога идет полным ходом. Изменений настолько много, что перечислены будут только самые важные.

Наконец-то должным образом заработали циклы по структурам. Благодаря этому появилась возможность собирать функции, принимающие структуру любого типа. Удалось, например, собрать функции сериализации и десериализации для любых структур, состоящих из простых (числовых) типов, массивов и других подобных структур. Таким образом, на Метапроге можно собирать схемы с сетевыми протоколами и файловыми форматами, просто задав структуру данных.

У Метапрога появилась часть, полностью собранная уже на самом Метапроге. Тот самый Метапрог «сам на себе», пусть даже пока что в небольшой бекенд-части. Бекенд находится в папке «бекенд», есть линуксовый бинарник и сишный исходник (для компиляции бекенда на Windows и других платформах). С LabVIEW-частью Метапрога работает по сети, используя бинарную (де)сериализацию. Транслятор может работать и без него (если не может соединиться с ним по сети), но его наличие упрощает компиляцию (не надо вручную вызывать компилятор) и способствует некоторой оптимизации трансляции.

Пока что бекенд только записывает с-файл, вызывает компилятор, а также создает инклуды в процессе трансляции, чтобы уменьшить размер кода и тем самым оптимизировать потребление памяти у сделанного на LabVIEW транслятора. Но пока что не удается оттранслировать схему, отображающую типы в дереве: транслятор вылетает из-за того что «обжирается памяти».

У LabVIEW с управлением памятью (и вообще оптимизацией), видимо, совсем плохо, из-за чего некоторые части транслятора уже приходится начинать переделывать на самом Метапроге. Но этот процесс усложняется теми же проблемами с оптимизацией транслятора.

Кстати, насчет управления памятью. Появилась мысль делать ее с помощью SDL-семафоров. У статического массива (константы, которую не надо освобождать) - нулевой указатель, а у динамического при создании создается и семафор. При каждом разветвлении схемы, повторении цикла итп - семафор увеличивается. При освобождении (как правило, в конце веток) - семафор уменьшается, если доходит до нуля - происходит освобождение памяти. Вопрос лишь в одном - насколько большими будут издержки во время исполнения программы (в рантайме)?

Предыдущая тема:

Метапрог-прототип 42

У Метапрога появилась часть, полностью собранная уже на самом Метапроге. Тот самый Метапрог «сам на себе», пусть даже пока что в небольшой бекенд-части. Бекенд находится в папке «бекенд», есть линуксовый бинарник и сишный исходник (для компиляции бекенда на Windows и других платформах).

Будет ли полностью сишный исходник, из которого Метапрог-на-себе можно будет собрать под линуксом?

hobbit ★★★★★ ()
Ответ на: комментарий от hobbit

Будет ли полностью сишный исходник, из которого Метапрог-на-себе можно будет собрать под линуксом?

Это и есть цель. Бекенд, кстати, уже можно.

metaprog ()
Ответ на: комментарий от metaprog

Просто нужно отделить управление памятью от межпоточной синхронизации. А ты пытаешься смешать всё в кучу. Нужно отдельно счётчик ссылок, отдельно синхронизация.

ox55ff ★★★★★ ()
Ответ на: комментарий от rupert

Надо бы ролик обновить включив все темы и пару сотен ржачных комментов. Но лень. И так подёт :D

LINUX-ORG-RU ★★★★★ ()
Ответ на: комментарий от metaprog

Что может лучше считать ссылки чем семафор?

Reference counter: https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B4%D1%81%D1%87%D1%91%D1%82_%D1%81%D1%81%D1%8B%D0%BB%D0%BE%D0%BA

Такая штука много где используется, например в скриптовых языках, где управление памятью постарались максимально упростить.

COKPOWEHEU ()

Наконец-то должным образом заработали циклы по структурам.

Похоже на таблицы и метатаблицы в Lua или Python. Но это - язык с динамической типизацией, состав переменной заранее неизвестен.

Благодаря этому появилась возможность собирать функции, принимающие структуру любого типа.

Ух какое поле для багов.

Кстати, насчет управления памятью. Появилась мысль делать ее с помощью SDL-семафоров.

Какой смысл в подобном управлении памятью, если подход Labview изначально предлагает более удобный способ? Там все переменные передаются по значению и «живут» от выходного терминала до входного. Если входных много, значит и временных переменных много, только и всего. Есть, конечно, глобальные переменные, но их обычно немного и поэтому их время жизни можно не ограничивать.

COKPOWEHEU ()

Наконец-то должным образом заработали циклы по структурам. Благодаря этому появилась возможность собирать функции, принимающие структуру любого типа.

Ты циклы по полям структур имеешь ввиду?

apt_install_lrzsz ()
Ответ на: комментарий от ox55ff

«счётчик ссылок» звучит несолидно, а «семафор» - совсем другое дело.

rupert ★★★★★ ()
Ответ на: комментарий от metaprog

Что может лучше считать ссылки чем семафор?

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

alysnix ★★ ()

Благодаря этому появилась возможность собирать функции, принимающие структуру любого типа. Удалось, например, собрать функции сериализации и десериализации для любых структур, состоящих из простых (числовых) типов, массивов и других подобных структур.

Вы парсите #include?

anonymous ()
Ответ на: комментарий от hobbit

Будет ли полностью сишный исходник, из которого Метапрог-на-себе можно будет собрать под линуксом?

Буфет

Метафога кэпкая оешка ...
anonymous ()
Ответ на: комментарий от fernandos

Чего тема новая?

Тссс, а то спугнете …

anonymous ()

Пиши замеин фреимить (получить новый фреимворк) либо пере сборка самом на себе , переделка звучит что перделка

anonymous ()
Ответ на: комментарий от anonymous

Вы парсите #include?

Отвечу за ТС.
У него в диаграммах структуры.

Все просто и понятно ... /и без ошибок/

Эх, хороший разработчик же, а напридумывал себе сложностей.

Как мазохист ...
anonymous ()

Шутка

Так-то код вашего backend.c простой и понятный.
Не смог вот понять назначение этих переменных …

struct mpsd_6_ mp_0_4435780813569818625_6005561938704082945_4080618829275611137_3007269978343680001_1658655125656641537_4155438664714432513_v_6963373501022275585;
struct mpsd_6_ mp_0_4435780813569818625_6005561938704082945_4080618829275611137_3007269978343680001_1658655125656641537_4155438664714432513junction_8079432560847247361;
struct mpsd_7_ mp_0_4435780813569818625_6005561938704082945_4080618829275611137_3007269978343680001_1658655125656641537_4155438664714432513_structure_operation_return_8079432560847247361_0;
float mp_0_4435780813569818625_6005561938704082945_4080618829275611137_3007269978343680001_1658655125656641537_4155438664714432513_structure_operation_return_8079432560847247361_1;
anonymous ()
Ответ на: комментарий от alysnix

Тем не менее, внутри семафора тоже счётчик. Что мешает использовать его для подсчёта ссылок кроме необходимости считать в другую сторону?

apt_install_lrzsz ()
Ответ на: комментарий от apt_install_lrzsz

Что мешает хлебать суп ковшом экскаватора вместо ложки? И там и там осуществляется забор содержимого в впуклую, открытую сверху емкость.

Siborgium ★★★★ ()
Ответ на: комментарий от Siborgium

Ничего не мешает. И я о том же. Так почему бы в метапроге и не использовать семафор для ARC? Хуже станет что-ли?

apt_install_lrzsz ()

Наконец-то, джва года ждал.

anonymous ()

Пам пара паааам, Пам пара Пам пам!

vvviperrr ★★★★★ ()
Ответ на: комментарий от COKPOWEHEU

Такая штука много где используется, например в скриптовых языках, где управление памятью постарались максимально упростить.

в скриптовых языках, где

чтоб ты понимал ;) сказанная тобой фраза в пространстве метапрог-тем приравнивается к нецензурной брани.

«метапрог и … скриптовые языки» – нельзя же так.

anonymous ()
Ответ на: комментарий от anonymous

Владимир, это же очевидно!

вы не туда смотрите. надо смотреть не в этот текстовый выхлоп для текстового сишного компилятора, а в графические диагармы. посмотрели? вопрос сам собой снялся… ну вот и славно.

anonymous ()
Ответ на: комментарий от t184256

Я смотрю, из ТСа слова умные пошли. Код пошёл?

Два года ЛОР помогал ему «открыть зеньки» и вот вам результат … А вот шо он там робыт, кто нэбудь понэмае?

anonymous ()
Ответ на: Владимир, это же очевидно! от anonymous

Re: Владимир, это же очевидно!

… а в графические диагармы. посмотрели? вопрос сам собой снялся… ну вот и славно.

Молчу, молчу, молчу …

Но все же она верится
anonymous ()
Ответ на: комментарий от hobbit

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

Косвенно эту версию подтверждали неуклонно растущие задержки между релизами.

izzholtik ★★★ ()
Последнее исправление: izzholtik (всего исправлений: 1)
Ответ на: комментарий от anonymous

«метапрог и … скриптовые языки» – нельзя же так.

Так он к этому и идет. Что из изначальной концепции «программирование для домохозяек», что из сериализации-десериализации жгутиков.

Осталось только заменить статическую типизацию на динамическую и получится прекрасное графическое представление для тех же Lua или Python. Недостатки графических языков, естественно, никуда не денутся, но и дураков, считающих, что можно что-то там накодить, не изучая теорию, тоже хватает - недостатка в аудитории не будет.

графические диагармы. посмотрели? вопрос сам собой снялся

А как их смотреть-то? Богомерзкого Labview у меня нет, запускать сомнительные бинарники (тем более экзешники) я тем более не буду.

Автор, ты бы хоть формат своего графического формата опубликовал. Мол файл состоит из разделов, каждый из которых является структурой: первые два байта размер, третий - тэг (список кодов тэгов прилагается), четвертый и пятый CRC16 контрольная сумма. Для тэга «квадратик» 6-7 и 8-9 байты это ХУ координаты, 10-20 - строка в кодировке cp1251 с названием квадратика. Для тэга «жгутик» 6-7, 8-9 это ХУ координаты начала, N+10-N+11, N+12-N+13 - ХУ координаты N-го узла. Ну и так далее.

COKPOWEHEU ()
Ответ на: комментарий от COKPOWEHEU

А как их смотреть-то?

соль в том, что рассматривание этих картинок никакой ясности и понимания не вносит. что противоречит, изначальным постулатам ТС о простоте, доступности и т.д.

Автор, ты бы хоть формат своего графического формата опубликовал.

есть основания полагать, что описания формата не существует (всё переписырисовывается «на лету»). кстати, тот случай когда хорошая диаграмма была бы более, чем уместна.

Так он к этому и идет.

гениев полагается ограждать от душевных травм.

anonymous ()
Ответ на: комментарий от apt_install_lrzsz

Ты циклы по полям структур имеешь ввиду?

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

metaprog ()
Ответ на: комментарий от anonymous

Вы парсите #include?

Да, функции и типы из сишных инклудов доступны в Метапроге. Они автоматически определяются через парсинг вывода CastXML.

metaprog ()
Ответ на: комментарий от anonymous

Не смог вот понять назначение этих переменных …

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

metaprog ()

Платиновые треды лора

anonymous ()
Ответ на: комментарий от COKPOWEHEU

Автор, ты бы хоть формат своего графического формата опубликовал

Метапроговские схемы (.mpbd) так же как и типы (.mptd) - это всего лишь сериализированные LabVIEW-кластера (аналог структур). Надо смотреть типы. Их при желании расшифровать легко, например к Метапрог Онлайн (с бинарным протоколом) уже написали несколько сторонних клиентов помимо официального.

К тому же, форматы меняются. Но это не беда, так как есть версионирование по форматам (например, первые 8 байт файла mpbd или mptd - это номер версии формата).

metaprog ()
Ответ на: комментарий от anonymous

рассматривание этих картинок никакой ясности и понимания не вносит

Можно в Метапрог онлайн спрашивать все что непонятно. Или на ЛОРе.

metaprog ()
Ответ на: комментарий от anonymous

есть основания полагать, что описания формата не существует

Тип и есть формат, используется стандартная LabVIEW-сериализация (кстати, частично уже повторенная на Метапроге).

metaprog ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)