Да, конечно, StringZilla SIMD и есть, просто писать поиск подстрок с нуля - это "переизобретение колеса" в какой-то мере, кроме того есть ещё разные алгоритмы (ну там Кнут-Моррис-Пратт и т.д), в принципе под какие-то специфические данные можно повозиться, а вот в общем случае имеющиеся библиотеки типа этой потребности покрывают. А про i9-10900KF - я прочитал статью слишком быстро и мне показалось, что там "эмулируемый" в камушке AVX512, которого в природе не существует. Так-то у меня есть пара Xeon с AVX-512, может на досуге гляну.
Эх, было бы ещё здорово рассмотреть то, как роботы программируются (ну там ABB RAPID, Kuka KRL, Fanuc KAREL, что там ещё?), где собственно крутится управляющая программа, и то, как они потом общаются с внешним миром - с ПЛК или промышленным компом, там OPC UA, полевые шины, АСУ ТП, СКАДА, вот это вот всё. В принципе там прям особых принципиальных отличий между марками нет, но есть нюансы. Самое классное, что видел - на выставке в Ганновере к Куке приделали пару кресел и катали там людей, как на аттракционе, но я не рискнул, зная что там в реалтайме крутилась Windows XP, хоть и с навешенным Wind River VxWorks, хотя это не подводило ни разу на моей памяти. На самом деле они довольно надёжные, как по аппаратной, так и по программной части.
для получения лицензии пожарного <...> разработал приложение на основе искусственного интеллекта, которое работает со смарт-очками. Мужчина хотел проверить, сможет ли приложение генерировать правильные ответы в режиме реального времени.
Вот то ли всё совсем плохо с трудоустройством программистов, то ли это просто тестировщик-фрилансер сейчас получит по шапке, то ли кандидаты в пожарные с очень широким набором знаний пошли, либо напротив, любой пожарный может нынче разработать такое приложение, то ли просто решил сменить профессию... Тема не раскрыта, короче.
Варианта "другое" не хватает в опросе. У меня StringZilla живёт, в общем не жалуюсь. Правда не .net, а LabVIEW и Раст. А вот то, что у i9-10900KF нет аппаратного AVX512 — не знал, надо будет побенчмаркать на досуге, если до такого камушка доберусь.
замедление времени — всё это стоит на обычном школьном синусе, которому угол сделали мнимым.
Ну то есть мы можем, пользуясь такими синусами честно и численно показать аномальное смещение перигелия Меркурия, которое 43 угловые секунды? Было бы любопытно взглянуть на расчёты.
Не, я думаю там не на llvm основное время уходит, им-то многие компиляторы пользуются, и там всё резвее. Тут дело в том, что ещё до llvm производится несколько проходов. Если вы в курсе основных фишек Раста, я имею ввиду владение, заимствование, мутабельность и время жизни, вот это вот всё, то вы поймёте почему так, там всё это чекается на предварительных проходах.
Вот смотрите, допустим такой примитивный код, тут восемь строчек всего:
fn main() {
let mut x = 10; // создаём изменяемую переменную x со значением 10
add_one(&mut x);// передаём изменяемую ссылку на x (mutable borrow)
println!("x after mod: {x}"); // выводим значение x после изменения
}
fn add_one(n: &mut i32) {
*n += 1; // разыменовываем ссылку и увеличиваем значение на 1
}
Вначале при компиляции идёт стадия HIR (High‑Level IR) - преобразование в высоко-уровневое промежуточное представление. С некоторой натяжкой его можно назвать "препроцессор", тут разворачиваются макросы, код очищается от "сахара", вот что получится, это всё ещё Раст:
extern crate std;
#[attr = PreludeImport]
use std::prelude::rust_2024::*;
fn main() {
let mut x =
10; // создаём изменяемую переменную x со значением 10
add_one(&mut x); // передаём изменяемую ссылку на x (mutable borrow)
// выводим значение x после изменения
// разыменовываем ссылку и увеличиваем значение на 1
{
::std::io::_print({
super let args = (&x,);
super let args = [format_argument::new_display(args.0)];
unsafe {
format_arguments::new(b"\rx after mod: \xc0\x01\n\x00",
&args)
}
});
};
}
fn add_one(n: &'_ mut i32) { *n += 1; }
Затем идёт вторая стадия, THIR (Typed High‑Level IR), тоже высокоуровневая, тут я только кусочек покажу:
Следом идёт средняя промежуточная стадия MIR (Mid‑Level Intermediate Representation), тут мы ближе к llvm, и как раз на этом этапе разбираются заимствования, владения, времена жизни, и Miri, кстати, работает как раз на этом уровне:
Вот что происходит всего с восемью строчками кода. Я полагаю, что основное время затрачивается на этапе THIR, но как-то руки не доходили проверить, да и не знаю как.
лучше не выдавать один гигантский крейт, в котором содержится всё и сразу. Вместо этого мы откорректировали наш компилятор, преобразующий SQL в Rust, так, чтобы он распределял вывод на несколько более мелких крейтов.
Это первое, что пришло в голову, даже недочитав до этого места, ведь хорошо известно, что проект с сотней-другой крейтов при компиляции после cargo clean занимает многоядерник на всю катушку:
У меня возник вопрос — если тут транспилятор на другой язык, то почему именно Раст? Ведь можно с таким же успехом и в Си перегонять, но вижу, что это просто перевод.
И это то, что нам показывают, а так я совершенно не удивлюсь, если её супруг, дегустирующий эти самые булочки, внезапно окажется владельцем какого-нибудь рекламного агенства и знакомым управляющего кафе, плюс организовавший команду для съёмки и пиара тикток роликов и до кучи знающий кого-нибудь из Business Insider, и всё это просто красиво поданный бизнес-проект. Вот не верю я нынче в такие истории...
У моей супруги в Фиате 500 спорт стоит любопытный моторчик — Twin Air Turbo, объёмом 0.9 литра. Там всего два цилиндра, причём они работают синфазно (вот не спрашивайте, поджигается ли там смесь в двух сразу или поочерёдно, я всё-таки думаю, что поочерёдно). Чтобы всё это чудо не ходило ходуном, там вал с противовесами в обратную сторону крутят. На канале Ильдар автоподбор его разбирали, там владелец был недоволен динамикой, но его в тяжёлую машину 500L вкорячили, либо там ещё и 85 сил версия была до кучи. Но 105 сил лёгкому Фиату вполне хватает, в спорт режиме он за 10 секунд примерно до сотни разгоняется, и по автобану 200 из него выжать можно, что для литрового неплохо. А в эко-режиме он экономичный, если ехать аккуратно, то 4 c небольшим литра на сотню. Он старенький довольно, в 2011 получил награду "лучший мотор года". Звук при работе правда странный, почти как мотоцикл с погромыхивающими клапанами.
Мощно, спору нет. А разве голый кирпич не надо ничем снаружи облицовывать, он же вроде довольно пористый и влагу будет набирать будь здоров? В Гамбурге очень много "кирпичных" домов, это стиль такой, но если присмотреться, то там на самом деле не обычный кирпич, а "клинкер", типа специальный облицовочный, почти квадратный в сечении он как керамика обожжённая со слоем глазури, его обычно через слой теплоизоляции кладут.
С гитхабом тоже надо аккуратно, скажем тот же код LabVIEW (который графический) туда нечасто выкладывают просто потому, что гитхаб под него не слишком заточен и он просядет в рейтинге, опять же учёные не так часто гитхабом пользуются, так что долю того же MATLAB это тоже опустит немного. Тут что-то комбинированно-взвешенное надо.
Делал себе что-то похожее, когда учил французский, на LabVIEW правда. Но у меня были проблемы с восприятием на слух, так что я брал учебные тексты и диалоги с аудио рядом и делал воспроизведение по предложениям или словам с возможностью замедления воспроизведения (есть алгоритмы, позволяющие замедлить, но без изменения высоты тона). Правда с форматом не заморачивался, просто XML с маркерами времени, чтобы звук из wav брать и проигрывать. В принципе похожие программы есть, просто в каждой что-то да не устроило.
Я просто немного этой области "касаюсь" и вижу там всё больше тот же LabVIEW, вот ещё Фортран, и MATLAB/Octave/Maple, ну и Python в последнее время. Хотя возможно, моя выборка нерепрезентативна. Повод посмотреть на R повнимательнее, я никогда его не "трогал", честно говоря, хотя стараюсь быть в курсе и на всех из первой двадцатки что-то делал, кроме Ada и Swift, пожалуй.
Самое главное тут - LabVIEW с 32-го места переехал на 26-е, обогнав Julia и Kotlin, глядишь, так и в двадцатку войдёт! Вообще к этому рейтингу есть некоторые вопросы, я вот сильно не уверен, что R так уж популярен, но в общем топ 5 и так хорошо известен.
Попробовал на мультимониторной конфигурации - тоже работает, но почему-то окна при максимизации залетают под док, ровно тот же исполняемый файл но на одномониторном ноуте работает норм - при макисмизации они разлетаются только до границы и под док не залазят. Может быть проблема винды. Ну и уже понятно, что надо фильтровать окна - скажем у меня на левом мониторе обычно брааузер открыт и он ничем не перекрывается, и его превьюшка не нужна, ну а в режиме работы с LabVIEW хочется видеть только превьюшки от этой среды, а другие не нужны, но это легко можно допилить. В общем стандартные хотелки, которые можно самому доделать под себя.
Да, спасибо, стало лучше. Штука оказалась неожиданно удобная, сегодня заполнял налоговую - на экране дофига всего, и калькулятор, а в превьюшке виден последний результат, и эксель, и там увеличение при наведении мыши удобно. Дома у меня не очень большой экран, а на работе не так актуально, там у меня три монитора, из них два вертикальных, но тоже попробую.
18кб это если собирать из расчёта что в системе есть рантайм.
Вы невнимательно коммент прочитали, не 18 кб, а "на 18 кб меньше". У автора исполняемый файл 2001К или 2.049.024 байт, а если просто заменить таргет с 11 на 10 в csproj и собрать вот ровно той же командой dotnet publish -c Release -r win-x64, то будет 1967К или 2.013.696 байт, то есть на 34 кб меньше. А 18 кб - это после того, как я скроллбар туда добавил. Кстати, его ещё и upx пожать можно, он не потеряет работспособности, а станет меньше мегабайта - 884224 байт всего.
Да, конечно, StringZilla SIMD и есть, просто писать поиск подстрок с нуля - это "переизобретение колеса" в какой-то мере, кроме того есть ещё разные алгоритмы (ну там Кнут-Моррис-Пратт и т.д), в принципе под какие-то специфические данные можно повозиться, а вот в общем случае имеющиеся библиотеки типа этой потребности покрывают. А про i9-10900KF - я прочитал статью слишком быстро и мне показалось, что там "эмулируемый" в камушке AVX512, которого в природе не существует. Так-то у меня есть пара Xeon с AVX-512, может на досуге гляну.
Эх, было бы ещё здорово рассмотреть то, как роботы программируются (ну там ABB RAPID, Kuka KRL, Fanuc KAREL, что там ещё?), где собственно крутится управляющая программа, и то, как они потом общаются с внешним миром - с ПЛК или промышленным компом, там OPC UA, полевые шины, АСУ ТП, СКАДА, вот это вот всё. В принципе там прям особых принципиальных отличий между марками нет, но есть нюансы. Самое классное, что видел - на выставке в Ганновере к Куке приделали пару кресел и катали там людей, как на аттракционе, но я не рискнул, зная что там в реалтайме крутилась Windows XP, хоть и с навешенным Wind River VxWorks, хотя это не подводило ни разу на моей памяти. На самом деле они довольно надёжные, как по аппаратной, так и по программной части.
Вот то ли всё совсем плохо с трудоустройством программистов, то ли это просто тестировщик-фрилансер сейчас получит по шапке, то ли кандидаты в пожарные с очень широким набором знаний пошли, либо напротив, любой пожарный может нынче разработать такое приложение, то ли просто решил сменить профессию... Тема не раскрыта, короче.
Варианта "другое" не хватает в опросе. У меня StringZilla живёт, в общем не жалуюсь. Правда не .net, а LabVIEW и Раст. А вот то, что у i9-10900KF нет аппаратного AVX512 — не знал, надо будет побенчмаркать на досуге, если до такого камушка доберусь.
— А о чём, товарищи, эта книга? — осведомился он.
— Да ни о чём, — сказал я.
Купите мощный UV фонарь, где-то 400 нм вроде, выйдите на поиски вечером и попробуйте поискать по флуоресценции.
Ну то есть мы можем, пользуясь такими синусами честно и численно показать аномальное смещение перигелия Меркурия, которое 43 угловые секунды? Было бы любопытно взглянуть на расчёты.
Не, я думаю там не на llvm основное время уходит, им-то многие компиляторы пользуются, и там всё резвее. Тут дело в том, что ещё до llvm производится несколько проходов. Если вы в курсе основных фишек Раста, я имею ввиду владение, заимствование, мутабельность и время жизни, вот это вот всё, то вы поймёте почему так, там всё это чекается на предварительных проходах.
Вот смотрите, допустим такой примитивный код, тут восемь строчек всего:
Вначале при компиляции идёт стадия HIR (High‑Level IR) - преобразование в высоко-уровневое промежуточное представление. С некоторой натяжкой его можно назвать "препроцессор", тут разворачиваются макросы, код очищается от "сахара", вот что получится, это всё ещё Раст:
Затем идёт вторая стадия, THIR (Typed High‑Level IR), тоже высокоуровневая, тут я только кусочек покажу:
Так-то там восемьсот(!) с лишним строк
Следом идёт средняя промежуточная стадия MIR (Mid‑Level Intermediate Representation), тут мы ближе к llvm, и как раз на этом этапе разбираются заимствования, владения, времена жизни, и Miri, кстати, работает как раз на этом уровне:
Полностью
И лишь затем идёт собственно llvm, это четвёртая стадия, там видно как наша константа 10 с инкрементом "сфолдилась" в 11:
.LLVM полностью:
LLVM
На а дальше ассемблер, тут просто по итогу печатаем 11 в консоль, вот здесь:
Ассемблер
полный листинг
Вот что происходит всего с восемью строчками кода. Я полагаю, что основное время затрачивается на этапе THIR, но как-то руки не доходили проверить, да и не знаю как.
Это первое, что пришло в голову, даже недочитав до этого места, ведь хорошо известно, что проект с сотней-другой крейтов при компиляции после cargo clean занимает многоядерник на всю катушку:
У меня возник вопрос — если тут транспилятор на другой язык, то почему именно Раст? Ведь можно с таким же успехом и в Си перегонять, но вижу, что это просто перевод.
Да потому что "сварщицей" уже было — https://www.businessinsider.com/software-engineer-pivoted-to-welding-because-ai-happier-now-2026-3... Ждём теперь такую же историю про, ну не знаю, водительницу грузовика, что ли?
И это то, что нам показывают, а так я совершенно не удивлюсь, если её супруг, дегустирующий эти самые булочки, внезапно окажется владельцем какого-нибудь рекламного агенства и знакомым управляющего кафе, плюс организовавший команду для съёмки и пиара тикток роликов и до кучи знающий кого-нибудь из Business Insider, и всё это просто красиво поданный бизнес-проект. Вот не верю я нынче в такие истории...
У моей супруги в Фиате 500 спорт стоит любопытный моторчик — Twin Air Turbo, объёмом 0.9 литра. Там всего два цилиндра, причём они работают синфазно (вот не спрашивайте, поджигается ли там смесь в двух сразу или поочерёдно, я всё-таки думаю, что поочерёдно). Чтобы всё это чудо не ходило ходуном, там вал с противовесами в обратную сторону крутят. На канале Ильдар автоподбор его разбирали, там владелец был недоволен динамикой, но его в тяжёлую машину 500L вкорячили, либо там ещё и 85 сил версия была до кучи. Но 105 сил лёгкому Фиату вполне хватает, в спорт режиме он за 10 секунд примерно до сотни разгоняется, и по автобану 200 из него выжать можно, что для литрового неплохо. А в эко-режиме он экономичный, если ехать аккуратно, то 4 c небольшим литра на сотню. Он старенький довольно, в 2011 получил награду "лучший мотор года". Звук при работе правда странный, почти как мотоцикл с погромыхивающими клапанами.
До кучи я иногда пользуюсь вот этими:
Relyze https://www.relyze.com/index.html
TotalPE2 https://github.com/zodiacon/TotalPE2
010 Editor https://www.sweetscape.com/010editor/
Мощно, спору нет. А разве голый кирпич не надо ничем снаружи облицовывать, он же вроде довольно пористый и влагу будет набирать будь здоров? В Гамбурге очень много "кирпичных" домов, это стиль такой, но если присмотреться, то там на самом деле не обычный кирпич, а "клинкер", типа специальный облицовочный, почти квадратный в сечении он как керамика обожжённая со слоем глазури, его обычно через слой теплоизоляции кладут.
С гитхабом тоже надо аккуратно, скажем тот же код LabVIEW (который графический) туда нечасто выкладывают просто потому, что гитхаб под него не слишком заточен и он просядет в рейтинге, опять же учёные не так часто гитхабом пользуются, так что долю того же MATLAB это тоже опустит немного. Тут что-то комбинированно-взвешенное надо.
Делал себе что-то похожее, когда учил французский, на LabVIEW правда. Но у меня были проблемы с восприятием на слух, так что я брал учебные тексты и диалоги с аудио рядом и делал воспроизведение по предложениям или словам с возможностью замедления воспроизведения (есть алгоритмы, позволяющие замедлить, но без изменения высоты тона). Правда с форматом не заморачивался, просто XML с маркерами времени, чтобы звук из wav брать и проигрывать. В принципе похожие программы есть, просто в каждой что-то да не устроило.
Я просто немного этой области "касаюсь" и вижу там всё больше тот же LabVIEW, вот ещё Фортран, и MATLAB/Octave/Maple, ну и Python в последнее время. Хотя возможно, моя выборка нерепрезентативна. Повод посмотреть на R повнимательнее, я никогда его не "трогал", честно говоря, хотя стараюсь быть в курсе и на всех из первой двадцатки что-то делал, кроме Ada и Swift, пожалуй.
Самое главное тут - LabVIEW с 32-го места переехал на 26-е, обогнав Julia и Kotlin, глядишь, так и в двадцатку войдёт! Вообще к этому рейтингу есть некоторые вопросы, я вот сильно не уверен, что R так уж популярен, но в общем топ 5 и так хорошо известен.
Попробовал на мультимониторной конфигурации - тоже работает, но почему-то окна при максимизации залетают под док, ровно тот же исполняемый файл но на одномониторном ноуте работает норм - при макисмизации они разлетаются только до границы и под док не залазят. Может быть проблема винды. Ну и уже понятно, что надо фильтровать окна - скажем у меня на левом мониторе обычно брааузер открыт и он ничем не перекрывается, и его превьюшка не нужна, ну а в режиме работы с LabVIEW хочется видеть только превьюшки от этой среды, а другие не нужны, но это легко можно допилить. В общем стандартные хотелки, которые можно самому доделать под себя.
Да, спасибо, стало лучше. Штука оказалась неожиданно удобная, сегодня заполнял налоговую - на экране дофига всего, и калькулятор, а в превьюшке виден последний результат, и эксель, и там увеличение при наведении мыши удобно. Дома у меня не очень большой экран, а на работе не так актуально, там у меня три монитора, из них два вертикальных, но тоже попробую.
Вы невнимательно коммент прочитали, не 18 кб, а "на 18 кб меньше". У автора исполняемый файл 2001К или 2.049.024 байт, а если просто заменить таргет с 11 на 10 в csproj и собрать вот ровно той же командой dotnet publish -c Release -r win-x64, то будет 1967К или 2.013.696 байт, то есть на 34 кб меньше. А 18 кб - это после того, как я скроллбар туда добавил. Кстати, его ещё и upx пожать можно, он не потеряет работспособности, а станет меньше мегабайта - 884224 байт всего.