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

Rust *

Мультипарадигмальный компилируемый язык

Сначала показывать
Порог рейтинга
Уровень сложности

Permutation neuron или как решить MNIST на 77% с помощью 3 нейронов

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

Это одна из попыток решить mnist за минимальное количество операций умножения.

В качестве примера рассмотрим задачу MNIST, где permutation neuron с тремя классических нейронами и есть вся наша сеть.

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

Для классификации 10 цифр датасета MNIST требуется не менее 10 различных состояний нейрона. Поскольку число перестановок определяется факториалом количества нейронов, минимально необходимо 4 нейрона (4! = 24 перестановки), чтобы покрыть 10 классов. Однако, вычитая значение одного нейрона из остальных (нормализация), можно ограничиться вычислением трёх нейронов, задавая четвёртый нейрон равным нулю, без нарушения порядка перестановок. Это позволяет сократить вычислительные затраты, сохраняя 24 уникальных состояния для классификации.

Для задачи классификации 10 цифр датасета MNIST permutation neuron работает следующим образом: три нейрона с линейной функцией активации вычисляют значения на основе входных данных изображения, а четвёртый нейрон фиксируется равным нулю. Эти четыре значения упорядочиваются, формируя одну из 24 возможных перестановок (4!), например, ACZB. С помощью кода Лемера каждая перестановка преобразуется в уникальное число от 0 до 23, которое затем отображается на один из 10 классов MNIST, определяя, например, цифру от 0 до 9.

Читать далее

Новости

Гайд на полиморфизм. Rust

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров2.6K

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

Читать далее

Сорцы на выходные на «расте»

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

Наибольший кайф античных книг в их выдержке, актуальности. Книги точно проверены временем, актуальны (правда если знаешь в чем) и как ни странно, честны (книги хотели бы, чтобы их читали через сотню или тысячу лет). В программировании античные скрипты, наверно, написал Деннис Ритчи, сегодня же почитаем современников - Sean Parent (довольно известный чел в c++ тусовке) начал писать на расте (возможно, как начал так и закончил, но мы живем в моменте - поэтому предлагаю насладиться). Читать на расте сложнее, чем писать (это прям факт) - пишут его двое (автор и компилятор), а читают, ну читают на гитхабе. Далее в прозаическом сочинении свободной композиции, подразумевающем впечатления и соображения автора по конкретному поводу или предмету, рассмотрим компоненты новой библиотеки и попробуем насладиться примерами кода.

Читать далее

Кросс-платформенный Rust от и до: GUI + CLI + CI + Docker Реальный опыт доставки DotPlus на Linux и ARM

Уровень сложностиПростой
Время на прочтение15 мин
Количество просмотров2.1K

Кросс-платформенный Rust от и до: GUI + CLI + CI + Docker Реальный опыт доставки DotPlus на Linux и ARM

Читать далее

История успеха, из-за которой компания перестала работать с Rust

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров19K

Пользователь Reddit опубликовал в r/rustjerk сгенерированный ИИ пост под названием «Почему наш CTO запретил использовать Rust после одного переписывания кода». Очевидно, что этот рассказ выдуман, но у меня есть история похожая на него в том смысле, что успех проекта на Rust привёл к прекращению использования этого языка в компании.

Несколько лет назад я работал в стартапе-«единороге», во время пандемии развивавшемся невероятно быстро. Его основное приложение было написано на Ruby on Rails, а часть инструментария для работы с видео — на Node.js, но мы никак не применяли быстрые компилируемые языки наподобие Rust и Go. Через пару месяцев после моего прихода в компанию нам нужно было реализовать работающий в реальном времени сервис, который бы позволял нам получать информацию о том, кто из пользователей находится онлайн (то есть в профиле есть зелёная точка) и чем они занимаются (например: N пользователей смотрят презентацию X, M пользователей находятся в разделе маркетинга и так далее). Ничего особо сложного, но мы рассчитывали на изначальный рост до ста тысяч пользователей. Эта цель тоже не особо сложна, но большинство разработчиков согласилось, что Ruby — не лучший выбор для этого.

Читать далее

Как я проектирую и разрабатываю реальные расширения для Python на Rust

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

Вы, вероятно, уже видели немало статей с заголовками вроде «Python, Rust — производительность, бла-бла-бла…». Печально, но почти все эти статьи демонстрируют лишь самые простые примеры уровня «hello world». В отличие от них, в этой статье я хочу поделиться тем, как я проектирую крупные расширения для реальных проектов и почему принимаю при этом те или иные решения.
Читать дальше →

Вычисляем коэффициент популярности крейтов Rust для работы и для хобби-проектов

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

Твит, который подтолкнул меня к реализации описанного в статье мини-проекта.

Взявшись за эту задачу, я около двух часов ваял небольшой скрипт, который будет скрейпить данные из базы крейтов Rust crates.io и анализировать их для выяснения, какие пакеты чаще скачиваются для работы (то есть в будние дни), а какие для развлечения (то есть в выходные).

Читать далее

Небольшая библиотека утилит на Rust для Python (FastPy-RS, Alpha)

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

Всем привет! Я пришёл из экосистемы Rust и недавно начал работать в Python. Я люблю Rust за безопасность и скорость, но влюбился в Python за простоту и быструю разработку. Это вдохновило меня создать что-то полезное для сообщества Python: FastPy-RS — библиотеку часто используемых функций, которую можно вызывать из Python, а реализация внутри написана на Rust. Цель — обеспечить высокую производительность и надёжность. Хотя многие Python-библиотеки используют C для ускорения, такой подход может нести риски безопасности.

Читать далее

На сколько же медленнее произвольный доступ на самом деле?

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров3.3K

Как вы, наверно, знаете, из-за наличия в компьютере различных кэшей (L1, L2, L3...) и того, что операции с памятью выполняются с линиями кэша размером примерно 64 байт каждая, для обеспечения максимальной производительности мы должны писать программы, обеспечивающие локальность.

(Разумеется, диск здесь не показан)

Но насколько хорошо вы это осознаёте? Допустим, у нас есть массив чисел с плавающей запятой и массив индексов первого массива. Есть программа, складывающая числа из первого массива в порядке, определяемом вторым массивом. То есть в этом примере мы будем складывать ε + α + δ + ζ + β + γ в таком порядке:

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

1. Насколько большим должен быть массив, чтобы разница производительности вычисления в двух порядках стала заметной?

2. Сколько в среднем тратится на каждый элемент в порядке от первого до последнего?

3. Насколько медленнее произвольный порядок последовательного в случае массивов, умещающихся в RAM?

4. Насколько медленнее произвольный порядок последовательного в случае массивов, не умещающихся в RAM?

5. Достаточно ли стандартного тасования Фишера-Йейтса для массивов перемешанных индексов для получения произвольного порядка?

6. Насколько медленнее порядок от первого до последнего в случае массивов, не умещающихся в RAM, при использовании файлов с отображением в память?

7. Максимально ли быстры файлы с отображением в память?

Если вы уже знаете ответы на эти вопросы, то это замечательно! Если же нет, то делайте ваши предположения и проверьте их, прочитав пост.

Читать далее

Rust 1.88.0: Цепочки let, naked-функции, булевы литералы в cfg и очистка кеша cargo

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.5K

Команда Rust рада сообщить о новой версии языка — 1.88.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.


Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.88.0 вам достаточно выполнить команду:


$ rustup update stable

Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.


Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta) или nightly (rustup default nightly). Пожалуйста, сообщайте обо всех встреченных вами ошибках.

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

Созерцаем электропривод

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров5.3K

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

Читать далее

DotPlus — офлайн-генератор QR и штрихкодов на Rust с GUI и CLI

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.7K

Как я написал генератор QR и штрихкодов на Rust с GUI и CLI — полностью офлайн, без браузеров и API. Работает с CSV, экспортирует в PNG, подходит для логистики и массовой печати.

Читать далее

Создание своего ядра на Rust. Часть 2

Уровень сложностиСложный
Время на прочтение9 мин
Количество просмотров3.2K

В данной статье мы поговорим о системных вызовах (syscall) — важнейшем механизме взаимодействия между пользовательским кодом и ядром операционной системы.

Читать далее

Ближайшие события

YOLO на Rust: производительность, удобство и открытость

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров5.6K

Сегодня хочу рассказать вам о библиотеке yolo_detector — простой, удобной и производительной обёртке для использования моделей компьютерного зрения YOLO на языке Rust.

Читать далее

Создание своего ядра на Rust

Уровень сложностиСложный
Время на прочтение19 мин
Количество просмотров9.7K

В этой статье мы пройдём путь создания простого, но функционального ядра операционной системы на языке Rust.
Разумеется, мы не будем собирать полноценную альтернативу Linux, но сосредоточимся на ключевых компонентах, которые лежат в основе любого ядра.

Читать далее

Telegram AI Companion: веселый проект на Rust, Telegram и локальном ИИ

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров2.4K

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

Недавно я собрал небольшой, но бодрый pet-проект — Telegram AI Companion. Это Telegram-бот, который умеет болтать с вами, используя локальную языковую модель через LocalAI. Без OpenAI, без облаков — всё на своём железе.

Цель проекта — не революция в AI, а именно учебное и увлекательное погружение в Rust, асинхронность, Telegram API и локальные LLM-модели. Такой себе “бот-компаньон”, но больше для разработчика, чем пользователя :)

Если вам интересно:

Читать далее

Type Driven Development на практике

Уровень сложностиСложный
Время на прочтение16 мин
Количество просмотров3.1K

Разработка через типы (Type-Driven Development, TypeDD) — это методология программирования, при которой вы начинаете с написания определений типов, которые служат точной спецификацией вашей программы. Вместо того чтобы сначала писать код, а потом добавлять тесты или типы, вы используете компилятор как интерактивного ассистента, который направляет вас к созданию программы, удовлетворяющей заданным типам.

Idris — это чистый функциональный язык программирования, созданный Эдвином Брэди, который идеально подходит для этого подхода благодаря поддержке зависимых типов.


Но попробуем использовать его идеи на практике вне Idris.

Попробуем сравнить такие метрики как
1. Время проектирования (момент, после которого разработчик может больше не соприкасаться с предметной областью, а руководствоваться только ТЗ)
2. Время до выкатки на прод
3. Частота ошибок на проде (и как следствие, ущерб бизнесу и затраты на сопровождение)

Читать далее

Self-hosted URL shortener + Raycast

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров2.3K

Привет Хабр!

Я обожаю сокращать ссылки через собственный URL shortener. Это как clck.ru, только всё работает на собственной архитектуре и данные об использовании никуда не утекают. При этом домен я тоже могу поставить какой-нибудь красивый (к примеру - hdla.cloud).

Читать далее

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

Уровень сложностиПростой
Время на прочтение15 мин
Количество просмотров7.9K

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

Кроме того, наряду с обычными жалобами на время компиляции, я начал замечать от раздражённых разработчиков на Rust и подобные заявления: «Почему Rust Project не занимается активнее этой важной и очевидной проблемой? Почему с этим что-нибудь не сделают?». Я участник рабочей группы по производительности компилятора Rust, поэтому воспринимаю такие вопросы очень серьёзно. И, разумеется, у меня есть мнение по этому поводу. В этом посте я приведу свои размышления, способные служить ответами на эти (и похожие) вопросы.

Предупреждение: все выраженные в этом посте мнения исключительно мои и необязательно отражают точку зрения Rust Project (группы контрибьюторов и мейнтейнеров тулчейна Rust).

Читать далее

Dart Native Assets: Полное руководство от новичка до профи

Уровень сложностиСложный
Время на прочтение14 мин
Количество просмотров1.1K

Представьте, что у вас есть Dart-программа, и вы хотите использовать готовую библиотеку, написанную на C, C++, Rust или другом языке. Раньше это было сложно - нужно было вручную компилировать библиотеку, следить за тем, чтобы она попала в нужное место, и писать много дополнительного кода.

Native Assets - это система, которая автоматизирует весь этот процесс. Она позволяет вашему Dart-пакету "включать в себя" нативный код и автоматически его компилировать и подключать.

Читать далее
1
23 ...