Search
Write a publication
Pull to refresh
17
0

User

Send message

Асинхронный Rust в трех частях. Часть первая: Futures

Reading time14 min
Views5.9K

В введении мы посмотрели на пример асинхронного Rust без какого‑либо объяснения, как он работает. Это дало нам несколько вопросов для размышления: Что такое асинхронные функции и возвращаемые ими «future»? Что делает join_all? Чем отличается tokio::time::sleep от std::thread::sleep?

Чтобы ответить на эти вопросы нам потребуется преобразовать каждую из частей в обычный не асинхронный код Rust. Вскоре мы обнаружим, что воспроизвести foo и join_all достаточно просто, а вот со sleep ситуация чуть сложнее. Начнем же.

Читать далее

Асинхронный Rust в трех частях. Введение

Level of difficultyEasy
Reading time5 min
Views7.1K

Async/await, или «асинхронный ввод‑вывод», — это относительно новая функция языка, которая позволяет программам выполнять несколько задач одновременно. Это своего рода альтернатива многопоточности, хотя программы на Rust часто используют и то и другое. Асинхронный ввод‑вывод особенно популярен в веб‑сервисах и сетевых приложениях, работающих с большим числом подключений одновременно.

Эта серия статей представляет собой введение в "futures", задачи и асинхронный ввод‑вывод в Rust. Наша цель — понять основные механизмы, чтобы асинхронный код не казался магией. Мы начнем с преобразования (так называемой «рассахаризации») асинхронных примеров в обычный Rust и постепенно создадим собственную асинхронную «среду выполнения». На данном этапе под «средой выполнения» мы понимаем библиотеку или фреймворк, которые используются для написания асинхронных программ.

Создание собственных фьючерсов, задач и механизма ввода‑вывода позволит понять, что именно делает для нас среда выполнения. Предполагается, что вы уже немного писали на Rust и читали The Rust Programming Language \или аналогичный источник.

Давайте начнем с выполнения нескольких задач одновременно с использованием потоков. Сначала все пойдет хорошо, но затем, с увеличением количества потоков, начнутся проблемы. Затем мы добьемся того же, используя async/await. В этой части мы разберем примеры, а в следующей мы начнем углубляться в них.

Читать далее

Учимся читать QR-коды без компьютера

Level of difficultyMedium
Reading time4 min
Views54K

Задавались ли вы когда-нибудь вопросом, как работают QR-коды? Если да, то эта статья для вас. Здесь вас ждёт интерактивное объяснение*, которое мы составили для семинара, проводившегося в рамках Всемирного конгресса хакеров 37C3, но вы также можете использовать его самостоятельно.

Прочитав статью, вы узнаете:

  • Из чего состоят QR-коды.
  • Как декодировать QR-коды вручную (используя нашу шпаргалку).
Читать дальше →

DOS Navigator: заходим в файловый менеджер, которому исполнилось 33 года

Reading time6 min
Views17K

Всем привет! Это Антон Комаров, автор команды спецпроектов в МТС Диджитал. Есть мнение, что у каждого человека наступает такой этап, когда начинает казаться, что раньше трава была зеленее, пломбир вкуснее, а компьютерные игры круче. Я до последнего в это не верил, а потом внезапно поймал себя на мысли, что скучаю по тем временам, когда, включив компьютер, оказывался перед пустым черным экраном со светящимся «приглашением» MS-DOS.

Дальше все зависело от того, какой файловый менеджер или графическая оболочка была установлена на конкретной машине. Большинство пользовалось двухпанельным Norton Commander (NC) или же его «братом-близнецом» Volkov Commander (VC), который был написан на чистом ассемблере и за счет этого имел такие же функции при крошечном размере в 64 Кб. А еще мне запомнился двухпанельный DOS Navigator (DN) с оригинальным серым интерфейсом.

В этом посте я решил вспомнить молодость и освежить в памяти, как работал этот маленький, простой, но очень удобный файловый менеджер. Подробности — под катом.

Читать далее

Самые быстрые мьютексы

Level of difficultyEasy
Reading time8 min
Views8K

Cosmopolitan Libc хорошо известна своим «полиглотным жирным бинарным» хаком, который позволяем исполняемым файлам запускаться на шести операционных системах для AMD64/ARM64. Вас может удивить, что при этом она может быть лучше С‑библиотекой для вашего продакшена. Чтобы продемонстрировать это, давайте сравним библиотеку мьютексов Cosmo с другими платформами.

Мы напишем простой тест, который создает 30 потоков, увеличивающих одно и то же число 100 000 раз. Это поможет проверить, насколько хорошо реализация мьютексов справляется с задачей при интенсивном использовании.

Читать далее

Тредпульное заклятие Dotnet-демонов на Linux

Level of difficultyMedium
Reading time5 min
Views8.4K

Все слышали о том, что иногда dotnet на Linux потребляет больше ресурсов, чем на Windows. Порой эта разница практически незаметна. Но случается и такое, что одно и то же приложение потребляет на Linux в 2–3 раза больше CPU, чем на Windows.

Читать далее

await vs yield на примере Effection 3.0 и React

Level of difficultyMedium
Reading time11 min
Views9K

18 декабря 2023 года вышел релиз Effection 3.0 - типизированная альтернативна async/await на генераторах (Structured Concurrency and Effects for JavaScript).

В статье сравним подходы на генераторах и async/await и расскажу как использовать Effection в React для решения типичных проблем с асинхронным кодом:

- Race condition

- AbortController

- Clean up

- Debounce

Читать далее

Написал книгу по C#

Level of difficultyEasy
Reading time3 min
Views16K

6 лет писал томными вечерами книгу по программированию. Рассказываю как собрал на неё деньги, с какими сложностями столкнулся и почему каждому разработчику стоит это сделать.

Читать далее

Практическое руководство по Rust. 4/4

Level of difficultyMedium
Reading time34 min
Views5.6K



Hello world!


Представляю вашему вниманию четвертую и последнюю часть практического руководства по Rust.



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


Руководство основано на Comprehensive Rust — руководстве по Rust от команды Android в Google и рассчитано на людей, которые уверенно владеют любым современным языком программирования. Еще раз: это руководство не рассчитано на тех, кто только начинает кодить ?

Читать дальше →

История о том, как Google подсматривал за нашим сайтом и галлюцинировал

Level of difficultyEasy
Reading time5 min
Views31K

В 2023-ем году мы узнали, что нейросети могут галлюцинировать. На первый взгляд, это довольно забавное и пока что безобидное явление. Но в этой короткой статье я расскажу, как я столкнулся с галлюцинациями самого Google, и как это чуть не угробило стартап, в котором я работаю.

Читать далее

PowerShell и его возможности в уходящем году

Level of difficultyMedium
Reading time7 min
Views12K

Все привет! В уходящем году хочу оставить небольшой след про такой сильный язык программирования, как PowerShell. Вероятно, уже в следующем году, ввиду тенденции отказа от Windows систем в нашей стране, моя практика в этой области закончится, а за пару лет активности, так и не собрался с силами опубликовать что-то подобное. Кода тут не будет, для этого у меня есть отдельная работа с заметками, цель статьи, еще раз подчеркнуть реальные возможности данного языка, где я буду ссылаться на работы, которые я старался делать универсальными, а так же сделаю акцент на полезных модулях.

Буквально два года назад, имея базовые знания навигации в консоли Linux, написание несложных batch-файлов и небольшой опыт VBScript открыл для себя PowerShell, и после этого я уже в прямом смысле этого слова, не мог остановиться реализовывать свои идеи, правда, такое дело очень затягивает. В один момент решился завести канал на GitHub и там же по сей день виду работу с заметками, где за это время накопилось более 6 тысяч строк из описания работы cmdlet (PowerShell-команд) и утилит для Системного Администратора (AD, Exchange, VMWare, MSSQL и т.д.) с примерами, ведь далеко не все получалось найти в интернете, порой, только изучая на практике свойства и методы объектов, можно получить желаемый результат. Так же набралась небольшая коллекция модулей и тестовый стенд WinForms с примерами работы различных методов, на котором я в дальнейшем базировался для написания приложений с графическим интерфейсом. Все работы писал по большей части для себя с целью автоматизировать и разгрузить текущий рабочий процесс, иногда помочь коллегам, именно по этому мне хочется поделиться своими наработками, возможно кому-то это еще сможет пригодиться.

Читать далее

Ужасы PowerShell

Level of difficultyMedium
Reading time3 min
Views12K

Мне часто приходится пользоваться PowerShell. Конечно, его создатели не имели никакого представления о прекрасном и эстетике. Уродливость PowerShell особенна видна при его сравнении, например, с Python. С другой стороны, как говорится, c лица не воду пить - работает и хорошо? Но нет, мне кажется в PowerShell есть по крайней мере пара моментов, которые фатально влияют на его практическое применение.

Читать далее

Игровая легенда из 90-х: Как работала 3dfx Voodoo «под капотом»? Пишем 3D-приложение с нуля на Glide

Level of difficultyMedium
Reading time26 min
Views17K
image


Полагаю, многие мои читатели так или иначе знакомы с такими видеокартами, как 3dfx Voodoo. Эти легендарные графические ускорители из середины\конца 90-х годов был чуть ли не в каждой второй сборке для игр, а о их производительности слагали легенды. До сих пор есть относительно небольшое сообщество фанатов ретро-игр, которые ценят, любят и собирают с цветмета те немногие видеокарты от 3dfx, что остались в СНГ. Однако обзоров на 3dfx Voodoo много, тестов игр — тоже, а вот материала «простыми словами» о его внутренней архитектуре и более того, практической части с написанием 3D-игры практически нет! Недавно я прикупил себе Voodoo 3, и начал зубрить Programmer's Manual с желанием запилить что-нибудь эдакое… Статью я долго и упорно готовил дабы успеть к новому году и сегодня у нас с вами: краткая история компании 3dfx, подробный разбор архитектуры видеочипов 3dfx «под капотом», что должен был уметь программист 3D-графики в 90х и написание 3D-приложения на Glide полностью с нуля. Интересно? Тогда жду вас в статье!
Читать дальше →

Как я чуть не стал миллионером, продавая воздух, или почему Россия – не Америка

Level of difficultyEasy
Reading time10 min
Views120K

Все знают, что Россия — энергетическая сверхдержава, она же – «разорванная в клочья Обамой бензоколонка». Но не все знают, как это может отражаться в области развития математического моделирования. Расскажу одну жизненную историю. 

Начну с далекого 2007 года. Довелось мне в те времена поработать на крупном заводе, который «эффективные менеджеры» как раз делили на несколько отдельных предприятий, каждое из которых крутилось, как могло.  В том цеху, который и стал одним из таких предприятий, на токарных станках могла крутиться (и крутилась!) металлическая болванка размером с автобус. А в печку для нагрева металла можно было затолкать паровоз. Целиком.  Когда я в первый раз увидел токарный станок, на котором крутится и обтачивается деталь размером с автобус, моему восторгу не было предела. Гордость за страну переполняла до состояния «в зобу дыханье сперло». А потом старожилы показали ту часть цеха, где стояли фундаменты таких же станков и пояснили:

- А вот тут были станки для точной обработки. Их продали китайцам по цене металлолома.

- А почему вот другие не продали?

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

Схема бизнеса был гениальна: Siemiens привозил на завод многотонные болванки, их неделями и месяцами обтачивали до состояния заготовок и увозили для чистовой обработки в Германию. Где уже выполняли чистовую доводку на точных и дорогих станках. Главные затраты при черновой обработке – это износ станков и инструмента, зарплата токаря и электроэнергия, необходимая для вращения тонн металла. Поскольку электроэнергия в РФ дешевле немецкой, недели обработки болванок с лихвой окупают транспортировку, а низкая точность обработки не требует дорогого обслуживания и мало чувствительна к износу еще советского оборудования.  В итоге весь бизнес заключался в «перепродаже» дешевой электроэнергии из РФ в Германию, но в виде металлических обточенных болванок. 

Читать далее

RESTinio-0.7.0: первый существенный релиз за три года

Reading time11 min
Views1.9K

В последний раз статья, целиком посвященная открытому проекту RESTinio, вышла на Хабре в декабре 2020-го года, без малого три года назад. Это был рассказ о релизе версии 0.6.13. По сути, это был последний релиз, в котором в RESTinio появилось что-то новое и важное. Потом были только небольшие корректирующие релизы, исправляющие ошибки или адаптирующие RESTinio к свежим версиям зависимостей.

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

Кому интересно, милости прошу под кат.

Для тех же, кто про данную разработку слышит в первый раз: это наша попытка сделать встраиваемый в C++ приложения HTTP(S)/WebSocket сервер, который бы обладал и большой гибкостью, и нормальной производительностью, освобождал бы пользователя от рутины, но не прятал бы абсолютно все детали "под капот", и удовлетворял бы нашим представлениям о том, как подобные вещи должны выглядеть...

Вроде бы получилось. Мне кажется, что раз уж RESTinio сумел набрать тысячу звезд на GitHub, результат понравился и пригодился не только нам. Впрочем, это уже совсем другая история. Давайте вернемся к рассказу об изменениях в версии 0.7.0 и к тому, почему этих изменений пришлось ждать так долго...

Читать далее

10 лет Docker: от революционной идеи до современной практики

Reading time8 min
Views19K

Привет, Хабр! На момент написания статьи, я занимаюсь надежностью (SRE) в компании Workday, еще помогаю студентам в Практикуме осваивать курс по DevOps-практикам.

В этой статье я поделюсь кратким обзором истории Docker, его ключевыми концепциями и мисконцепциями. Надеюсь, это будет полезно для новичков и студентов, изучающих DevOps-практики и виртуализацию.

Читать далее

С++23 — feature freeze близко

Reading time6 min
Views22K
Прошло четыре месяца с прошлой онлайн-встречи ISO-комитета, а значит, настало время собраться опять.



В этот раз в черновик нового стандарта C++23 добавили весьма полезные и вкусные новинки:

  • operator[](int, int, int)
  • монадические интерфейсы для std::optional
  • std::move_only_function
  • std::basic_string::resize_and_overwrite
  • больше гетерогенных перегрузок для ассоциативных контейнеров
  • std::views::zip и zip_transform, adjacent, adjacent_transform

Подробности об этих и других (даже более интересных!) вещах, а также о том, что за диаграмма стоит в шапке, ждут вас под катом.
Читать дальше →

Недостатки корутин в C++

Level of difficultyMedium
Reading time11 min
Views10K

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

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

Как ID Software удалось выжать невозможное из EGA-карт

Level of difficultyMedium
Reading time9 min
Views16K

Я прочитал превосходную книгу Doom Guy Джона Ромеро, которую крайне рекомендую. В девятой главе Джон рассказывает о том, как его поразила увиденная им технология Adaptive Tile Refresh (ATR). Благодаря этому я понял, что пока не анализировал очень важную методику, лежавшую в основе серии игр Commander Keen (CK).

В процессе исследований я выяснил, что ATR использовалась только в первой трилогии CK. Во второй разработчики начали использовать нечто гораздо лучшее.
Читать дальше →

1. Введение в Unicode (опять?)

Level of difficultyMedium
Reading time25 min
Views23K

Всем здравствуйте, меня зовут Антон, и этой статьей я открываю новый цикл публикаций про Unicode. Сразу может возникнуть вопрос — зачем? Их же и так море?

На Хабре, как и вообще в русскоязычном сегменте Интернета, в‑основном можно найти обзорные статьи, дающие лишь общее представление о Юникоде, но о том, как с ним работать — информации крайне мало. Сами же его разработчики, Unicode Consortium, предоставляют довольно подробную… но очень объемную документацию, которую при этом мало просто прочитать — для полного понимания много чего в ней стоит прокодить.

тут есть что почитать

Information

Rating
5,580-th
Registered
Activity