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)
Ответ на: комментарий от Razk

Попов

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

Зачем ставить жирный рантайм Labwiev чтобы написать будильник? Достаточно блокнота и компилятора. Код будильника который ты опубликовал на Pastebin нечитаем от слова совсем.

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

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

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

У Си их меньше всего, поэтому я его и взял как бекенд.

Ты так и не ответил, чем же Цэ «фундаментальнее» того же Fortran. Или даже, можно пойти глубже, более «фундаментальный» чем PL/I. В Фотране, насколько мне известно нет адресной арифметики, а в PL/I есть.

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

Их нельзя отладить ни одним из существующих инструментов для си.

Ну и что? Работать-то работают. Нерабочих трансляций я на ЛОР не скидываю.

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

Есть такие нюансы, но в Метапроге не используются строковые литералы (или как их там) как в твоем примере. Сначала воспроизведи этот баг через Метапрог, потом вернемся к этой теме.

ты не знаешь си

Ну и ладно.

Этого не будет.

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

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

Ты так и не ответил, чем же Цэ «фундаментальнее» того же Fortran. Или даже, можно пойти глубже, более «фундаментальный» чем PL/I

Может и не фундаментальнее, но на фортране я прикладного софта и ядер ОС не припомню. Си - главный ЯП в линуксе и юниксе. Этого достаточно.

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

Если забыть за плагиат, то Денис Попов сделал вполне себе годный форк убунты.

Он ничего не сделал, поменять обои и криво перевести установщик может любой прочитавший Linux from Scratch. Вопрос вот только в другом: зачем оно нужно? В бесполезности и чрезмерных амбициях(напишу свое ядро, компилятор и т.д.) Дениса и упрекали. Плагиат там так одна из претензии, отнюдь не главная.

Ты делаешь то же самое. Взял кодогенератор из Labview, назвал его метапрог, а какой толк с этого метапрога никто понять не может. Хочу будильник на сях -> Открываю блокнот или IDE -> пишу код -> компилирую. Зачем мне метапрог схемы? Зачем мне LabView(который весит крайне дофига)?

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

которая после выхода Метапрога «на самом себе»

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

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

Алгоритмы, структуры данных, паттерны это если по минимому

Если это по текстовым ЯП - мимо.

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

Упрощенно - так. И меня это устраивает.

Написать можно все и так, только это неэффективно и такой код поддерживать никто кроме вас не станет.

Прототип вообще изначально не для публики был.

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

metaprog в английский слабоват

Знаю я английский и если надо хоть целую книгу могу на нем прочитать. Но русский все же понятее, поскольку ближе к украинскому.

лучше то же на русском подкинуть и надеяться на то, что он все же это прочитает

Если посчитаю нужным.

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

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

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

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

Я и сейчас так делаю. Позже, может, прикручу LLVM, но рано еще об этом думать.

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

Как незачем? Ты же своими влажными фантазиями соседей затопишь. Подставь ведро.

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

При этом читать я на самом деле люблю, но только то, что мне интересно.

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

И текстовые ЯП ты вполне мог бы освоить, но для этого нужно приложить кое-какие усилия. А вбил себе в голову, что это не нужно, поскольку ты нашёл серебряную пулю. Кстати, про серебряную пулю ты тоже не читал?

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

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

у меня нет задачи генерировать читаемый код на Си. Смотреть надо схему из первоисточника - Метапрог-диагарммы.

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

диагарммы

«Шо, опять?» (цитата из культового русского мультфильма по украинской сказке)

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

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

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

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

Я тоже думаю что обучаемый, но тут нужно желание. А metaprog в первых темах часто употреблял словосочетание «Мне лень». И тут он уже сам себе начальник. Под необучаемостью скорее скрывается упертость и нежелание, ну или толстый и зеленый представитель фауны.

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

Взял кодогенератор из Labview

Бред, достойный уровня антиметапрогеров.

Хочу будильник на сях -> Открываю блокнот или IDE -> пишу код -> компилирую

Пиши. Мне писать что-либо в блокнотах и текстовых IDE не интересно.

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

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

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

Бред, достойный уровня антиметапрогеров.

Опровергни тогда, если это бред.

Мне писать что-либо в блокнотах и текстовых IDE не интересно.

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

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

Ладно как назреет обращусь. Просто тема и так с повышенным содержанием флуда :).

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

Опровергни тогда, если это бред.

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

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

Если это по текстовым ЯП - мимо

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

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

Я как-то этот момент пропустил видимо. Признаю мой косяк. Вопрос снимается. Но вот вопрос нужности metaprog в силе.

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

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

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

Ну нужность - понятие субъективное. Самому ТСу метапрог нужен зачем-то, больше никому не нужен. Так что ждём чего-то полезного, сделанного ТСом на метапроге.

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

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

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

Не в обиду грузинам, но электричество, автомобиль, трамвай, самолет и прочие технические новинки рубежа 19-20 веков изобрели не там.

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

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

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

У меня ещё пара десятков нерешённых квадратных уравнений есть!

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

https://www.youtube.com/watch?v=iRubsiZcQWQ Подождем, а то будильник где-то выше в теме писали что не очень. А компилировать тот нечитабельный код который он представил неохота.

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

а работу - я и сам за бесплатно работаю

бредни нищих

Похоже на рассуждения индуса работающего за еду, при этом упрекающего других в нищете.

Лабвью можно достать и без лицензии

Как ты? Вот значит какой уровень «изобретательства» у тебя - скачать торента лабвью.

Украсть идею лабвью, написать кривой\косой транслятор из квадратов и жгутиков в Си, натырить туда готовых библиотек и задирая нос к солнцу заявлять о своём изобретательском гении - действительно достойно уважения(нет).

Доната не будет, плохой саппорт.

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

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

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

Если будет очередная тема надо эту картинку(https://i.imgur.com/s0pNEZV.jpg) и рассказ про прапора(Метапрог-прототип, версия 7 + графические диалоги на Метапроге (комментарий)) в самом начале вставить. Что бы всем заглянувшим на огонек все было понятно.

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

Злые программисты не оценили гений светоча, плак-плак.

liksys ★★★★
()
Ответ на: комментарий от KOHb-TPOJIJIbJIEP

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

liksys ★★★★
()
Ответ на: комментарий от liksys
#include <stdio.h>
int main(void) {
    int i;
    char *str = "Ололо" + i;
    printf("%s %s\n", i, str);
}

Хорошо что есть божественная Visual Studio которая на этот код кинет 3 ошибки и не соберётся.

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

Скрин в студию. Потому что в GCC это предупреждения, скажем.

$ gcc -c -std=c11 -Wall -Wextra test.c
test.c:2:6: предупреждение: возвращаемое значение функции «main» - не «int» [-Wmain]
    2 | void main(void) {
      |      ^~~~
test.c: В функции «main»:
test.c:5:11: предупреждение: формат «%s» ожидает аргумент типа «char *», но аргумент 2 имеет тип «int» [-Wformat=]
    5 |  printf("%s %s\n", i, str);
      |          ~^        ~
      |           |        |
      |           char *   int
      |          %d
test.c:4:27: предупреждение: «i» используется без инициализации в данной функции [-Wuninitialized]
    4 |  char *str = "Ололо" + i;
      |              ~~~~~~~~~~~~~^~~

Но ТС игнорирует предупреждения так-то.

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

Если создавать новый проект через «Далее - далее» и ничего не менять, то будет ошибка: https://imgur.com/a/6oBa5fh

Но в godbolt так:

https://gcc.godbolt.org/z/K_wtMU

https://gcc.godbolt.org/z/EVNV5F

Видимо какие-то флаги ещё устанавливают для компилятора, в проекте по умолчанию…

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

https://gcc.godbolt.org/z/wPyqxd тут дело такое, что @metaprog признает С, но не СХХ, поэтому корректно проверять компилятором С, msvc он все же больше СХХ чем С. Так-то g++ и clang++ тоже будут ругаться.

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