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)
Ответ на: комментарий от abcq

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

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

встретите царя поинтересуйтесь у него пишет ли он на чистом С или все же на С++, будете удивлены

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

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

То же самое делает почти любой нынешний ЯП.

делать вид как будто вы как минимум уже разработали хотя бы компилятор С не говоря уж о чем-то более удобном

Я ни разу не скрывал, что использую готовые компиляторы Си, в чем проблема?

а на деле вы даже свой Лабвью скорее всего не изучили как следует, а ведь он даже не язык

Ну не текстовая форма представления и что?

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

Стоп. Мне казалось в LabView строки не юникод. А это условие теста. Я ошибаюсь?

Для латиницы юникод полностью соответстует однобайтовой кодировке.

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

UTF-8 (стандарт де-факто) соответствует.

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

В гугл название функции мышкой скопипастить религия не позволила

Он же объяснил, как относится к гуглу и книгам. И ещё раньше — «я пришёл софт писать, а не учиться».

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

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

Нормальная среда программирования вообще не должна требовать гугления. И Лабвью не требует, исключение - редкие случаи типа поиска новых библиотек. И то когда нашел, скачал и поставил - гугл дальше не нужен. Почему в тексовых ЯП все не так???!!!

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

Засада в том, что почему-то nkc_shutdown (содержащий SDL_Quit) при следующем открытии окошка не полностью уравновешивается nkc_init. Почему?

Ну либо ты опять где-то накосячил, либо автор Nuklear+, либо котечка, когда пытался «улучшить» Nuklear+.

Вообще, зачем init и shutdown вызывать несколько раз? Тут глянул примеры: при старте приложения init, по завершению shutdown. Никаких многократных вызовов.

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

но ничего лучше Лабвью никто мне так и не показал

Тебе показали (просто для примера) MyOpenLab, которая почти наверняка хуже Лабвью по фичам, но лучше тем, что она опенсорсная, и всё нужное для метапрога можно было бы допилить. Но всё упёрлось в то, что ты не хочешь подучить Java (что совсем не rocket science для человека, знающего Си).

А между тем подучить Java тебе бы совсем не помешало, поскольку и для будущего метапрога могут оказаться области, где будет оптимален бекенд именно на ней, и объяснять, чем метапрог лучше Java, тебе наверняка придётся…

Я это, правда, уже 41 раз объяснял, но могу и 42-й повторить.

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

Как запустить пример на F#? Дай плиз краткую инструкцию, хочу иметь бенчмарк именно на своей машине для объективности.

  1. Установить DotNet Core SDK: https://dotnet.microsoft.com/download (вроде в репах линукса тоже должен быть, поищи в своём пакетном менеджере если линукс)

  2. Открыть в консольке какую-нибудь папку и напиши:

dotnet new console -lang "F#" -o App
  1. В созданной папке App открой файл Program.fs и замени код на код из Метапрог-прототип, версия 6 + будильник на Метапроге (комментарий)

cd App
dotnet build -c Release
  1. Возможно будет не netcoreapp3.1, если у тебя другая версия .Net Core…
cd bin\Release\netcoreapp3.1
.\App.exe
fsb4000 ★★★★★
()
Ответ на: комментарий от metaprog

Разве это (сборка мусора) проблема?

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

И не напишете, потому что Вы необучаемый дворник.

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

Ну вот зачем здесь последний абзац? Достаточно было написать

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

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

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

Ну либо ты опять где-то накосячил, либо автор Nuklear+, либо котечка, когда пытался «улучшить» Nuklear+.

Котечка ничего не менял, я тоже, так что косяки именно в Nuklear+. И если в Nuklear+ есть функции с косяками - я предпочту переделать их на Метапроге.

Вообще, зачем init и shutdown вызывать несколько раз? Тут глянул примеры: при старте приложения init, по завершению shutdown. Никаких многократных вызовов.

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

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

Вот тебе, @liksys, и все твои потуги с O(n). Обо всяких там теориях управления сложностью алгоритмов уместно будет говорить тогда и только тогда, когда их выполнение будет предельно быстрым. Питон тут сливает подчистую.

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

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

Для REPL я в Visual Studio просто выделял код и нажимал Alt Enter, тогда запускался интерпритатор…

Для Linux и VS code тоже так можно вроде.

Вот нашёл статейку, почитай её сначала если возникнут проблемы

Там описан вариант сборки с Mono:

https://habr.com/ru/company/microsoft/blog/343864/

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

Ну вот зачем здесь последний абзац?

Чтобы, унизив оппонента, почесать свое ЧСВ и прикрыть свою собственную ущербность и неспособность ответить по существу.

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

Как на говно:)

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

он в модуле random который входит в Стандартную Библиотеку. Это означает что у вас что то завалено. Чуть позже проверю еще на паре тачек

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

Мне совершенно ультрафиолетово как на меня смотрит ТС. Поверьте моему двадцатилетнему преподавательскому опыту, это существо ничему научить невозможно, оно безнадежно.

Его темы не более чем источник лулзов и место для общения с хорошими людьми.

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

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

Выведенное время - это общее время работы программы.

Пустой список на выходе по факту означает что он в 100 000 сгенеренных строк не находит совпадения по сгенеренным подстрочкам из 20 символов.

И это так и должно быть. Вероятность иного крайне мала.

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

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

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

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

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

Ничего не поняли. И не поймёте потому что… ну Вы в курсе.

AntonI ★★★★★
()
Ответ на: комментарий от fsb4000
0 strings matches, time = 9633.039600
0 strings matches, time = 9119.798900
0 strings matches, time = 9724.511900
0 strings matches, time = 8639.456400
0 strings matches, time = 8980.226900
0 strings matches, time = 9902.075400
0 strings matches, time = 8811.305300
0 strings matches, time = 9644.501000
0 strings matches, time = 8877.614400
0 strings matches, time = 10144.110200

Да, не такая убогая скриптуха как пистон, но все же сишке сливает в разы.

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

UTF-16 не соответствует а вот UTF-8 таки да, соответствует. Ну и есть еще одна неочевидная вещь - вот код который я приводил, он полностью применим и к кирилице например. Я проверил. А вот реализация на лабвью например не потребует ли переработки для других языков?

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

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

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

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

Сделаю как только это будет возможно.

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

так что косяки именно в Nuklear+

Нет.

Чтобы открывать и закрывать кучу разных окошек.

Эта библиотека не предполагает такого: одно окно для всего приложения (холст), все остальные «окна» «рисуются» на этом холсте средствами библиотеки. Посмотри скриншоты примеров нуклеара, посмотри, как сделан интерфейс Blender 3D.

Но, если очень хочется, то можно. Но тебе придется изрядно перелопатить код нуклеара и создать пару функции для создания окон ОС (типа nk_create_window – захватываем ресурс) и для обработки события закрытия окна (типа nk_free_window – освобождаем ресурс).

То, что ты сделал сейчас (многократный вызов init), 99.9% ведет к утечке памяти.

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

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

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

Сложность важна для масштабируемости.

Вот пусть код на С быстрее кода на питоне в 10 раз. Вроде бы много, но это константа.

Пусть у нас есть абстрактный алгоритм с O(n^2) на С который работает на текущих данных так же быстро как хитрый алгоритм на Python c O(nlogn)

Но если наши данные увеличатся в 10 раз. То скорость алгоритма на С упадёт в 100 раз, а скорость алгоритма c nlogn упадёт всего в ~30 раз…

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

Ты пишешь что не любишь текстовое программирование. Его никто не любит:) Поэтому и рулят языки где нужно меньше писать. Сравни количество строк на С и python.

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

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

Учить имеет смысл только тех кто сам хочет учиться. Вы к таким не относитесь, Вам тут никто ничего не должен.

Иди мыть полы.

Это Ваша работа мечты?

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

То, что ты сделал сейчас (многократный вызов init), 99.9% ведет к утечке памяти.

Боюсь он не знает что это.

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

Боже упаси меня связываться с поделиями M$

Формально это независимый проект развиваемый F# Software Foundation

http://foundation.fsharp.org/

Проект под лицензией MIT: https://github.com/fsharp/fsharp

В общем зависит от MS примерно как Rust от Mozilla.

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

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

Наконец-то адекватный ответ по теме нужности теории сложности алгоритмов.

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

Тогда на кой черт вообще динамическая типизация?

Пусть у нас есть абстрактный алгоритм с O(n^2) на С который работает на текущих данных так же быстро как хитрый алгоритм на Python c O(nlogn)

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

Да и скрипты норм для прототипа

Вот и я прототип Метапрога делаю на Лабвью, на чистой сишке я б грохнулся писать, да и вообще я Си только генерирую, вручную на нем я не пишу.

Ты пишешь что не любишь текстовое программирование. Его никто не любит:) Поэтому и рулят языки где нужно меньше писать. Сравни количество строк на С и python.

Пора ломать эту систему. На Метапроге можно собрать программу, написав ноль строк текстового кода.

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

Можешь посмотреть уточнить? Мне почему-то кажется что нет, раз nkc_init не уравновешивает SDL_Quit из nkc_shutdown. Или дело не в этом?

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

Учить имеет смысл только тех кто сам хочет учиться. Вы к таким не относитесь

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

Иди мыть полы.

Это Ваша работа мечты?

Нет. Это намек на твою некомпетентность как преподавателя и программиста.

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

Мне почему-то кажется что нет, раз nkc_init не уравновешивает SDL_Quit из nkc_shutdown

Все там нормально. А слабо в исходники самому заглянуть?

Или дело не в этом?

Повторяю для прапорщиков.

Use this function to clean up all initialized subsystems.

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

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

Так-то при прочих равных условиях пистон всегда будет сливать.

Уже отвечали, но напишу ещё раз, может они были в игноре… Есть задачи которые не загружают CPU.

Вот например мифический текстовый чат. Пусть на С он выводит текст пришедший от собеседника за 0.001c, а на python за 0.1с. Пользователь всё равно не заметит никак. Потому что большую часть времени он ждёт пока собеседник напечатает ответ.

И то что памяти будет 30MB вместо 10MB пользователю тоже всё равно, так как у него 8000MB, а занятно лишь 2000…

Поэтому в задачах на I/O производительность не важна, важно лишь удобство языка, а для большинства чем меньше печатать тем удобнее язык.

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

Боюсь он не знает что это.

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

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

Не хочу, поскольку ты неспособен доказать нужность твоих знаний.

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

на развернутый ответ Котечки ты вообще слился

Никто не обязан комментировать ахинею грбоэлектриков.

Это намек на твою некомпетентность как преподавателя и программиста.

Вы не в состоянии оценивать чью либо компетентность как преподавателя и программиста, Вам про это говорили 100500 раз самые разные люди - но Вы не способны понять даже этого. Потому что Вы необучаемый дворник (или поломой?)

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

Все ещё проще, если метапрога зависла - ребутни компьютер. Если метапрога зависла не досчитав - добавь памяти.

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

Пора ломать эту систему. На Метапроге можно собрать программу, написав ноль строк текстового кода.

При условии что эта программа будильник. Если программа не работает обратитесь к метапрогоматери Диане

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

А слабо в исходники самому заглянуть?

Слабо. Мне и так есть что делать, а Котечки пока что нет.

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

Чем его уравновесить?

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

не писать пока он в бане

Приходит мужик к ЛОРу и выкладывает член на стол. Распухший. Ну ЛОР говорит:

- это Вам к урологу!

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

- Это Вам к психиатру!

- Нет, погодите! Перед тем, как ударить все кричат: «Ааааа!». Вот этого «Ааааа!» я не слышу.

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

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

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

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

Чем его уравновесить?

Ничем. Еще раз внимательно читай: Метапрог-прототип, версия 6 + будильник на Метапроге (комментарий)

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

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

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

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

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

К счастью, у меня хватило ума не идти на информатику. Там забивают мозги студентов мусором, отравляя мышление ООП и тормознутыми интерпретируемыми недоязыками. И я лично общался с несколькими обладателями дипломов по специальности «информатика» (из России и Украины), вообще не шарящими в линуксе и ничего не знающими про свободное ПО. Большая часть айти-«образования» - не более чем фабрика макак.

И проблема не только в постсовке. В MIT высрали Scratch и App Inventor - более толсто глуиться над идеей визуального программирования может разве что i-rinat с его «графическими брейнфаками» из клубка кривых Безье.

Никто не обязан комментировать ахинею грбоэлектриков.

Тот комментарий не похож на ахинею. Там все по сути, без тени иронии и шуток. Неспособность ответить на чисто технический комментарий равнозначна сливу.

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

Потуги антиметапрогеров смешны.

metaprog
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.