LINUX.ORG.RU

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

 , ,


1

3

Наконец-то настало время для первой прикладной программы на Метапроге - будильника. Чтобы правильно его собрать, нужна последняя версия прототипа Метапрога. Архив включает в себя исходные диагарммы на LabVIEW и скомпилированные exe, которые можно запустить под Wine на линуксе, читайте инструкции из архива с названием вашего языка. Скачать:

https://www24.zippyshare.com/v/xEn1RKAG/file.html

Основная причина выпуска 6 версии - исправление бага с жесткими последовательностями, ведущими к началу цикла. Это исправление вряд ли окончательное, но для трансляции диагарммы будильника сойдет. Если после транслятора из 5 версии прототипа Метапрога сообщение о времени будильника выводилось в цикле каждый раз, то тут - только один раз, в самом начале:

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

Также проект может похвастаться тем, что функцию проигрывания звукового файла в своей основе сделал insw, успешно разобравшись с функционалом прототипа Метапрога. Я лишь добавил дебаги с условными разветвлениями (аналог if...else) и жесткими последовательностями. В получаемом из транслятора сишном коде это выглядит как множество вложенных друг в друга if...else. Проигрывание звука:

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

Сишная трансляция диаграммы будильника (не забудьте sound.wav!):

https://pastebin.com/YAd4J1SN

Почему будильник на константах? С графическим вводом значений пока проблемы: всплыли новые баги с «умными массивами». Исправление будет в будущих версиях. Но в этой версии исправлено несколько других багов: теперь не должно быть проблем с заданием типа массива и индикаторы прогресса закрываются сами после завершения операции.

Переворот массива

Наконец-то удалось первернуть массив из байтов. Для этого пришлось повозиться с диаграммами транслятора-кодогенератора. В 6 версии прототипа Метапрога эта диагармма уже корректно не оттранслируется, планирую выпуск 7 версии, но надо еще поработать над массивами.

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

https://postimg.cc/RJMKXyTB

Если все же что-то неясно - не стесняйтесь спрашивать. Полученный код:

https://pastebin.com/UsY0TZvc

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

Метапрог-прототип, версия 5

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

Тема зависти антиметапрогеров к Вам как новому Линусу Торвадсу и Галилею в одном лице не раскрыта.

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

Безопасность в Rust обеспечивается не во время исполнения, как в Java или Go.

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

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

Думаю, проблема в библиотеке, а не в компиляторе или языке. я бы выкинул regex и rayon вы приходите к той же идеи )

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

В Лабвью почти не нужно чтение мануалов,

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

Может позже, уже с 8 версией, напишу более подробную статью о концепте Метапроге с картинками и видео.

С нетерпением буду ждать.

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

Метапрог онлайн

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

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

неаргументированное я уже давно составил

Ну щас ТС пошлет Вас ко мне в компанию полы мыть;-)

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

Мне кажется Ринат вообще не об этом говорил, а о том что в конечном бинаре уже всего этого быть не должно, ну или я его не понял или не понял вас, но надеюсь понял обоих :)

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

На расширении лабвью естественно, на метапроге пока сложно хоть что-то сделать )

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

Каком еще расширении? На стандартной библиотеке. Как же антиметапрогеры любят блистать невежством - ужас!

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

А также вопиющего невежества антиметапрогеров, помноженнго на ЧСВ и хамство.

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

а о том что в конечном бинаре уже всего этого быть не должно

В конечном бинаре не будет проверок типов, проверок лайфтаймов, и прочего. Но проверка корректности индекса массива будет, так как на этапе компиляции размер массива не известен. :) Можно запросить элемент массива без проверки, но это ансейф уже https://doc.rust-lang.org/std/primitive.slice.html#method.get_unchecked

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

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

А также вопиющего невежества антиметапрогеров, помноженнго на ЧСВ и хамство.


Я на Лабвью прекрасно делаю огромные проекты.

Мне лень гуглить. Я прекрасно программирую на Лабвью и Метапроге, не зная что такое «консистенция».

Императивный, декларативный, функциональный. Lingua Latina non penis canina. Да-да, я прекрасно программирую на Лабвью, не зная значения всех этих заумных словес.

–- Вы успешно притащили в свое поделие одну из самых больших проблем С - ручную сборку мусора.
-– Разве это проблема?

-– Полиграф Полиграфович…
-– Кто такой?
-– Так звали литературного героя которой вылитый Вы.
-– Макулатуру не читаю.

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

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

Большая часть айти-«образования» - не более чем фабрика макак.

ясно на все 100: выразительность текстовых ЯП жестко ограничена текстовым представлением.

Страуструпп отгрохал целый талмуд по ООП. Еще бы, он кандидат наук или как его там. Но я лично считаю эту дребедень лишней и даже вредной. Как говорил Галилей, эксперимент - критерий истины.

Ничего не знаю, я Метапрог ваяю не за деньги (по крайней мере пока что). Линус тоже написал ядро линукса just for fun.

(c) @metaprog

Я всерьез подумываю инициировать написание пьесы на основе Ваших цитат. Прославитесь…

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

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

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

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

Лох-несское чудовище тоже видел после бутылки шотландского виски?

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

вы же все равно никакого кода не показываете

Лабвьюшные исходники можно скачать по ссылке в шапке темы. Или у антиметапрогеров опять галлюцинации?

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

Ну вот и разобрались, кто что имел в виду. Но в любом случае если Ринат будет писать в чистом ансейфе подобно С то и результат будет скорее всего такой же или очень близкий.

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

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

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

Очень хочется доната

наверное стоит написать небольшую аппликуху которая на каждый Ваш комментарий содержащий слова «ЧСВ» «антиметапрогеры» «хамство» и т.д. будет писать ответ содержащий пару Ваших бессмертных цитат. Это будет похлеще Фауста Гете!

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

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

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

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

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

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

Покажите их в нормальном удобочитаемом виде, а не в виде лабвью, тут воров кроме вас нет и любителей старины рыскающих ваш лабвью 2013 года разлива тоже

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

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

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

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

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

«Неприличными словами не выражаться!»(с)

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

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

ТС уже отвечал на этот вопрос. Если коротко - у него ручная сборка мусора (рисуется в диаграмках), и ТС это не считает проблемой (так вот).

Ну в целом такой подход имеет право на существование. Но это ж очевидно error prone (как на русский перевести?), поэтому нужны статические анализаторы. Сишные компиляторы достаточно неплохо справляются, отлавливают многие такие места. Но это ж надо как-то систематически планировать, а не «авось само напишется»…

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

Что-то тут странно. Попробуй добавить в раст версию инструкцию rdrand.

use rdrand::RdRand;

let vec: Vec<String> = (0..100_000)
    .into_par_iter()
    .map_init(
        || RdRand::new().unwrap(),
        |rng, _| rng.sample_iter(&Alphanumeric).take(100).collect()
    ).collect();
[dependencies]
rand = "0.6"
rdrand = "0.6"
RUSTFLAGS="-C target-cpu=skylake" cargo build --release
numas13 ()
Ответ на: комментарий от numas13

Там вряд ли проблема в рандоме, он используется только на этапе инциализации…

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

Ты пытаешься ускорить часть, которая занимает 20 миллисекунд? На фоне полутора секунд общего времени инициализации даже не видно. От итерации к итерации время гуляет гораздо сильнее этих 0,02 секунд.

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

О_О эээ… или Вы тут человек новый, или тролль 80лвл (так толсто что даже тонко)…

Наверное первое. Понимаете, ТС очень специфичен… поэтому он такими вопросами не задается, он уже безумно счастлив что ему не нужно учить текстовые ЯП и неистово стремиться поделиться этим счастьем с миром. Его представления о программировании сформированы на основе травмирующего опыта общения с несколькими студентами факультета информатики, некоторых комментариев Царя и метапрогоматери Дианы (котечки).

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

Я не стебусь, я серьезно;-(

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

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

А я профилировал. Не знаю, зачем вы тут пытаетесь искать причины, тыча пальцем в небо.

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

Это ты про map и fold? Они сворачиваются в простые циклы. Фишка у Rust такая ­— zero-cost abstractions. Или про параллельный обход? Так там ускорение такое же, как и в OpenMP. Просто реализовано внешней библиотекой.

я бы выкинул regex и rayon вы приходите к той же идеи

Использование regex для поиска ускоряет программу в два раза. Rayon ускоряет так же, как OpenMP в C.

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

Там нет прямого обращения к байтам или символам строки. При поиске подстроки в строке сразу есть доступ их длинам. Нет смысла добавлять ещё и проверки. Так значительное влияние bound-checking сомнительно.

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

Мне удалось оптимизировать бенчмарк на Лабвью, в среднем проходит за 8,4 секунд (из них 650 мсек - генерация 100000 строк). Включил параллелизацию выполнения итераций самого «тяжелого» цикла и заменил функцию, делающую поиск по строкам: https://i.postimg.cc/9WFTQF1D/image.png

По памяти: 117 мб занимает само Лабвью 2013 (32-битная версия на виртуалке с виндой ХР), при выполнении бенчмарка добавилось 7 мб. Процессор грузится на все 100 благодаря параллелизации выполнения.

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

Причем решение непереносимо на UTF. Судя по всему

Переносимо. UTF-строку конвертишь в лабвьюшную (есть функции) и работаешь с ней. Прототип Метапрога конвертит строки-константы в UTF-8 и с кириллицей на линуксе дружит.

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

А я профилировал. Не знаю, зачем вы тут пытаетесь искать причины, тыча пальцем в небо.

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

Это ты про map и fold? Они сворачиваются в простые циклы. Фишка у Rust такая ­— zero-cost abstractions.

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

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

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

Вы не подумайте, я прекрасно знаю что Си на порядки производительней многих языков - и знаю это на собственном опыте. Но есть одно но - разработка на нем во много раз дольше и требует бесконечного терпения и внимательности. Нет не так -ВО МННООГГОО раз дольше.

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

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

Вы серьёзно? Речи про параллельное исполнение в исходном задании не было. Потому и я делал все в один поток. Но даже если так - всего в два раза? То есть лабвью генерит такой не оптимальный код что кое как обогало старичка питона? И да в задании чётко было озвучено - строка сразу utf И да прекратить тыкать мы с вами не знакомы.

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

Речи про параллельное исполнение в исходном задании не было

Но и о его отсутствии тоже.

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

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

в задании чётко было озвучено - строка сразу utf

Латиница в UTF-8 однобайтная, а в задании была только латиница.

прекратить тыкать мы с вами не знакомы

Да ну, к чему такая надутая серьезность?

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

при выполнении бенчмарка добавилось 7 мб.

1e5*100/1e6 = 10

т.е. 100 тыс строк из 100 символов должны занимать как минимум 10Мб, а не 7 (и это без учета накладных расходов). Если бы Вы знали хотя бы таблицу умножения (или знали что такое порядок и умели складывать: 5+2-6=1) то Вы бы это поняли - но для необучаемых дворников это слишком сложно.

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

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

И много новых за последнее время появилось?

И, кстати, вы с котечкой решили проблему с утечкой памяти в хакнутом вами нуклеаре?

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

Sysinternals Process Explorer (кстати, достойного аналога под линукс не знаю) так и показал. В Лабвью может было свободно 3 или больше мегабайт, которое оно не освободило после каких-то операций, оставив их себе, в руезультате чего аллоцировать пришлось дополнительно только 7 мегабайт.

Сейчас я еще раз запустил тот же бенчмарк - так Лабвью даже освободило (!) 4 мегабайта. Как Носитель Сакральных Знаний и проФФесор сферического матана в вакууме это объяснит?

Видно, сборщик мусора (или что там) прочухался. В метапроге я лучше сам буду управлять памятью:)

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

И, кстати, вы с котечкой решили проблему с утечкой памяти в хакнутом вами нуклеаре?

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

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

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

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

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

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

качай ее и показывай где и в какой программе утечка.

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

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

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

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

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

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

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

Зачем мне что-то качать, если без скачивания чего-либо показал тебе, в чем у тебя косяк

Конкретики ноль. В какой диаграмме, в какое месте?

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

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

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