Pull to refresh
1
0
Send message

Почему мьютексы в Rust реализованы именно так

Reading time17 min
Views13K

Я часто слышу от пробующих работать с Rust системных программистов жалобы на мьютексы и особенно на Rust Mutex API. Жалобы обычно выглядят так:

  • Они не хотят, чтобы мьютекс содержал данные, только блокировку.
  • Они не хотят управлять «защитным» значением, разблокирующим мьютекс при сбросе, в частности, они просто хотят вызывать операцию unlock, потому что им кажется, что это более явное действие.

Такие изменения превратили бы Rust mutex API в эквивалент C/Posix mutex API. Однажды я даже видел, как один разработчик пытался использовать Mutex<()> и разные хитрости, чтобы его имитировать.

Однако у такого стремления есть проблема: эти два аспекта Mutex неразрывно связаны друг с другом, а также с гарантиями безопасности Rust в целом — изменение одного из них или обоих откроет возможности для возникновения незаметных багов и повреждений из-за гонок данных.

Использование API мьютексов в стиле C, состоящего из набора косвенно защищаемых данных и из функций lock и unlock было бы опрометчивым в Rust, потому что это позволяет безопасному коду легко вносить ошибки, нарушающие безопасность памяти и вызывающие гонки данных.

Прозвучит спорно, но я утверждаю, что это справедливо и для C. Просто в Rust это более очевидно, поскольку Rust тщательно разделяет понятия «безопасного» кода, в который невозможно внести подобные ошибки, и «небезопасного» кода, в который можно вносить такие ошибки. В C такого разделения нет, и в результате этого использующий мьютексы код на C может тривиальным образом создавать серьёзные баги, которые потенциально можно подвергать эксплойтам.

В этом посте я разберу типичный C mutex API, сравню его с типичным Rust mutex API, и расскажу о том, что произойдёт, если мы изменим Rust API так, чтобы он напоминал C.
Читать дальше →
Total votes 60: ↑60 and ↓0+60
Comments26

Пишем с комфортом на Rust в Visual Studio Code

Reading time3 min
Views34K

Хочешь писать на Rust, но не знаешь в чём?

Нет денег на CLion или Intellij Ultimate, но тебе нужно отлаживать код?

Очень нравится Visual Studio Code, но при виде кучи плагинов разбегаются глаза?

Если на любой из вопросов выше ты ответил "да" - залетай.

Залететь
Total votes 14: ↑9 and ↓5+6
Comments42

Загрузка stage слоя DWH. Часть 1

Reading time5 min
Views8.1K

Доброго дня. Меня зовут Иван Клименко, я разработчик потоков обработки данных в компании Аскона. В этом цикле статей я расскажу опыт внедрения инструмента Apache Nifi для формирования DWH. 

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

Читать далее
Total votes 8: ↑6 and ↓2+6
Comments5

Самый по-человечески написанный учебник компьютерной архитектуры наконец-то выходит на русском языке и для RISC-V

Reading time9 min
Views78K

В 2015 году скачивания первого русского издания учебника Харрис & Харрис завалили сайт британской компании Imagination Technologies. Книгу стали использовать в МФТИ, ВШЭ МИЭМ, МГУ, МИЭТ, ИТМО и других вузах. С тех пор вышло еще два издания - для ARM и для MIPS, и вот в январе 2022 года выходит новое - для RISC-V и оно уже доступно для предзаказа.

"Цифровая схемотехника и архитектура компьютера: RISC-V" вероятно станет стандартным учебником в российских вузах, как и источником информации для тех, кто хочет попроектировать процессоры на ПЛИС. Ничего лучшего на рынке нет. Паттерсон-Хеннесси не привязан к курсам по языкам описания аппаратуры и не обсуждает тайминг цифровой логики, а Таненбаум устарел.

Кроме этого, архитектура RISC-V становится билетом в будущее для российских процессорных компаний - Ядро купило Syntacore, Байкал Электроникс инвестировал в CloudBear, Миландр выпустил микроконтроллер с архитектурой RISC-V.

Если же вы не хотите работать в российских компаниях, а хотите пройти интервью на проектировщика чипа в Apple, Intel, NVidia, то и в таком случае учебник Харрисов - это самый эффективный способ начать этот путь.

О Харрисах, содержание и почему RISC-V
Total votes 39: ↑33 and ↓6+36
Comments41

Авторы Electron признали его неудачным, написали новый фреймворк на Rust и представили новый редактор Zed

Reading time2 min
Views52K

Три бывших разработчика (Nathan Sobo, Antonio Scandurra и Max Brunsfeld) редактора Atom и Nate Butler из Facebook вчера представили свой новый редактор Zed над которым они работали последние несколько лет.


Основными идеями для редактора нового поколения они считают:


  • Максимально возможная скорость работы
  • Совместная работа в реальном времени
  • Средство текстовой коммуникации, встроенное в редактор
  • Эффективность разработчика за счет максимально полезного UI
Читать дальше →
Total votes 62: ↑55 and ↓7+62
Comments264

Релиз CLion 2021.3: новый механизм удаленной разработки, тулчейн для Docker, улучшения отладчика и многое другое

Reading time6 min
Views5.9K

Привет, Хабр!

Традиционно начало декабря — время, когда релизятся все продукты JetBrains. И сегодня я расскажу о CLion 2021.3 — новой версии нашей кроссплатформенной IDE для разработки на C и C++.

Главная новость прошедшей релизной недели — выпуск нового решения для удаленной разработки. Другие улучшения в CLion: оптимизация и новые возможности по работе с тулчейнами, улучшенное представление данных в отладчике, подсказки для выведенных типов в редакторе, повышение точности и новые возможности анализатора кода, новая опция для представления структуры текущего файла.

Читать далее
Total votes 16: ↑16 and ↓0+16
Comments22

Смарт цоколь для лампы REDMOND — добавляем в умный дом

Reading time3 min
Views7.1K

В этом обзоре речь пойдет об смарт цоколе бренда REDMOND — SkySocket 202S. Попалась как то мне на глаза статья об схемотехнике данного цоколя, почитав обратил внимание что мозгами данного девайса является чип от компании Nordic Semiconductor 51 серии (nRF51822).

Total votes 23: ↑21 and ↓2+19
Comments5

Возможности Java — от Java 8 до Java 17

Reading time19 min
Views31K

С момента появления в 1995 году до сегодняшнего дня в Java многое изменилось. Java 8 была революционным выпуском, вернувшим Java на пьедестал лучших языков программирования.

Мы рассмотрим большинство изменений в языке Java, которые произошли с Java 8 в 2014 году до сегодняшнего дня. Мы постараемся быть как можно более краткими по каждой функции. Намерение состоит в том, чтобы иметь ссылку на все новые фичи языка Java 8 - 17 включительно.

Примечание переводчика,

Эта статья переведена по просьбе одного из читателей Хабр. Надеюсь она будет полезна как краткий справочник по новым фичам языка Java 8 - 17.

Читать далее
Total votes 18: ↑11 and ↓7+6
Comments12

Rust — будущее инфраструктуры JavaScript

Reading time8 min
Views22K

Rust - это быстрый, надежный и экономичный, с точки зрения памяти, язык программирования. Его признавали одним из самых любимых языков программирования шесть лет подряд (на основании опросов).

Созданный Mozilla, он теперь используется в FacebookAppleAmazonMicrosoft и Google для системной инфраструктуры, шифрования, виртуализации и низкоуровневого программирования.

Почему Rust сейчас используется для замены таких частей веб-экосистемы JavaScript, как минификация (Terser), транспиляция (Babel), форматирование (Prettier), комплектация (webpack), линтинг (ESLint) и другие?

Читать далее
Total votes 26: ↑18 and ↓8+13
Comments29

Педальку в пол, или как ещё ускорить CPU-bound приложение?

Reading time29 min
Views6.6K

Зачем я это читаю?


TL;DR:


  • Переложив секции кода и данных программы на большие страницы можно существенно ускорить приложение (у нас получилось до +10%) не трогая исходный код.
  • Можно быстро проверить ничего не перекомпилируя, детали здесь.
  • Финальное решение оперирует "классическими" большими страницами (не transparent huge pages), поэтому в какой-то степени его можно назвать дальнейшим развитием libhugetlbfs.
Читать дальше →
Total votes 30: ↑29 and ↓1+34
Comments2

Разработчик российского RISC-V ядра будет учить школьников и студентов ассемблеру RISC-V в субботу

Reading time5 min
Views8.3K

В субботу 13 ноября с 12.00 по Москве пройдет следующая сессия Сколковской школы синтеза цифровых схем, в режиме онлайн. По плану на ней должны были быть упражнения на FPGA плате с последовательностной логикой. Однако мы решили изменить план и переставить на эту дату занятие по архитектуре RISC-V. Это занятие было изначально запланировано 11 декабря. Занятие по последовательностной логике будет передвинуто на 20 ноября. Почему мы решили так сделать - см. обьяснение через три абзаца.

Занятие по RISC-V проведет проектировщик российского микропроцессорного ядра Никита Поляков из компании Syntacore. В Syntacore Никита перешел из компании МЦСТ где он проектировал процессор Эльбрус. 

Занятие будет состоять из лекции с одновременными упражнениями на симуляторе RARS. RARS моделирует процессор на уровне архитектуры (системы команд, видимых программисту), в отличие от симулятора Icarus Verilog, который мы обсуждали в предыдущей заметке и который моделирует на уровне регистровых передач / микроархитектуры (внутреннего устройства схемы процессора). Разработчику процессора нужно уметь пользоваться симуляторами обеих типов.

У RARS есть три кнопки - запустить, ассемблировать и выполнить шаг. В конце занятия вы будете уметь программировать на ассемблере, даже если раньше этого никогда не делали. В этой заметке мы расскажем, как установить симулятор и запустить простую программу на ассемблере. Потом в следующей заметке я напишу, что такого особенного есть в архитектуре RISC-V и почему мы выбрали для семинара именно ее, а не ARM, x86/64, MIPS, AVR, SPARC,  Эльбрус, Z80, 6502, PDP-11 или еще что-нибудь другое.

Читать далее
Total votes 14: ↑12 and ↓2+14
Comments49

Docker и Apple M1

Reading time2 min
Views28K

Любопытный казус привел к исследованию совместимости процессора Apple M1, и оказалось, что не все так просто...

Впрочем, обо всем по порядку. Мой коллега, владелец MacBook Pro с M1 обратился ко мне с просьбой помочь с установкой библиотеки.

У меня почти такой же MacBook, но на Intel Core i5, macOS Big Sur. При попытке поставить библиотеку.

Читать далее
Total votes 59: ↑12 and ↓47-34
Comments13

Самые дешёвые щелочные батарейки «Боезапас»

Reading time2 min
Views13K
Эти батарейки можно купить по 10 рублей за штуку, при этом это действительно щелочные (alkaline) батарейки. Я протестировал их и сравнил с другими батарейками.



Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments18

Архитектура PlayStation 3, часть 1: Cell

Reading time24 min
Views38K

В 2006 году Sony выпустила долгожданную игровую консоль "следующего поколения". Это блестящая (хоть и тяжелая) машина, чья базовая аппаратная архитектура развивает идеи Emotion Engine из PS2, то есть фокусируется на векторных вычислениях для достижения высокой производительности, даже ценой сложности.

В то же время, их новый "суперпроцессор", Cell Broadband Engine, был разработан в эпоху кризиса инноваций. Он должен будет идти в ногу с развитием тенденций в области мультимедиа.

Читать далее
Total votes 46: ↑46 and ↓0+46
Comments11

Сломать объект с помощью финализации

Reading time3 min
Views8.5K

Вчера перевели в статус Candidate новый JEP 421: Deprecate Finalization for Removal. Путь к удалению механизма финализации из Java начался в Java 9, когда метод Object.finalize() был впервые объявлен deprecated. Рано или поздно механизм исчезнет из Java, поэтому если вы его используете, самое время задуматься об альтернативах. Однако статья не об этом.


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

Читать дальше →
Total votes 33: ↑33 and ↓0+33
Comments8

Московский Сайлент-Хилл: естественного происхождения, но и не безвредный

Reading time2 min
Views13K

С вечера понедельника и по текущий момент не утихает истерика в СМИ и в районных московских группах- кто связывает сгустившийся над столицей туман с сжиганием мусора/порубочных остатков, плоскоземельщики от атмосферы сразу же вспомнили свои мифические "химтрейлы", Роман Менделевич дал (как и обычно) очень грамотный комментарий, но напугал публику словом "радиационный" - эпитет, который кстати, к туману относится практически в половине случаев.

Я не удержался и полез смотреть карты погоды/ вертикальные разрезы атмосферы, и вот что имею сказать: туман, конечно же, естественного происхождения , но "сложный".

Читать далее
Total votes 11: ↑10 and ↓1+11
Comments26

Математика и IT

Reading time18 min
Views42K

Джорджо де Кирико. Великий метафизик (The Grand Metaphysician), 1917.

Если посмотреть список хабов Хабра, то увидим, что в IT можно выделить много направлений. Для этой статьи возьмем классификацию попроще.


1) CS — создание подходов, имеющих научную новизну. Разработка новых алгоритмов. Основная цель: научная новизна, развитие CS, решение проблем CS.


2) Инженерно-конструкторская деятельность – комбинирование уже известных подходов (алгоритмов, ЯП, библиотек, технологий, исходных кодов), их адаптация под конкретную задачу. Основная цель: создание продукта для решения конкретной практической задачи.


3) Техническое обеспечение — решение типовых (зачастую тривиальных) проблем в ходе эксплуатации “железа” и софта. Обеспечение бесперебойной работы ПО и оборудования с учетом возникающих требований.


Очевидно, что в такой классификации риск неудачи убывает в каждом пункте. При работе над новым алгоритмом или устройством обычно невозможно полностью гарантировать успех. При использовании уже известных алгоритмов, языков, технологий, библиотек и готовых деталей машин – вероятность успешного исполнения работы возрастает. В последнем случае (обеспечение ) работник (должность может быть разная: инженер, системный программист, системный администратор и т.д.) исходит из минимизации замен по принципу: “не трогать то, что хорошо работает”.


Как видим цели противоположные: для научной новизны бывают нужны новые рискованные решения, а для обеспечения – наоборот. Для успешной разработки продукта, желательно применять уже опробованные зарекомендовавшие себя решения, хотя при их отсутствии может понадобится и эксперимент, как в CS.


Кому и насколько в IT нужна математика? — Попробуем ответить на этот вопрос (хотя бы частично).

Читать дальше →
Total votes 22: ↑18 and ↓4+21
Comments193

Какими бывают дисплеи в ноутбуках? Разбор

Reading time7 min
Views47K
У нас уже было много роликов про дисплеи: мы разбирали все типы LCD-матриц в телевизорах. Сделали один из самых подробных материалов про все виды OLED в смартфонах и ТВ. Также мы рассказывали вам про mini-LED и microLED-дисплеи будущего. Но мы еще ни разу не рассказывали про дисплеи в ноутбуках. А ведь в дисплеях для ноутбуков есть своя особая специфика. Поэтому сегодня мы глубоко нырнём в разновидности дисплеев для ноутбуков. Разберём всё страшные аббревиатуры и узнаем как маркетологи вводят нас в заблуждение?


Разберемся как узнать модель и тип дисплея в вашем ноутбуке? И посмотрим на конкретные примеры ноутов и дисплеев.
Читать дальше →
Total votes 13: ↑10 and ↓3+10
Comments15

Как определить C и C++-программистов по коду, который они пишут

Reading time4 min
Views40K

Так уж случилось, что я пишу код для разных IoT-железок, связанных с электричеством, типа зарядных станций автомобилей. Поскольку аппаратных ресурсов, как правило, вполне достаточно, то основным фокусом является не экономия каждого байта и такта процессора, а понятный и надежный код. Поэтому в проекте разрабатывают под Embedded Linux и в качестве основного языка используют C++ в его современном варианте - C++17, активно поглядывая на фичи из стандарта 20-го года и новее.

Иногда запускаются новые проекты на той же платформе, с теми же процессами и с переиспользованием многих уже существующих компонентов, и тогда в эти проекты мы ищем программистов, с учетом вышесказанного - программистов на C++. В embedded, тем не менее, чистый C все еще очень популярен, и нередко собеседоваться на вакансию C++ Developer'а приходят именно сишники. Логика у человека простая: языки, на первый взгляд, довольно близкие, базовый синтаксис одинаков, про ООП кандидат что-то слышал, и значит, основная база уже есть и он сможет легко освоить C++ за 21 день в процессе работы, поэтому можно наплести про "с C++ тоже работал", начать писать на "Си с классами" и все получится.

Но нет, не получится.
Total votes 89: ↑65 and ↓24+62
Comments404
1
23 ...

Information

Rating
Does not participate
Location
Россия
Registered
Activity