LINUX.ORG.RU

Метапрог-прототип, версия 7 + графические диалоги на Метапроге

 , ,


0

3

Скачать (перед запуском читайте !Русский.txt или !Українська.txt):

https://www71.zippyshare.com/v/dNcHIgzD/file.html

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

Однако самая интересная фича новой версии - сериализация в base64 координат блока на диаграмме с цепочкой функций. Этому есть как минимум два возможных применения. Можно «ткнуть пальцем» на нужный блок (меню блоки - ткнуть пальцем на блок). Будет сгенерирована строка такого вида:

metaprog_debug:AAAAAAAAAAAAAAAHAAAAAFBUSDAAAAAEAAAAAAAAAAAAAAAAAAAAAwAAAAdNUEwgMi4wAAAAB0xJQ0VOU0UAAAAU4fPk6Ov87ejqIO3gIOfg7+jy4PUAAAAK0+rw4L/t8fzq4AAAABXh8+To6/zt6Oog7eAg5+Dv8O7x4PUAAAAH0PPx8ero6VBUSDEAAAAxcmVsIAAr0LHRg9C00LjQu9GM0L3QuNC6INC90LAg0LfQsNC/0LjRgtCw0YUubXBiZBNiCtNfkRABAAAAAwAAAAdNUEwgMi4wAAAAB0xJQ0VOU0UAAAAT9rPr7vfo8evu4ujpIOSz4Ovu4wAAAArT6vDgv+3x/OrgAAAAFPbl6+736PHr5e3t++kg5Ojg6+7jAAAAB9Dz8fHq6OlQVEgxAAAANXJlbCAAA25rYwAq0YbRltC70L7Rh9C40YHQu9C+0LLQuNC5INC00ZbQsNC70L7Qsy5tcGJkP/rfBI32qgEAAAADAAAAB01QTCAyLjAAAAAHTElDRU5TRQAAABDy5erx8u7i6Okg5LPg6+7jAAAACtPq8OC/7fH86uAAAAAQ8uXq8fLu4vvpIOTo4Ovu4wAAAAfQ8/Hx6ujpUFRIMQAAAC9yZWwgAANua2MAJNGC0LXQutGB0YLQvtCy0LjQuSDQtNGW0LDQu9C+0LMubXBiZFbEp7cIT2gBAAAAAwAAAAdNUEwgMi4wAAAAB0xJQ0VOU0UAAAAV5+Dv8/HqIOKz6u3gIE51a2xlYXIrAAAACtPq8OC/7fH86uAAAAAU5+Dv8/HqIO7q7eAgTnVrbGVhcisAAAAH0PPx8ero6VBUSDAAAAAWAAEAAgNua2MNbmtjIGluaXQubXBiZFQc/+kgVZgBAAAAAwAAAAdNUEwgMi4wAAAAB0xJQ0VOU0UAAAAO+PDo9PIg7fPq6+Xg8CsAAAAK0+rw4L/t8fzq4AAAAA748Oj08iDt8+rr5eDwKwAAAAfQ8/Hx6ujpUFRIMQAAADpyZWwgAANua2MAL9GW0L3RltGG0ZbQsNC70ZbQt9Cw0YbRltGPINC90YPQutC70LXQsNGAKy5tcGJkaxMcpv873AEAAAAAUFRIMAAAAAQAAAAAdcftGC2ZsAE=:metaprog_debug

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

Вместо тысячи слов:

https://i.postimg.cc/gd7RZD9Q/image.png

Там будет явно показан конечный блок, на который «ткнули пальцем», либо подфункция, по которой до него следует добираться.

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

https://postimg.cc/hQVLBcHp

Дебаг-строку выводит оранжевый блок.

В новой версии прототипа Метапрога было исправлено множество багов. Теперь метапроговские массивы и СУВТ можно помещать под указатели и вставлять в структуры, не боясь багов. Это позволило добавить к будильнику, реализованному в прошлой версии, диалоги, запрашивающие час и минуту срабатывания будильника.

Для компиляции надо скачать https://sourceforge.net/projects/tinyfiledialogs/

Распаковать в папке с Си-файлом так, чтобы работал соответствующий инклюд.

Код:

https://pastebin.com/5NW30tQx

Введя нужное число, закрываете окошко. После ввода часа и минуты в консоль будет выведено время срабатывания. Теперь будильником можно пользоваться и для повседневных нужд (звук пронзительный, хорошо слышный, sound.wav больше не нужен), однако завершать его работу надо еще через диспетчер задач или Ctrl+C в консоли, когда не идет звук. Также нет проверки введенных чисел, если введете не то число - будильник никогда не сработает.

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

Предыдущая версия:

Метапрог-прототип, версия 6 + будильник на Метапроге



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

Только ООПнутый и ФПнутый софт в разы медленнее чисто сишного и по бенчмаркам, и в реальной жизни

Каким бенчмаркам?

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

Из этого поносного потока сознания, можно предположить что вся твоя жизнь состояла из «переустановка ZverCD», оказывается в XP у тебя не было сишарпов и дотнетов. Но инсталятор ZverCD требует ДОТНЕТА!

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

Зато «плюс метапрога что он может использовать уже готовые библиотеки.» (c) метапрогомать Диана.

И еще «можно легко менять обои». Сейчас пока нет, но в версии 211 будет точно.

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

Для конечного пользователя — совершенно одно говно.

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

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

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

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

Без обид, но веселье сомнительное какое-то :)

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

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

Если логировать все, то скорость работы просядет на порядок-два-три.

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

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

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

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

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

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

В общем пока что это делается при помощи отладочных принтфов или их аналогов;-)

Есть еще техника вывода выбранных значений со стека если что то пошло не так - те же отладочные принтфы, но отложенные.

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

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

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

Для конечного пользователя — совершенно одно говно.

Нет. Кордамп - это результат undefined behaviour, которое для конечного пользователя хуже. Так как вместо креша программа может некорректно работать долгое время. Стектрейс - это вполне себе defined behavior.

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

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

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

Промежуточные варианты наверное тоже возможны, но я не сталкивался…

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

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

Сейчас уже логи никто не ротирует. Используют всякие логсташи/fluentd чтоб посылать их на центральный сервер, где все индексируется и архивируется.

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

Ну можно и так конечно, если у вас есть куда их посылать и где архивировать ;) Ну и да, мы тут про отладочные логи, их нет смысла вообще куда-то посылать и архивировать, разве что для подбивки статистики своих неудач :)

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

Архивировать отладочные смысла нет, а вот посылать куда-то для анализа и алертов - почему нет?

provaton ★★★★★
()

еще одна история успеха

Ну и еще чутка наброшу, по поводу неустанных детских вопросов @metaprog«кто сильнее, слон или кит?» «что быстрее, С++, С или асм?»

ВОт есть у меня задача сводящаяся к обработке (перестроению) взвешенного графа. Пишу как обычно на связке С++11/питон. Написал, работает, но эффективность распараллеливания невысокая (50% в 4 треда, 25% в 56 тредов), да и время счета великовато (минуты на ноуте для минимально актуального размера графа). Конечно можно позвать Диану или @fsb4000, все сделать на С/асме и получить выигрыш… в 10% (через год их работы), хотя вряд ли.

А можно проконсультироваться с коллегами, доработать структуру данных (сделать блочную оптимизацию). День работы (код пришлось переписать на 80%), вуаля - на все тах же С++11/питоне скорость выросла на ПОРЯДОК, эффективность распараллеливания осталась на том же уровне. Еще немножко думаем, еще чуть дорабатываем код - вуаля, скорость выросла еще на 20%, и по мере увеличения размера графа на 56 потоках эффективность распараллеливания начинает расти как на дрожжах.

Так что правильный ответ - быстрее всего ЧЕЛОВЕК (если он конечно не относится к необучаемым дворникам) и удобный для него ЯП.

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

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

Автоматическая отправка сообщения об ошибке.

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

В любом случае, если возникает ошибка на какой-либо операции, то это не означает, что приложение должно сразу же завершать работу. Можно показать сообщение об ошибке, откатить операцию и дальше работать.

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

ссылок нет где я якобы что-то говорил

Метапрог-прототип, версия 7 + графические диалоги на Метапроге (комментарий)

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

Я выращиваю антиметапрогеров на метапрогерских тредах, а потом их множу.

stasolog
()
Последнее исправление: stasolog (всего исправлений: 1)
Ответ на: еще одна история успеха от AntonI

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

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

Поясните, если я не так понял.

Есть жизненный цикл разработки Диаграмма -> Оттранслированный в Си код -> скомпилированный бинарник.

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

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

Опять вы из под вороха газет выползли котечка, ну и на что это ссылка? Давайте ка посмотрим… Да ваш пример с бесконечным циклом не течет, хотя вы утверждали что должен течь, вы такой позорник, хоть бы проверили свой хеллоуворлд, чтобы не пришлось потом удалять комментарий, даже не знаю с чего вы решили что он должен потечь, из-за бесконечного цикла? Глупыш вы мой пушистый :3

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

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

Кидающий исключение знает о своем местоположении.

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

Он течет, я уже раньше писал сколько утекает памяти. А ссылка это подтверждение того что ты говорил будто бы я много выдумываю aka фантазирую, но ты и дальше продолжил делать вид будто бы ничего не понимаешь. Окей.

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

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

Смотри заголовок этой темы: Метапрог-прототип, версия 7 + графические диалоги на Метапроге

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

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

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

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

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

Тебе не кажется, что это исключительно точное описание прототипа метапрога и его кодогенератора в Си в частности?

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

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

редко кто запускает с питоном код на суперкомпьюетере (он плохо дружит с MPI).

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

Даже если стектрейс сложный, все равно ты в любое место кода можешь потыкать палочкой в рантайме, все открыто/под рукой.

Теперь и в Метапроге. Правда пока что не в рантайме (Метапрог компилируемый и дебаг на проводках как в Лабвью я еще не сделал), но куда уж Метапрогу до интерпретируемых недоязычков, а?

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

Каким бенчмаркам?

https://benchmarksgame-team.pages.debian.net/benchmarksgame/

И вот эти погоняй у себя:

Метапрог-прототип, версия 7 + графические диалоги на Метапроге (комментарий)

можно предположить что вся твоя жизнь состояла из «переустановка ZverCD», оказывается в XP у тебя не было сишарпов и дотнетов. Но инсталятор ZverCD требует ДОТНЕТА!

Как всегда, пердеж в лужу. Не припомню чтоб использовал ZverCD, всегда предпочитал «чистую» ХР, которую вообще не переустанавливал (даже между хардами переносил, когда покупал новые). А дотнет появился уже в 2002, релиз ХР - 2001.

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

можно легко менять обои

Намек на Дениса Попова? Меня кто-то уличил в плагиате? Оправдывайся.

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

В общем пока что это делается при помощи отладочных принтфов или их аналогов;-)

Это на сишке все?

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

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

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

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

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

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

Блин, ну ты подумай стал бы ОП такую дичь делать? И стал бы я просто смотреть на это? Никакой мета-информации нету. И не будет. Позиция на диаграмме нужна только «бросающей функции».

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

Нет. Строка с координатами хардкодится только в специальном блоке «дебаг». Он ставится только в ветках недопустимых состояний.

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

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

стектрейсы и динамика - две абсолютно не связанные вещи. кресты вроде не динамика а обработка исключений там есть.

а проводок того же типа может вполне привести к коредамп программы : подключен инт - можете схлопотать деление на ноль.

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

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

Строка с координатами блока хардкодится при кодогенерации. Фраза из заголовка. Или это только для тех функций, для которых задано условие дебаг?

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

Короче действует как assert, он тоже выводит линию, имя функции итд.

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

Не для функций вообще. Только для блока «дебаг», возвращающего строку-константу с собственными координатами: https://i.postimg.cc/wMG0DBF8/my-malloc.png жучок оранжевый там. Шапку темы прочитай.

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

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

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

стектрейсы и динамика - две абсолютно не связанные вещи

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

кресты вроде не динамика а обработка исключений там есть

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

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

тогда это никакой не механизм исключений а действительно чисты дебаг. и он никак не спасет от человеческой невнимательности

А что от нее может спасти?:)

Хоббит уже писал кажется, что результатом будут тонны «у нас что то не работает!!!»

В питонософте я это прочувствовал на полную именно со стороны пользователя.

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

Хотя все равно ООП, так что тоже, наверное, могут быть какие-то ошибки в классах и методах.

Виртуальный метод может быть не реализован... При СУВТ такого бы не было!!! Но вообще в С++ типы самые четкие, царь подтвердит.

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

тесты, которые создаются до создания самой программы и формально описывающие суть задачи например

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

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

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

Кстати я там в F# добавил поддержку .Net framework 2.0 (открывается по той же ссылке в pastebin)

Забавно сравнить, на сколько улучшился .Net Core 3.1 по сравнению с .Net framework 2.0. У меня получилось почти на 50% даже в этом примере где ничего нет…

3.4с новый API, новый .Net

3.8c мои shims, новый .Net

5.5с мои shims, старый .Net

Зато старый .Net можно поставить на Windows 98 :)

Такое и со старым С/С++ кодом примерно. Компиляторы неплохо шагнули вперёд за это время, так что я не разделяю твоего мнения что раньше было лучше. Прогресс движется постоянно.

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

Вообще-то Метапрог-диаграммы максимально прямо транслируются в Си.

В нечитаемый Си, надо добавить. «Что там под капотом, ни одна живая душа уже не поймёт».

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

Но ведь я уже объяснял тебе, откуда они берутся и почему это вина разработчика. Ты вообще ничего не понял?

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