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)

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

Через простой каст указателей нельзя?

Да можно. Почему же нельзя?

int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
Заметь, что здесь кроме указателя на саму структуру передается ее размер.

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

Передача размера это чтоб можно было кидать структуры разных типов во втором поле? То есть разные адреса.

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

структуры имеют разный размер. с системным вызовом bind можно использовать к примеру unix socketы sockaddr_un, не только _in. своего рода полиморфизм выражаясь ООП терминологией.

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

Как раз то, что в Метапроге будет делаться через структуры условного выбора типа.

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

На вопрос тебе уже ответил iluha16

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

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

int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);

Передача размера это чтоб можно было кидать структуры разных типов во втором поле?

Вот, когда ты задавал этот вопрос, увидев объявление этой функции, ты что имел ввиду, говоря «во втором поле»?

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

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

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

Не особо. С общими инструкциями я не пойму, как тебя найти.

liksys ★★★★
()

Так, походу мне уже не осилить эти треды про метапрог. Понаписали, блин 100500 томов «Войны и Мира» Вкратце, расскажите, взлетает?

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

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

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

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

ЧСХ, поциент даже код ещё не открыл. Не исключаю, что это крайне грамотный тролль. Сидит себе, рисует всякую ладубу в пеинте и набрасывает.

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

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

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

Все важное собрано в заголовках тем. Это осилить несложно. Тупняка в комментах хватает, скажем «спасибо» бабе Ликсусе и прочим троллям, разводящим оффтоп.

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

Очередной банщик нарисовался. Не осиливший прочитать даже заголовки тем.

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

Вот я тоже вряд ли смогу в день больше получаса тратить на чтение этого

burato ★★★★★
()

Слишком много страниц, не читал

Автор пофиксил варнинги? Появилась какая то спецификация? Может он уже видео какое выкладывал? Хоть что нибудь?

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

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

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

Ну и самое интересное: был код рисунок программы переворачивающий строку? На лабвью вроде был, а непосредственно на метапроге?

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

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

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

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

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

Я вот, к примеру, вообще не понимаю что за «малювання SDL», «оказивник» и тд. Ну и шрифт конечно вырвиглазный, сразу видно что недалеко от 90-ых ушел, ну и тебе надо продумать названия для типов получше, то чо у тебя б8 похожа на 68 так себе. Ну и раз главная цель проекта - это упростить разработку, то сделал автоматический вывод типов с возможностью указывать тип.

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

В России данный сервис заблочен

так ты ССЗБ если не умеешь пользоваться iptables. ступай в man iptables и man tcpdump. как прочитаешь и осилишь разблочить роскомпозоровскую недоблокировку возвращайся.

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

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

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

структуры которые хотел автор больше напоминают phpишный array, который на самом деле по сути нетипизированный map.

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

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

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

Помнится в каком-то треде говорил что в Си сильная система типов, чуть со стула от такого не упал.

Если ТС заинтересуется: (С)

double foo(double a) {
    return a * 12.123
}

int main() {
    int res = foo(123.123) //Я знаю что есть -Werror -Wall и прочее,
                      //но язык это позволяет.
                      //Это следствие слабой системы типов
    ...
}
(Rust)
fn foo(a: f32) -> f32 {
    a * 12.123
}

fn main() {
    let a: i32 = foo(12.123f32); //expected i32, found f32
    //Можно написать так:
    //let a = foo(12.123f32); Тогда компилятор сам выведет тип и ошибки не будет
}

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

если сравнивать с php/python/js и прочей ныне популярной скриптовщиной в C сильная система типов. отбрасывание дробной части вполне логично, хотя тот же -Wall некоторые авторы рекомендуют использовать постоянно.

PS. с rustом не знаком, но в примере всё понятно. definition syntax говно, Сшный гораздо приятнее.

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

Хммм, вот к примеру Java:

public class MyClass {
    public static double foo(double a) {
        return a * 12.123;
    }

    public static void main(String args[]) {
        int res = foo(123.123);
    }
}
/MyClass.java:7: error: incompatible types: possible lossy conversion from double to int
        int res = foo(123.123);
                     ^
1 error

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

в курсе, джаву освоил. однако не припомню что бы implicit double -> int cast создавал бы мне проблемы на практике. чисто теоретически могу посоветовать разве что -Wall.

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