В старых терминалах не было юникода, эмождей/лигатур, столько цветов, rich-text, огромных scrollback, множества alt-screen и всё это должно рендериться через композитор(или самостоятельно) в 140+ герц на 4k.
И да в 90х и 2000х терминалы ещё как тупили, вы просто забыли.
Этот пример чуть больше проливает свет на причину происходящего, А то у неподготовленного читателя может появится мысль, что компиляторы тупые, или ещё более крамольная мысль - что Rust не блейзенгли =)
Да, борьба с накоплением ошибки происходит в основном за счёт этого куска:
let t = sum + y;
c = (t - sum) - y;
И если бы мы разрешили ассоциативность для float, то компилятор посмотрел бы и такой “бро, ща я оптимизирую твой код”:
c = (sum + y - sum) - y; // c = 0 <- компилятор выкидывает "с" и ломает нашу задумку.
И чтобы компиляторы не портили наш численно устойчивый код им запрещено его неявно оптимизировать.
Вот ещё более быстрый и более точный вариант и без unsafe из одноимённого блога.
#![allow(internal_features)]
#![feature(core_intrinsics)]
use std::intrinsics::fadd_algebraic;
fn sum_block(arr: &[f32]) -> f32 {
arr.iter().fold(0.0, |x, y| fadd_algebraic(x, *y))
}
pub fn sum_orlp(arr: &[f32]) -> f32 {
let mut chunks = arr.chunks_exact(256);
let mut sum = 0.0;
let mut c = 0.0;
for chunk in &mut chunks {
let y = sum_block(chunk) - c;
let t = sum + y;
c = (t - sum) - y;
sum = t;
}
sum + (sum_block(chunks.remainder()) - c)
}
Представьте, что вы — директор аэрокосмического агентства. У вас есть 5 миллионов строк Fortran-кода, который 40 лет считает аэродинамику крыла. Он проверен в десятках тысяч лётных часов, и в нём нет ни одной математической ошибки. Вам предлагают переписать это на Rust. За 3 года, командой из 50 человек, с бюджетом в 100 миллионов долларов. Вы согласитесь?
А чё, у нас на хабре много директоров аэрокосмических агенств захаживает?) Если смотреть с точки зрения исполнителя, то конечно лучше на Rust всё переписать за 5кк/месяц, чем "седеть" в пропёрженном НИИ и за 150к ковырять Fortran на поддержке.
Можно сослаться на то, что эти рейтинги замеряют в большей степени шум чем полезный сигнал. И в реальности Go не падает в популярности.
Go в основном популярен у корпоратов, и стагнация c наймом в IT сильнее влияет на этот язык, чем например на Rust, который больше популярен среди индивидуальных разработчиков, которые пилить свои пет-проекты не перестали из-за кризиса.
Я это к тому, что языков, которые бы обеспечивали совместимость с C++ и обладали бы теми же особенностями (нативный язык, без GC), вообще как бы и нет.
В том то и дело, что возможно, и это пока подтверждается на практике, язык совместимый с С++, но без его изъянов невозможен.
Ну я же привёл в качестве примера Rust, на котором ваше утверждение ломается.
Как уже выше заметили всякие cpp2, carbon, circle, safecpp, D и другие попытки не увенчались успехом. Из этого всего я бы сделал обратный вывод вашему - если вы ставите во главу угла обратную совместимость с С++ то ваш язык провалится.
Не понял, если просто добавить поле в структуру, то какое дублирование нужно? В метод конструктор в Self{} дописать поле?) И какие вы трейты собрались переписывать, когда в трейтах нельзя получить доступ к полю структуры?) Если вы имели ввиде переписывать имплементации, то это ничем не больше чем переписывать теже имплантации в любом ООП языке.
Notepad++ и Emeditor только для виндузятников же?
В старых терминалах не было юникода, эмождей/лигатур, столько цветов, rich-text, огромных scrollback, множества alt-screen и всё это должно рендериться через композитор(или самостоятельно) в 140+ герц на 4k.
И да в 90х и 2000х терминалы ещё как тупили, вы просто забыли.
Затем же зачем делают терминалы(kitti, alacritty, foot) с GPU рендерингом - ниже задержки и статтеры.
Экосистема? Чтобы редактировать код и писать промты?)
Не понимаю зачем для держателей старого железа обновлять ядро? Разве в этой среде не распространён девиз: "работает - не трогай" ?
del
Этот пример чуть больше проливает свет на причину происходящего, А то у неподготовленного читателя может появится мысль, что компиляторы тупые, или ещё более крамольная мысль - что Rust не блейзенгли =)
Да, борьба с накоплением ошибки происходит в основном за счёт этого куска:
И если бы мы разрешили ассоциативность для float, то компилятор посмотрел бы и такой “бро, ща я оптимизирую твой код”:
И чтобы компиляторы не портили наш численно устойчивый код им запрещено его неявно оптимизировать.
Вот ещё более быстрый и более точный вариант и без unsafe из одноимённого блога.
Я без претензий к Mozilla, я больше про саму новость (тема нераскрыта).
Наверное потому что оно мне ну нужно? обычно скриптов вокруг curl было достаточно.
Зачем? Будет ли он блэйзенгли фаст по сравнению с uBlock Origin?
А чё, у нас на хабре много директоров аэрокосмических агенств захаживает?) Если смотреть с точки зрения исполнителя, то конечно лучше на Rust всё переписать за 5кк/месяц, чем "седеть" в пропёрженном НИИ и за 150к ковырять Fortran на поддержке.
Вайбокодили и посложнее.
Не знаю, что разработчики подобного софта будут кушать, когда это всё может написать Ai.
Можно сослаться на то, что эти рейтинги замеряют в большей степени шум чем полезный сигнал. И в реальности Go не падает в популярности.
Go в основном популярен у корпоратов, и стагнация c наймом в IT сильнее влияет на этот язык, чем например на Rust, который больше популярен среди индивидуальных разработчиков, которые пилить свои пет-проекты не перестали из-за кризиса.
Да просто TIOBE какой-то корявый. Если смотреть не одного его, то картина как будто получается более ожидаемой. https://langrank.hexq.ru/
В том же PYPL Rust занимает 8 место и продолжает расти.
В том то и дело, что возможно, и это пока подтверждается на практике, язык совместимый с С++, но без его изъянов невозможен.
Ну я же привёл в качестве примера Rust, на котором ваше утверждение ломается.
Как уже выше заметили всякие cpp2, carbon, circle, safecpp, D и другие попытки не увенчались успехом. Из этого всего я бы сделал обратный вывод вашему - если вы ставите во главу угла обратную совместимость с С++ то ваш язык провалится.
Есть Rust, который можно сказать одной ногой в мейнстриме. Поэтому это не обязательное условие.
Не понял, если просто добавить поле в структуру, то какое дублирование нужно? В метод конструктор в
Self{}дописать поле?)И какие вы трейты собрались переписывать, когда в трейтах нельзя получить доступ к полю структуры?) Если вы имели ввиде переписывать имплементации, то это ничем не больше чем переписывать теже имплантации в любом ООП языке.