LINUX.ORG.RU

Metaprog: универсальная графическая среда программирования [в разработке] часть 5

 , , ,

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

Это как раз грубое описание схем дракона. Тут явно задаётся порядок вызова функций - «чистых» и «не чистых».

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

В твоих блоках по-прежнему будет текстовый код или будет максимально возможный отрыв от текста?

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

Я пилю на C++. Текстовом языке. Если кину код - будет почти тоже самое, что и в том псевдокоде, только гораздо многословнее.

И да, ссылка на репозиторий затерялась где-то в конце 4-го треда. Вот https://github.com/arturianec100/skyvis

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

Потыкал-покликал. Кое-что понял про let, но особо не вчитывался. Интерактивный туториал закночился, послало читать книгу и RTFM. Занавес.

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

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

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

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

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

ООО! Моя либимая тема. В сишке этого нету, всё надо перебирать вручную.

В С++ из коробки этого тоже нету, но многим кровь из носу нужно, поэтому запилили Meta Object Compiler, Unreal Header Tool и есть вариант с очень чёрной магией с использованием BOOST_FOREACH и Boost.Phoenix, где код такой, что у программистов из Яндекса глаза на лоб лезут от таких фокусов.

В JVM и .NET это реализовано на уровне виртуальной машины.

У всякой скриптоты а-ля питон, жс, пхп... Такой код очень короткий и понятный, но создаёт немало накладных расходов.

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

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

Это настолько абстрактно, что лежит в основе почти любой реализации ВП.

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

Значит буду крутить свой эксклюзивный функционал. sizeof на целую структуру дает правильный размер? Хотя если структура с указателями на массивы - чуточку сложнее. Но в целом это возможно.

В Лабвью стандартный функционал сериализации-десериализации в строку (или бинарный файл) выглядит так:

http://zone.ni.com/reference/en-XX/help/371361R-01/glang/flatten_to_string/

http://zone.ni.com/reference/en-XX/help/371361R-01/glang/unflatten_from_string/

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

ЕМНИП да, это весь синтаксис. Могу ошибаться, ибо тот туториал только пробегал мимо.

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

sizeof на целую структуру дает правильный размер?

Да, правильный, только не забывайте про padding

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

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

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

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

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

???

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

struct test {
    char *p;
    char c;
};

// sizeof (test) == 16 (because of padding)
balsoft ()
Ответ на: комментарий от balsoft

Все же лучше, видимо, сериализировать элементы структуры по-отдельности.

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

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

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

Стоп, он наоборот укоротил структуру? 16? Указатели это size_t (32-битные) или 64-битные? Ну не 8-битные же!

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

Без paddingа:

sizeof (test) = sizeof(char*) + sizeof(char) = 8 + 1 = 9

С ним:

sizeof (test) = sizeof(char*) + sizeof(char) + sizeof(padding) = 8 + [1 + 7] = 16

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

А, точно, размер в байтах, а не битах. А зачем так делается?

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

Оптимизация. Понятно.

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

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

У меня для таких случаев как раз есть программа специальная - gcc. Я бы выложил результат, да он в экран не влезает. Или выхлоп gcc не канает в качестве результата преобразования?

Не преобразует. Остаётся рекурсивный вызов call search.

https://godbolt.org/z/Zp6pLd

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

Достаточно ввести тип stack.

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

monk ★★★★★ ()

Компилировать исходники нужно так:

Здесь бы тогда надо бы и ссылочку на сами исходники, а то они затерялись на бескрайних просторах 4 предыдущих тем. И желательно не в виде ошмётков на пастебине, где они скоро превратятся в тыкву, а на чём-нибудь типа github/gitlab/sourceforge. Да даже тупо сайт на народе.ру с баннером в полстраницы был бы предпочтительнее нынешней ситуации, если там будет полная подборка исходников. Можно табличку сделать: слева ссылка на файл диаграммы, справа ссылка на сгенерированный исходник. И третий столбец, что этот пример вообще поясняет.

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

Не преобразует. Остаётся рекурсивный вызов call search.

Преобразует, преобразует.

У процессора нету лямбды головного мозга, в отличие от некоторых и он в call функций не видит, а видит подтверждение тезиса Черча-Тьюринга.

anonymous ()

Странно. 5 тем. Исходников нет. Язабан!!!

anonymous ()

где уже можно скачать, посмотреть скрины, посмотреть видео с работой, посмотреть роадмап?

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

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

В такой ситуации не скрины и роадмап, а роадмап роадмапа надо спрашивать.

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

я в институте тоже так же героически опенсорс аналог делфей писал, чтоб можно было значения мышой контролировать и сигналами связывать и чтоб все на компонентах и без писанины...ээх. Хорошо тогда про ЛОР не знал :D

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

«котечка» и «метапрог» похоже это один и тот-же рег.

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

Это будет симуляция вызова функции.

Верно.

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

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

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

Особо одаренных приглашаю почитать шапки прошлых тем со скринами диаграмм и компилируемыми примерами.

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

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

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

Ты с первой темы «прототип и циклы» здесь «вот вот будут готовы» выкладываешь. Может самозабанишся?

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

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

Про компилируемые примеры уже много раз говорили. Это некачественные, плохие исходники. Вот когда будут без единого варнинга компилятся - тогда и будут «компилируемые примеры»

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

«настоящего» Метапрога

Желаю, чтобы все.

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

а некие диаграммы, которые, возможно, сгенерены неким метапрогом
некачественные, плохие исходники

И кстати, я бы понял ещё, если бы автор не Labview, а EA взял за образец. Там и диаграммы что надо, и исходники генерятся приличные. Хотя может по этому и не взял.

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

Про компилируемые примеры уже много раз говорили. Это некачественные, плохие исходники. Вот когда будут без единого варнинга компилятся - тогда и будут «компилируемые примеры»

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

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

получаются и работают корректно

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

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

я в институте тоже так же героически опенсорс аналог делфей писал

Хорошо тогда про ЛОР не знал

Ты и про Lazarus не знал?

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

Ага. Я про линукс сотоварищи вообще сильно отдаленно знал и про Qt (Qt designer), где уже можно было делать так, как хотел, я тоже был невкурсе.

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

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

Многие ли захотят, вот более существенный вопрос.

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

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

У меня твой пример с окном сегфолтится при выходе их приложения.

А кинь ссылку, какой именно из примеров. Любопытно посмотреть.

// Я не он.

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

Красивый или нет, с варнингами или без - дело десятое.

Это не более чем твоё субъективное мнение, настойчивое продвижение которого рубит в несколько раз и так не слишком многочисленную потенциальную ЦА твоего детища. Если это то, к чему ты стремишься — вопросов нет.

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

Попробуй преобразовать

У меня для таких случаев как раз есть программа специальная - gcc.

Насколько я понимаю, в машинном коде останется точно такая же рекурсия, только на call и ret (ну и, возможно, с проверкой на переполнение стека).

Или я недооцениваю интеллектуальную мощь современного gcc? :)

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