The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Опубликован набор патчей, ускоряющих сборку ядра Linux на 50-80%, opennews (?), 03-Янв-22, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


2. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  –14 +/
Сообщение от Аноним (2), 03-Янв-22, 11:17 
Почему сишники за 50 лет не догадались сделать модульную систему как в Яве? Каждый компиляйшон юнит требует парсинга сто шессот файлов. В каком нибудь Дельфи жмещь запустить - и сразу запускается
Ответить | Правка | Наверх | Cообщить модератору

14. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +18 +/
Сообщение от Онаним (?), 03-Янв-22, 11:44 
Сразу видно, что серьёзных проектов на Дельфи у тебя не было :D
Ответить | Правка | Наверх | Cообщить модератору

17. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +9 +/
Сообщение от Аноним (17), 03-Янв-22, 11:50 
Потому, Delphi компиляет отдельные юниты в отдельные независимые модули (которые даже если и лежат в итоге в одном бинарнике - по сути, как набор отдельных взаимодействующих библиотек). А "Ява" - это вообще виртуальная машина, у неё вообще никаких гарантий на время выполнения нет. Одна и та же строчка кода может работать как 1, так и 1000 единиц времени.

В случае с Си, из-за того, что язык используется для системного программирования - требуются гарантии детерминированности времени исполнения кода. И если Delphi программа может позволить себе "подождать" несколько миллисекунд на то, чтобы подгрузить страницы другого модуля, инициализировать его и т.д., то если у тебя в обработчике прерывания в ядре начнёт происходить недетерминированная хрень и логика-отсебятина компилятора - то ядро просто работать не будет.

В си тоже вполне себе есть "модули". Библиотеки (статические и динамические) - это именно про это. Если ты разбиваешь свой проект на отдельные незавимые библиотеки - то чаще всего их можно собирать
и редактировать каждый по отдельности, и пересборка всего проекта не требуется. И даже ядро умеет динамически линковаться с кодом - kernel objects - это именно про это. Просто из-за особенностей ядерной разработки - одна правка в базовое ядро может сломать модули, собранные под старое ядро, причём самым неожиданным образом (т.к. всё работает в одном адресном пространстве, промахнулся на 1 байт в структуре - и ты уже, например, корраптишь данные файловой системы). Поэтому дешевле не портить себе нервную систему и не стрелять в ногу - так что ядро пересобирают целиком.

Ну, а то, что некоторые сишники и плюсовики (например, проект Chromium) закидывают всё в один проект и делают монолитные проекты на 60 миллионов строк кода которые компиляются в районе суток - это уже проблема рук, растущих не из того места, а не языка.

Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

22. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +4 +/
Сообщение от Цезий Родонович (?), 03-Янв-22, 12:01 
Что за дичь ты написал? Особенно доставило про делфи и инициализацию модулей.
Некоторые недостатки других ЯП и компиляторов, никак не оправдывают конченную модульность в C/C++
Ответить | Правка | Наверх | Cообщить модератору

34. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  –2 +/
Сообщение от Аноним (17), 03-Янв-22, 12:14 
Потому что это именно так и устроено - каждый дельфёвый модуль - это шмоток законченного кода, по сути статическая библиотека. Которая предоставляет свой набор функций и использует функции других библиотек. Т.е. ничем концептуально не отличается от проекта на си, состоящего из нескольких десятков статически слинкованных библиотек. Когда пишешь на C - тебе не приходится пересобирать каждый раз glibc с проектом.

На сях обычно каждый C-файл не делают отдельной библиотекой. Во-первых, потому что растут накладные расходы, софт становится медленнее. А во-вторых, это закрывает целый ряд оптимизаций, который возможен в gcc (в том числе link-time optimization), но не возможен в Delphi, потому что МОДУЛЬНОСТЬ.

Ответить | Правка | Наверх | Cообщить модератору

42. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  –2 +/
Сообщение от iZENemail (ok), 03-Янв-22, 12:26 
> Потому что это именно так и устроено - каждый дельфёвый модуль -
> это шмоток законченного кода, по сути статическая библиотека. Которая предоставляет свой
> набор функций и использует функции других библиотек. Т.е. ничем концептуально не
> отличается от проекта на си, состоящего из нескольких десятков статически слинкованных
> библиотек. Когда пишешь на C - тебе не приходится пересобирать каждый
> раз glibc с проектом.

Приходится из-за детерминированности связей с обратными вызовами и LTO. В классическом Turbo Pascal и Delphi используется однопроходный компилятор без препроцессора.

> На сях обычно каждый C-файл не делают отдельной библиотекой. Во-первых, потому что
> растут накладные расходы, софт становится медленнее. А во-вторых, это закрывает целый
> ряд оптимизаций, который возможен в gcc (в том числе link-time optimization),
> но не возможен в Delphi, потому что МОДУЛЬНОСТЬ.

Delphi 2 (32-bit) на Pentium II показывала скорость компиляции ~300000 строк в секунду. Это быстрее, чем Turbo C на том же оборудовании в десятки раз. Дельфишник, как правило, чтобы запустить проект на пробное выполнение, статически собирал проект вместе с VCL в автономный EXE-файл, невзирая на размеры последнего. Потому что скорость компиляции и связывания с заранее откомпилированным (бинарным, .dcu) кодом была выше, чем каждый раз пересобирать такую же по функционалу "портянку" из исходников, написанных на С/С++ Builder.

Ответить | Правка | Наверх | Cообщить модератору

65. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +1 +/
Сообщение от Аноним (65), 03-Янв-22, 13:20 
А теперь пойди и посмотри на классический трупопаскаль, ага. Один раз, а потом второй, но уже глазами
Ответить | Правка | Наверх | Cообщить модератору

23. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  –2 +/
Сообщение от Цезий Родонович (?), 03-Янв-22, 12:01 
Что за дичь ты написал? Особенно доставило про делфи и инициализацию модулей.
Некоторые недостатки других ЯП и компиляторов, никак не оправдывают конченную модульность в C/C++
Ответить | Правка | К родителю #17 | Наверх | Cообщить модератору

94. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  –1 +/
Сообщение от Аноним (-), 03-Янв-22, 14:09 
>C/C++

Это что за язык такой?

Ответить | Правка | Наверх | Cообщить модератору

122. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  –2 +/
Сообщение от Аноним (122), 03-Янв-22, 16:27 
Он даже не в курсе, что это два разных языка. Просто второй скопипастил у первого, но как-то не очень уверенно и криво. Даже разные фишки выкидывать пришлось ради "святого ООП", который по факту просто макрос для вызова функций с контекстом (и всё равно тот же restrict зачем-то выкинули, хотя он очень нехило может помочь в некоторых оптимизациях).
Ответить | Правка | Наверх | Cообщить модератору

135. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от Аноним (-), 03-Янв-22, 17:01 
> restrict появился в c99
> (и всё равно тот же restrict зачем-то выкинули, хотя он очень нехило может помочь в некоторых оптимизациях).

Экспердус опеннетус вульгарис ...


Ответить | Правка | Наверх | Cообщить модератору

228. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +1 +/
Сообщение от Аноним (228), 04-Янв-22, 11:58 
Это два языка. Никогда не видел перечисление косой чертой?
Ответить | Правка | К родителю #94 | Наверх | Cообщить модератору

290. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  –4 +/
Сообщение от Аноним (-), 04-Янв-22, 18:32 
В Юникс мире такого перечисления никто не знает.
Ответить | Правка | Наверх | Cообщить модератору

24. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +1 +/
Сообщение от Аноним (2), 03-Янв-22, 12:02 
> закидывают всё в один проект и делают монолитные проекты на 60 миллионов строк кода которые компиляются в районе суток

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

Ответить | Правка | К родителю #17 | Наверх | Cообщить модератору

39. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от Аноним (17), 03-Янв-22, 12:22 
Я гентушник, мне не надо "заходить в билд систему", она у меня прямо на компе.

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

Ответить | Правка | Наверх | Cообщить модератору

48. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +2 +/
Сообщение от Аноним (2), 03-Янв-22, 12:38 
> проблема рук, растущих не из того места, а не языка.

Следовательно, таки языка, а не рук.

Ответить | Правка | Наверх | Cообщить модератору

412. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от n00by (ok), 08-Янв-22, 19:57 
А если бы хоть раз посмотрели машинный код после кодогенератора Дельфи, то удивления бы не было.
Ответить | Правка | К родителю #24 | Наверх | Cообщить модератору

416. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от A.N.Onimous (?), 08-Янв-22, 23:17 
>из-за особенностей ядерной разработки

Интересный эвфемизм для отсутствия архитектуры

Ответить | Правка | К родителю #17 | Наверх | Cообщить модератору

18. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от Аноним (18), 03-Янв-22, 11:51 
Ява же любит кушать память
Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

37. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  –7 +/
Сообщение от iZENemail (ok), 03-Янв-22, 12:16 
> Ява же любит кушать память

Пальму первенства по этому свойству она давно отдала Rust'у.


Ответить | Правка | Наверх | Cообщить модератору

86. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +5 +/
Сообщение от Rev (?), 03-Янв-22, 13:48 
А будут ссылки на доказательства, или ты просто балабол?
Ответить | Правка | Наверх | Cообщить модератору

96. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  –1 +/
Сообщение от Аноним (96), 03-Янв-22, 14:16 
Из книжки Rust:
Гарантии безопасности памяти в Rust затрудняют, но не делают невозможным случайное выделения памяти, которая никогда не очищается (что известно как утечка памяти ). Полное предотвращение утечек памяти не гарантируется Rust, так же как не является гарантией отсутствие гонок данных проверенных во время компиляции, а это означает, что утечки памяти безопасны в Rust.

В реальности:
Так же как Java безопастный раст может схавать столько памяти, сколько ей дадут или пока не прибьют OOM киллеры, т.к. память течет.

Ответить | Правка | Наверх | Cообщить модератору

159. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +3 +/
Сообщение от kai3341 (ok), 03-Янв-22, 18:37 
Давай переведу с русского на русский: разработчики Rust предупреждают, что говнокод может течь -- какая неожиданность
Ответить | Правка | Наверх | Cообщить модератору

171. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +2 +/
Сообщение от pda (ok), 03-Янв-22, 21:03 
Подождите, этот гений однажды узнает, что в Java несмотря на gc тоже возможны утечки памяти, его тогда инфаркт хватит...
https://www.baeldung.com/java-memory-leaks
Ответить | Правка | Наверх | Cообщить модератору

230. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от aname (?), 04-Янв-22, 12:43 
Так а зачем нам такой безопасный язык- то?
Ответить | Правка | К родителю #159 | Наверх | Cообщить модератору

253. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +1 +/
Сообщение от Аноним (253), 04-Янв-22, 15:30 
Затем что невозможно избежать утечек памяти. Это как пытаться избежать языковыми средствами возможности зацикливания (проблема останова). Можно, но не будет уже полноты по Тьюрингу.

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

Ответить | Правка | Наверх | Cообщить модератору

286. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от Аноним (286), 04-Янв-22, 18:06 
>Затем что невозможно избежать утечек памяти.

Тогда и не надо было пыжиться, пытаясь заменить C++, Rust отличная замена сишарпа, только вот с такими приколами в нишу сишки с плюсами ему не пролезть.

Ответить | Правка | Наверх | Cообщить модератору

307. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от Аноним (253), 04-Янв-22, 21:45 
Сишарп на виртуальной машине работает. Его сравнивать с Rust/C++/C некорректно, можно с Явой.

Раст (по примеру ремня безопасности в машине) избавит от 70% эксплуатируемых уязвимостей. Напомню, что утечка памяти в программе на rust это максимум denial-of-service класс атаки.

https://www.zdnet.com/article/chrome-70-of-all-security-bugs.../
https://msrc-blog.microsoft.com/2019/07/16/a-proactive-appro.../

Ответить | Правка | Наверх | Cообщить модератору

325. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от Онаним (?), 05-Янв-22, 11:31 
На данный момент он да, избавляет от 99% эксплуатируемых уязвимостей, просто потому, что эксплуатировать нечего и негде.
Ответить | Правка | Наверх | Cообщить модератору

348. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от DyadyushkaAU (ok), 05-Янв-22, 14:14 
В твоём г-нокоде - вполне возможно. Google, MS, Huawei, Mozilla, Amazon - уже эксплуатируют вовсю. Разумеется, речь не идёт о полном переписывании с нуля всего и вся, это было бы очень и очень дорого.
Ответить | Правка | Наверх | Cообщить модератору

283. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от Аноним (286), 04-Янв-22, 18:00 
>разработчики Rust предупреждают, что

сборка мусора не работает и надо использовать костыли, а криков-то по поводу free() было...

Ответить | Правка | К родителю #159 | Наверх | Cообщить модератору

308. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от Аноним (253), 04-Янв-22, 21:47 
Каким образом выход за скоуп объекта с его немедленным освобождением является костылем? Проще и органичней еще ничего не придумали.
Ответить | Правка | Наверх | Cообщить модератору

431. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от Аноним (431), 12-Янв-22, 07:20 
>разработчики Rust предупреждают, что говнокод может течь

На Rust бывает другой код?

Ответить | Правка | К родителю #159 | Наверх | Cообщить модератору

432. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +1 +/
Сообщение от Аноним (-), 12-Янв-22, 14:29 
>>разработчики Rust предупреждают, что говнокод может течь
> На Rust бывает другой код?

У тебя нет, независимо от ЯП.
Но не все люди - ты.

Ответить | Правка | Наверх | Cообщить модератору

93. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от lufog (ok), 03-Янв-22, 14:08 
Сомнительное утверждение, учитывая что в Rust нет сборщика мусора, а ресурсы освобождаются автоматически при выходе переменной из области видимости. В теории, конечно можно оперировать сырыми указателями в unsafe блоке, и управлять памятью вручную, но это ничем не будет отличаться от того же C/C++.
Ответить | Правка | К родителю #37 | Наверх | Cообщить модератору

413. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от n00by (ok), 08-Янв-22, 20:05 
Удивительно, но free() не обязательно освобождает ресурсы, а всего лишь возвращает память куче. Потому, когда на "том же же C/C++" пишут специфичные для задачи менеджеры памяти, которые решают проблему фрагментации кучи, "автоматическое освобождение" течёт. А когда все переменные стековые, то получается максимум HelloWorld.
Ответить | Правка | Наверх | Cообщить модератору

46. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  –2 +/
Сообщение от Аноним (46), 03-Янв-22, 12:33 
Когда на любой чих делают аллокацию объекта, да еще и в цикле, а потом ява виновата, а не криворукие кодеры.
В джаве так-то можно JVM указать, сколько хипа она максимально может выжрать, прежде чем с ООМ грохнется.
Ответить | Правка | К родителю #18 | Наверх | Cообщить модератору

170. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от лютый жабби__ (?), 03-Янв-22, 21:03 
>В джаве так-то можно JVM указать, сколько хипа она максимально может выжрать

и как это опровергает фразу "жаба жрёт ОЗУ как свинья помои"? Погугли сколько памяти в жабе занимает Double или Integer )

И, кстати, делать 100500 одноразовых иммутабельных объектов (и массово заниматься их копированием с места на место) - это прямая рекомендация от корифеев многопоточного погромирования на жабе )

Ответить | Правка | Наверх | Cообщить модератору

357. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от Аноним (46), 05-Янв-22, 14:50 
Иммутабельность позволяет получить дешевую в поддержке потокобезопасность. Никто не пойдет ковыряться в проекте, где мьютекс на мьютексе и семафором погоняет. Ну может за ОЧЕНЬ большие деньги. А так как у иммутабельных объектов нет стейта, их можно закешировать в пул и возвращать одну и ту же сцыль. Так что все проблемы с аллокацией снова от криворуких кодеров, не могущих в педантичное переиспользование того, что можно переиспользовать. Про Flyweight паттерн еще GoF писали.
P.S. А классы-обертки везде использовать тебя никто не заставляет.
"Нормально делай - нормально будет." (с)
Ответить | Правка | Наверх | Cообщить модератору

27. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +2 +/
Сообщение от Аноним (27), 03-Янв-22, 12:07 
Тем временем не только лишь каждый Java проект размером на 3 порядка меньше собирается быстрее, чем за 130с.
Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

153. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +2 +/
Сообщение от Аноним (153), 03-Янв-22, 18:04 
Настоящий Java проект только на скачивание артифактов трати больше чем 120 сек
Ответить | Правка | Наверх | Cообщить модератору

193. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +1 +/
Сообщение от мое правило (?), 03-Янв-22, 23:25 
У нас серверок был, логики не очень много и полностью кастомная, на джава.

И там были зависимости на апач либы разной бигдата направленности. И эта помойная параша без локального кеша с быстрого прокси в сети качала зависимости 1.5 часа. Оно писало сотни тысяч мелких и больших файликов, делало миллионы запросов на ьедное прокси. С локальным кешом собиралось 30 минут. Что бы не страдать во время локального девелопмента я на начале спринта регулярно запускал скрипт, который собирал свежие зависимости и хардкодом записывал их во все возможные анналы класспаса, и чистил зависимости. Таким образом сборка кода и артефактов для установки занимала 10 минут.

Ответить | Правка | Наверх | Cообщить модератору

35. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  –3 +/
Сообщение от Аноним (35), 03-Янв-22, 12:15 
> В каком нибудь Дельфи жмещь запустить - и сразу запускается

С Бейсиком не попутали?

Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

113. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от OpenEcho (?), 03-Янв-22, 15:49 
Да и не с каждым Бейсиком прокатит, Power Basic к примеру тоже компилировать сперва прийдется
Ответить | Правка | Наверх | Cообщить модератору

161. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +2 +/
Сообщение от Аноним (161), 03-Янв-22, 18:43 
Кстати разработчики Delphi реально всегда выпячивали скорость компиляции, как главное преимущество над C++. Явное разделение интерфейса и имплементации позволяло делать очень быстрые однопроходные компиляторы.
Ответить | Правка | К родителю #35 | Наверх | Cообщить модератору

194. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  –2 +/
Сообщение от Аноним Максим (?), 03-Янв-22, 23:26 
На момент выхода Делфи скорость компиляции равноценных проектов переписанных с Си действительно отличалась на порядки, но это ж было аж на 386 процессорах и жесткими дисками даже без DMA.
В то время и я писал на Делфи не смотря на паталогическое неприятие Паскаля.
Логично, когда скорость компиляции Делфи на реальных проектах перестала быть ключевой особенностью, а среда разработки закостенела, тут от нее массово и отказались.
Ответить | Правка | Наверх | Cообщить модератору

52. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +2 +/
Сообщение от Аноним (96), 03-Янв-22, 12:52 
Тормозное выполнение с гигабайтами памяти или тормозная сборка? что важнее конечному пользователю эклипса, андроида и прочих тормозных продуктов ява мира? Но на пользователей уже всем плевать, хренак хренак в продакшн и лишь бы побыстрее. потом просто сменим обои, кнопки - главное есть видимость улучшения.
Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

53. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  –3 +/
Сообщение от Аноним (53), 03-Янв-22, 12:52 
Потому что, когда придумывали Си, не было гигабайтов памяти. И даже мегабайтов не было.
Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

56. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  –3 +/
Сообщение от iZENemail (ok), 03-Янв-22, 12:57 
> Потому что, когда придумывали Си, не было гигабайтов памяти. И даже мегабайтов не было.

Си придумали как заменитель ассемблера (который на каждой машине в 1970-х годах был свой), чтобы перенести Unix с одной машины (устаревающей не по дням, а по часам) на новую машину. "Быстро и грязно" — было в порядке вещей для C того времени.


Ответить | Правка | Наверх | Cообщить модератору

68. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +8 +/
Сообщение от Аноним (68), 03-Янв-22, 13:23 
>"Быстро и грязно" — было в порядке вещей для C того времени.

это и сейчас в порядке вещей, для всего

Ответить | Правка | Наверх | Cообщить модератору

231. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  –1 +/
Сообщение от DyadyushkaAU (ok), 04-Янв-22, 13:00 
Не надо преувеличивать. Может вы и не заметили, но некоторые вещи меняются к лучшему. Возьмём, к примеру, Rust. Там и модули есть, и с памятью работа корректная. Хотя некоторые программисты на Си к грязи настолько привыкли, что уже и не замечают, как они по макушку в ней увязли. Для них это уже естественное состояние. А потом появляются Геркулесы (наподобие того, что в новости) и пытаются хоть как-то расчистить то, что накопилось.
Ответить | Правка | Наверх | Cообщить модератору

238. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от Аноним (68), 04-Янв-22, 13:37 
>Возьмём, к примеру, Rust.

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

Ответить | Правка | Наверх | Cообщить модератору

366. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от DyadyushkaAU (ok), 05-Янв-22, 16:04 
В каждой новой версии старая грязь остаётся только... в старой редакции. Другими словами, это настраиваемо, хочешь ли ты тащить эту грязь в свой новый проект (для какой-то обратной совместимости), или ограничишься свежайшей редакцией. Поэтому можно смело заявлять, в Rust НЕТ грязи.

https://habr.com/ru/post/557460/

Ответить | Правка | Наверх | Cообщить модератору

380. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  –2 +/
Сообщение от Аноним (380), 06-Янв-22, 00:11 
вы каждый день начинаете новый проект? ;)
Ваш проект тоже может быть сделан быстро и грязно и у вас сейчас полно других более насущных проблем, чем настраивать концентрацию расто-грязи.

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

Ответить | Правка | Наверх | Cообщить модератору

383. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от DyadyushkaAU (ok), 06-Янв-22, 13:17 
> Ваш проект тоже может быть сделан быстро и грязно и у вас
> сейчас полно других более насущных проблем, чем настраивать концентрацию расто-грязи.

Причём здесь какой-то отдельной взятый проект? В случае с C, C++ вы по умолчанию тащите весь накопленный "багаж знаний" компилятора. Rust же вас ограничивает в этом багаже: вы в одном и том же коде не можете применять разные техники и разные стандарты, как в случае с C++.
О какой "расто-грязи" в таком случае вы вообще говорите?

> Да даже то, что раст использует llvm говорит об упомянутом подходе

Смешались в кучу кони, люди. Причём здесь LLVM?

--
> это было быстро, т.к. взяли готовое и в то же время грязно, т.к. всякие достоинства раста на это готовое не распространяются

Ему и не надо распространяться. Компилятор Rust надаёт вам по рукам ДО ТОГО, как дело дойдёт до компиляции в машинный код.

Ответить | Правка | Наверх | Cообщить модератору

389. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от Аноним (68), 06-Янв-22, 17:08 
> В случае с C, C++ вы по умолчанию тащите весь накопленный "багаж знаний" компилятора.

не-а — у меня лишь нет препятствий тащить

> О какой "расто-грязи" в таком случае вы вообще говорите?

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

> Смешались в кучу кони, люди. Причём здесь LLVM?

он ведь все еще используется? Ну там "Rust compiles to LLVM" и т.п.

> Компилятор Rust надаёт вам по рукам ДО ТОГО, как дело дойдёт до компиляции в машинный код.

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


PS: мы начали с того, что вам не понравилось мое общее высказывание по поводу "быстро и грязно"
>Не надо преувеличивать. Может вы и не заметили, но некоторые вещи меняются к лучшему. Возьмём, к примеру, Rust…

1. я так же заметил, что многие вещи меняются к лучшему во многих областях (языках, проектах) и даже C/C++ тут не исключение
2. понятия "нормы" или "грязи" меняются или, что еще хуже, они хорошо сдобрены маркетинговой чепухой. Сейчас ведь стало нормой писать жручие и падучие приложения, т.к. "контейнер в облаке перезапустится в N миллисекунд" или "планка памяти стоит как две чашки кофе" — программисты прошлого схватились бы за голову от такого.
3. "грязь" есть везде: где-то из-за незнания или неопытности, где-то из-за недостатка времени. Про то, что спорить про ее концентрацию я не намерен я уже писал
4. больше ни слова про раст и c/c++ :)

Ответить | Правка | Наверх | Cообщить модератору

390. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от DyadyushkaAU (ok), 06-Янв-22, 17:53 
> не-а — у меня лишь нет препятствий тащить

О чём я и говорил ранее. Программисты увязли по макушку в грязи, и этого не замечают. :)

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

Подмена понятий, ясно-понятно.

> он ведь все еще используется? Ну там "Rust compiles to LLVM" и т.п.

Да. И?

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

Есть конкретные претензии? Или так, теоретизируем?
Но допустим, что есть. Если вы чем-то недовольны, всегда можно сообщить об этом соответствующей команде. А кто конкретно будет решать найденную вами проблему (команда Rust или команда LLVM), какая уже разница?

> 1. я так же заметил, что многие вещи меняются к лучшему

Это не вы заметили. Это я заметил.

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

Меняются, да. Но не в сторону полных противоположностей, как вы, видимо, пытаетесь представить.

> Сейчас ведь стало нормой писать жручие и падучие приложения

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

Ответить | Правка | Наверх | Cообщить модератору

72. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от fsb4000 (?), 03-Янв-22, 13:31 
В С++ сделали модули. Лишь слегка медленнее чем fpc...
Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

160. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от kai3341 (ok), 03-Янв-22, 18:42 
Точно сделали? Там модули год назад всё порывались принять в стандарт да не приняли. Дальше я не следил
Или речь о динамически линкуемых библиотеках?
Ответить | Правка | Наверх | Cообщить модератору

183. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от fsb4000 (?), 03-Янв-22, 21:44 
модули приняли в С++20, а скоро уже С++23 выходит
Ответить | Правка | Наверх | Cообщить модератору

435. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от Аноним (435), 15-Янв-22, 15:56 
> модули приняли в С++20, а скоро уже С++23 выходит

Ага. В таком виде, в котором они никому не уперлись.

С includ'ами был одна проблема. При перекрестных вызовах методов из двух деревьев невозможно реализовать виртуальные методы возвращающие указатели нужного типа а не базовых.

В модулях это было бы сделать можно, но !!!

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

Занавес!

Ответить | Правка | Наверх | Cообщить модератору

191. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от ncemail (ok), 03-Янв-22, 23:21 
Насколько я понимаю, 50 лет назад были маленькие объемы оперативки. А модульность подразумевает компиляцию сразу всех файлов модуля в единое синтаксическое дерево, что позволяет вообще отказаться от include в рамках одного модуля (именно так в C# и Java). Далее, для каждого модуля определяется публичный интерфейс и приватная реализация, и интерфейсы всех модулей проекта должны быть в оперативке (в виде AST) всегда - только так можно избежать постоянной перекомпиляции инклудов (когда один инклуд подключен в тысячи файлов и перекомпилируется тысячи раз вместе с каждым исходником). Вероятно, когда оперативка измерялась килобайтами, сделать все это было затруднительно.
В Си решили поступить по простому - сделали псеводмодульность вручную, т.е. заголовочный файл - это написанный вручную публичный интерфейс. Ну и попались на этом - объемы оперативки стали расти, объемы кода тоже, переписывать язык и весь код уже было нереально, "работает - не трожь" и тому подобное. Кривизна этого подхода особенно явственно вылезла в С++, который унаследовал инклуды Си, а в заголовочные файлы стали пихать шаблонный код.
Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

200. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +1 +/
Сообщение от Ordu (ok), 04-Янв-22, 00:16 
> модульность подразумевает компиляцию сразу всех файлов модуля в единое синтаксическое дерево

Не, как я понимаю, не подразумевает. Если ты, компилируя модуль, будешь генерировать файл типа "скомпилированный модуль", который будет что-то типа комбинации сишных .o и .h, но подчёркнуто бинарным, чтобы можно было бы быстро оттуда в оперативку вытащить декларации и перегнать их во внутреннее представление, используемое компилятором, то... А если ты ещё дашь возможность импортировать не только модуль целиком, но и частями, типа:

use std::io::{Read, Write};

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

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

Но, как бы это сказать, во-первых, проблема с инлайнами не является непреодолимой проблемой даже на 64Kb оперативки, просто взгеморроиться надо, а параметризацию по типу тогда всё равно не делали, то есть её проблемы можно игнорить. А во-вторых, в C из 70-х не было inline-функций. Правда вместо них были макросы.

Паскаль разрабатывался на несколько лет позже чем C, и он вполне справлялся с модулями. ТурбоПаскаль в начале 80-х вышел и работал на тех PC, в которых не было никаких мегабайт оперативки, и я не думаю что в этих PC было больше оперативки чем в PDP-11, на котором создавался C и Unix. Скорее даже наоборот.

Это сейчас модульность реализуют так, чтобы хранить в оперативке дохрена гигабайт AST. Но это, как я понимаю, делается с целью выполнить максимум оптимизаций на уровне AST, то есть там, где у компилятора больше всего семантической информации, и где больше возможностей для оптимизации. А в 70-е... какая оптимизация, ты о чём?

Ответить | Правка | Наверх | Cообщить модератору

201. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +1 +/
Сообщение от Аноним (201), 04-Янв-22, 01:24 
Это и так можно делать, достаточно не держать в инклюдах ничего кроме объявлений и порезать использование шаблонов. Но все равно не поможет, так как хотелось бы чтобы линкер пооптимизировал код между объектниками всякими LTO, PGO а может и BOLTом.
Ответить | Правка | К родителю #191 | Наверх | Cообщить модератору

375. "Опубликован набор патчей, ускоряющих сборку ядра Linux на 50..."  +/
Сообщение от Аноним (375), 05-Янв-22, 19:36 
Ява вообще тут не к месту переплетена, тут она работает как многие динамические языки лениво подгружая зависимости по мере необходимости.
Когда есть обращение к классу, этот класс ищется в загрузчике классов (в памяти JVM), если не найден,  то он ищется в classpath. В том числе по этому "java тормозит", она лениво подгружается после холодного старта, а всякие программки на go и c стартуют практически моментально (когда не требуют загрузки ресурсов с дисков).
Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру