LINUX.ORG.RU

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

 , , ,

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

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

Метапрог (лабвьюшный прототип) - весьма сложная вещь. Но никаких классов, только данные, их типы и функции, работающие с ними.

Странно, от этих двух слов тебя не корёжит, а от ООП (которое сводится к ним, да ещё к инкапсуляции) корёжит.

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

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

Корежит меня от классов и инкапсуляции

От классов-то почему? Это же структура данных + набор функций для работы с ними. Просто в Си ты будешь писать gun_shot(&my_gun, 5), а в c++ — my_gun.shot(5), только и всего.

Но видел примеры с ними и могу лишь сказать, что инкапсуляция - для идиотов. Нельзя взять да вытащить «приватное» поле из объекта - ужас!

В большинстве языков (про «чисто объектные» не говорю) тебя никто не заставляет все поля подряд делать приватными. Но это требование родилось тоже не на пустом месте. Зачастую изменения в классе должны быть согласованы. И вместо того, чтобы в 10 местах вне класса менять его поле и смотреть, что из-за этого ещё должно поменяться, проще один раз написать функцию, которая его меняет безопасным образом. Но повторюсь, это не догма. Это практика хорошего программирования, которую можно довести до абсурда (как некоторые доводят до абсурда замечательные идеи unix-way).

Кстати, специально для тех случаев, когда инкапсуляция не нужна, в c++ можно объявить структуру с методами. Технически такая структура отличается от класса только видимостью полей по умолчанию (public вместо private). Страуструп не зря так сделал, я думаю.

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

Просто в Си ты будешь писать gun_shot(&my_gun, 5), а в c++ — my_gun.shot(5), только и всего.

Я Метапрог делаю для того, чтобы вообще ничего не писать ни на Си, ни на С++. А в визуальном представлении подключить структуру или указатель на нее не составит никакой проблемы, так что здесь никаких преимуществ у ООП нет. Кстати, без ООП не придется заморачиваться с тем к какому классу какой метод подключить.

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

Большинство операций со структурами - это просто вытягивание и виисывание в соответствующий элемент структуры и тут инкапсуляция вынуждает делать идиотские методы get что-то set то-то. А если у структуры сотня или тысяча элементов? Делать тысячу таких методов? Если же нужно что-то посложнее простого вписывания - это можно и без ООП сделать.

Кстати, специально для тех случаев, когда инкапсуляция не нужна, в c++ можно объявить структуру с методами

Тип (структура) с функциями - это как раз то, что нужно. Я примерно так и делаю в Лабвью, а в Метапроге будет еще и поиск функций по типам терминалов - и так можно будет просто делать функции, совершенно не заморачиваясь с классами и методами, «классы» будут делаться автоматически.

А инкапсуляция в принципе зачем? Концепция ООП считает меня дураком, не способным разумно обращаться с приватными полями классов? Инкапсуляция связывает мне руки и это меня бесит. Мне довелось разок столкнуться с С++ кодом, где нельзя дергать приватные методы какого-то класса (хотя очень надо было) - и это меня очень бесило, пришлось костыли делать чтобы обойти эту придурь.

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

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

Наоборот, в ЯП без вшитого ООП больше мороки «с тем какой метод подключить». Например, есть метод do_something, который можно применить ко всем виджетам. Есть кнопка, которая наследует виджет. В С++ можно my_button.do_something(), в С же приходится искать: ага, do_something применяется к виджетам, значит надо именно gtk_widget_do_something(&my_button). 2-й вариант более геморройный, компромисс ради ООП в сишке.

Большинство операций со структурами - это просто вытягивание и виисывание в соответствующий элемент структуры

В простых структурах и ADT - да, а вот в типах, близким к предметной области (игровой объект, модель в MVC) бОльшая часть методов - это более продвинутые алгоритмы, а не гет-сет.

вынуждает делать идиотские методы get что-то set то-то

Эти методы доступа появились после прыганья по граблям. Вот надо, чтобы когда изменилось определённое поле у определённого объекта (например пароль администратора) сразу случилась какая-то реакция (запись в лог, начало работы по бэкапу, запрос на сервер...). При гет-сет, надо поменять код в одном месте, без гет-сет надо вносить изменения во все участки кода, где идёт работа с этим свойством.

А в C#, Python, Kotlin и некоторых других решили эту проблему добавлением синтаксиса для свойств, что эта проблема не возникает и не надо вручную писать геттеры-сеттеры.

А инкапсуляция в принципе зачем?

Если поле приватное или защищённое, значит другому коду не надо сюда лезть. Значит в любой момент автор кода (библиотеки...) может убрать это приватное поле и заменить на другое. Кто не лазит в приватные поля - его программа не поломается от того, что вышла новая версия библиотеки. Приватные поля - реализация, её можно хоть переворачивать с ног на голову в каждой версии. Публичные поля (и методы) - интерфейс, его можно только немного менять в мажорных обновлениях (гтк2-гтк3). Без таких механизмов поддерживать совместимость существующего кода - просто АД, при котором линукс (и на десктопе, и не серверах - везде) был бы в 10 раз неудобнее, а пакетные менеджеры были бы почти бесполезны, т.к. перенести прогу на новую версию либы было бы в 1000 раз сложнее.

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

Если поле приватное или защищённое ...

А еще консистентность данных. Вполне можно сломать всю логику, поменял «приватное» поле руками.

Кстати странно, что человек, который, якобы, знает Си, не в курсе, что в Си вполне себе есть инкапсуляция и структуры, которые нельзя менять извне.

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

Какая-то дрянь непонятная, в разы сложнее любого широко применяемого ЯП.

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

В Метапроге есть полиморфизм через «наследование» типов (не ожидал от меня таких слов?).

Слов-то ты наговорил уже достаточно, ещё бы тебе к ним понимание оных добавить — вообще замечательно было бы.

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

Кстати, полиморфизм у тебя, вестимо, параметрический? Или какой?

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

В визуальном представлении такого понятия, как «указатель», вообще не должно существовать в идеале. Это слишком низкоуровнево. И по твоим схемам, кстати, это и наблюдается.

Впрочем, я повторяюсь.

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

С++ настолько ущербен

Другое дело Red, на нем написанны графические фреймворки, браузеры, сервера, компиляторы... Сразу видно, язык позволяет, а что плюсы? Вы там считали сколько у него базовых типов?

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

проще один раз написать функцию, которая его меняет безопасным образом

А вот здесь внезапно соглашусь с аффтаром. Приватные поля — это бич (не тот, который Брайтон) современного погромирования. Одно дело, когда за гетами/сетами действительно стоит нетривиальная логика, но совершенно другое — когда доступ через свойство просто огораживают для того, «шоб було», прикрываясь какими-то «практиками хорошего программирования». Опять же, если вдруг внезапно класс нужно будет отрефакторить так, что вместо тривиальной логики доступа должна появиться нетривиальная, то да, в нормальных ЯП пишутся геттеры/сеттеры и ничего больше в остальном коде менять не надо. Даже асинхронщину можно в async/await и похожие вещи обернуть, это всё останется внутри реализации.

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

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

Да, работа видна, уже примеры и в монитор не помещаются, крутить надо %)

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

в нормальных ЯП пишутся геттеры/сеттеры

Ну и потом сломается программа которая юзала эту библиотеку, а так изменил что то в привате и норм.

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

Ну и потом сломается программа которая юзала эту библиотеку

Мальчик, ты совсем бобое?

Было:

class Ololo {
  constructor(defaultOloloid = 'metaprog') {
    this.ololoid = defaultOloloid
  }
}

//...

let ololoBase = new Ololo()
ololoBase.ololoid = 'VarfolomeyKote4ka'

Cтало:

class Ololo {

  #pf = {}

  constructor(defaultOloloid = 'metaprog') {
    this.#pf = {ololoid: defaultOloloid}
  }

  get ololoid() {
    return this.#pf.ololoid
  }

  set ololoid(val) {
    this.#pf.ololoid = val
  }
}

//...

let ololoBase = new Ololo()
ololoBase.ololoid = 'VarfolomeyKote4ka'

При добавлении геттеров-сеттеров во внешних вызовах ничего не меняется.

P.S. Синтаксис ESnext, если что. Не пытайтесь повторить это дома.

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

При добавлении геттеров-сеттеров во внешних вызовах ничего не меняется

Я про С++ говорил.

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

А я про нормальные ЯП (точнее, то их подмножество, в котором для классов предусмотрены свои синтаксические конструкции). Feel the difference.

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

А я про нормальные ЯП

Про скриптоту которая была сделанна изначально за неделю поехавшим фошыстом? Это не С++, на таких языках не сделаешь браузер.

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

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

за неделю поехавшим фошыстом

Загляни под кровать, может, они уже и там сидят? Лечиться тебе надо, мальчик.

на таких языках не сделаешь браузер

Браузер или браузерный движок? Первого навалом, даже я под GTK3 пилил когда-то свой браузер на питоне и затем GJS, у которого тоже были интерфейсы к WebkitGTK. Второе при желании можно тоже запилить, но никто в здравом уме не будет этим заниматься, ибо нужно потратить миллионы человекочасов, чтобы догнать уже существующие по возможностям и поддержке стандартов. А то, что эти движки начинали пилить тогда, когда ничего лучше сипляспляса не существовало, не говорит о том, что ничего лучше не существует до сих пор. Впрочем, тебе с твоей инертностью мышления, наложенную на перманентную отсталость в развитии, этого не понять.

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

Второе при желании можно тоже запилить

Тогда браузеры будут реально кушать 64 гб памяти и нужно будет несколько процессоров вставлять, это все языки для программок на 100 строк.

не говорит о том, что ничего лучше не существует до сих пор

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

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

переписали бы

Начали бы писать новые части на новом япце*

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

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

Тогда браузеры будут реально кушать 64 гб памяти и нужно будет несколько процессоров вставлять

Распространённое заблуждение.

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

Ибо я уже говорил, что ядро не переписывают именно потому, что жалко уже потраченные за 25+ лет человекочасы.

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

Распространённое заблуждение.

Насмешил. Чисто по логике у всяких жаваскриптов-питонов куча оверхеда.

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

И что эта хрень может? Ничего, лол! Даже KolibriOS лучше, там хоть программы, драйвера есть.

Тем временем нормальные люди

Говорят что лучше С ничего не появилось.

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

И что эта хрень может? Ничего, лол!

Скриншоты говорят об обратном, но ты ж даже на оф. сайт перейти не осилил, да?

А хрень - это твоя шлакварь. Вот там уж действительно, лучше никакого линукса, чем такой.

Говорят что лучше С ничего не появилось.

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

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

А хрень - это твоя шлакварь

Лел, чего ты так на нее агришься?

Скриншоты говорят об обратном

Терминал и ворованный браузер это мощно, теперь я все понял, да.

В их манямирке сорокалетней давности — возможно

Тебе придется в нем жить.

Хотя нет, даже тогда был лисп

Код на котором невозможно прочесть.

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

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

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

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

В этом Си лучше всего из существующих решений.

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

ворованный браузер

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

Код на котором невозможно прочесть.

Интересно, есть ли в треде (на форуме, на планете, в галактике и т.д.), кроме вас с ТС, ещё такие разучившиеся читать существа, для которых этот код невозможно прочесть? Он же при любых обстоятельствах куда читабельней вышеизложенного тобой сиплясплясного бреда и лабвьюшной мазни ТС (и для меня он тоже читабельнее, несмотря на то, что конкретно в Scheme я шарю чуть менее, чем никак). Если мне скажут, что решение какой-то конкретной задачи необходимо выполнить либо на гайле, либо на сиплясплясе (и третьего не дано), то я выберу гайл. И запилю-таки. Ибо удобнее, блджад, как бы там импероиды с ООП головного мозга ни кричали об обратном.

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

А вот пруфом, что браузерный движок можно портировать на вменяемые ЯП

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

так просто не запилишь

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

Интересно, есть ли в треде

Код на С вполне читаемый.

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

Код на С вполне читаемый.

согласен, в отличии от каких то непонятных линий квадратиков и подписей на украинском языке автора

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

Говорят что лучше С ничего не появилось.

смотря для чего. вот для ядер OS наверное так и есть. однако хотел бы я посмотреть как ты будешь писать на C веб приложение для чего вообще лучше PHP ничего не появилось. вот видел тут недавно некое говнище под название odoo написанное на pythonе. это ужас какой то. непонятно где чего находится, ну да ладно это возможно из за моей неопытности использования данной технологии. но это говнище постоянно падает с какими то exceptionами в логах, в PHP в случае ошибки падает только одна страница и сразу понятно где и что.

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

смотря для чего. вот для ядер OS наверное так и есть

Про то и речь.

однако хотел бы я посмотреть как ты будешь писать на C веб приложение

Уже писал.

для чего вообще лучше PHP ничего не появилось

Мне Perl больше нравится, там больше контроля, меньше сложности:

use Dancer2;

get '/' => sub { 
  'Hello, ' . route_parameters->get('name') 
};

dance;    

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

но это говнище постоянно падает с какими то exceptionами

Ну это любая программа на Python, я уже их боюсь! Постоянно стректрейсы, то совместимость поломанна, но библиотеки другой версии нужны...

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

Я тоже кучу раз сталкивался с проблемами питоновских программ. При этом некоторые мне тут рассказывают какой Си сложный и чтобы я как бекенд для Метапрога брал не Си, а питон и даже джаваскрипт! Хотя по факту Си - один из самых простых текстовых языков, да еще и близкий к реальной работе железа, без толстого слоя сложных (и для машины, и для пользователя) и ненужных абстракций.

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

Си - один из самых простых текстовых языков

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

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

прост он только в плане изучения, но не в плане реального использования

В плане реального использования он куда проще, не требует тяжелых райнтаймов и вообще поменьше проблем. Про проблемы с питоном только что говорилось, джава, дотнет/сишарп и даже порой С++ тоже подобной фигней страдают. И, кстати, я и не собираюсь использовать Си в текстовом варианте, он будет только «под капотом» графического Метапрога. А уж с графической средой ни один текстовый язык по удобству не сравнится.

у тебя уже в helloworldах без segfaultов не обошлось

Я знаю причину этих сегфолтов и даже говорил как собираюсь их исправить. Но это будет сделано позже.

в питоне и джаваскрипте такого бы не было

Вместо простых и понятных проблем был бы зоопарк странных багов.

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

Феерической звездаболине посвящается

Твоё счастье, любий друзь, что я ни разу не гуру в реде, чтобы запилить на нём самобутстрапящийся визуальный ЯП за неделю, и за неделю у меня появится только унылый концепт. Но я на 99% уверен, что с таким подходом твой «сделанный сам на себе Метапрог» появится явно позже «сделанного самого на себе» AMP. Если вообще появится с такой непроходимой дремучестью автора…

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

Даже унылого концепта нету, а прошло уже больше 3 недель. Ты тогда был на 99% уверен, что раскрутка «Антиметапрога» будет раньше, чем Метапрога, а вот сейчас говоришь, что до релиза Метапрога сам ничего делать не будешь.

Сам себе посвящал что ли? А ты реально забавный, без тебя мои темы были бы намного скучнее.

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

А уж с графической средой ни один текстовый язык по удобству не сравнится.

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

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

любую задачу? и ты думаешь что это будет удобно следить за памятью и указателями в любой задаче?

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

А суть-то, любий друзь, состоит в том, что когда бы я ни начал, у тебя всё равно ничего юзабельного, а тем более самобутстрапящегося, на тот момент не будет. И если тогда уверенность в этом была около 99%, то сейчас она приближается к 100.

Любую.

Когда на вопрос «какую задачу решаешь» отвечают «любую», это следует понимать как «никакую, просто выёживаюсь…»

Я хочу иметь возможность контролировать управление памятью.

Зачем?

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

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

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

ты бы хоть рассказывал как то кратенько о прогрессе

Ну так надо тему читать а не траллировать.

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