Применение искинов - шоссе империализма (Стенгазета русификаторов ИТ)

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Применение искинов - шоссе империализма (Стенгазета русификаторов ИТ) » управление памятью » Аргументы за автоматизированную сборку мусора


Аргументы за автоматизированную сборку мусора

Сообщений 1 страница 30 из 61

1

https://compiler.su/utilita-translitera … nyj.php#41

БудДен написал(а):

Рукалицо. Вот зачем, зачем писать компилятор на C++? Этот язык устарел, даже Линус Торвальдс уже это воплотил в управленческих решениях. С таким уровнем культуры у Вас ровно ноль шансов сделать что-то передовое. Объясняю на пальцах (странно, что приходится это делать столько лет спустя). Есть два с половиной способа управления памятью: явное управление, сборка мусора и дальше вариации на тему выделения на стеке, которые в Расте. Из них явное управление нужно только для систем, жёстко оптимизированных по производительности, в т.ч. там, где паузы из-за запуска сборщика мусора неприемлемы. Оно трудоёмко (нужно отследить время жизни каждой сущности) и опасно (ошибки в этом отслеживании дорого стоят), регуляторы США это уже официально заявили два-три года назад. Т.е. даже для системного софта от Си и Си++ рекомендовано отказаться. Для компилятора же наиболее естественна сборка мусора, поскольку в нём есть процессы генерации деревьев, их преобразования. Он не является процессом реального времени — его задача — просто читать файлы, обрабатывать данные и писать их обратно в файлы. Подойдёт любой язык. Но Вы выбрали C++ для написания своего компилятора. Это значит, что Вы в общем-то в программировании не разбираетесь. Если бы Вы в нём разбирались, Вы бы имели кругозор, опыт программирования на разных языках и выбрали бы более подходящий язык для данной задачи. Вот посмотрите, как Недоря сделал, ну или хотя бы как сделал Вирт: он уже сто лет назад писал даже системный софт на языках со сборкой мусора (не говоря о компиляторах), т.е. даже там узость не столь критична, а где необходимо, крупицы явного управления памятью можно вставить и в Оберон. Т.е. Вы идёте, может быть и вперёд, но плетётесь в хвосте.

Я ещё 15 лет назад говорил, что C++ это (зацензурировано), но те, кто на нём пишут, меня не слушали. Теперь это говорят авторитетные органы США, страны — безусловного мирового лидера в ИТ, но и их не слушают.

Если Вам трудно изучить разные языки и Вы пишете на C++, потому что к нему привыкли, это тоже не говорит в пользу Вашей способности сделать что-то передовое в языкостроении. Потому что чтобы сделать что-то новое, нужно сначала более-менее неплохо изучить старое. Уметь работать в разных парадигмах. Например, если Вам не хватает в Го возможности строить семиэтажные контейнеры с угловыми скобками, надо задуматься над тем, почему и как другие люди без этого обходятся. Без этого понимания не получится сделать передовой язык, потому что это означает недостаточное знакомство с разными стилями программирования. Поэтому — окститесь, поучите хорошее, что уже сделано и перейдите на Го, ну, или может быть, на C#, если уж прямо не можете без ООП (а надо мочь, раз Вы разрабатываете ЯП). Я бы ещё мог посоветовать ocaml (на нём пишут компиляторы), CL, Haskell либо Яр-23, но тут везде проблематично с отладчиком, что тоже замедляет разработку. Питон не посоветую — он для маленьких программ и тормозной. Раст — для задротов. А больше вроде и не из чего выбирать.

БудДен написал(а):

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

Хвостморда. Ну зачем быть таким токсичным?
1) нельзя предполагать, что у собеседника меньше опыта, он может оказаться суперстар;
2) давать прямые указания - это хамство; // значит идите работайте
3) не надо себя выпячивать, то что у вас 15 лет, нужны неперсонализированные аргументы; // то, что у вас 15, у кого-то 25
4) не надо стараться задеть собеседника прямыми оскорблениями; // Вам всё ясно, дебилы?
5) и советы, в целом, непрошенные тоже никому не нужны;  // По утрам нужно делать зарядку и пробежку, а питаться сбалансированно, часто и небольшими порциями
6) фактчекинг желательно выполнять.

Отредактировано Лис (2025-04-04 13:39:19)

0

2

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

Отредактировано БудДен (2025-04-04 13:32:06)

0

3

Правила вежливости эти нужны для чего? В чём ценность сообщества? Ни в чём. У бесплодного сообщества и ценности никакой.

0

4

Я себя не выпячиваю, но почему я должен умалчивать о своих прогнозах, которые оказались верными? Это увеличивает ценность тех моих прогнозов, которые я делаю сейчас. Если собеседник окажется суперстар, то он найдёт, что ответить. Но в данном случае реально ответить нечего. Вывод о плохой применимости C++ для компиляторов делается логически из общеизвестных фактов. Если человек всё же выбрал писать новый компилятор на C++ в XXI веке, и это не компилятор C++, то значит, есть проблема на его стороне. Если человек выбрал делать новый язык на базе C++ в XXI веке, это тоже явная проблема - надо видеть тенденции на целевом рынке.

Насчёт не разбираться в программировании - ну я например смотрел на коды компиляторов где-то наверное на 4 разных ЯП, и на двух-трёх что-то кодил. Да, если человек хочет писать компилятор, такой опыт ему полезен, если не необходим. Я не профи в написании компиляторов, написал от начала до конца только транспилятор, и у меня нет полной уверенности, что я это умею делать. Но если опыта ещё меньше, то это уже ближе к Данинг-Крюгеру. Взять C++ как "нечто по умолчанию" - это может указывать на недостаток опыта за пределами минимально достаточного. Это не страшно, опыта можно набраться. Вообще не является проблемой, что у кого-то опыта больше, чем у другого. Опыт - это дело наживное. Просто можно за это цепляться и говорить "нечего тут меня поучать", а можно принять данную информацию к сведению.

0

5

Кроме того, я сослался на других людей, более опытных, чем я, например, на Торвальдса и Недорю. Могу ещё сказать: компилятор C# написан на C#. Компилятор haxe и ещё чего-то великого (забыл только) написан на Окамле. Я не могу советовать взять Тривиль, потому что он не стабилизировался и недостаточно развит. Хотя если кому-то нужны именно русские буквы, то Тривиль подходит. Так что не надо говорить, что я выпячиваю именно себя.

0

6

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

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

0

7

gudleifr написал(а):

сборки мусора - это фетиш

В этом-то я согласен с БудДеном (писать со сборкой и проще и правильнее, чем без неё). А вот форму подачи можно было сделать корректной, это было бы профессиональнее.

Отредактировано Лис (2025-04-04 18:19:56)

0

8

Лис написал(а):

писать со сборкой и проще и правильнее, чем без неё

Это потому, что Вы не пишете.

Там, в нультосте пропущен мой пост по вине компиляр-вахтера. Именно там шла речь о потребности, инструменте и результате. И избыточности искания "стандартов" сверх этого. Интересно, сколько домов срубил Будден?

.

Отредактировано gudleifr (2025-04-04 18:28:19)

0

9

gudleifr написал(а):

Вы не пишете

Вы от меня ничем не отличаетесь, и тоже не пишете.

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

Вы лично пока только одну тему создали, про "кирпичики", и там пока мысль не развёрнута во что-то работающее, есть чем позаниматься.

Лис написал(а):

пропущен мой пост

Метафора про топор со слетающим топорищем мне понравилась, а ваш пост не зацепил ничем.

Отредактировано Лис (2025-04-04 18:27:46)

0

10

Лис написал(а):

...

Не, зря я повелся на Ваш переход на личности... Потер.
.
.
.

Отредактировано gudleifr (2025-04-04 18:51:31)

0

11

Сколько не пинай C++, от этого даже какой-нибудь FPC не перестанет генерировать вдвое более медленный код. И это там еще даже сборки мусора нет.

Лис написал(а):

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

Газ по $500 (за 1000 кубометров) тоже "правильнее" (и купить проще), чем по 250, но заводы на нем вынуждены сворачиваться. Или можете сравнить планшеты/ноутбуки с частотой 1 и 2 ГГЦ.
Надо понимать, что иногда нужно считать ссылки и тогда лучше иметь встроенный в язык механизм.
А иногда нужно грохать целый граф для сложных расчетов целиком и тогда сильное замедление придется обходить индексами.

Отредактировано MihalNik (2025-04-04 18:51:32)

0

12

MihalNik написал(а):

замедление

«Преждевременная оптимизация — корень всех зол» (ц) 1974-12, Кнут Д.

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

Отредактировано Лис (2025-04-04 22:00:20)

0

13

Лис написал(а):

Преждевременная оптимизация — корень всех зол

Ну, появится рано или поздно транспиляция в тот же С/++. Это вот какая будет?

У людей бывает зона комфорта из которой они никогда не выйдут. Кто-то не будет самолетами летать, кто-то водить автомобиль и т.д.
Кто-то не будет программировать на С или С++ или на Лиспе, а кто-то и на Перле вполне себе может.
У меня вот Win7 стоит и менять просто так ее значит убить свое время.
Как и ядом поливать кого-то - можно добиться разве что попадания в ЧС.
Как бесcмысленно и пытаться побыть психологом для того, кто этой помощи не просит.

Если человек на улице плюется - у него слюна во рту скопилась и послевкусие неприятное.
Из-за кого-то люди живут в плохих домах - навыков не хватает чтобы сделать себе хорошие.
Из-за кого-то люди едят плохую еду - навыков не хватает чтобы делать себе хорошую.
Из-за кого-то делают то, что им приказывают, а не то что нравится - навыков не хватает, чтобы зарабатывать тем, что нравится, накопить капиталов, командовать другими т.д.
Ни в одном объявлении о работе не требуют наличия неудачного опыта, аля "не менее трех месяцев запоя из-за проваленных сроков" или "ни менее трех лет тюрьмы из-за нарушения требований безопасности, повлекших..." :D

Отредактировано MihalNik (2025-04-04 22:09:06)

0

14

gudleifr написал(а):

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

Что касается заявления "что касается выделения памяти и сборки мусора - это фетиш" - это лозунг.
На самом же деле сборка мусора - это просто инструмент. Топор, может быть и не такой уж острый, но зато никогда не слетает с ручки. Есть запрос - есть инструмент - есть результат, от сим-карт до компиляторов для Глонасс.

0

15

MihalNik написал(а):

Сколько не пинай C++, от этого даже какой-нибудь FPC не перестанет генерировать вдвое более медленный код. И это там еще даже сборки мусора нет.

Газ по $500 (за 1000 кубометров) тоже "правильнее" (и купить проще), чем по 250, но заводы на нем вынуждены сворачиваться. Или можете сравнить планшеты/ноутбуки с частотой 1 и 2 ГГЦ.
Надо понимать, что иногда нужно считать ссылки и тогда лучше иметь встроенный в язык механизм.
А иногда нужно грохать целый граф для сложных расчетов целиком и тогда сильное замедление придется обходить индексами.

Отредактировано MihalNik (Вчера 18:51:32)

gcc компилирует быстрый код не столько потому, что он написан на C++, а потому, что в нём содержится куча сложных оптимизаций. Потом, некоторые программы на C++ почему-то получаются у меня размером в гигабайт, и даже понятно почему, из-за шаблонизации. Как поживают при этом кеши процессора? Как мерялась производительность кода на FPC по сравнению с C++? На факториалах? Да, конечно, C++ более развитый язык, чем Паскаль и наверное там всё же можно писать насколько-то более быстрые программы, но ценой их надёжности - это не обязательно нужно. Основные конструкции, такие как юнионы, возможность манипулировать байтами, явное управление памятью и void * есть и в Паскале. Навороты на угловых скобках, move семантика, перегрузка операторов, друзья классов, частично параметризованные шаблоны, лямбды - всё это ортогонально к производительности и является лишь способом выражения тех же мыслей. В остальном языки достаточно близки, я слёту не могу сказать, что такого есть в C++ и нет в Паскале, что делает разницу в скорости кода следствием разницы в самих языках, а не в конкретных компиляторах. Ну может быть va_arg? Но и это ведь можно имитировать средствами Паскаля, просто передать указатель.

Дальше, скорость кода не всегда приоритетна. Если бы она всегда была критична, не был бы так популярен Питон, который не в разы, а в десятки раз медленнее C++

Отредактировано БудДен (2025-04-05 12:17:15)

0

16

MihalNik написал(а):

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

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

0

17

MihalNik написал(а):

Ну, появится рано или поздно транспиляция в тот же С/++. Это вот какая будет?

Или не появится. В go, java, javascript, oberon, haskell, common lisp, fpc её нет и она никогда не появится. И компиляция в машинный код тем не менее есть.

Отредактировано БудДен (2025-04-05 12:13:03)

0

18

БудДен написал(а):

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

К сожалению, этот топор всегда слетает с ручки. Программ без ошибок не бывает.

Почему это фетиш? Потому что "не фетишем" это было в прошлый раз. Когда пытались создать машины пятого поколения. Теперь просто вытащили одно из случайных решений того времени и объявили панацеей.

Вы считаете, что теперь стало лучше, чем было вчера? Тогда, где программы, которые делают нашу жизнь лучше? Вот переучим всех на новые языки... Построим квантовый компьютер... Доделаем ИИ... Переедем на Марс...

0

19

БудДен написал(а):

В go, java, javascript, oberon, haskell, common lisp, fpc её нет и она никогда не появится.

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

gcc компилирует быстрый код не столько потому, что он написан на C++, а потому, что в нём содержится куча сложных оптимизаций

Именно. Их перенос это огромная работа и это специализация на С++.

БудДен написал(а):

Дальше, скорость кода не всегда приоритетна. Если бы она всегда была критична, не был бы так популярен Питон, который не в разы, а в десятки раз медленнее C++

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

БудДен написал(а):

Дальше, скорость кода не всегда приоритетна

Дело не в том что всегда, а в том, что иногда и довольно часто именно она критична. Т.е. проигнорировать ее не получиться в принципе, если не опережать в железе противника на порядок.

0

20

> Давно есть и нет никаких препятствий добавить если где-то нет.
Может быть они технически существуют, т.е. их кто-то ради спорта и написал, но основные реализации компилируют в машинный код напрямую, без всяких C/С++. Ну ладно, есть популярные реализации Оберона, сделанные через транспиляцию. Умножаем это на нулевую популярность самого Оберона и получается, что всё равно их нет. Поздравляю, Вы сумели успешно придраться к одному элементу из моего списка, в котором было много элементов. Хорошо, вычёркиваем Оберон.

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

MihalNik написал(а):

Дело не в том что всегда, а в том, что иногда и довольно часто именно она критична. Т.е. проигнорировать ее не получиться в принципе, если не опережать в железе противника на порядок.

Образец псевдо-логики. Фактически это получилось, разбирайтесь сами, что не так в ходе Вашего доказательства.

Отредактировано БудДен (2025-04-05 13:37:02)

0

21

gudleifr написал(а):

Почему это фетиш? Потому что "не фетишем" это было в прошлый раз. Когда пытались создать машины пятого поколения. Теперь просто вытащили одно из случайных решений того времени и объявили панацеей.

Это не фетиш, а решение, которое победило. Вы сейчас читаете эти строки, потому что у Вас включён JavaScript (ну, скорее всего, не 100%, может PHPbb и без него умеет). Но сам PHP тоже с автоматическим управлением памятью. И в базе данных Oracle тоже сборка мусора. И т.д., и т.п. Можете дальше не видеть и называть фетишем то, что огромное количество программ, которыми мы ежедневно пользуемся, работают со сборщиками мусора, но без моего дальнейшего участия.

0

22

MihalNik написал(а):

Именно. Их перенос это огромная работа и это специализация на С++.

То, что мы сейчас находимся в какой-то точке, ничего не доказывает, это во-первых. Во-вторых, многие оптимизации абстрактны от языка и выполняются над разными другими промежуточными представлениями кода, например, вычисление константных выражений или принятие решения об подстановке инлайн-функций, или распределение регистров. В SBCL тоже полно всяких оптимизаций, написанных за 30+ лет, но там нет никакого С++. Естественно, на лиспе всё это гораздо проще писать и поддерживать.

Отредактировано БудДен (2025-04-05 13:41:55)

0

23

gudleifr написал(а):

Вы считаете, что теперь стало лучше, чем было вчера? Тогда, где программы, которые делают нашу жизнь лучше?

Лучше или хуже - это другой вопрос. Современные программы (например, Windows 10), гораздо сложнее, чем какой-нибудь Win3.1, но при этом надёжнее. Гораздо реже приходится перезагружать компьютер, и приложения в целом реже падают. Хотя именно в случае Windows я затрудняюсь сказать, с чем это связано, тут скорее культура производства повысилась. Однако в случае бизнес-приложений сборка мусора лидирует в большинстве случаев - такие программы пишут на Java, C#, JS, go, *SQL, python, PHP - всё это языки с автоматическим управлением памятью. Опять же - можете дальше считать это фетишем, но это Ваша проблема, что Вы отрицаете реальность, а не проблема реальности.

Отредактировано БудДен (2025-04-05 13:49:45)

0

24

БудДен написал(а):

Вы сейчас читаете эти строки, потому что у Вас включён JavaScript (ну, скорее всего, не 100%, может PHPbb и без него умеет).

Я их прекрасно читал и в 90-х. Браузеры с тех пор не поумнели.

БудДен написал(а):

Можете дальше не видеть и называть фетишем то, что огромное количество программ, которыми мы ежедневно пользуемся

А проку? Среди нет ни одной полезной, за исключением редких решений сорокалетней давности.

0

25

gudleifr написал(а):

Я их прекрасно читал и в 90-х. Браузеры с тех пор не поумнели.

А проку? Среди нет ни одной полезной, за исключением редких решений сорокалетней давности.

Лично для меня Яндекс-карты с пробками, Авито, СДЭК, tutu.ru, Яндекс, банковские приложения, госуслуги, система бесконтактной оплаты платных дорог - это полезные программы. 40 лет назад их не было. Есть и невидимые простому пользователю, такие, как система тотальной слежки за городской средой - они сохранили немало жизней, т.к. стало нельзя просто так убить человека в подъезде.

Браузеры поумнели, появился ajax и wasm как минимум, хотя wasm как раз не про сборку мусора. И всё это компилируется в машинный код браузером. Например, можно в окне браузера запустить эмулятор компьютера и в нём - Windows 3.1. Хорошо это или плохо - это отдельный вопрос, но по факту они стали сложнее и держатся на плаву. Все js приложения держатся на плаву за счёт сборки мусора, если бы вместо js был бы Си, то окошки браузера только и делали бы, что падали, потому что пишут на js все, кому не лень.

Отредактировано БудДен (2025-04-05 13:57:27)

0

26

БудДен написал(а):

Лично для меня Яндекс-карты с пробками, Авито, СДЭК, tutu.ru, Яндекс, банковские приложения, госуслуги, система бесконтактной оплаты платных дорог - это полезные программы.

Сочувствую.

0

27

Что именно вызывает сочувствие?

0

28

БудДен написал(а):

Что именно вызывает сочувствие?

Рабская зависимость от навязанных услуг, мешающих жить.
(Боюсь, это тоже попросят в другую тему. Так что давайте про память).

Почему из всех забытых инноваций выделен именно частный случай обработки символьной информации? Который вполне решаем на коленке со времен Smalltalk.

.
.
.

Отредактировано gudleifr (2025-04-05 15:45:13)

0

29

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

Отредактировано БудДен (2025-04-05 15:55:03)

0

30

БудДен написал(а):

А Вы ночью когда свет включаете - это тоже рабская зависимость?

Нет. Но когда вопрос о его отсутствии решается только обращением в Гос.услуги - Да. (И не надо передергивать. Света в Вашем списке идиотизмов не было).

БудДен написал(а):

SmallTalk тоже автоматическое управление памятью

Именно. И никто не парился из-за того, что это было сделано на коленке, а не на правильном сверхмощном языке. Но Вы не ответили на вопрос. Почему именно этот пустячок вызывает такой кипишь?

БудДен написал(а):

Притом непонятно, почему Вы упомянули не лисп, появивишся в 1952, а смолтолк, появившийся в 1972

Потому, что в Lisp большая часть управления памятью относилась к размещению объектов фиксированного размера и проблем вообще не вызывала.
.
.
.

Отредактировано gudleifr (2025-04-05 15:59:54)

0


Вы здесь » Применение искинов - шоссе империализма (Стенгазета русификаторов ИТ) » управление памятью » Аргументы за автоматизированную сборку мусора