LINUX.ORG.RU

Metaprog: универсальная графическая среда программирования [в разработке] часть 7

 , , ,


1

3

FAQ

0. Где отсутствующие примеры и пункты FAQ? Как вообще читать эти темы?

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

10. Примеры выдают варнинги при компиляции (у кое-кого еще и сегфолтятся)

Решено вводом неанонимных структур, если идет обращение к данным из сишных инклюдов.

12. Зачем ты пытаешься сделать «графический C» (используя подходы к разработке, структуры данных и прочее из C, но в виде блоксхем)?

Потому что я хочу программировать именно в графике и мне нравится Лабвью, но не нравятся ограничения его бекенда, обусловленные в основном копирастией. Хочется иметь возможность программировать не только на высоком, но даже на самом низком уровне (драйвера, ядра ОС, микроконтроллеры итп) и оперировать указателями, как в Си, но делать это в графике, а не в тексте.

13. Есть же first order logic, лямбда исчисление и т.д. Ты бы изучил для начала альтернативы, может для данного вида представления имеются лучшие подходы?

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

Примеры

Предыдущие см. в прошлых темах

Metaprog: универсальная графическая среда программирования [в разработке]

Metaprog: универсальная графическая среда программирования [в разработке] часть 2

Metaprog: универсальная графическая среда программирования [в разработке] часть 3

Metaprog: универсальная графическая среда программирования [в разработке] часть 4

Metaprog: универсальная графическая среда программирования [в разработке] часть 5

Metaprog: универсальная графическая среда программирования [в разработке] часть 6

Неанонимные структуры

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

Главная функция:

https://i.postimg.cc/8kJdT96h/image.png

Открытие нового окна:

https://postimg.cc/kBX6rB0P

Та же диаграмма в видео:

https://streamable.com/jqng1

Видно всплывающие подсказки, в конце удаляется и снова проводится один из проводков.

Начало рисования SDL, то что должно делаться каждый цикл в нуклеаре:

https://postimg.cc/tYS199bZ

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

Кстати, что мешает мне сейчас сделать главный нуклеаровский цикл, ведь циклы ж уже готовы? Смотрите на этот скрин:

https://i.postimg.cc/65N2KMQz/image.png

Почти такой же пример, только есть цикл и нету sleep (чтобы можно было полюболваться на окошко 10 секунд). Что тут не так? Схема правильная, но надо еще научить транслятор ставить «тупиковые» ветки, берущие начало в цикле, в пределах цикла по-умолчанию. Сейчас код nk_end и малювання SDL оказываются за пределами тела цикла, буду это исправлять. Где-то там же находится ключ к полному налаживанию ветвления через if и switch.

Сам код:

https://pastebin.com/f5PDfi77

Использовать сишные имена типов и структур удалось благодаря многоязычным строкам, которые внедрялись для русских, англичан и прочей не понимающей украинский публики. Если в названии типа есть строка на языке «С», вместо примитивного типа (или тела структуры из примитивных типов) ставится сишный идентификатор типа из инклюда.



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

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

не тренарный а тернарный

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

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

с чем его едят и где применяют? Я готов учиться, только объясняй.

if (x < 100) {
  a = x * 10;
} else {
  a = x;
}

эквивалентно

a = x < 100 ? x * 10 : x;
iluha16
()
Ответ на: комментарий от iluha16

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

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

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

int variable;
if(A)
  variable = B;
else
  variable = C;
Тоже что и:
int variable = A ? B : C;

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

мне интересно скажет ненужно как -> или всё же признает полезность.

тема постепенно превратилась в объяснение великому разработчику элементарных вещей которые он мог бы узнать все сразу за пару дней если бы прочитал K&R.

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

Читать - сложно. Там много текста и почти нет диаграмм.

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

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

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

rebforce
()

Сделай закрытый клон LabVIEW, потом продашь конкурентам. Донаты тебе никто давать не будет. На Патреоне толпы попрошаек по круче тебя сидят и по $20 еле собирают.

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

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

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

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

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

Разумеется, слабо, ты же настолько забористыми веществами не делишься. Моих хватит только на графическое представление string-rewriting-языков вроде Thue или моего же Myth. Всё так же бесполезно, но хоть как-то осмысленно, ибо облегчает визуализацию связей, что на что заменяется. У тебя же, цитируя Луговского, хер с горы безо всякой идеи.

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

А если так:

a->b->c[it->d(f(a->j1 + a->j2), g(a->j1 - a->j2))] = x < 100 ? x * 10 : x;

с if-else тебе придётся повторять этот длинный expression дважды

if (x < 100) {
  a->b->c[it->d(f(a->j1 + a->j2), g(a->j1 - a->j2))] = x * 10;
} else {
  a->b->c[it->d(f(a->j1 + a->j2), g(a->j1 - a->j2))] = x;
}

и в итоге когда будешь читать код потом читателя надо будет убедиться действительно выражение одинаковое или есть какой то ньанс. с ternary operatorом гораздо короче и понятнее. а чем компактнее код тем больше его помещается на экране, тем больше его можно окинуть взглядом. в 5 раз меньше строчек кода это серьёзный аргумент в пользу ?: operatorа.

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

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

foo = f(a->j1 + a->j2);
bar = g(a->j1 - a->j2);
a->b->c[it->d(foo, bar)] = x < 100 ? x * 10 : x;

Либо так:

a->b->c[it->d(
    f(a->j1 + a->j2), // foo
    g(a->j1 - a->j2), // bar
)] = x < 100 ? x * 10 : x;
liksys ★★★★
()
Ответ на: комментарий от metaprog

оно мне ненужно

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

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

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

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

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

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

что ты тут делаешь?

Развлекаюсь

обижен жизнью

И снова неуклюжие попытки зацепить собеседника.

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

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

Клавиатуру я, в отличие от тебя, использую по назначению: пишу тексты, предназначенные для людей, а не алгоритмы, предназначенные для компиляции в машинный код. Для построения алгоритмов из блоков есть мышь, клавиатура там только для чего-то типа Ctrl+C, Ctrl+V, Ctrl+F.

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

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

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

использую по назначению

Тебе так кто-то сказал, или ты сам это придумал?

Для построения алгоритмов из блоков есть мышь

Мальчик, изучи уже историю графических интерфейсов и не позорься.

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

Какие тут вещества?

Обычные. Одно из двух: либо ты на веществах, либо у тебя легкая форма олигофрении.

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

Сам ты ахинея ходячая со своими аксиомами

Кисо обиделось. Иди давай в свой заборостроительный, удиви там других твоих товарищей нескучными диаграммами.

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

Раз уж заговорили об истории, то переход на графическое программирование должен был произойти в 90х, вместе с распространением винды 95. Юзеры, не получающие мазохистского оргазма от общения с консолью, еще тогда массово перешли на графическую винду вместо текстового ДОСа.

Железо стало позволять запуск таких вещей как Лабвью. Версии Лабвью под винду 98 уже были близкими к современным по интерфейсу программирования. Беда лишь в том, что у кодеров принято красноглазить в текст и вместо графического программирования на смену Си в высокоуровневых задачах пришли плюсы, джавы, сишарпы, питоны, джаваскрипты и всякие разные говнофреймворки, а на низком уровне почти 50-летний Си по-прежнему правит бал.

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

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

переход на графическое программирование должен был произойти в 90х

Кому должен, наркоман, по какой причине?

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

маргинальное меньшинство

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

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

И вот опять ты фантазируешь про жопу. Как только тебя припирают к стенке - сразу начинается увиливание и посылание в жопу.

Если ты тролль, то тролль херовый, потому что ты не вызываешь срач, а вынужден сам поддерживать его.

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

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

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

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

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

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

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

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

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

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

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

Ты шустро удалил камент, то история все помнит.

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

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

Попробуй еще раз.

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

Не нулевой

Нулевой. Ты не знаешь не одного языка, потому что ты неуч. А раз ты неуч, цена твоему опыту - ноль.

много ништяков

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

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

Ты не знаешь не одного языка

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

В студию

Есть Метапрог: скрины рисовалки диаграмм и выхлоп транслятора.

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

Но Лабвью знаю

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

Есть Метапрог

Его нет. За три месяца ты осилил сделать лишь элементарщину. Это второе подтверждение тому, что лабвю ты не знаешь.

скрины рисовалки диаграмм и выхлоп транслятора

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

Все потому что ты безграмотный неуч.

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

За три месяца ты осилил сделать лишь элементарщину

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

https://groups.google.com/forum/#!topic/comp.os.minix/wlhw16QWltI[1-25]

rebforce очень любит Red и категорически настаивал на том, чтобы я взял его как бекенд для Метапрога вместо Си

https://ru.wikipedia.org/wiki/Red_(язык_программирования)

Он был выпущен в 2011 году - и что? До сих пор, спустя 8 (восемь!) лет разработки, не имеет даже сетевых сокетов! Они до сих пор из альфы не вылезли! Си тоже разрабатывали 4 или даже 5 лет до выхода в 1973 и после этого еще очень-очень долго устаканивали, годами писали стандарты. Повернется ли у кого язык обвинить Кернигана и Ритчи в некомпетентности?

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

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

с if-else тебе придётся повторять этот длинный expression дважды

зачем?

if (x < 100) {
  t = x * 10;
} else {
  t = x;
}
a->b->c[it->d(f(a->j1 + a->j2), g(a->j1 - a->j2))] = t;

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