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

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

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

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

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

Так речь шла о корпорастах, а не копирастах. Не путайте ;)

Тащемта, корпорация вполне может заниматься некрофилией, если финансово в этом заинтересована. Даже майки таки продолжают саппортить снятые с поддержки вёнды, но за отдельное бабло, на порядки превышающее стоимость лицензий для простых смертных.

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

Лет 20 назад, когда это всё разрабатывалось, о безопасности ещё так сильно не парились.

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

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

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

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

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

без программ от корпораций как жить?

Тут добрые полфорума этим занимаются ;)

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

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

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

Экран ты можешь не любить,
Торук Макто любить обязан.

Чернышевский

Вообще символы обычно экранируются. Некоторые думают, что это ппц, однако пробелма залихватски решается подсветкой синтаксиса.К тому же, как ты предлагаешь экранировать сразу [:, то тебе нужен не просто экран, а Торук Макто. Чтобы сразу два символа.

Я вообще предлагаю расширить POSIX-регулярки и на их основе сделать meta-POSIX-регулярки. С лозунгом – «зайдёт даже школьнику». И добавить туда вместо обычного экрана \ следующее:

  • [:ikran:] – для экранирования одного символа
  • [:toruk_makto:] – чтобы сразу два

Ну, что скажешь? Годиться?

Не стоит забывать, что текст может быть вообще любым. Т.е. фактически всё что ты можешь применить в регулярке – всё что может быть в тексте.

Есть конечно и вариант клепать всё из блоков. Например вместо aa?b? делать… Эм. Да нет. Нету варианта.

Ну глянь Grok, например. Ещё. Но что-то лучше ты всё-равно не придумаешь.

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

Есть конечно и вариант клепать всё из блоков. Например вместо aa?b? делать… Эм. Да нет. Нету варианта.

Почему нет?

                                  b
                          ╭───────────────╮
          ┌───┐  a  ╔═══╗ │               │  ╔═══╗
start ───►│   ├──╮  ║   ╟─╯               ╰─►║   ║
          └───┘  ╰─►║   ╟─╮               ╭─►║   ║
                    ╚═══╝ │  a  ╔═══╗  b  │  ╚═══╝
                          ╰────►║   ╟─────╯
                                ╚═══╝

Будет прикольно посмотреть, в какой ад превратятся схемы для регулярок посложнее. Я как-то пробовал рендерить схему регулярки, проверяющей формат IP-адреса (^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$). Это было эпично.

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

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

+----------+------+-+
 \         >######>##\
  > a  +---+##+---+###>
 /     > a >##> b >##/
+------+---+--+---+-+
mertvoprog ()
Ответ на: комментарий от i-rinat

Я как-то пробовал рендерить схему регулярки, проверяющей формат IP-адреса (^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$). Это было эпично.

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

Вот в Go, напрмиер, ParseIP занимает 151 строку + ещё одна функция, не включённая в этот расчёт.

А регулярка будет примерно такой

	h.Must("IPV6", `((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?`)
	h.Must("IPV4", `(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))`)
	h.Must("IP", `%{IPV6}|%{IPV4}`)
kostyarin_ ()
Ответ на: комментарий от kostyarin_

регулярка будет примерно такой

Это вообще люди писали? Что-то не уверен.

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

Видишь там в блоках одинарные и двойные границы? Они важны. Ты их почему-то выбросил.

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

Это вообще люди писали? Что-то не уверен.

И там целая папка таких. Но IPv6 – это по моему перебор. Проще в двжок регулярки добавить [:ip:], [:ip4:], [:ip6:] и [:email:], что сильно всё упростит. Например в мета-POSIX-regexp-engine.

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

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

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

Да и вообще, у Вас блоки, похоже, пустые. А символы задаются на рёбрах графа, как в графах конечных автоматов. Потому и громоздко.

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

Чем важны?

Двойная граница узла на схемах конечных автоматов традиционно означает принимающее состояние.

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

Торадиции конечных автоматов — это очередные «талмуды» :P Надо проще и нагляднее, а не на дідов ориентироваться.

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

Да-да, давай притворяйся, что простенькую регулярку не понял, ага.

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

Мы-то поняли. А нуб без читания талмудов не поймёт. Тем более, у регулярок куча разных диалектов.

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

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

Более того, нубу даже нельзя объяснить словами, потому что в понимании слов он тоже нуб. Жестами ты ему тоже ничего не объяснишь, потому что в понимании жестов он тоже нуб.

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

никакого опыта не имеет

Даже по дорогам ездить? Которые сходятся и расходятся.

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

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

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

Каждые новые окошки сильно ругают на выходе.

Да их и после выхода ругают, и спустя 10 лет ругают. Наверное, все же дело в форточках, а не в злых языках?

Как и с прошлыми версиями все дело в привычке.

Можно привыкнуть на руках ходить, но зачем?

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

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

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

Да их и после выхода ругают, и спустя 10 лет ругают.

Ну да бывают такие люди которые всем недовольны. Остальные используют по мере надобности.

Можно привыкнуть на руках ходить, но зачем?

Ко всему приходится привыкать кроме совсем уж базовых вещей. На руках мне ходить нет необходимости.

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

Ко всему приходится привыкать кроме совсем уж базовых вещей

Даже к тому, что сделано «под себя»?

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

Почему это? Метапрог, по сути, такой штукой и является, в крайне запущенной стадии, разве что до создания собственной ОС (именно создания, а не перекрашивания бубунт) не дотягивает.

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

И в результате ТС очень сильно привык к Labview. Так что без привычки никак.

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

Господа, что там, пришли уже к консенсусу, что метапрог - бездарная скриптуха, или ТС все еще сопротивляется? TL;DR

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

Но на старых меня ХР пока устраивает. Меньше жрет чем нынешние дистры линукса

Так XP, простите, надо сравнивать не с «нынешними дистрами», а с антиксом каким-нибудь.

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

Я ХР сравниваю именно с нынешними дистрами потому что стоит вопрос что использовать вместо нее именно сейчас, а не в 2001 году.

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

Ядро ОС на Метапроге - почему б и нет? Ядро линукс сделано на Си, то есть его рано или поздно можно будет автоконвертировать в набор схем на Метапроге и наконец-то отказаться от текстового Си в пользу графического программирования.

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

Даже по дорогам ездить? Которые сходятся и расходятся.

В точку!

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

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

Проще в двжок регулярки добавить [:ip:], [:ip4:], [:ip6:] и [:email:], что сильно всё упростит

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

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

Я ХР сравниваю именно с нынешними дистрами потому что стоит вопрос что использовать вместо нее именно сейчас, а не в 2001 году.

XP уже потихоньку всё.

Последние видеокарты которые поддерживает Windows XP:

Geforce GTX 780ti или 960(970 и 980 не поддерживаются)

AMD R9 290x и вообще вся 200 серия …

Последние процессоры которые официально поддерживают Windows XP:

Intel: Ivy Bridge

AMD: FX

Так что Windows XP в 2020 не очень, так как проблемы есть не только с новыми программами, но и с железом…

Да и на современных процессорах Windows XP будет медленнее Windows 10, даже если бы они могли запустить XP.

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

Будет прикольно посмотреть, в какой ад превратятся схемы для регулярок посложнее. Я как-то пробовал рендерить схему регулярки, проверяющей формат IP-адреса (^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$). Это было эпично.

Специально для тебя:

https://i.postimg.cc/0jSLNVpW/image.png

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

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

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