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 (всего исправлений: 2)

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

Ну дак по Вашей же логике Метапрога нет - он появится в будущем. Ибо не может существовать среды программирования без ветвлений. С другой стороны есть некий прототип. То есть по факту - как бы есть и как бы нет. Будьте же аккуратней в суждениях. И да я не антиметапрогер - считаю что любой самостоятельный проект заслуживает некоторого уважения.

И да на данный момент результаты бенчмарков таковы, что Ваш прототип на лабвью, по вашим же собственным словам задачу отрабатывает секунд 30. Причем решение непереносимо на UTF. Судя по всему. То есть сливает даже пайтону, который в моей реализации отрабатывался в среднем секунд за 15. Который в общем то тормоз и я это прекрасно знаю. Собственно отсюда вывод - скриптуха это именно Лабвью?

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

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

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

В ходе мозгового штурма во первых была выявлена неоптимальность самих SQL запросов, но самое главное была найдена ЛОГИЧЕСКАЯ ошибка в процедурах. И все это удалось сделать в течении четырех часов. Получилось бы такое на Си? Вероятно получилось бы, если бы в распоряжении была пара высококлассных спецов - вот только где их взять еще вчера и срочно?

Собственно решение было быстро запилено на жабе и оно прекрасно отработалось.

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

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

Да. Наводишь мышку на переменную и IDE показывает тип который вывел компилятор: https://imgur.com/a/606ldxW

К сожалению, «не догоняю»

Функции f(x) и g(x) делают одно и то же. С оператором pipe мы не объявляем переменных для временных результатов.

    let f x = 
        let result1 = f1 1 x
        let result2 = f2 2 result1
        let result3 = f3 2 result2
        f4 3 result3

    let g x =
        x
        |> f1 1
        |> f2 2
        |> f3 2
        |> f4 3
   
fsb4000 ★★★★★
()
Ответ на: комментарий от metaprog

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

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

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

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

Какие проблемы С решает вас кружочко-палочковый смехапрог? Он не делает ничего кроме как переводит С в кружочко-палочковый вид и добавляет неудобный способ ввода программ мышкой (простите великодушно, удобный для вас). Все еще тот же С, ну точнее его кастрированное вами подмножество, с плохо написанной прокладкой поверх него.

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

Ну ты и извращенец! Небось ещё и купил супер-убер-премиум-гей аккаунт на порнхабе.

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

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

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

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

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

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

Дефолтное оформление, которое делает за меня современная IDE, вполне нормальное. Я не забочусь ни об отступах, ни (в большинстве случаев) о закрывающих скобках. При использовании уже объявленных переменных и функций IDE подсказывает при наборе их имена. Новый класс IDE тоже делает сама, у меня спрашивает только его имя и имя предка. Объявив прототип метода в классе, я тут же могу сгенерировать скелет его реализации (это я про C++, в Java этого не нужно).

Да, единственно, что — имена объектам надо давать понятные и при необходимости ставить комментарии.

Но ведь и твою схему на метапроге я понял только благодаря комментариям, иначе было бы ничего не ясно. И я очень сомневаюсь, что схему без имён и комментариев по понятности можно будет сравнить по понятности с текстом программы, в котором, возможно даже ни одного комментария нет — но функции и переменные названы по-человечески.

Это в Лабвью я могу себе позволить безалаберность в оформлении

И с ER-диаграммами можно позволить безалаберность до определённого момента. Потом за безалаберность приходится платить.

Ну это ж совершенно не похоже на логику в Лабвью, так ведь?

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

Не говоря уж о том, что написать слово for — это куда проще, чем тащить из панели инструментов квадратик (или два?), обозначающие цикл. Да цикл я могу отбарабанить, не отрывая пальцев от клавиатуры, я всегда знаю, под каким пальцем у меня какие клавиши. А вот мышью в панель инструментов, а потом на холст придётся целиться постоянно, наматывая километры запястьем и всматриваясь в экран. Мышь — это указательное устройство, ей очень хорошо обводить контур в графическом редакторе или расставлять элементы в модели. Но вот для отдачи компьютеру заранее определённых команд мышь — так себе выбор, это из разряда погрузки самосвала совочком. Работать надо не 24 часа в сутки, а головой!

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

Ну с твоей организацией работ — конечно в настоящем, прототип ведь всё равно делается на выброс. Другое дело, что у меня сама эта организация вызывает отторжение, но об этом я уже писал.

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

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

Очередной ПУНД. Заведу я таки файлик с Вашими цитатами…

Если это метапроговские функции (как на скрине) - то они инлайнятся: проходятся транслятором так, как будто они - всего лишь часть большой диаграммы.

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

Только почему-то ценой замедления в разы, десятки, а то и сотни и тысячи раз в сравнении с Си. По-другому авторы текстовых ЯП не могут?

Факт дня - самый быстрые в мире числодробилки пишутся на связке плюсы/питон с широким применением метапрограммирования (номального, а не такого как у Вас). Надеюсь Вы занесли меня в ЧС и никогда не прочитаете это сообщение - иначе Ваш бедный мосг действительно взорвется и мы будем лишены источника роскошных лулзов…

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

Числодробилки ещё и на Фортране пишут, не забывай. У нас на кафедре Фортран во все поля, один я хипстер, на новомодных плюсах пишу)

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

С++ это костыль гиганских масштабов над С

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

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

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

У вас там кто-нибудь пытался сравнивать производительность числодробилок на C++ и Фортране? По идее, у компилятора Фортрана больше возможностей для оптимизации, ведь в языке больше ограничений по сравнению с C++.

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

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

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

Нет, не пытались. Фортран знают все остальные, кроме меня. Ну и на крестах только я пишу, остальные не умеют (я тоже не умею, но в меньшей степени).

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

Так это как раз и есть нужные предусловия для проверки: сравнивать решения специалистов по каждому из языков.

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

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

Здесь нет ни одного антиметапрогера (если говорить про отношение к проекту). Любой нормальный человек зашедший в эти треды эволюционирует от состояния «ось яка цедулина» до «аффтор необучаемый тепил которому метлу доверить боязно а его поделие самый говнокодистый говнокод из всех говнокодов написанных человечеством». Эта эволюция неизбежна, посмотрим как быстро ТС пошлет Вас мыть полы, хе-хе.

У это проекта две проблемы:

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

  • большая - аффтор проекта, который необучаемый дворник.

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

Было бы время бенчмарки проводить. Есть пачка задач, их раскидывают, что-то мне, что-то другим. На бенчмарки гранты не выделяют)

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

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

Речь о HPC конечно, считать однократный интеграл методом прямоугольников по 1000 точек примерно одинаково и там и там.

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

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

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

Тупо ссылки вставлять не проблема, хотя ты можешь использовать поиск по цитате. Кстати, прописывать в тегах кликабельность произвольного слова - пальця отвалятся. Даже стрелочки > копипастить для цитат - та еще морока. Когда на ЛОР наконец завезут проставление тегов по выделению и кнопкам? На форумах это еще в девяностых было.

Потрудитесь сами собирать вашу «доказательную базу» хотя то, что вы там накидали, вряд ли доказывает что-то, кроме того что вы очередной раз подтвердили что являетесь человеком с улицы который ничего не знает, но мнение имеет. По «пальцям» могу сказать одно, вы тут строчите каждый день множеству человек свои оправдательные бредовые писульки, до сих пор не отвалились, а как дело доходит до программирования отваливаются. Просто уже признайтесь хотя бы себе что вы бездарь просто, нам можете не признаваться. Опять у вас корона съезжает на бочок, вам никто не обязан ничего завозить, слишком много чести + это никому кроме вас видимо не надо, как и смехапрог в общем-то…

Даже в этой теме бенчмарки показали, что плюсы сливают сишке в разы.

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

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

У царя сишечка головного мозга, нашли кого кумиром делать, были бы вы чуть поумнее может быть и догадались почему ансейф есть и для чего он нужен, но ладно так и быть подскажу… Потому что любая работа приближенная к железу это и есть ансейф, не существует альтернатив, либо полная свобода и ансейф, либо попытка удержать сейф, но и свободы такой уже нет. Ансейф это не прерогатива С, это прерогатива архитектуры, а будет ли поверх этой прерогативы С, Rust или что-то другое это дело третье. А по большому счету у царя просто пердак горит что появился язык который если все сложится удачно (не факт что сложится кстати) выкинет на помойку его С и С++ как устаревшее «не нужно» и ему придется переучиваться чтобы быть на плаву.

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

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

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

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

Отличный тормознутый интерпретируемый недоязык с «гадай на кофейной гуще какой где тип».

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

Я могу сравнить его с Си, как бекендом Метапрога

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

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

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

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

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

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

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

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

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

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

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

"Идея становится материальной силой, когда она овладевает массами "(c)

В этом смысле Rust, D и пр. имеют крайне низкие шансы.

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

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

Так все и есть в общем-то, итеративно-костылестроительный подход сделал из обезьяны человека c c++

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

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

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

Насколько я понимаю, что бы нашлась замена плюсам нужно что бы собралось достаточно народу и запилило для нее оптимизирующий компилятор не хуже чем gcc?

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

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

Я не знаю, зачем пейсбук заюзал d. компиляторы для него есть и на основе gcс, на основе llvm. Оптимизации там докручивать можно уже, ну и opt из llvm ir уже это делает. Другое дело, что уже даже c++11 опередил D, а так был бы полезный язык.

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

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

А шо делать… ;-(

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

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

abcq ★★
()

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

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

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

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

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

Все кто это понял теперь остро хотят это развидеть, там лютейший говнокодище…

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

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

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

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

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

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

Rust получился на удивление тормозной. Либо с поиском строк там всё печально, либо я споткнулся о что-то очевидное.

extern crate rand;
extern crate rayon;
use rand::Rng;
use rand::distributions::Alphanumeric;
use rayon::prelude::*;
use std::time::Instant;
use regex::Regex;
use regex;

fn main() {
    for _ in 0..10 {
        let timer = Instant::now();
        let vec: Vec<String> = (0..100_000)
            .into_par_iter()
            .map_init(
                || rand::thread_rng(),
                |rng, _| rng.sample_iter(&Alphanumeric).take(100).collect()
            ).collect();

        let needle: String = rand::thread_rng()
            .sample_iter(&Alphanumeric)
            .take(20)
            .collect();
        let needle_regex = Regex::new(&regex::escape(&needle)).unwrap();

        let mut overall_count: u32 = 0;
        for _ in 0..1000 {
            let count: u32 = (&vec)
                .into_par_iter()
                .fold(|| 0u32, |acc, hs| {
                    (match needle_regex.find(&hs) {
                        None => 0u32,
                        _ => 1u32,
                    }) + acc
                }).sum();
            overall_count += count;
        }

        println!("Found {} instances of {} in {:.2} secs", overall_count, needle,
                 timer.elapsed().as_secs_f64());
    }
}
$ cargo build --release && /usr/bin/time target/release/bench 
    Finished release [optimized] target(s) in 0.05s
Found 0 instances of kuqJDbFoUbvqLA09HZFU in 1.61 secs
Found 0 instances of 5Dgv8nu28zcTfSjs05EU in 1.74 secs
Found 0 instances of jHAzLaAaiZJLFlV4H2L9 in 1.54 secs
Found 0 instances of 70GVw4r9X24SDkbpPjEV in 1.62 secs
Found 0 instances of hqrPmNbzwAkQEN9OYSCn in 1.56 secs
Found 0 instances of jZ6VnEUjnA4E0bwVOZgJ in 1.60 secs
Found 0 instances of qYrQUL66ILHzTtrSxglp in 1.53 secs
Found 0 instances of 0zdbtu2wox2Z7TikzVQL in 1.61 secs
Found 0 instances of nhGOgI4jnLY8bHuJVYNs in 1.58 secs
Found 0 instances of TY7UNaB5uGGm8c6yayNX in 1.55 secs
117.12user 2.30system 0:15.96elapsed 748%CPU (0avgtext+0avgdata 21232maxresident)k
0inputs+0outputs (0major+4685minor)pagefaults 0swaps

Если строку искать не регуляркой, а очевидным hs.contains(&needle), то получается ещё медленнее:

$ cargo build --release && /usr/bin/time target/release/bench 
    Finished release [optimized] target(s) in 0.06s
Found 0 instances of IvMT72SZzG96Wt4kNZGD in 2.99 secs
Found 0 instances of 11IITkeoXVmwoFv6AHgN in 2.99 secs
Found 0 instances of sQryUfk8f8wRxgB90hbf in 3.08 secs
Found 0 instances of FGesvJiRKpuhKsOSI5ju in 3.31 secs
Found 0 instances of ZMJQzVfTJYDzLV1WCcUx in 3.19 secs
Found 0 instances of cfrcBtrsI80Xyo9yBgDX in 3.23 secs
Found 0 instances of Kq2bySom9PwmHnI0PxMh in 3.90 secs
Found 0 instances of k6I6kqyF9r4walpGlUvq in 3.41 secs
Found 0 instances of Rfpp88TFzP2x1lXh43d0 in 3.20 secs
Found 0 instances of mUMjCiMrJNJwQ9M80bFg in 3.15 secs
228.77user 3.58system 0:32.49elapsed 715%CPU (0avgtext+0avgdata 20560maxresident)k
0inputs+0outputs (0major+5044minor)pagefaults 0swaps
i-rinat ★★★★★
()
Ответ на: комментарий от provaton

где все течет по проводкам», все понятно и приятно

А под музыку да с анимациями так вообще чудесно.

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

Там один СУВТ чего стоит…

У ТС даже концепции толком нет, то у него переменные на жгктиках, то для массива они уже в квадратиках. Генерация имён переменных это лютый рандомный трындец. Все сваливается в main.

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

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

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

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

Приветствую нового участника моих тем, надеюсь адекватного. С адекватными людьми я всегда общаюсь адекватно, а вот с неадекватными - соответственно.

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

Разумного там, к сожалению, мало. Большинство антиметапрогеров, вообще ничего в Метапроге не понимая, выдумывают свой Метапрог и его критикуют. Чего только стоит AntonI с его глупостями про СУВТ и Метапрог как AST (хотя это далеко не так). Более-менее адекватный ответ на его чушь дал Котечка и AntonI вместе с другими антиметапрогерами даже не нашел что ответить на это кроме глупостей. Там есть закос под «царский» стиль (вполне уместный с такого рода собеседниками), но в основном чисто техническая аргументация:

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

В целом, чтобы более-менее адекватно оценить прототип Метапрога, надо его скачать и запустить. Если что, я готов помочь, обращайся в Метапрог онлайн (если есть проблемы с запуском - на ЛОРе).

Хотел бы попросить выкладывать больше скриншотов и видео, как работы метапрога, так и его сорцов на лабвью.

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

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

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

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

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

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

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

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

Нет, не ожидаемо. Безопасность в Rust обеспечивается не во время исполнения, как в Java или Go. Это всё обрабатывается во время компиляции. Внутри исполняемого файла проверок уже и не оставляют.

Тут дело в реализации функции поиска строки. Условия задачи позволяют уверенно считать, что сложность должна линейно расти с увеличением длины строк. Но если я увеличиваю размер строки в 10 раз, время выполнения растёт только в ~5 раз. Там явно какие-то значительные накладные расходы на каждый поиск, и они складываются. Думаю, проблема в библиотеке, а не в компиляторе или языке.

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

Да, массивы и строки там достаточно медленные, потому что bound checking. Можно попробовать использовать with_capacity при инициализации векторов и строк, выкинуть район и переписать вручную на тредах, но думаю там основная проблема именно в том, что на каждое обращение к массиву идет проверка корректности индекса.

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

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

bounds checking возможен только в рантайме.

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

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

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

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

чтобы более-менее адекватно оценить прототип Метапрога, надо его скачать и запустить.

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

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

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

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