non-temporal store инструкции обычно даже не генерируются компиляторами, так что про "прямую" запись в память я даже не говорю. Разговор про запись в кэш процессора и его инвалидацию, и чтение данных другими ядрами процессора (а еще есть совместные кэши в hyperthreading, а NUMA nodes это вообще туши свет). Для согласования всего этого безобразия и нужны полноценные атомарные операции.
Выделение памяти может вызвать syscall (зависит от менеджера памяти, но по умолчанию jemalloc встроенный в Rust его делает, если в существующих таблицах не хватает места), а это переключение контекста, которое достаточно долгое. Естественно, это заметно только в масштабах миллионов операций в секунду, или на слабых процессорах. Более того, учитывая что автор упомянул no-std, программа возможно вообще работает без ОС, тогда либо нужен либо свой менеджер памяти, либо отказаться от её выделения вообще.
AsciiDoc нативно поддерживается всеми публичными репозитариями (github, gitlab), намного более гибкий и продуманный чем markdown + нормальное форматирование таблиц. Мы работали с бюрократами из PCI DSS, вся оригинальная документация была в AsciiDoc, и нормально конвертировалась в PDF включая сложные графики (использовали Mermaid). В markdown даже графику вставить нельзя. Весьма позорный формат, который должен уйти на свалку истории.
Есть нормальные алгоритмические задачки, которые можно использовать на собеседованиях, но к сожалению, это не особо просто продавать консалтинговым агентствам, и они требуют больше извилин и усилий от работодателя. Навскидку, класс алгоритмов по обработке данных:
Сжать картинку или текст (подсчёт повторений, отброс битов, словарь токенов/палитра). Проверяется сравнением размера. Бонус, если написал разархивацию, автоматом тоже можно проверить.
Сжатие картины с потерями (усредненная палитра, wavelet transform - знаю, что звучит страшно, но сам алгоритм тривиальный, до него можно додуматься с нуля). Автоматом тяжелее проверить, но есть соответствующие алгоритмы.
Шифрование данных (сжатие, подмена типа шифр цезаря, ротации, перевод в другую систему счисления, даже base64). Бонус за ассиметричное шифрование (нужна математика, но можно помочь, если ее описать заранее; причем даже зная математику, кандидаты испытывают трудности написать тот же RSA). Если говорить про RSA, то там нужен BigInteger, так что будет ещё лучше если кандидат такое напишет сам, а не просто воспользуется готовым или будет полагаться на ЯП (как Python с неограниченноой арифметикой).
В общем случае, лучше не делать выводов по порядку исполнения кода по тексту на высокоуровневом языке программирования (и Си - это высокоуровневый, низкоуровневый - это ассемблер или LLVM IR). Более того, даже машинный код может выполняться не по порядку из-за out-of-order execution (и это причина для memory ordering у атомиков).
Это оффтопик, и я точно признаю, что на Go иногда приятнее и быстрее писать, но есть нюансы, которые меня от него в свое время оттолкнули, и возвращаться к нему без необходимости я бы не стал (но приходится):
до generic, повсеместное использование interface{} . Новый тип данных, но старый алгоритм - либо copy-paste, либо interface{}.
работа с модулями конечно стала удобнее, но все-равно не так удобно, как в том же Rust. `go mod vendor`, `go mod tidy` и т.д., все это не выглядит удобно по сравнению с другими системами.
goroutine не 100% безопасны, у нас были и leak-и и другие проблемы с ними.
неконтролируемый GC, проседания производительности на ровном месте, особенно если интенсивная работа с памятью.
большие бинарники (если статическая сборка). Правда Rust тоже не отстает, но его бинарники можно оптимизировать.
Но переписывать на Rust я бы 100% не убеждал. Мне в свое время зашел Zig, но там документация и сам проект достаточно сильно хромает, тоже нельзя рекомендовать. Плюс, есть CGo, который покрывает решения, где чистый Go может иметь проблемы.
И небольшое уточнение по прошлому посту. eventfd_read - это плохой пример, т.к. это тяжелый syscall, и branch misprediction на его фоне не будет так важен. Но в целом для горячего пути, особенно если много ветвлений и/или медленный/устаревший процессор, это может пригодится.
Не все процессоры одинаково хороши, есть и ARM-ы. И этот хинт не для процессора, а компилятора, чтобы он поменял блоки и применил другие оптимизации, чтобы был лучше fall-through rate (т.е. более вероятные блоки кода вверху, безо всяких goto/jmp). И даже у Intel могут быть проблемы (Intel® 64 and IA-32 Architectures Optimization Reference Manual Volume 1):
Since only one taken (non-fall-through) target can be stored in the BTB, indirect branches with multiple taken targets may have lower prediction rates.
PGO не особо подходит для сложных систем или сложен к использованию (например, для прошивок). Ну а применения:
логгирование и трассировка, которые включаются в ран-тайм, нам никогда не нужно чтобы они были в приоритете;
маловероятные ошибки (например, eventfd_read в горячем коде);
маловероятные внутренние состояния подсистемы.
И да, это не нужно абсолютному большинству программистов, но есть те, кому это нужно. В ядре Линукс:
Не могу не добавить некоторые пункты про Раст, которые не позволяют ему заменить Си (пока, надеюсь, что со временем исправят). Конечно, надо отметить, что сам стандарт Си не все покрывает, что-то есть в C++, но тоже не все, и некоторые вещи работают только с gcc/clang extension:
alignment на уровне полей структур. В принципе не критично, т.к. можно разбить на подструктуры, но это может поломать совместимость с Си. Нужно для эффективного использования CPU cacheline.
Нефиксированный порядок полей в структурах. Можно считать как плюсом, так и минусом (Rust может более эффективно упаковать поля в структуре), но для высокоэффективного кода приходится применять соответствующие аттрибуты, чтобы это отключить. Опять-таки не критично, но нужно знать.
Опять-таки, это нужно для очень высокопроизводительного кода, когда идет счет на такты процессора, для абсолютного большинства программистов это не нужно. И Раст в этом плане не так уж плох, тем более есть использовать nightly, в котором есть все что надо.
Вопрос библиотек тоже стоит, например, использовать uring_io несколько проблематично. tokio_rs добавляет кучу абстракций, которые реально замедляют код (опять-таки, для большинства будет нормально, я ссылаюсь на ситуации когда нужны гигабиты в секунду). moniui более или менее нормально, но сыроват. А напрямую binding-и писать занимает время.
У серверных процессоров (по крайней мере Intel) есть ещё одно преимущество - у них обычно расширенный набор инструкций (например, AVX512). Для некоторых применений (числодробилки, которые так просто не перенести на GPU) это бывает весьма полезно.
Искренне рад, что вам нравится в Ванкувере и все хорошо сложилось. Немного печально что Gastown так попортился, в свое время мы там часто тусовались. Хотел бы отметить пару вещей:
Вам повезло с погодой (возможно, что это влияние климатических изменений и так оно и останется). Я помню, когда там полтора года шел дождь без остановки. Да, он был зачастую мелкий, и может были просветы в пару дней, но в целом было весьма депрессивно.
В BC есть отдельно luxury tax, и он начинается на машины с $55k. Возможно, проще купить в Альберте и зарегистрировать в BC, но я не знаю, меня поставили в известность пост-фактум, я про это даже не знал.
Есть очень много проектов, включая от крупных корпораций, которые работают над болячками текущих ЯП, и думаю, мы увидим ещё много чего интересного. И анализировать будущее по поисковым запросам, это вообще последнее дело, потому что профессионалы вообще могут не использовать гуглы и stack overflow, а просто читать документацию (!!!).
Статья немного перекликается с работой, которую я проводил месяц назад. Скажу сразу, что для меня это был рабочий проект, так что он под NDA и исходники не могу выложить. Но у меня тоже было сравнение Go и Rust (и другие решения включая чистый Си), но только в совершенно другом масштабе: мне нужно было нагрузить наши железки высокоуровневым (высшие слои OSI) трафиком под завязку. iperf-тесты уже были, но нам нужен был реалистичный трафик.
Мои результаты на localhost на моем рабочем linux ноутбуке (задейственны все ядра CPU, никаких мьютексов и других пожирателей CPU, статистика собиралась lock-free алгоритмами, сокеты с TCP_NODELAY):
Go - 400 тыс запросов секунду
Tokio/hyper - 300 тыс запросов в секунду (да, у меня эта пара оказалась медленнее, но у меня была немного другая методика тестирования)
Чистый epoll (rust и C показали примерно одинаковые результаты) - 600 тыс запросов в секунду
io_uring (пробовал только Rust, программировать на Си все-равно не собирался), тестировал пакеты glommio и monoio - 800 тыс. Остановился на последнем потому что есть fallback на epoll (старые linux) и kqueue (macos).
Ещё хотел бы отметить про hyper - я от него в конце отказался полностью и написал специализированный генератор и парсер HTTP, благо протокол простой. Flamegraph показал что hyper тратит слишком много времени CPU, и хотя у него могут быть более корректные по стандарту парсеры, для benchmark-а он стал бутылочным горлышком.
Таунхаус (меньше площадь, меньше окна, плюс общие стены с соседями, которые эту стены греют, плюс меньше продувается из-за этих же стен) 2014 года (достаточно новая теплоизоляция, ещё не осевшая в стенах) vs detached house (больше площадь, большие окна, продувается всеми ветрами) 2003 года (да, надо обновлять теплоизоляцию, но мне даже страшно представить сколько это стоит). Также много зависит от района, Калгари в целом весьма ветреный, а в нашей локации все весьма плохо.
Думаю, мне надо было уточнить, что я не имел в виду нормальные каркасники, в которых можно жить по 100 лет и более, а то недоразумение, которое строится сейчас в Северной Америке. Вот, например, вы говорите про балки, а я могу сказать сразу что тут строят так совсем не всегда, и я видел своими глазами, как проседают полы, и мои друзья ругались с контрактниками, чтобы они еще одну балку жесткости ставили.
И я не защищал кирпичные дома, и всеми руками за современные технологии. Но я просто вижу какое убожество тут строят, и современными технологиями тут зачастую и не пахнет. Я у себя дома все потолочное освещение менял (тут по умолчанию ставят вырвиглаз 50-летней давности), там зачастую даже заземление не было прикручено, а люстра могла держаться чуть ли не на проводах.
Каркасники для холодного климата вообще не подходят, когда у меня сломалась печка, температура дома упала на 3-4 градуса за час, а еще даже не сильные морозы были. Я читал профессиональные статьи по этому поводу (потому что у таких домов есть и другие проблемы, и сейчас это становится актуально):
это самое дешевое, что можно построить. В Северной Америке одни из самых высоких оплат труда, и чем быстрее и проще залепить, тем дешевле.
это самое простое, что можно ремоделировать. В золотые времена было нормально жить в доме не больше 5 лет здесь, потом его продать, и новые хозяева могут переделать все как хотят относительно дешево.
дешевая энергия - намного дешевле жечь газ или электроэнергию (особенно в США, там и сейчас весьма дешево), чем использовать энергосберегающие технологии. Сейчас это становится актуально, и начинают задумываться об улучшении технологий строительства.
В целом, это просто старая ментальность появившаяся в 50-х, у которой сейчас к счастью идет процесс ломки - можно построить некачественный продукт, который потом не жалко поменять или сломать. Ни о какой преемственности поколений, когда в доме живут больше 20 лет, разговоров вообще не было.
Оттава - замечательный семейный город, были несколько раз, и думаю, он несколько недооцененный. Нравится сеть Play Food & Wine (очень хороший pairing, да и сама кухня замечательная), историческая информация про памятники архитектуры (напр. что один из самых шикарных отелей там был построен изначально как конюшня) и то, что если ликерные закрыты, можно перейти/переехать по мосту во французскую часть и купить там что-нибудь на любой заправке.
Но, к сожалению, просто не наше, не хватает динамики. Пример - у меня супруга поклонница Властелин Колец, и в прошлом году мы посетили Comic Con в Калгари, где она смогла взять автограф и сфотографироваться с Элайджа Вудом. В Оттаве такое не происходит (как и многое другое, например, концерты крупных звезд). Да, можно относительно быстро добраться до Торонто, но по итогу, тогда уж лучше там и жить.
Про цены для сравнения (если бы изначально знали про это и осели в Оттаве, может все по другому и повернулось). В Калгари preschool бесплатных нет, около 1000+ в месяц full day, и 300 за два-три часа в день два раза в неделю (и это с учетом субсидий). daycare - также от 1000, обычно 1200-1400. Бассейнов тут точно нет, климат не позволяет, есть splash park-и, но на свой страх и риск (иногда бывает жара, может неделю-две за все лето). Правда про катки думаю тут не честно сравнивать - здесь идеальный зимний рай, чего только стоит покататься на коньках на Lake Louse.
В США явно не всем будет лучше, поэтому приведу только свои критерии:
медицина и налоги, как уже сказано в параллельной ветке. Для примера, самая лучшая по налогам провинция в Канаде (Альберта) хуже, чем самая худший штат в США (Калифорния). Правда, имею в виду только income tax.
Road trips. Проездил всю западную и часть восточной Канады и США. Дороги в США (по-крайней мере федеральные) лучше, инфраструктура тоже удобная для автомобилистов. Но должен признать что ковид подпортил везде, посмотрим как все изменится.
перелеты. Вне Торонто, и может частично Ванкувера, перелеты баснословно дорогие, и дерут деньги за все. В США все намного проще, особенно если жить в хабах, которых явно больше.
Культурные достопримечательности, музеи Нью-Йорка и других крупных городов. Естественно, не сравнится с Европой, но может в конце концов туда и уедем.
Все остальное, мне кажется, примерно похоже с Канадой. Да, в канадских школах не стреляют, но мне кажется, это вопрос времени. Я уже видел какой беспредел сейчас устраивают подростки, такого раньше не было.
7 лет в Ванкувере жизнью динков, было просто шикарно, особенно первые годы, когда ещё кондо в Коквитламе можно было купить за 150 тыс. (опыт моих друзей, продали в 2018 за 750 тыс). К слову сказать, мы платили за отдельную часть дома, 800 в месяц, общая площадь 100 кв.м, North Burnaby, что весьма хороший район. Но было видно даже за 7 лет, что quality of life снизился, даже безотносительно цен:
Город стал азиатским, как то гуляли поздно вечером в центре, и по ощущениям как будто в Китае оказались (где мы в реальности были много раз): красный неон, все по китайски, китайская речь, запаха тоже азиатские. В принципе, к Китаю отношусь нейтрально, но знаю случаи буллинга китайскими детьми белых в школах Ванкувера. Взрослые вроде ведут себя нормально.
Трафик ухудшился, постоянные пробки и даже не в центре, агрессивное вождение, случаи road rage-а точно известны.
Парковки во все парки забиты, уже съездить погулять стало проблемой. К счастью, public transit нормальный, park and ride, или даже просто приехать в центр и запарковаться на подземной парковке вполне опция. Никогда не имел проблем, но знаю лайфхак - можно парковаться в офисных зданиях, там есть гостевые парковки.
В целом, жить можно, природа красивая, климат приемлемый, есть не только outdoor, но и социальная жизнь. Но конечно дорого, и это отражается даже на вывесках везде help needed, так как никто за копейки не хочет работать (впрочем то же самое про Торонто).
Калгари тоже изменился - во время ковида сюда переехало просто не счесть людей. У нас был тихий район, а сейчас проездной. Здесь альтернативно одарённые умом градостроители решили что roundabout - это наше все, и налепили их везде. Теперь можно спокойно 15-20 минут стоять, чтобы просто на него въехать.
В целом Канада испортилась. Думаю, если выплачена ипотека, есть свой круг друзей и ограниченный набор интересов, то жить можно. Но если есть широкие интересы, как у нас, то тяжко. Просто для примера, часовой перелет (например Калгари - Ванкувер) стоит 100-300 долларов, в США очень часто можно меньше 100. Банфф когда-то 90 долларов за сутки можно было найти отель, сейчас самый зачуханный может до 600 стоить в сезон.
Думаю, моя основная претензия - все-таки медицина и образование. Всё это ухудшилось, в том число из-за массового притока, но при этом ничего толком нового из этих областей не строится. Когда я иммигрировал, надо было английский на хороший балл сдавать, сейчас сильно понизили. Это сказалось и на образовании, не говоря уж про повестку: стучи на родителей, все белые агрессоры и должны преклонять колено, ну и конечно цисгедерные отношения ненормальны. Здесь это вообще на поток поставлено.
non-temporal store инструкции обычно даже не генерируются компиляторами, так что про "прямую" запись в память я даже не говорю. Разговор про запись в кэш процессора и его инвалидацию, и чтение данных другими ядрами процессора (а еще есть совместные кэши в hyperthreading, а NUMA nodes это вообще туши свет). Для согласования всего этого безобразия и нужны полноценные атомарные операции.
Выделение памяти может вызвать syscall (зависит от менеджера памяти, но по умолчанию jemalloc встроенный в Rust его делает, если в существующих таблицах не хватает места), а это переключение контекста, которое достаточно долгое. Естественно, это заметно только в масштабах миллионов операций в секунду, или на слабых процессорах. Более того, учитывая что автор упомянул no-std, программа возможно вообще работает без ОС, тогда либо нужен либо свой менеджер памяти, либо отказаться от её выделения вообще.
Присваивание атомарно только на x86-64, но на ARM-е все сложнее. Вот здесь хороший обзор: https://marabos.nl/atomics/hardware.html
AsciiDoc нативно поддерживается всеми публичными репозитариями (github, gitlab), намного более гибкий и продуманный чем markdown + нормальное форматирование таблиц. Мы работали с бюрократами из PCI DSS, вся оригинальная документация была в AsciiDoc, и нормально конвертировалась в PDF включая сложные графики (использовали Mermaid). В markdown даже графику вставить нельзя. Весьма позорный формат, который должен уйти на свалку истории.
Есть нормальные алгоритмические задачки, которые можно использовать на собеседованиях, но к сожалению, это не особо просто продавать консалтинговым агентствам, и они требуют больше извилин и усилий от работодателя. Навскидку, класс алгоритмов по обработке данных:
Сжать картинку или текст (подсчёт повторений, отброс битов, словарь токенов/палитра). Проверяется сравнением размера. Бонус, если написал разархивацию, автоматом тоже можно проверить.
Сжатие картины с потерями (усредненная палитра, wavelet transform - знаю, что звучит страшно, но сам алгоритм тривиальный, до него можно додуматься с нуля). Автоматом тяжелее проверить, но есть соответствующие алгоритмы.
Шифрование данных (сжатие, подмена типа шифр цезаря, ротации, перевод в другую систему счисления, даже base64). Бонус за ассиметричное шифрование (нужна математика, но можно помочь, если ее описать заранее; причем даже зная математику, кандидаты испытывают трудности написать тот же RSA). Если говорить про RSA, то там нужен BigInteger, так что будет ещё лучше если кандидат такое напишет сам, а не просто воспользуется готовым или будет полагаться на ЯП (как Python с неограниченноой арифметикой).
То же самое, что выше, но потоковый вариант.
Не будет, компиляторы достаточно свободно меняют порядок кода внутри. GCC использует собственные эвристики: https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fno-guess-branch-probability Rust тоже реорганизует код, не могу найти официальную документацию, но вот тут небольшая дискуссия: https://users.rust-lang.org/t/how-to-keep-pattern-match-branch-order/66363
В общем случае, лучше не делать выводов по порядку исполнения кода по тексту на высокоуровневом языке программирования (и Си - это высокоуровневый, низкоуровневый - это ассемблер или LLVM IR). Более того, даже машинный код может выполняться не по порядку из-за out-of-order execution (и это причина для memory ordering у атомиков).
Это оффтопик, и я точно признаю, что на Go иногда приятнее и быстрее писать, но есть нюансы, которые меня от него в свое время оттолкнули, и возвращаться к нему без необходимости я бы не стал (но приходится):
до generic, повсеместное использование
interface{}
. Новый тип данных, но старый алгоритм - либо copy-paste, либоinterface{}
.работа с модулями конечно стала удобнее, но все-равно не так удобно, как в том же Rust. `go mod vendor`, `go mod tidy` и т.д., все это не выглядит удобно по сравнению с другими системами.
goroutine не 100% безопасны, у нас были и leak-и и другие проблемы с ними.
неконтролируемый GC, проседания производительности на ровном месте, особенно если интенсивная работа с памятью.
большие бинарники (если статическая сборка). Правда Rust тоже не отстает, но его бинарники можно оптимизировать.
Но переписывать на Rust я бы 100% не убеждал. Мне в свое время зашел Zig, но там документация и сам проект достаточно сильно хромает, тоже нельзя рекомендовать. Плюс, есть CGo, который покрывает решения, где чистый Go может иметь проблемы.
Позвольте еще немного добавить, т.к. немного покопал этот вопрос в ARM. Они поддерживают разные предикторы, и не все эффективно работают: https://developer.arm.com/documentation/100965/1120/Timing-Annotation/Timing-annotation-tutorial/Modeling-branch-prediction/Impact-of-branch-misprediction-on-simulation-time Думаю, выбор предиктора влияет на электопотребление, так что не всегда можно рассчитывать, что будет хороший предиктор.
И небольшое уточнение по прошлому посту. eventfd_read - это плохой пример, т.к. это тяжелый syscall, и branch misprediction на его фоне не будет так важен. Но в целом для горячего пути, особенно если много ветвлений и/или медленный/устаревший процессор, это может пригодится.
Не все процессоры одинаково хороши, есть и ARM-ы. И этот хинт не для процессора, а компилятора, чтобы он поменял блоки и применил другие оптимизации, чтобы был лучше fall-through rate (т.е. более вероятные блоки кода вверху, безо всяких goto/jmp). И даже у Intel могут быть проблемы (Intel® 64 and IA-32 Architectures Optimization Reference Manual Volume 1):
PGO не особо подходит для сложных систем или сложен к использованию (например, для прошивок). Ну а применения:
логгирование и трассировка, которые включаются в ран-тайм, нам никогда не нужно чтобы они были в приоритете;
маловероятные ошибки (например, eventfd_read в горячем коде);
маловероятные внутренние состояния подсистемы.
И да, это не нужно абсолютному большинству программистов, но есть те, кому это нужно. В ядре Линукс:
Не могу не добавить некоторые пункты про Раст, которые не позволяют ему заменить Си (пока, надеюсь, что со временем исправят). Конечно, надо отметить, что сам стандарт Си не все покрывает, что-то есть в C++, но тоже не все, и некоторые вещи работают только с gcc/clang extension:
отсутствие likely в stable (https://internals.rust-lang.org/t/could-unlikely-and-likely-be-stabilized-in-std-hint/9795?u=lzutao). Уже пять лет, а воз и ныне там. Официальный способ - #[cold], но это не покрывыет все потребности. Нужно для избежания branch misprediction.
alignment на уровне полей структур. В принципе не критично, т.к. можно разбить на подструктуры, но это может поломать совместимость с Си. Нужно для эффективного использования CPU cacheline.
Нефиксированный порядок полей в структурах. Можно считать как плюсом, так и минусом (Rust может более эффективно упаковать поля в структуре), но для высокоэффективного кода приходится применять соответствующие аттрибуты, чтобы это отключить. Опять-таки не критично, но нужно знать.
Отсутствие некоторых высокопроизводительных функций в std, например rint (https://en.cppreference.com/w/c/numeric/math/rint). С другой стороны, `
to_int_unchecked
` использует LLVM’s fptoui/fptosi (https://doc.rust-lang.org/std/intrinsics/fn.float_to_int_unchecked.html), так что это может быть не проблема.Опять-таки, это нужно для очень высокопроизводительного кода, когда идет счет на такты процессора, для абсолютного большинства программистов это не нужно. И Раст в этом плане не так уж плох, тем более есть использовать nightly, в котором есть все что надо.
Вопрос библиотек тоже стоит, например, использовать uring_io несколько проблематично. tokio_rs добавляет кучу абстракций, которые реально замедляют код (опять-таки, для большинства будет нормально, я ссылаюсь на ситуации когда нужны гигабиты в секунду). moniui более или менее нормально, но сыроват. А напрямую binding-и писать занимает время.
У серверных процессоров (по крайней мере Intel) есть ещё одно преимущество - у них обычно расширенный набор инструкций (например, AVX512). Для некоторых применений (числодробилки, которые так просто не перенести на GPU) это бывает весьма полезно.
Искренне рад, что вам нравится в Ванкувере и все хорошо сложилось. Немного печально что Gastown так попортился, в свое время мы там часто тусовались. Хотел бы отметить пару вещей:
Вам повезло с погодой (возможно, что это влияние климатических изменений и так оно и останется). Я помню, когда там полтора года шел дождь без остановки. Да, он был зачастую мелкий, и может были просветы в пару дней, но в целом было весьма депрессивно.
В BC есть отдельно luxury tax, и он начинается на машины с $55k. Возможно, проще купить в Альберте и зарегистрировать в BC, но я не знаю, меня поставили в известность пост-фактум, я про это даже не знал.
Похоже что автор оригинального текста совершенно не следит за текущими трендами, и есть намного лучше статьи, которые стоит переводить, например: https://verdagon.dev/blog/when-to-use-memory-safe-part-2
Есть очень много проектов, включая от крупных корпораций, которые работают над болячками текущих ЯП, и думаю, мы увидим ещё много чего интересного. И анализировать будущее по поисковым запросам, это вообще последнее дело, потому что профессионалы вообще могут не использовать гуглы и stack overflow, а просто читать документацию (!!!).
Статья немного перекликается с работой, которую я проводил месяц назад. Скажу сразу, что для меня это был рабочий проект, так что он под NDA и исходники не могу выложить. Но у меня тоже было сравнение Go и Rust (и другие решения включая чистый Си), но только в совершенно другом масштабе: мне нужно было нагрузить наши железки высокоуровневым (высшие слои OSI) трафиком под завязку. iperf-тесты уже были, но нам нужен был реалистичный трафик.
Мои результаты на localhost на моем рабочем linux ноутбуке (задейственны все ядра CPU, никаких мьютексов и других пожирателей CPU, статистика собиралась lock-free алгоритмами, сокеты с TCP_NODELAY):
Go - 400 тыс запросов секунду
Tokio/hyper - 300 тыс запросов в секунду (да, у меня эта пара оказалась медленнее, но у меня была немного другая методика тестирования)
Чистый epoll (rust и C показали примерно одинаковые результаты) - 600 тыс запросов в секунду
io_uring (пробовал только Rust, программировать на Си все-равно не собирался), тестировал пакеты glommio и monoio - 800 тыс. Остановился на последнем потому что есть fallback на epoll (старые linux) и kqueue (macos).
Ещё хотел бы отметить про hyper - я от него в конце отказался полностью и написал специализированный генератор и парсер HTTP, благо протокол простой. Flamegraph показал что hyper тратит слишком много времени CPU, и хотя у него могут быть более корректные по стандарту парсеры, для benchmark-а он стал бутылочным горлышком.
Таунхаус (меньше площадь, меньше окна, плюс общие стены с соседями, которые эту стены греют, плюс меньше продувается из-за этих же стен) 2014 года (достаточно новая теплоизоляция, ещё не осевшая в стенах) vs detached house (больше площадь, большие окна, продувается всеми ветрами) 2003 года (да, надо обновлять теплоизоляцию, но мне даже страшно представить сколько это стоит). Также много зависит от района, Калгари в целом весьма ветреный, а в нашей локации все весьма плохо.
Думаю, мне надо было уточнить, что я не имел в виду нормальные каркасники, в которых можно жить по 100 лет и более, а то недоразумение, которое строится сейчас в Северной Америке. Вот, например, вы говорите про балки, а я могу сказать сразу что тут строят так совсем не всегда, и я видел своими глазами, как проседают полы, и мои друзья ругались с контрактниками, чтобы они еще одну балку жесткости ставили.
Вот здесь детали: https://constructionphysics.substack.com/p/balloon-framing-is-worse-is-better По сути, вся нагрузка идет на стены, подпорки могут внутри поставить, но обычно опять-таки, вместо них обычно ставят дополнительные стены внизу.
И я не защищал кирпичные дома, и всеми руками за современные технологии. Но я просто вижу какое убожество тут строят, и современными технологиями тут зачастую и не пахнет. Я у себя дома все потолочное освещение менял (тут по умолчанию ставят вырвиглаз 50-летней давности), там зачастую даже заземление не было прикручено, а люстра могла держаться чуть ли не на проводах.
Каркасники для холодного климата вообще не подходят, когда у меня сломалась печка, температура дома упала на 3-4 градуса за час, а еще даже не сильные морозы были. Я читал профессиональные статьи по этому поводу (потому что у таких домов есть и другие проблемы, и сейчас это становится актуально):
это самое дешевое, что можно построить. В Северной Америке одни из самых высоких оплат труда, и чем быстрее и проще залепить, тем дешевле.
это самое простое, что можно ремоделировать. В золотые времена было нормально жить в доме не больше 5 лет здесь, потом его продать, и новые хозяева могут переделать все как хотят относительно дешево.
дешевая энергия - намного дешевле жечь газ или электроэнергию (особенно в США, там и сейчас весьма дешево), чем использовать энергосберегающие технологии. Сейчас это становится актуально, и начинают задумываться об улучшении технологий строительства.
В целом, это просто старая ментальность появившаяся в 50-х, у которой сейчас к счастью идет процесс ломки - можно построить некачественный продукт, который потом не жалко поменять или сломать. Ни о какой преемственности поколений, когда в доме живут больше 20 лет, разговоров вообще не было.
Оттава - замечательный семейный город, были несколько раз, и думаю, он несколько недооцененный. Нравится сеть Play Food & Wine (очень хороший pairing, да и сама кухня замечательная), историческая информация про памятники архитектуры (напр. что один из самых шикарных отелей там был построен изначально как конюшня) и то, что если ликерные закрыты, можно перейти/переехать по мосту во французскую часть и купить там что-нибудь на любой заправке.
Но, к сожалению, просто не наше, не хватает динамики. Пример - у меня супруга поклонница Властелин Колец, и в прошлом году мы посетили Comic Con в Калгари, где она смогла взять автограф и сфотографироваться с Элайджа Вудом. В Оттаве такое не происходит (как и многое другое, например, концерты крупных звезд). Да, можно относительно быстро добраться до Торонто, но по итогу, тогда уж лучше там и жить.
Про цены для сравнения (если бы изначально знали про это и осели в Оттаве, может все по другому и повернулось). В Калгари preschool бесплатных нет, около 1000+ в месяц full day, и 300 за два-три часа в день два раза в неделю (и это с учетом субсидий). daycare - также от 1000, обычно 1200-1400. Бассейнов тут точно нет, климат не позволяет, есть splash park-и, но на свой страх и риск (иногда бывает жара, может неделю-две за все лето). Правда про катки думаю тут не честно сравнивать - здесь идеальный зимний рай, чего только стоит покататься на коньках на Lake Louse.
В США явно не всем будет лучше, поэтому приведу только свои критерии:
медицина и налоги, как уже сказано в параллельной ветке. Для примера, самая лучшая по налогам провинция в Канаде (Альберта) хуже, чем самая худший штат в США (Калифорния). Правда, имею в виду только income tax.
Road trips. Проездил всю западную и часть восточной Канады и США. Дороги в США (по-крайней мере федеральные) лучше, инфраструктура тоже удобная для автомобилистов. Но должен признать что ковид подпортил везде, посмотрим как все изменится.
перелеты. Вне Торонто, и может частично Ванкувера, перелеты баснословно дорогие, и дерут деньги за все. В США все намного проще, особенно если жить в хабах, которых явно больше.
Культурные достопримечательности, музеи Нью-Йорка и других крупных городов. Естественно, не сравнится с Европой, но может в конце концов туда и уедем.
Все остальное, мне кажется, примерно похоже с Канадой. Да, в канадских школах не стреляют, но мне кажется, это вопрос времени. Я уже видел какой беспредел сейчас устраивают подростки, такого раньше не было.
7 лет в Ванкувере жизнью динков, было просто шикарно, особенно первые годы, когда ещё кондо в Коквитламе можно было купить за 150 тыс. (опыт моих друзей, продали в 2018 за 750 тыс). К слову сказать, мы платили за отдельную часть дома, 800 в месяц, общая площадь 100 кв.м, North Burnaby, что весьма хороший район. Но было видно даже за 7 лет, что quality of life снизился, даже безотносительно цен:
Город стал азиатским, как то гуляли поздно вечером в центре, и по ощущениям как будто в Китае оказались (где мы в реальности были много раз): красный неон, все по китайски, китайская речь, запаха тоже азиатские. В принципе, к Китаю отношусь нейтрально, но знаю случаи буллинга китайскими детьми белых в школах Ванкувера. Взрослые вроде ведут себя нормально.
Трафик ухудшился, постоянные пробки и даже не в центре, агрессивное вождение, случаи road rage-а точно известны.
Парковки во все парки забиты, уже съездить погулять стало проблемой. К счастью, public transit нормальный, park and ride, или даже просто приехать в центр и запарковаться на подземной парковке вполне опция. Никогда не имел проблем, но знаю лайфхак - можно парковаться в офисных зданиях, там есть гостевые парковки.
В целом, жить можно, природа красивая, климат приемлемый, есть не только outdoor, но и социальная жизнь. Но конечно дорого, и это отражается даже на вывесках везде help needed, так как никто за копейки не хочет работать (впрочем то же самое про Торонто).
Калгари тоже изменился - во время ковида сюда переехало просто не счесть людей. У нас был тихий район, а сейчас проездной. Здесь альтернативно одарённые умом градостроители решили что roundabout - это наше все, и налепили их везде. Теперь можно спокойно 15-20 минут стоять, чтобы просто на него въехать.
В целом Канада испортилась. Думаю, если выплачена ипотека, есть свой круг друзей и ограниченный набор интересов, то жить можно. Но если есть широкие интересы, как у нас, то тяжко. Просто для примера, часовой перелет (например Калгари - Ванкувер) стоит 100-300 долларов, в США очень часто можно меньше 100. Банфф когда-то 90 долларов за сутки можно было найти отель, сейчас самый зачуханный может до 600 стоить в сезон.
Думаю, моя основная претензия - все-таки медицина и образование. Всё это ухудшилось, в том число из-за массового притока, но при этом ничего толком нового из этих областей не строится. Когда я иммигрировал, надо было английский на хороший балл сдавать, сейчас сильно понизили. Это сказалось и на образовании, не говоря уж про повестку: стучи на родителей, все белые агрессоры и должны преклонять колено, ну и конечно цисгедерные отношения ненормальны. Здесь это вообще на поток поставлено.