LINUX.ORG.RU

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

 , , ,


2

3

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

Дополнительно:

Структуры условного выбора типа

Примеры

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

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

Структура

Структура GtkWidgetClass с кучей членов-указателей на функции:

https://i.postimg.cc/bwTrb1r1/2.png

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

Да, большая и на экран не вмещается. После релиза эта проблема будет решаться перемещением видового экрана по диаграмме и зумом (как в играх-стратегиях или при просмотре фоток под зумом).

Она же в текстовом виде: https://pastebin.com/TeTsSMQz



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

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

Да, C - частично ООП язык. Большая часть кода пишется в процедурном стиле, но никто не мешает писать и в ООП-стиле (что и сделано в GTK, например)

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

ОП без всяких сомнений взял ООПнутые библиотеки и на них строит metaprog, в чем проблемы собсна?

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

В том, что он обсирает ООП, не понимая, о чём говорит (при этом использует это ООП, что вообщем-то очевидно)

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

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

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

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

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

Если бы я был таким сильным сторонником графического программирования, я бы выделил направления для реальной работы:

0) формат диаграмм. Как я понимаю, это уже более-менее определилось, поэтому ставлю номер ноль;

1) формат внутреннего представления, и как на него отображаются диаграммы. Вот это бы надо покрутить потщательнее. Как я уже писал, я бы этот формат сделал текстовым. Ибо как минимум пока вся система не получила общественного признания, писать визуальный дифф, систему управления версиями и ещё дофига всего — пустая трата времени. А текстовый формат даёт свободу выбора, и не только тебе (подробнее раскрою чуть ниже);

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

3) написать IDE, он же редактор диаграмм. По мере реализации этого пункта, скорее всего, придётся несколько раз возвращаться к предыдущему. Это нормально.

Вот если всё это взлетит - можно писать свои базы, утилиты и др. А пока я вижу кучу космических наполеоновских планов, половина которых упирается то в нежелание что-либо читать, то вообще в нежелание написать парсер текстового формата. Теперь ещё и база с нуля! Ну если это не троллинг, тогда не знаю, что такое троллинг.

Теперь, как обещал, раскрою тезис о доверии. Внутренний текстовый формат помог бы убить двух зайцев:

1) воспользоваться богатейшим аппаратом работы с текстовыми исходниками, разработанным под свободными лицензиями;

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

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

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

Теперь, как обещал, раскрою тезис о доверии. Внутренний текстовый формат помог бы убить двух зайцев:
1) воспользоваться богатейшим аппаратом работы с текстовыми исходниками, разработанным под свободными лицензиями;

Зато тормоза, ну можно сделать конвертер в текст если так хочется!

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

новые понятия - это жуткий геморрой

;) смотря кто чем думает. Вот диаграммы и поддиаграммы это крутЪ! Разве там есть новые понятия? Нет, конечно! Зелёные стрелки — крутЪ! Если, чо 7 цветами радуги ограничиваться не стоит. Ведь глаз человека способен различать тысячи оттенков (толи 16 тысяч, толи 100 тысяч) — хватит на всё! А вот текстовые подсказки говно, которое тянет гениальнейший metaprog в болото текстового программирования! Их надо сразу выпилять!

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

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

А дальтоники?

А вот текстовые подсказки говно

Иногда, потому во всех соверменных IDE мешают текст со всякими рисовалками.

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

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

А вот текстовые подсказки говно

Иногда, потому во всех соверменных IDE мешают текст со всякими рисовалками.

Я шото не понял, тебе что metaprog не нравиться?!

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

ТС не троллить пришел, а «донаты» собирать. Это было очевидно уже по наличию биткоин-кошелька в самом первом треде. Интересно, хоть копейку собрал?

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

Хммм, что-то интересное. map or unmap files or devices into memory - это? http://man7.org/linux/man-pages/man2/mmap.2.html

Если да, то попробуй рассказать подоступнее как им пользоваться (мануал есть, но слишком заумный). Можно ли им мапить массивы в файл и из файла?

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

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

Пересылать данные из файла в файл вроде нужно через линуксовую функцию sendfile!

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

Можно ли им мапить массивы в файл и из файла

Не совсем понял, но ты можешь имеешь виду запись? Можно открыть файл mmap'ом одновременно на чтение и запись. А работать как с массивом простым.

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

Различия там совсем минимальные, из того, что реально вспоминается - только очень логичное требование явного каста из void* в любой другой указатель и отсутствие всяких стремных безымянных структур. В остальном C++ - это надмножество C, т.е. любой код на C (не содержащий этих минимальных отличий) будет валидным C++ кодом.

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

0, 1. Уже строю диаграммы в лабвьюшном прототипе метапрога (в том числе те, что вы выдели на скринах) и определяюсь с их форматом. Пока как-то так:

https://i.postimg.cc/4ys016Fp/image.png

Это - кластер, лабвьюшный аналог сишной структуры. Специально для вас показал все его элементы. То что с индикатором индекса (0 со стрелочками) - массивы. Это тот формат, в котором блок-диаграмма пишется на диск и читается с диска. Сериализируется и десериализируется в бинарную строку легко и просто, никаких парсеров писать не надо.

2, 3. Транслятор блок-диаграмм в Си как раз уже делается, и IDE тоже. Но пока в лабвьюшном прототипе (его вы и видите на скринах, а в коде - результат работы транслятора), так как на чистом Си без помощи графического IDE я такое программировать буду раз в 100 медленнее. Чуть позже начнется перенос Метапрога «сам на себя».

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

zero-size struct, void*, union, pointer cast, complex, atomic, old C arguments declaration, inline, restrict. Ну а еще плюсисты зарубят тебя если ты не будешь использовать классы, всякие перегрузки итд.

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

Это я назвал что реально попадается в коде, различий которые «скрыты» 100500!

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

Версионированный бинарный формат убввает двух зайцев:

1. Удобство автоматической сериализации/десериализации прямо в структуры, с которыми оперирует уже сама программа.

2. Быстродействие из-за «тупой» сериализации без парсера.

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

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

Бинарный формат будет читаемым, исходники Метапрога вместе с типами формата будут открытыми.

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

inline

Появился в сишечке уже после плюсов, не в счет.

union

А в чем разница?

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

Если это мешает читаемости/идиоматичности, то да.

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

требование явного каста из void* в любой другой указатель и отсутствие всяких стремных безымянных структур

Да, транслятор с Метапрога на С++ был бы куда сложнее чем на чистый Си. Я как раз декларирую безымянные структуры и пользуюсь void-указателями - и они работают, черт побери!

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

Это очень плохая идея. В самих по себе void* нет ничего плохого, но они очень сильно запутывают при неявных кастах. Хотя читать тот код всё равно невозможно.

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

Появился в сишечке уже после плюсов, не в счет.

Только это совсем другой inline, лол.

А в чем разница?

В С++ можно читать только тот тип в который в последний раз была произведена запись.

Если это мешает читаемости/идиоматичности, то да.

То есть нужно их везде впихнуть!

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

Зачем код читать, если есть графические диаграммы? Там и так все очевидно.

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

Кстати, в указатели типа void*, int* итд нельзя ложить указатели на функции и наоборот, так как на некоторых архитектурах (например x86/real-mode) они разного размера! (Ну или вообще устройства)

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

Указатели на функции то вообще отдельная песня вроде как. Думаю их делать через проводники жестких последовательностей.

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

В С++ можно читать только тот тип в который в последний раз была произведена запись.

Хотя бы ради этого стоило в этом треде быть. Today We Learn!

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

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

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

Разумно это не про людей, логика понятие искушственное! Страуструп сказал надо, значит надо.

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

Да, если подумать, то вы частично правы. Как-то не обращал в реальной жизни внимания на различия, и всё казалось, что Страуструп и правда сделал superset of C. Прям глаза сегодня открываются!

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