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

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

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

Это да.
Типа - «Весело схожу я в могилу».
Веселье разное бывает ...

Даже если вы правы, то тогда тема скорее должна быть в «Talks».
И «non problem».

Владимир

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

Кто все? Ты, анончик? Или баба Ликсуся? Или rebforce, который не в состоянии сделать даже примеры подобные моим (хотя обещал сделать «Антимтапрог» на реде, концепт устаканить за неделю...)?

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

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

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

Еще раз - «Мне тема не мешает».
Развлекаюсь в ней как и другие ...
Но большей частью все же веду речь о разработке /порой не касаемо Metaprog/, а не критике автора.

Владимир

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

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

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

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

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

Считайте, что не говорил об сносе темы.
Мне не мешает, но конструктива в ней /к сожалению/ совсем мало.

Владимир

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

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

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

Ради праздника порадую вас - «Хай живе Metaprog».
Речь ведь не о том, что Meataprog не нужен ...

Владимир

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

концепт устаканить за неделю

Возможно устаканивание rebforcera вышло из под контроля, стаканчик за стаканчиком и уже не смог остановиться... И теперь в перерывах, отвлекшись, пишет сюда, а я то думал что за ерунду я читаю, может он траллирует просто? А тут вот как может быть ведь %)

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

Азаза затралено. Не, мне пофигу на него, я просто называю вещи своими именами.

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

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

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

Подсказки VarfolomeyKote4ka в основном вызваны отсутствием у вас желания самому хоть не много потрудиться в поисках ответа.
Какой же это конструктив?
Это называется - помощь ленивому.
Вас кстати за это часто критикуют ...

Владимир

anonymous
()

высотой до 12-14 пикселей

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

system-root ★★★★★
()
Ответ на: комментарий от anonymous

указатель

Графическое программирование. Как раз в духе метапрога.

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

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

Еще цикл с рекурсией изобразить.

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

iluha16
()

Вспомним творчество Маяковского.

«Ночь.
Флужу на ЛОР-е.
Я кую Metaprog
на зло буржуазной Европе.
»

Владимир

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

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

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

взять строку и разбив её на пронумерованные (n = 0, 1, 2, …) пары символов в каждой паре поменять символы местами если n%2 == 0, в обратном случае заменить пару на оригинальную пару предшествующую паре n. пример: 12345678 -> 21126556.

Красиво?

Шизоидно.

Вот это красиво, ещё и для строк нечётной длины работает (ибо в условии не сказано, что с ними делать):

stonedswap = s => (''+s).match(/..?/g).map((p, i, a) => i&1 ? a[i-1] : (p[1] || '') + p[0]).join('')

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

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

У меня лично с ними никаких проблем (по крайней мере, в JS-рантайме).

rebforce
()

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

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

anonymous
()
Ответ на: комментарий от system-root

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

В его село таких не завезут еще лет десять.

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

Уже даже котечка дистанцируется от этого фрика.

Скажу больше, на самом деле я и rebforcer это две личности в одном теле.

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

Я написал 2783 комментариев включая этот.

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

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

Красота, конечно, в глазах смотрящего. Но это однозначно write only вариант: распарсить можно, только нахрена (как в случае блоксхем).

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

Красота, конечно, в глазах смотрящего. Но это однозначно write only вариант: распарсить можно, только нахрена (как в случае блоксхем).

Написать. Подписать в комменте, что делает. Забыть. Если понадобится читать этот код (что вряд ли), то потратить 10 минут и распарсить.

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

Человек, знающий о том, что делают match и map в JS, прочтёт этот код без проблем. А незнающий зайдёт на MDN (если он, конечно, не является мегапрогером, скотечкой или другим днищем необучаемым) и узнает.

Можно, конечно, ту же функцию написать в раздутом, любимом быдложаберами стиле:

function stonedSwap(value) {
  let convertedString = value.toString();
  let pairs = convertedString.match(new RegExp("..?", "g"));
  let swappedPairs = pairs.map(function(pair, index, array) {
    if(index%2 === 0) {
      let c1 = pair[0], c2 = pair[1];
      if(c2 === undefined) {
        c2 = "";
      }
      return c2 + c1;
    }
    else {
      return array[index - 1];
    }
  })
  return swappedPairs.join('');
}

Но зачем? Зачем эти ненужные объявления, ненужные конструкторы, ненужные фигурные скобки, ублюдские точки с запятой, function там, где можно обойтись лямбдами?

P.S. Для Ъ-жабо-стиля ещё фабрики фабрик не хватает, но это как-нибудь в следующий раз.

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

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

fixed

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

Оба варианта у тебя ублюдские, если честно.

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

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

В JS норма — использовать стандартную библиотеку по максимуму для повышения выразительности. Если строки хранятся как строки, а не как Uint16Array какие-нибудь, то экономить на спичках в ущерб читабельности смысла не имеет.

Что логичнее идиоматически — «попарно разбиваем» (match) + «обрабатываем разбитое» (map) + «соединяем обработанное» (join) или «преобразовываем строку в массив, объявляем переменную, сохраняем в неё длину строки, объявляем индекс, проходимся в цикле, преобразовываем массив обратно в строку»? Второй вариант настолько далёк от постановки задачи, что использовать его приемлемо только в очень спартанских условиях (например, когда строки действительно хранятся явно в виде кодпоинтов в типизированном виде).

Оба варианта у тебя ублюдские, если честно.

Ага, канэшна.

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

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

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

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

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

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

Если для тебя цикл с левыми переменными читабельнее match + map + join, то всё ясно. Си головного мозга — это диагноз.

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

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

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

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

входные данные: строка s длины n, массив a с элементами вида [start, end].

последовательно пройтись по массиву a переворачивая в строке s соответствующую часть (обозначенную индексами start и end включительно, индексы начинаются с 0). в случае если не выполняется условие (start >= 0 && start < n && end >= 0 && end < n && start <= end) сообщить об ошибке и пропустить элемент.

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

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

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

Можно по старинке сырые байты впихнуть в строку и обрабатывать как строку, но это неэффективно по производительности. Поэтому давно уже появились типизированные массивы. Щас бинарные портянки обрабатывают в Uint8Array, как правило.

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