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)

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

Haskell не популярная и вроде не скриптуха - он компилируется хотя есть интерпретатор с другой стороны.

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

Отбрасывание дробной части вполне логично

Это правда, но в не в таком случае

#include <iostream>

using namespace std;

int main() {
    double foo = 54.99999;
    int baz = (int)foo; //static_cast<int>(foo); same
    cout << baz; // 54(!)
}

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

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

snake266 ★★
()

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

М-да, тогда всё довольно печально.

А можно как-то измерить его сложность? Количество узлов, связей между ними? (Именно в части транслятора.) Есть ли унификация, используешь ли ты «метапроговские» функции, или всё на одном безразмерном листе? (В последнем случае, конечно, сложность подавит, и не только любителей графических языков.)

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

Вкратце, расскажите

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

взлетает?

Ишь ты. Мне это самому интересно. Я, например, люблю рискованные проекты. А для кого-то «не взлетело» это если у языка программирования меньше миллиона пользователей. Мне сложно понять этих людей.

WitcherGeralt: если это тролль, то это чуть ли не первый случай, когда троллинг вызывает у меня положительные эмоции (правда, если таки не троллинг, эмоции уже менее положительные, и появляется сожаление о кипучей энергии ТСа).

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

Судя по всему автор собирает примеры clang:

//clang test.c -std=c99 -pedantic -O2 -o test -lSDL2 -lGLESv2 -lm
 
//clang -E incl.h -std=c99 -pedantic -O2 -o incl.c -lSDL2 -lGLESv2 -lm

Но автор же сам говорил, что С++ это ненужные раздутые абстракции. https://imgur.com/Gaj5LOD

Почему не gcc?

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

я честно говоря не знаю что именно означает эта фраза.

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

сожаление о кипучей энергии ТСа

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

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

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

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

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

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

Так поставить перед кастом в целое функцию округления, в чем проблема?:)

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

Уже и clang, и gcc на плюсах. На clang я перешел из-за того что на него был завязан castxml и были проблемы. А на castxml завязан мой парсер сишных инклюдов.

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

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

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

Я тоже 3 месяца назад был немного более оптимистичен по поводу сроков раскрутки Метапрога. «Не так сталося, як гадалося», не советую повторять мою ошибку в оценке сроков разработки.

Но работа идет и за 3 месяца я уже многое сделал. Даже в M$ и гугле кодеры с зарплатами в десятки-сотни тысяч баксов годами работают над проектами, так что три месяца - явно не срок чтобы делать выводы.

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

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

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

Ну ты и выдаешь, я ведь еще в треде о Rust напроигрывать успел.

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

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

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

И позволяет определенный стандарт С, а не сам С как бы.

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

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

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

Так используется из за CastXML, был бы он «на основе» GCC, использовался бы GCC.

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

не советую повторять мою ошибку в оценке сроков разработки

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

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

3 месяца назад был немного более оптимистичен по поводу сроков раскрутки Метапрога

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

не советую повторять мою ошибку в оценке сроков разработки.

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

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

Но работа идет и за 3 месяца я уже многое сделал.

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

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

Ты что, писать страшный текст? Как можно такое советовать?!

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

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

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

Как-то так. Лучше допилю Метапрог, чтобы потом было что документировать. И то, скорее всего, документация будет в виде обучающих диаграмм с комментариями.

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

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

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

Осталось только выучить нормальный язык, и необходимость продолжать «разработку» пропадет сама собой

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

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

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

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

Вероятно, это самый умный комментарий за 7 тем!

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

необходимо знать для какой задачи что бы ответить на этот вопрос. для более менее опытного программиста знающего несколько ЯП осилить новый вообще не проблема. да и вообще знание ЯП это только процентов 10% необходимых знаний. остальное - знание системы и решаемой задачи.

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

для более менее опытного программиста знающего несколько ЯП осилить новый вообще не проблема

Смотря какой. Если ты знаешь паскаль, C, C++ и Java, то лисп или эрланг всё равно будут выворачиванием мозга наизнанку (это, кстати, примерно мой случай — я функциональщину в своё время не освоил, о чём периодически жалею).

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

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

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

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

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

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

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

полностью не осилил, хватило основ. по этому поводу не огорчаюсь: причины описаны сообщением выше.

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

Синтаксис как синтаксис. Написать begin вместо фигурной скобки ненамного медленнее, с учётом того, что куда больше времени уходит на обдумывание логики.

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

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