LINUX.ORG.RU

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

 , ,


1

2

Следующий релиз

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

Скачать:

https://www71.zippyshare.com/v/flBFevsS/file.html

В архив добавлены скомпилированные ехе: теперь прототип Метапрога и Метапрог онлайн можно запустить без LabVIEW, в том числе под линуксом через Wine (скрин: https://ibb.co/0XTVx6F инструкции: Метапрог-прототип, версия 5 (комментарий)).

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

Из нереализованного - схождение данных из двух и более веток условий. Подробнее:

Метапрог-прототип, версия 4 (комментарий)

Условные схождения будут сделаны уже в 6 версии. Скорее всего, это - последняя нереализованная крупная функция прототипа Метапрога. После ее воплощения планирую начать делать раскрутку/бутстрап/«Метапрог сам на себе» с полной отвязкой от LabVIEW.

Запись интерактивной обучалки и создание сишной вставки для стандартной библиотеки Метапрога

https://streamable.com/rgk86

Выход из записи обучалки (под конец, когда происходит ее сохранение на диск) по кнопке Esc.

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

Предыдущий релиз прототипа:

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



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

Тут, как говорится, слава яйцам что у меня вообще получилось наваять такой пример на Метапроге на данном этапе его развития. По мере пополнения стандартной библиотеки (и вообще метапроговских библиотек) сборка диаграмм будет становиться все проще. Сравни, например, функцию «число в консоль» с тем, что у нее «под капотом».

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

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

Как же так?

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

Можно декларацию массива и заполнение его случайными числами вынести в отдельные подфункции. Блоков станет намного меньше.

В Лабвью есть возможность выделить участок диаграммы и сделать Create SubVI (сделать подфункцию) - и все выделенное убирается «под капот» новой подфункции. Так создана львиная доля метапроговских функций. Но в самом Метапроге подобный функционал пока что не реализован.

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

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

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

Можно декларацию массива и заполнение его случайными числами вынести в отдельные подфункции. Блоков станет намного меньше.

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

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

Тебя это тревожит? Может обсудить цену для уменьшения сисколов.

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

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

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

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

Сравнение с иероглифами считаю не совсем некорректным, но... скажите это китайцам.

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

https://ru.wikipedia.org/wiki/Население_Китая https://ru.wikipedia.org/wiki/Население_Израиля

Китайский счёт выполняется позиционно, так же как и индийский. То что там не 1, а «一» ничего не меняет.

Если меняется только символ, а не его наполнение мы получаем https://i.imgur.com/reLTzeJ.jpg

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

Это гриболандия, на тебя уже направлена ракета на сорняковом топливе с грибной боеголовкой, всё кстати на метапроге работает.

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

Можно декларацию массива и заполнение его случайными числами вынести в отдельные подфункции. Блоков станет намного меньше.

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

printf я использовать не буду из-за сложного синтаксиса строки форматирования, и нуль-терминированной строки

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

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

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

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

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

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

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

Проблем вроде нет, но я сам не желаю связываться с printf. Как раз-таки с printf будет куда больше проблем, начиная с нуль-терминированных строк (выше обсуждалось). Синтаксис не очень-то и тривиален, ман выкурить надо. И не только мне, а и другим потенциальным пользователям Метапрога. Оно мне надо?

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

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

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

И при этом могу и в сеть, и в файл, и в массивы, и в строки...

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

могу и в сеть, и в файл, и в массивы, и в строки…

и в … ну тут пусть за меня @alexferman продолжит

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

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

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

Синтаксис не очень-то и тривиален, ман выкурить надо

Синтаксис абсолютно тривиален. Процентик и код типа. Плюс всякие отступы можно тут же задавать. IDE дают интерактивную справку.

С fwrite все намного понятнее и логику с собиранием строк или записью данных в файл по частям я наваять смогу

Закат солнца вручную.

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

fwrite

А ведь fwrite() — тоже надстройка с буферизацией. Одна из киллер-фич Си по сравнению с Турбо-Паскалем. Можно было хоть по байту писать через fwrite(), и это не так уж и сильно тормозило. Если в Турбо-Паскале хочешь писать бинарные данные без дичайших тормозов, то кроме BlockWrite альтернатив нет. Всё руками. В какой-нибудь небольшой утилите половина кода будет занята жонглированием буферами.

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

Не знал, что в турбо-паскале такой треш. Мда уж. Я на нем не писал никогда, теперь вот не жалею)

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

А ведь fwrite() — тоже надстройка с буферизацией. Одна из киллер-фич Си по сравнению с Турбо-Паскалем. Можно было хоть по байту писать через fwrite(), и это не так уж и сильно тормозило. Если в Турбо-Паскале хочешь писать бинарные данные без дичайших тормозов, то кроме BlockWrite альтернатив нет. Всё руками. В какой-нибудь небольшой утилите половина кода будет занята жонглированием буферами.

К фриПаскалю это относится? Просто ХеллоуВорлд на Си это 40 сисколов, а на паскале 12, не совсем понятно в контексте написанного почему.

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

К фриПаскалю это относится?

Без понятия.

Просто ХеллоуВорлд на Си это 40 сисколов,

27

а на паскале 12

Надо же. Действительно, 12.

не совсем понятно

Не совсем понятно, зачем ты считаешь число системных вызовов в hello world. Это как-то влияет на выполнение обычных программ?

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

Это развитие теоремы Шолохова-Курёхина «Ленин — гриб»?

P.S. Пользуясь случаем, поздравляю всех местных экспертов с днём рождения Петра Кащенко!

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

27

Код ?

Не совсем понятно, зачем ты считаешь число системных вызовов в hello world. Это как-то влияет на выполнение обычных программ?

Это даёт понимание об ущербности компилятора, если за 30 лет он не научился компилить даже HellowWorld без накладных расходов.

На ассемблере это дело требует 2 сискола.

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

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

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

Код?

Код.

Это даёт понимание об ущербности компилятора

Нет.

У любой системы есть затраты на инициализацию и затраты на выполнение работы. Грубо это можно смоделировать линейным выражением: y(x) = a + b*x, где каждая система описывается своей парой a,b. У одной системы может быть большое a, но маленькое b, а у другой маленькое a и большое b. Очевидно, что для достаточно больших x имеет значение коэффициент b, потому что a на фоне b*x не будет заметно.

Сравнение hello-world-программ по числу системных вызовов это по сути сравнение сумм a + c*b, где c — небольшая константа. Намеренное выпячивание коэффициента a.

На ассемблере это дело требует 2 сискола.

Сделай программу, которая печатает 100 строк «Hello, world!\n» на ассемблере. Скорее всего, ты сделаешь 100 вызовов write, чтобы реализовать режим буферизации по строкам. Те же 100 вызовов write твоя программа будет делать и при перенаправлении вывода в файл. Если ты на Си 100 позовёшь printf, при выводе в консоль будет 100 вызовов write, но при перенаправлении в файл — только один, потому что libc занимается вопросами буферизации вывода за тебя.

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

Код.

Стандартный выдаёт у меня 40 сисколов, как и вариант метапрогра через fwrite.

Сделай программу, которая печатает 100 строк «Hello, world!\n» на ассемблере.

Сделал, вызов стоит ровно 100 сисколов.

Если ты на Си 100 позовёшь printf, при выводе в консоль будет 100 вызовов write

Да будет 100 вызовов printf, но общее число будет в 139 сисколов.

но при перенаправлении в файл — только один, потому что libc занимается вопросами буферизации вывода за тебя.

Только 39 сисколов никуда не делись, и при выводе 1 строки никакой буферизации нет.

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

Стандартный выдаёт у меня 40 сисколов

Большинство из них — инициализация glibc. Может варьироваться в зависимости от версии.

Только 39 сисколов никуда не делись

Эх…

и при выводе 1 строки никакой буферизации нет.

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

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

Большинство из них — инициализация glibc. Может варьироваться в зависимости от версии.

Как же святые оптимизации компилятора? Почему в паскале 12, что-то мне подсказывает, что через musl будет тоже поменьше.

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

А что использовать чтобы не было буферизации?

Я сделал через puts, ничего не поменялось.

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

А что использовать чтобы не было буферизации?

man 3 setvbuf

Я сделал через puts, ничего не поменялось.

Можно использовать просто write, он вызывает напрямую сискол write

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

Я же тебе говорю, изучи fasm, узнаешь про _start, динамические библиотеки, и все такое…

Зачем мне этот мусор ?

изучи fasm

Суть метапрогера - быть не как все. Даже асемблер выбрал с нестандартным синтаксисом.

и все такое…

Какое?

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

А что использовать чтобы не было буферизации?

Должно отключить буферизацию setvbuf(my_stream, NULL, _IONBF, 0)

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

Зачем мне этот мусор?

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

Суть метапрогера - быть не как все. Даже асемблер выбрал с нестандартным синтаксисом.

fasm лучший ассемблер, ноудискас.

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

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

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

fasm лучший ассемблер, ноудискас.

У вас с метапрогом один врождённый недостаток - для вас лучшее это то что вы знаете.

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

Да, на 100 выводимых строк 137 сисколов

glibc сбрасывает буфер, если видит перенос строки \n.

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

Скоро кончатся каникулы и все опять поутихнет.

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

Я бы добавил тебя в игнор, но все childrens-комментарии скроются. Думаю в uBlock правило прописать, но так лень, не хочешь написать его за меня?

У вас с метапрогом один врождённый недостаток - для вас лучшее это то что вы знаете.

Так зачем же мне знать плохое.

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

Скоро кончатся каникулы и все опять поутихнет.

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

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

glibc сбрасывает буфер, если видит перенос строки \n.

И как тогда организовывать перенос ? Аналогичный пример на асме переносит строки укладываясь в 100 сисколов.

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

Я не знаю, мне просто интересно. Я вывел через write 100 строк без переноса строки, у меня всё равно 136 сисколов.

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

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

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

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

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

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

И как тогда организовывать перенос ?

Если хочешь буферизировать все, опять же, man 3 setvbuf. По умолчанию, работает режим _IOLBF, в котором буфер флешится, как только встречается символ переноса строки.

Если используешь setvbuf(my_stream, NULL, _IOFBF, 0), то glibc самостоятельно выделит буфер дефолтного размера и будет его флешить лишь при переполнении этого буфера.

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

Да я в общем то деньги не признаю

Сказал человек клянчивший 125 баксов 2 страницы, за решение квадратного уравнения.

а если я не признаю деньги, значит система не признает меня, я вне поля ее зрения.

Что бы кого-то не признавать его сначала надо идентифицировать. Раз тебя идентифицировали, то ты в поле зрения.

Если Метапрогу что то нужно, я иду в магазин

Fixed.

кладу это себе в карман, пакет и просто выхожу

То есть метапрогеры называют не желающих купить лицензию за 3к$ бомжами, при этом воруют сырки в соседнем магазине?

я вне зоны действия, я незаметен.

Крадись как гриб, порхай как эфир, жаль как трибоэлектричество

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

По умолчанию, работает режим _IOLBF, в котором буфер флешится, как только встречается символ переноса строки.

Ну так я не использую, я просто копипастнул 100 раз

write(1, "Hallo!", sizeof "Hallo!" - 1);
shpinog ★★★★
()
Последнее исправление: shpinog (всего исправлений: 1)
Ответ на: комментарий от shpinog

Как же святые оптимизации компилятора? Почему в паскале 12, что-то мне подсказывает, что через musl будет тоже поменьше.

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

А что использовать чтобы не было буферизации?

Не использовать потоки из стандартной библиотеки Си.

Я сделал через puts, ничего не поменялось.

puts() выводит строку в поток stdout. Тут stdout — не просто условное название файлового дескриптора, а глобальная переменная типа FILE *. Когда используешь fopen(), получаешь указатель на FILE. Вот stdin, stdout и stderr это уже такие указатели на готовые инициализированные структуры FILE.

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

Не использовать потоки из стандартной библиотеки Си.

puts() выводит строку в поток stdout. Тут stdout — не просто условное название файлового дескриптора, а глобальная переменная типа FILE *.

write тоже ?

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

Я это не к тому, что из-за лишних 40 сисколов кто-то умрёт.
Просто там и тут слышны высказывания вида «Си откомпилируется в лучший код чем ты напишешь руками на асме». В итоге получается что даже на примере Hello-world компилятор не способен откомпилировать эквивалентный код.

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

Сказал человек клянчивший 125 баксов 2 страницы, за решение квадратного уравнения.

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

То есть метапрогеры называют не желающих купить лицензию бомжами, при этом воруют сырки в соседнем магазине?

У меня лицензия на Windows 10 for Workstation, она стоит на ~450$ больше чем LabView Home.

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

write тоже?

Очевидно, нет. Ты в него файловый дескриптор в виде целого числа передаёшь.

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

И эти высказывания звучат не зря.

Напиши, например, код на ассемблере для деления на 13. Эквивалент вот этого кода на Си:

int func(int num) {
    return num / 13;
}
i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.