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 + СУВТ по енумам



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

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

Про нуль-терминированные строки, кстати, ни слова не сказано

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

Как, кстати, регулярные выражения будут выглядеть в метапроге? Графикой их не нарисуешь.

Еще года полтора назад, до первой моей темы на ЛОРе, я делал графические шаблоны для регулярок. Но позже бросил это дело из-за сложности. Хотя уже в Метапроге «на самом себе», скорее всего, будет что-то подобное.

А пока что посмотри парсер HTML из Лоральмолога (доступно в Метапрог онлайн и исправно открывается в последней версии протоитпа Метапрога).

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

Делфи я знал, лазарус - нет. Но я уже давно ни делфи, ни лазарусом, ни прочими диалектами Паскаля не пользуюсь. Только Лабвью, Метапрог и Си как бекенд для Метапрога (опять же, вручную на Си я пишу только заголовок с инклюдами).

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

Метапрог - это еще и упрощение

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

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

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

Курсовые это учебные задачи. Причём, выбираются они так, чтобы большинство с ними справилось. Гордиться, что ты что-то из них осилил, это как-то странно.

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

Примерно год назад я аж две среды визуального программирования написал.

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

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

А чем это не программирование?

Что он, что ты, просто не умеете программировать.

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

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

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

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

Возможно, для тебя

Понятное дело, что я в первую очередь делаю Метапрог для себя:)

потому что обычными инструментами ты почему-то пользоваться не можешь

Потому что брезгую ими. После Лабвью я не могу смотреть на них (особенно всякую скриптуху с динамической типизацией) без презрения.

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

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

Ты просто делаешь Си сложнее для восприятия

Почему не проще?

Курсовые это учебные задачи. Причём, выбираются они так, чтобы большинство с ними справилось. Гордиться, что ты что-то из них осилил, это как-то странно.

Ну так я, по специальности НЕ программист, помогаю студентам-программистам.

Примерно год назад я аж две среды визуального программирования написал.

Ну так это по приколу.

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

Потому что брезгую ими.

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

А кто-нибудь так делал до меня?

Может быть. Но это не имеет смысла. Это ничего не даёт.

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

Почему не проще?

П о т о м у ч т  
х н а п р а в о  
ы я ж е л о л ч  
н т х я и н е и  
з а р в ь т а т  

Ну так я, по специальности НЕ программист, помогаю студентам-программистам.

Алло! Это задачи для не-программистов. Они предназначены для того, чтобы помочь людям, не умеющим программировать, научиться. Вот если бы ты баги в реальном софте чинил или фичи запиливал, можно было бы и гордиться.

Ну так это по приколу.

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

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

Что я пропустил?;-)

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

А ну еще вычисление чисел Армстронга.

А в остальном все тоже самое. Продолжаем просмотр телесериала укрощение строптивого терпящего крушение на протяжении уже n-го количества серии в попытках обвести С в кружочки.

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

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

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

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

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

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

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

@metaprog, мне кажется, на поприще дайверсити ты сыщешь куда большей популярности

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

Ждём Мэта Тумбырг!

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

Посчитал же: https://www.linux.org.ru/forum/development/15749404?cid=15756654

Тут тесты всех предложенных вариантов: https://www.linux.org.ru/forum/development/15749404?cid=15760730

Тут про качество генерируемого кода: https://www.linux.org.ru/forum/development/15749404?cid=15762318

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

Не скучно?

Напишу просто. Под пиво пойдет :).

Ждём Мэта Тумбырг!

Так тут уже есть герой нашего времени. Это я про Диану.

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

То бишь ниче не поменялось ни в качестве кода, ни в скорости работы…

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

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

Да, мы получаем в итоге Си с присущему ему скоростью, но вместо текста проводки и квадратики.

Если кто считает, что метапрог не может написать мануалы, то может, только не хочет. Вот https://www.linux.org.ru/forum/development/15749404?cid=15762221 же написал целый мануал, картинок со схемками только не хватает.

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

только не хочет.

Ну шутки про ссылку на прототип или про посылание всех куда попало не просто так появились.

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

Такой подход к делу и навевает мысли о том что ТС тролль.

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

Качество генерируемого метапрогом кода в худшую сторону сместилось

И память все так же течет?

Да, мы получаем в итоге Си с присущему ему скоростью, но вместо текста проводки и квадратики.

К сожалению не получаем. В метапроге ЕМНИП есть родовая травма, связанная именно с проводочно-квадратным представлением.

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

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

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

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

Тупой прикол от котечки или стасолога. Он вдруг резко решил себя идентифицировать как Диана. Хотя до этого писал о себе в мужском роде. Нашествие трансгендров(вроде так это называется) на Лор :).

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

И память все так же течет?

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

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

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

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

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

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

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

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

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

Но как обычно будет «вскукарек» по поводу «скриптуха», не визуальное, хотя в godot даже визуальное решение.

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

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

Проистекающая напрямую из проводочно-квадратного мышления автора.

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

ИМНО скорее проистекающая из банальной неграмотности аффтора.

Если бы он просто С перенес в проводочно-квадратное представление 1:1 то это бы работало. Но ему же захотелось че то добавить от себя, он и добавил…. в итоге у него точка входа неопределена, соответственно трасса выполнения неопределена, о чистых функциях и речи нет - кушайте UB ложкой.

Никто (включая самого ТС-а) не знает какая из функций первой запишет данные в квадратик.

AntonI ★★★★
()

Ща тестирую 17 версию прототипа, если все будет успешно - выложу.

Как у тебя вообще выглядит этап тестирования?

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

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

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

Проистекающая напрямую из проводочно-квадратного мышления автора.

Если вместо квадратов – станции. Вместо проводочков – рельсы и стрелочки. А вместо данных – поезда. То может статься, что ТС просто реализует подсознательное желание играть в железную дорогу.

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

Никто (включая самого ТС-а) не знает какая из функций первой запишет данные в квадратик.

Семафоры будут ближе к 30-ой главе Метапрога.

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

30-ой главе Метапрога.

Шла 30я тема прототипа метапрога. Никто так и не cмог понять кто или что этот метапрог и чем так хорош его прототип.

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

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

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

Шла 30я тема прототипа метапрога. Никто так и не cмог понять кто или что этот метапрог и чем так хорош его прототип.

Зато никто не упрекнёт Метапрога в том, что он не умеет прототипировать. Уже 100-ый прототип по счёту выкатывает ))

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

чем-то не очень сложным в чем можно часть работы проводить средствами «формашлепства»

Я ТСу уже советовал обратить внимание на формошлепальные инструменты, которые как раз делаются визуально и давным-давно отработаны. Но вот парадокс — GUI он почему-то как раз хочет делать программно.

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

Так для Nuklear нету формошлепательных программ. А остальные GUI-библиотеки с ООП или сложные (нудные).

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

Я ТСу уже советовал обратить внимание на формошлепальные инструменты, которые как раз делаются визуально и давным-давно отработаны. Но вот парадокс — GUI он почему-то как раз хочет делать программно.

В чём парадокс того, что он хочет делать GUI адекватно? К тому же все эти формошлепательные инструменты это вендорлок. А программно ты можешь писать в любом редакторе/IDE.

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

Как у тебя вообще выглядит этап тестирования? Ты собираешь какие-то схемы и потом выполняешь программы и сравниваешь результат с правильным?

Да, обычно так и делаю.

Или как-то анализируешь сгенерированный С код?

Я лезу в сгенерированный сишный код только если трансляция с багами и надо дебажить сам транслятор.

Потому что код тех же чисел Армстронга невозможно анализировать, так как там какая-то каша…

На самом деле, его при нужде не так уж и сложно реверсить. Копируешь в буфер обмена имя нужной переменной, на которой, скажем, произошло «спотыкание» компилятора (скажем, metaprog_instance_0_6141407170483023873_8193391242450176001_4168884121694738433_3922132034742304769__variable_2177429585687949313). Имея Метапрог с открытой исходной схемой, щелкаем средней кнопкой (колесом) мыши по Метарпогу - и произойдет открытие нового окошка, где будет выделен блок, где была обхявлена данная переменная. Что-то типа того:

https://postimg.cc/PP5tYpZC

Поиск и выделение идет по номерам блоков подфункций (0_6141407170483023873_8193391242450176001...). Очень помогает понять что транслируется неправильно.

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

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

Что вданном случае понимается под тестами? Тестовые схемы?

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

П о т о м у ч т
х н а п р а в о
ы я ж е л о л ч
н т х я и н е и
з а р в ь т а т

Где ты такое видел в Метапроге?

Вот если бы ты баги в реальном софте чинил или фичи запиливал, можно было бы и гордиться.

Ты недавно признался, что таки скачал прототип Метапрога. Чем не реальный софт?))

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

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

Ты так и не смог эту проблему решить? На чем мы остановились?

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

Где ты такое видел в Метапроге?

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

Чем не реальный софт?))

Ты и сам в это не веришь.

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

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

О, в точку! Разумеется, мне не будет нравиться текствый ЯП в виде регулярных выражений. И не просто текстовый, а еще и брейнфак-подобный. Ужас!

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

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

В любой непонятной ситуации задавай вопросы. Обычно у блоков входы слева, выходы справа. Любой проводок или узел проводков «берет» данные из выхода и «раздает» их по входам других блоков. какой из примеров тебе непонятен?

Ты и сам в это не веришь.

Более чем верю:)

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

заниматься бесплатным образованием дворников

Это ты намекаешь, что можешь на собственном примере показать как пользваться метлой?

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

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

Стадии познания регулярных выражений:

  1. не понимать
  2. чуть понимать
  3. использовать
  4. использовать везде где не надо
  5. норм

Так ты даже первую не осилил.

а еще и брейнфак-подобный. Ужас!

Ну тогда POSIX-regexp ты должен принять. Правда не могие находят их удобными.

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

kostyarin_ ★★
()
Последнее исправление: kostyarin_ (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.