LINUX.ORG.RU

Метапрог-прототип 19 + API на СУВТ + ускорение трансляции

 , , ,


0

3

Скачать:

https://mega.nz/file/ONxVwDJb#zFun6oB2BOxRglVeqNGusssQqT4teCdvtt4dEd0kfV0

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

В 18 версии прототипа добавлен вывод значения переключателя из свича по СУВТ. В остальном она не отличается от 17 версии.

Это позволяет реализовывать весьма интересные вещи, например API для работы с чатом Метапрог онлайн на Метапроге:

https://i.postimg.cc/52xTMR4V/image.png

К блоку операции над структурой надо (не считая константы СУВТ) подключить ТОЛЬКО один из входов определенного типа. Это может быть переключатель (перемикач), задающий значение селектора СУВТ или любой из типов СУВТ. При подключении типов соответствующее значение переключателя СУВТ будет задано автоматически.

Кстати, украинский в Метапроге знать не совсем обязательно. Вот совершенно та же схема без изменений, только язык в настройках поменял на русский:

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

Только кейсы енума, управляющего СУВТ, было лень перевести:)

В версии 17 исправлен серьезный баг с кодогенерацией. В 16 версии при трансляции схем, в которых в ветку с условием «входят» данные извне, код, отвечающий за обработку этих данных (до их входа в условие) мог сгенерироваться после тела условия. Это серьезно тормозило развитие проекта, но теперь в стандартной библиотеке есть демки, успешно соединяющиеся с сервером Метапрог онлайн через Tor (SOCKS5) и работающие с некоторыми методами (проверить версию клиента и логин/регистрация).

Скорее всего, простой чат-клиент Метапрог онлайн с использованием СУВТ можно будет реализовать уже в этой версии прототипа. Если это не удастся - будут багфиксы, но если таки удастся - можно будет приступить к макросам времени компиляции, таким как «многотиповой» тип и цикл по структуре. После чего уже можно будет серьезно переделывать Метапрог «на самом себе».

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

Метапрог-прототип 16 + СУВТ по енумам

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

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

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

Порядок выполнения при каждом запуске и трансляции в пределах одной версии одинаковый.

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

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

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

Что бы понадобилась последовательность, должны быть две несвязанные между собой части,

Нет, должна быть неоднозначность в точке входа. И она там есть.

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

Можно. Но в тексте та функция которая идет выше по тексту вызывается раньше. На жгутиках непонятно что идет раньше.

Порядок выполнения при каждом запуске и трансляции в пределах одной версии одинаковый.

Только вот он ХЗ какой.

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

Нет, должна быть неоднозначность в точке входа. И она там есть.

Зависит от кода.

На жгутиках непонятно что идет раньше.

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

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

Зависит от кода.

О чем и речь, для хеллоу ворлдов проблем нет.

Так по последовательностям видно.

В этой мешанине жгутиков ничего не видно.

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

В этой мешанине жгутиков ничего не видно.

У тебя просто глаз не набит.

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

так что там по поводу пометки точки входа, ее можно найти как-то в ворохе диаграмм? Сами диаграммы уже имеют «плоть» в виде файлов диаграмм?

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

так что там по поводу пометки точки входа, ее можно найти как-то в ворохе диаграмм?

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

Сами диаграммы уже имеют «плоть» в виде файлов диаграмм?

Диаграммы всегда были файлами.

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

У тебя просто глаз не набит.

Да, я предпочитаю на базаре съезжать.

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

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

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

Диаграммы всегда были файлами.

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

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

ЕМНИП константы тоже инициировали какие вычисления.

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

в смысле того что константа выглядит как точка входа которая не имеет входов только выходы?

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

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

Да, можно и так. Но в текстовых языках можно и так %)

                                                   sub j(\$){($
                     P,$V)=                      @_;while($$P=~s:^
                 ([()])::x){                    $V+=('('eq$1)?-32:31
           }$V+=ord(  substr(                 $$P,0,1,""))-74} sub a{
          my($I,$K,$  J,$L)=@_               ;$I=int($I*$M/$Z);$K=int(
         $K*$M/$Z);$J=int($J*$M             /$Z);$L=int($L*$M/$Z); $G=$
         J-$I;$F=$L-$K;$E=(abs($          G)>=abs($F))?$G:$F;($E<0) and($
          I,$K)=($J,$L);$E||=.01       ;for($i=0;$i<=abs$E;$i++ ){ $D->{$K
                  +int($i*$F/$E)      }->{$I+int($i*$G/$E)}=1}}sub p{$D={};$
                 Z=$z||.01;map{    $H=$_;$I=$N=j$H;$K=$O=j$H;while($H){$q=ord
                substr($H,0,1,"" );if(42==$q){$J=j$H;$L=j$H}else{$q-=43;$L =$q
              %9;$J=($q-$L)/9;$L=$q-9*$J-4;$J-=4}$J+=$I;$L+=$K;a($I,$K,$J,$ L);
              ($I,$K)=($J,$L)}a($I,$K,$N,$O)}@_;my$T;map{$y=$_;map{ $T.=$D->{$y}
              ->{$_}?$\:' '}(-59..59);$T.="\n"}(-23..23);print"\e[H$T"}$w= eval{
              require Win32::Console::ANSI};$b=$w?'1;7;':"";($j,$u,$s,$t,$a,$n,$o
              ,$h,$c,$k,$p,$e,$r,$l,$C)=split/}/,'Tw*JSK8IAg*PJ[*J@wR}*JR]*QJ[*J'.
               'BA*JQK8I*JC}KUz]BAIJT]*QJ[R?-R[e]\RI'.'}Tn*JQ]wRAI*JDnR8QAU}wT8KT'.
               ']n*JEI*EJR*QJ]*JR*DJ@IQ[}*JSe*JD[n]*JPe*'.'JBI/KI}T8@?PcdnfgVCBRcP'.
                '?ABKV]]}*JWe*JD[n]*JPe*JC?8B*JE};Vq*OJQ/IP['.'wQ}*JWeOe{n*EERk8;'.
                  'J*JC}/U*OJd[OI@*BJ*JXn*J>w]U}CWq*OJc8KJ?O[e]U/T*QJP?}*JSe*JCnTe'.
                   'QIAKJR}*JV]wRAI*J?}T]*RJcJI[\]3;U]Uq*PM[wV]W]WCT*DM*SJ'.  'ZP[Z'.
                      'PZa[\]UKVgogK9K*QJ[\]n[RI@*EH@IddR[Q[]T]T]T3o[dk*JE'.  '[Z\U'.
                        '{T]*JPKTKK]*OJ[QIO[PIQIO[[gUKU\k*JE+J+J5R5AI*EJ00'.  'BCB*'.
                             'DMKKJIR[Q+*EJ0*EK';sub h{$\ = qw(% & @ x)[int    rand
                              4];map{printf  "\e[$b;%dm",int(rand 6)+101-60*   ($w
                               ||0);system(  "cls")if$w ;($A,$S)=    ($_[1],   $
                                _[0]);($M,   @,)= split  '}';for(     $z=256
                                ;$z>0; $z   -=$S){$S*=   $A;p @,}      sleep$_
                                [2];while   ($_[3]&&($    z+=$ S)       <=256){
                                p@,}}("".   "32}7D$j"     ."}AG".       "$u}OG"
                                ."$s}WG"    ."$t",""      ."24}("        ."IJ$a"
                                ."}1G$n"    ."}CO$o"     ."}GG$t"        ."}QC"
                                 ."$h}"      ."^G$e"    ."})IG"          ."$r",
                                 "32}?"       ."H$p}FG$e}QG$r".          "}ZC"
                                 ."$l",          "28}(LC" .""            ."".
                                 "$h}:"           ."J$a}EG".             "$c"
                                 ."}M"             ."C$k}ZG".            "$e"
                                 ."}"             ."dG$r","18"          ."}("
                                ."D;"            ."$C"  )}{h(16         ,1,1,0
                               );h(8,          .98,0,0   );h(16         ,1,1,1)
                               ;h(8.0         ,0.98,0,     1);         redo}###
                             #written                                 060204 by
                           #liverpole                                  @@@@@@@
                        #@@@@@@@@@@@

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

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

Но если нужно пометить первый блок в диаграмме «main()», то можно добавить рядом комментарий.

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

Константы это константы, какие там могут быть вычисления?

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

с = a + b, a и b константы - утверждалось что это приводит к вычислению c.

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

Просто значение констант напрямую подставляется в код, в часть присваивания.

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

1

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

2

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

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

в метапроге это можно сделать вполне естественным образом просто дополняя диаграмму итеративно

Ну если продолжать работать с полученными данными то диаграмма будет расти в правую сторону. Если добавлять несвязанные части то она будет расти вниз. Зачем же ее вести в левую сторону? Тем более в лево ее не расширишь.

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

А если от этих (и только от этих) констант цикл зависит?

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

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

что по поводу этого

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

что по поводу этого

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

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

Зум кстати есть в метапроге или это адок с скроллбарами?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Неважно. Но на основе этих констант заполняется массив. Большой.

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

Допустим. Что должно плохого или неожиданного произойти?

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

И в этот же массив что то пишется после обычной точки входа. Что произойдет раньше?

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

Тут уже надо расставлять последовательности. Но раньше будет массив.)

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

В смысле раньше будет массив? Он и там и там массив.

А если я не расставлю последовательности?

И где их расставлять, на входе в массив или в самом начале?

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

Ну допустим такой код:

#include <iostream>

int main() {
    char arr[] = "Hello World";
//////////////////////////////////
    for(char &c : arr) {
        c = '!';   
    }
//////////////////////////////////
    arr[0] = '@';
//////////////////////////////////
    std::cout << arr << std::endl;
}
Вот так на метапроге: https://ibb.co/Z2mYHXt

Сверху без последовательностей, снизу с последовательностями, можно еще пробрасывать значения, тогда порядок будет определен и последовательности можно будет не расставлять. https://ibb.co/xgbDXpc

paramon ()
Ответ на: комментарий от paramon
char arr[] = "Hello World";
//////////////////////////////////
for(char &c : arr) {
    c = '!';   
}

ты тут ‘\0’ символ затираешь…

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

В метапроге он не нужен, в плюсах не знаю на что менять, std::string тоже ведь нуль хранит.

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

В метапроге он не нужен, в плюсах не знаю на что менять, std::string тоже ведь нуль хранит.

Ok.

Ну тогда только выводить через write:

#include <iostream>

int main() {
    char arr[] = "Hello World";
//////////////////////////////////
    for(char &c : arr) {
        c = '!';   
    }
//////////////////////////////////
    arr[0] = '@';
//////////////////////////////////
    std::cout.write(arr, sizeof(arr)) << std::endl;
}

Метапрог вроде в С тоже через write выводит…

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

Ну вот, в одном варианте по крайней мере UB. А теперь если это будет аналог кода тыщ на 10 строк… Там все.

И это был лишь один из многих примеров проблемы

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

Но зачем так писать когда можно писать как в 3 примере? Там и UB нету, и последовательности нинужны, да и компактнее выходит.

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

На Лабвью у меня прототип Метапрога немаленький. Расскажи-ка мне где там твои UB и чем они мешают?

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

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

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

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

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

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

Метапрог онлайн уже работает с onion v3, причем с самого старта.

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

Последние версии тора поддерживают ХР и даже последняя версия Тор браузера для ХР (7.5.6) поддерживает onion v3.

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

А из чего такие выводы и что конкретно значится под концом на Windows XP. С переходом на V3 перестанет выходить тор с поддержкой V3 на xp, уже перестал? Или новая криптография(додумано из контента статьи) не имеет реализации в рамках Windows XP, что-то мешает самому тору ее реализовывать?

Разверните мысль если не трудно, в чем причина «конца» и почему именно на Windows XP? Ну да ОС не поддерживается производителем, но умельцы то как были так и остались.

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

А мы что ли серверную часть хостите на некрохp? Я думал у вас там хотя бы дебиан и wine.

abcq ()

ХР

Тор браузера для ХР (7.5.6)

mertvoprog

metaprog страшный некромант.

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

Labview высокоуровневая скриптуха которая спасает вас от множества проблем, в том числе и уб

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

Вот котечка привел примеры рядом с кодом на С, и чего-то код на С все еще понятнее чем диаграммки

Если вообще не желаешь качать прототип и разбираться - то я тебе ничем помочь не смогу.

все же какая-нибудь документация не помешала бы

Нет времени пока ее писать.

хотя бы просто те же самые картинки но с комментариями о том, что это вообще такое.

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

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

Ее и так, и так можно хостить. Старые компы у меня на хр, только на новом, на котором она нормально не работает, стоит линукс.

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