Как стать автором
Обновить
1
0

Пользователь

Отправить сообщение

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

Время на прочтение17 мин
Количество просмотров13K

Я часто слышу от пробующих работать с 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.
Читать дальше →
Всего голосов 60: ↑60 и ↓0+60
Комментарии26

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

Время на прочтение3 мин
Количество просмотров30K

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

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

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

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

Залететь
Всего голосов 16: ↑11 и ↓5+6
Комментарии42

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

Время на прочтение5 мин
Количество просмотров7.1K

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

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

Читать далее
Всего голосов 10: ↑8 и ↓2+6
Комментарии5

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

Время на прочтение9 мин
Количество просмотров75K

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

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

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

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

О Харрисах, содержание и почему RISC-V
Всего голосов 48: ↑42 и ↓6+36
Комментарии41

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

Время на прочтение2 мин
Количество просмотров51K

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


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


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

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

Время на прочтение6 мин
Количество просмотров5.7K

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

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

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

Читать далее
Всего голосов 16: ↑16 и ↓0+16
Комментарии22

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

Время на прочтение3 мин
Количество просмотров7K

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

Всего голосов 23: ↑21 и ↓2+19
Комментарии5

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

Время на прочтение19 мин
Количество просмотров29K

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

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

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

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

Читать далее
Всего голосов 20: ↑13 и ↓7+6
Комментарии12

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

Время на прочтение8 мин
Количество просмотров21K

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

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

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

Читать далее
Всего голосов 29: ↑21 и ↓8+13
Комментарии29

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

Время на прочтение29 мин
Количество просмотров6.2K

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


TL;DR:


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

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

Время на прочтение5 мин
Количество просмотров8.1K

В субботу 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 или еще что-нибудь другое.

Читать далее
Всего голосов 18: ↑16 и ↓2+14
Комментарии49

Docker и Apple M1

Время на прочтение2 мин
Количество просмотров28K

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

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

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

Читать далее
Всего голосов 60: ↑13 и ↓47-34
Комментарии13

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

Время на прочтение2 мин
Количество просмотров12K
Эти батарейки можно купить по 10 рублей за штуку, при этом это действительно щелочные (alkaline) батарейки. Я протестировал их и сравнил с другими батарейками.



Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Комментарии18

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

Время на прочтение24 мин
Количество просмотров35K

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

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

Читать далее
Всего голосов 46: ↑46 и ↓0+46
Комментарии11

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

Время на прочтение3 мин
Количество просмотров8.2K

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


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

Читать дальше →
Всего голосов 33: ↑33 и ↓0+33
Комментарии8

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

Время на прочтение2 мин
Количество просмотров13K

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

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

Читать далее
Всего голосов 13: ↑12 и ↓1+11
Комментарии26

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

Время на прочтение18 мин
Количество просмотров41K

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

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


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


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


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


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


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


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

Читать дальше →
Всего голосов 29: ↑25 и ↓4+21
Комментарии193

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

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


Разберемся как узнать модель и тип дисплея в вашем ноутбуке? И посмотрим на конкретные примеры ноутов и дисплеев.
Читать дальше →
Всего голосов 16: ↑13 и ↓3+10
Комментарии15

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

Время на прочтение4 мин
Количество просмотров39K

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

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

Но нет, не получится.
Всего голосов 110: ↑86 и ↓24+62
Комментарии404
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность