LINUX.ORG.RU

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

 , , , ,


2

4

Скачать:

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

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

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

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

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

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

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

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

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



Последнее исправление: metaprog (всего исправлений: 2)

Ответ на: комментарий от fernandos

вы делаете всё, чтобы метапрог умер как можно скорее.

Что мертво, умереть не может.

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

конвертер из формата любой версии в любую другую

В последнюю на текущий момент.

форматом версии 43

Формат меняется далеко не так часто. У типов и схем еще не вышел за пределы 10. Но уже больше 5, лень искать конкретные числа (в лабвью-исходниках есть).

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

Формат меняется далеко не так часто. У типов и схем еще не вышел за пределы 10. Но уже больше 5

Да пожалуйста, это как раз не принципиальный вопрос. Для определенности предположим, что 7. Тогда для конвертации из любого формата в любой нужно 7*6 = 42 варианта кода.

Напоминаю: чтобы на потерять совместимость со старым кодом, конвертить придется в обе стороны.

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

Для определенности предположим, что 7. Тогда для конвертации из любого формата в любой нужно 7*6 = 42 варианта кода.

Нет. Один код-«матрешка», превращающий примерно по такой схеме: 0->1->2->3->4->5->6->7. Любая старая версия формата превращается в последнюю. Обратные преобразования возможны, но пока не припомню ситуаций где они бы понадобились.

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

Интересно как часто подобное будет встречаться на практике.

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

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

Я и не поверю. Вы хоть понимаете, насколько это трудозатратно и неэффективно.

Ну так предлагай идеи

Я уже предлагал, остальные предлагали, вот только всё разбилось об «метапрог лучше знает».

Вот ты говоришь нужно документацию написать, если я ее напишу, будут ли те кто ее начнет писать за меня?

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

Собственная система контроля версий, пока без webgui

NIH первостепеннее разработки метапрога.

Смотреть ты в чем диаграммы собрался

А вам какая разница? Может, на другом компьютере буду смотреть? Может, хочу скопировать на телефон.

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

Я и не поверю. Вы хоть понимаете, насколько это трудозатратно и неэффективно.

Да кто эту документацию вообще читает? Я и K&R не читал, скучно же, намного интереснее делать софт, и по вопросам обращаться к более знающим.

Если вы её напишите, то вероятность того, что в будущем это будет делать кто-то другой, возрастёт

Сильно, или не сильно? Может эффективнее сделать что то другое? Лучше в числах вероятности расчитай, это же не твои додумки, а точные расчеты, я уверен в этом!

NIH первостепеннее разработки метапрога.

Вот был бы метапрог на github, как бы ты смотрел там код диаграм? Ты хоть думай прежде чем отвечать.

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)
Ответ на: комментарий от metaprog

Нет. Один код-«матрешка», превращающий примерно по такой схеме: 0->1->2->3->4->5->6->7

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

COKPOWEHEU
()

Эшо раз

Проект интересный и направление работ также, но

 -  диалоговые формы не readable;

 -  документации для разработчиков нет /вообще ни какой нет/;  

 -  многие разработчики, которые использовали LabView утверждают, что лучше его палочкой не ковырять;

 -  генерируемый сишный код не читаемый.  
    Да и скорее всего не оптимален.

 -  советы других разработчиков полностью игнорируются;

 -  ...

Верю, что @metaprog свою мету осуществит, но ведь результат похоже будет «так себе» …

PS: Впрочем кто знает, что будет 666 релизе …

anonymous
()

Все еще сомнительное г-но на файлопомойке.

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

ААААА оно начало изобретать GC.

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

И это про текстовые файлы. С бинарными это будет на порядок хуже.

Ахах.

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

Вообще-то это работает. LabVIEW 2021 может открыть VI от версии 6.0 до 2021 и может сохранять вниз до версии 8.0. Понятно, что новый функционал в старые версии не конвертируется, но он там не очень и нужен. Ошибки в коде могут изредка возникать, но лечатся тривиально - удаляем контрол/индикатор/провод/структуру и создаём заново.

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

Как по мне, метапрог на LabView совсем не похож. Это как C и C#.

Успехов!

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

лечатся тривиально - удаляем контрол/индикатор/провод/структуру и создаём заново.

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

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

На каждом шаге накапливаются ошибки, будет код, полагающийся на неопределенное поведение и другие пограничные случаи

Глупости. Смотри схемы типа «блок-діаграма версіонований формат прочитати.vi» и «складний тип з версіонованого рядку.vi», все поймешь.

И это про текстовые файлы. С бинарными это будет на порядок хуже.

С бинарными структурами наоборот все конкретнее и понятнее.

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

С бинарными структурами наоборот все конкретнее и понятнее.

Ни чего сложного в алгоритмах нет, за исключением пустяка

Добиться того, чтобы он правильно работал ...
Мы наш, мы новый язык построим.  
Кто был ничем, то станет всем.

PS: Для работы с Метапрог у программиста должна быть тонкая душа живописца …

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

«Затуманенные» явой, си, удавом, верблюдом, … не поймут красоту Метапрог …

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

С бинарными структурами наоборот все конкретнее и понятнее.

Аххахаххаааххахаа! Сразу видно «профи» :D :D

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

Да кто эту документацию вообще читает?

Все нормальные люди?

Я и K&R не читал, скучно же, намного интереснее делать софт, и по вопросам обращаться к более знающим.

Все нормальные люди.

Сильно, или не сильно? Может эффективнее сделать что то другое?

Может, но ведь вы метапрог не разрабатываете, думаете, спорить на форуме эффекктивнее?

Вот был бы метапрог на github, как бы ты смотрел там код диаграм

А кто говорил про просмотр? Ещё раз, речь про банальное выкачать исходники. Чтобы просматривать, очевидно, надо было бы сделать вебгуй и присобачить его к нормальной СКВ.

fernandos ★★★
()

@metaprog, не обижайтесь на форумчан.

Вам просто все ЗАВИДУЮТ!

Я вот уже несколько дней от зависти заснуть не могу …

Вы хороший разработчик, но на перепутье трех дорог вы выбрали

ХУДШУЮ
anonymous
()
Ответ на: комментарий от fernandos

Ещё раз, речь про банальное выкачать исходники.

И что ты с ними будешь делать, объясни. Вот у тебя архив бинарных файлов.

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

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

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

У метапрога настолько всё плохо со стандартом файла, что даже нет теоретической возможности того, что он будет открыт в сторонней программе?

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

Сейчас нет, а в будущем появится веб интерфейс. А теперь объясняй зачем сейчас нужна возможность выкачать архив бинарников с гитхаба.

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

Сейчас нет, а в будущем появится веб интерфейс

Ах, всё забываю, что ещё пока всего лишь 43 версия.

А теперь объясняй зачем сейчас нужна возможность выкачать архив бинарников с гитхаба

Чего вы привязались к гитхабу?

Ок, как мне с телефона выкачать исходники метапрога? Хочу потом перенести на компьютер, где нет интернета.

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

Ок, как мне с телефона выкачать исходники метапрога? Хочу потом перенести на компьютер, где нет интернета.

Ссылка на архив выше.

Ах, всё забываю, что ещё пока всего лишь 43 версия.

А ты бы сделал больше и лучше чем metaprog? Или только лаять можешь?

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

Без понятия.

Хороший ответ.
А была бы на формат документация, кто нибудь и зробыл бы …

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

Ссылка на архив выше.

Этот архив после каждого изменения обновляется, верно?

А ты бы сделал больше и лучше чем metaprog

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

Или только лаять можешь?

А что мне делать? Хвалить его?

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

Этот архив после каждого изменения обновляется, верно?

Этот архив не меняется.

Я бы слушал советы умных людей.

Кто такой умный человек? Полное определение в студию.

Вы почему-то считаете, что любой труд достоин уважения, но это не так.

Да я полностью согласен, более того, твой «труд» по написанию комментариев тут достоин презрения.

А что мне делать? Хвалить его?

Да, можно только хвалить, и презирать. Остальное для людей с IQ > 50.

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

Rebforcer говорил что нужно на clojure переписать, а лучше на rebol. Еще много кто предлагал генерацию не в С, а в Python, Lua. Хорошие советы, ага?

С тобой все понятно.

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

Так он вообще не разработчик, макака и то лучше программирует

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

Глупости. Смотри схемы типа «блок-діаграма версіонований формат прочитати.vi»

Именно эти не нашел, но в других *.vi - непонятная бинарная хрень. Учитывая, что Labview у меня нет и не будет - чем их читать-то?

С бинарными структурами наоборот все конкретнее и понятнее.

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

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

*.vi - непонятная бинарная хрень

LabView один из бинарных форматов.
Своего рода модуль …

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

Проект у вас интересный и перспективный, но GUI LabView не годится для графического представления алгоритмов. Оно не readable …

Подписываюсь под каждым словом.

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

Я долгое время пытался вводить js графическим способом, за исключением имён, путем выбора шаблонов и заполнения их полей. Но это стало слишком сложно выглядеть (вводить-то нормально), когда мне понадобились вызовы функций со сложными аргументами типа выражений, других функций или объектов (всякие map-reduce).

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

Что и вам рекомендую.

То что можно хорошо визуализировать (данные), я визуализацию. А если нужна нетривиальная функция здесь и сейчас, я ввожу ее и через eval она запускается. Она получает в качестве this тот объект, к которому я ее привязал графически. И спокойно делает свою локальную (в графическом смысле) работу.

По запросу low code можете поискать другой софт ради интереса. На Википедии есть списки софта, но он в основном для бизнеса.

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

LabView один из бинарных форматов.

Своего рода модуль …

Спасибо, я в курсе. Но Лабвью от этого у меня не появится.

Но кубом пользуются, значит графикой не брезгуют.

Ага, и генерируют десятки килобайт нечитаемой каши (почти как выхлоп Метапрога) на простейший код, когда хватит пары килобайт. Что характерно, разобраться в этой каше потом точно так же не могут. Вот они, преимущества графических конфигурялок.

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

скриптуху не уважаем.

Вы просто не умеете ее готовить. На самом деле питон и js больше всего подходят для метапрограммирования, потому что они универсальны. У них есть любые графические и алгоритмические возможности здесь и сейчас. Куча библиотек из коробки.

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

Именно тщательно изучив этот проект я поменял мнение о скриптах. Раньше тоже думал что ЯВУ только плодят сущности, и только ассемблер является настоящим языком.

Но насколько же проще объявить и соединить на питоне 10 сигналов по сравнению с верилогом или VHDL. А результат на выходе 100% такой же.

Очень странно что аналогичного проекта нет для оборачивания си.

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

И что? Компилятор си генерирует такое же г. в ассемблере на десятки килобайт, когда хватит одного.

А ещё можно дожать рукописный ассемблер, и получится ещё меньше.

Но это специальная олимпиада. Вопрос был кому нужно? Ответ - всем.

Представляю как первобытные люди ухахатывались, когда появился цикл for, когда есть while.

А что сейчас, кто-нибудь найдется и скажет не нужно?

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

А ее невозможно приготовить, на то это и скриптуха. Для метапрограммирования всегда советую смотреть Forth.

MOPKOBKA ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.