9 136
Подписчики
+724 часа
+277 дней
+21430 дней
Архив постов
9 136
👣 Tessa-Rust-T1-7B-Q8_0-GGUF — компактная 8-битная версия Rust-ориентированной модели Tessa-Rust-T1 в формате GGUF для llama.cpp.
Создана для генерации и автодополнения кода на Rust с учётом лучших практик языка.
Hugging Face
🚀 Обзор модели
Архитектура: трансформер на базе Qwen2.5-Coder-7B-Instruct, дообученный на специализированном Rust-датаcете от Tesslate.
Цель: автономная генерация идиоматичного Rust-кода — функции, структуры, трейты и модули; интеграция в AI-агенты для автоматизации backend-разработки и CLI-утилит.
Hugging Face
Размер: ~7.62 B параметров (после квантования Q8_0) → файл ~8.1 GB в формате GGUF.
⚙️ Ключевые особенности
Глубокое Rust-мышление: поддерживает включение «think-тегов» в промпт для структурированного, многоэтапного рассуждения перед выдачей результата.
Контекстно-чувствительная генерация: учитывает зависимости (crates), lifetimes и идиомы Rust, что снижает количество ошибок после генерации.
Интеграция с агентами: модель готова для использования в автономных системах разработки, быстрой генерации backend-логики, тестов и CLI-утилит.
https://huggingface.co/Tesslate/Tessa-Rust-T1-7B-Q8_0-GGUF
@rust_code
9 136
🧠 Задача на Rust — для продвинутых разработчиков
use std::cell::RefCell;
use std::rc::Rc;
fn main() {
let a = Rc::new(RefCell::new(1));
let b = a.clone();
let c = {
let mut val = b.borrow_mut();
*val += 1;
Rc::try_unwrap(b).ok().unwrap().into_inner()
};
println!("a: {}", a.borrow());
println!("c: {}", c);
}
Что выведет код?
A.
a: 2
c: 2
B.
a: 1
c: 2
C.
Panic at runtime due to unwrap failure ✅
D.
Compilation error due to ownership rules
📌 Ответ:
Правильный ответ: C — Panic at runtime due to unwrap failure
Почему:
Мы создаем a как Rc<RefCell<i32>>, из него делаем b = a.clone() → теперь у Rc два владельца.
Мы мутируем значение через b.borrow_mut(), увеличиваем его на 1.
Затем пытаемся сделать Rc::try_unwrap(b).
⚠️ Rc::try_unwrap требует, чтобы Rc был единственным владельцем. Но у нас всё ещё есть a, то есть ссылка остаётся → unwrap не срабатывает и unwrap() вызывает паник на runtime.
@rust_code9 136
Возможность для backend разработчиков, Яндекс Практикум ищет экспертов!
Яндекс Практикум — сервис онлайн-образования, где реально освоить востребованную цифровую профессию.
Что делает программный эксперт:
✔️ формирует программу на основе требований рынка и лучших практик в отрасли,
✔️ курирует набор авторов, а затем их работу над обучающим контентом,
✔️ проводит фактчекинг, вносит корректировки — заботится о том, чтобы курс стал по-настоящему полезным и востребованным.
От кандидата ожидают:
Опыт в коммерческой backend разработке на Rust от 4 лет. Если вы имеете опыт в коммерческой backend разработке на Rust от 4 лет и вы точно знаете «как это должно работать» — добро пожаловать!
Узнайте больше о курсе и роли программного эксперта здесь.
Ждём ваших откликов, коллеги!
9 136
💡 Задача Linux: Пропажа файла после echo
У вас есть файл
/tmp/testfile с важным содержимым. Вы решили добавить в него строку "Hello, world!" с помощью команды:
echo "Hello, world!" > /tmp/testfile
Однако после выполнения этой команды вы замечаете, что всё старое содержимое исчезло и осталась только одна строка "Hello, world!".
Вопрос:
Почему это произошло? Как правильно было добавить строку, не потеряв содержимое?
✅ Решение и объяснение:
🔍 Что делает >?
Символ > в Bash — это перезапись (truncate) файла. Когда вы пишете:
```bash
echo "Hello, world!" > /tmp/testfile```
Это значит:
Shell открывает файл на запись с обнулением (truncate).
Весь предыдущий контент удаляется, прежде чем echo записывает новую строку.
Вот подвох: даже если echo кажется безобидной командой, сам процесс перенаправления (>) выполняется до запуска echo.
✅ Как сделать правильно?
Чтобы добавить строку, нужно использовать >>, а не >:
```bash
echo "Hello, world!" >> /tmp/testfile
```
>> открывает файл в режиме append, не трогая текущее содержимое.
⚠️ Бонусный подвох (для профи)
Выполните это:
```bash
cat /tmp/testfile > /tmp/testfile
```
После этого файл станет пустым. Почему?
➡️ Ответ: cat читает из /tmp/testfile, но перенаправление > делает truncate сразу, еще до запуска cat. То есть:
Файл обнуляется,
Потом cat читает его… но он уже пустой!
Чтобы избежать такого поведения, можно использовать временный файл:
```bash
cat /tmp/testfile > /tmp/tmpfile && mv /tmp/tmpfile /tmp/testfile```9 136
Смарт-контракты: Автоматизация и сравнение реализаций в Ethereum, TON и Solana
Введение в смарт-контракты. Как смарт-контракты заменяют традиционные процессы? Расскажем на открытом уроке!
Результаты урока:
- Понимание принципов работы смарт-контрактов и их роли в Web3.
- Навык чтения кода на Solidity, FunC и Rust.
- Умение выбирать блокчейн под конкретные задачи (стоимость, скорость, масштабируемость).
- Готовые примеры для дальнейшего изучения.
👉 Регистрация и подробности о курсе “Разработка децентрализованных приложений”
https://otus.pw/ytvC/?erid=2W5zFHbg3ix
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
9 136
🔍 Вопрос: что выведет этот код на Rust?
fn main() {
let mut v = vec![1, 2, 3];
let first = &v[0];
v.push(4);
println!("First: {}", first);
}
---
✔️ Правильный ответ: Ошибка компиляции
---
🧠 Разбор:
- let first = &v[0]; ➜ иммутабельная ссылка
- v.push(4); ➜ мутабельная операция
Rust запрещает это: нельзя иметь и иммутабельную ссылку, и мутабельную операцию одновременно!
📚 Rust выдаст ошибку компиляции:
error[E0502]: cannot borrow v as mutable because it is also borrowed as immutable
💥 Подвох: в C++, Go или JS это бы сработало.
Rust завернет такое на стадии компиляции ✅
@rust_code9 136
А расскажите, есть ли у вас хобби? Может быть вы чем-то необычным занимаетесь в свободное время?
Кажется, нашлось одно очень необычное хобби — изучение философии. Вы задумывались, что в современном мире люди не так часто вспоминают об этой дисциплине? Не только же с помощью психологии и подкастов в интернете можно познавать мир и себя.
Ребята из Страдариума недавно запустили формат ридингов философских текстов. Это формат, где участники вместе с профессором Дианой Гаспарян строчка за строчкой читают и разбирают важнейшие философские тексты. У Страдариума невероятное сообщество учеников. В чате ридингов участники со всего мира не только обсуждают философские вопросы, но и находят комьюнити единомышленников. Говорят, что на ридингах Страдариума очень много программистов и работников IT-сферы. Если вы уже участвовали в подобных ридингах, расскажите, как вам?
В мае начинают читать «Левиафан» Гоббса, 400-летний текст, который объясняет современный мир. Читают оригинальный текст по изданию 1991 года, прямо на онлайн-встречах, а затем обсуждают прочитанное.
Найти новое хобби и записаться на ридинг по скидке можно прямо здесь.
9 136
Профили времени компиляции в Rust: зачем, как и когда
Возможность выбирать профиль времени компиляции в Rust может повысить производительность, размер, удобство сопровождения, безопасность и переносимость вашего кода.
Ниже приведены несколько аргументов в пользу того, почему вам следует использовать их при работе: https://betterprogramming.pub/compile-time-feature-flags-in-rust-why-how-when-129aada7d1b3
#rust
@rust_code
9 136
🧑🏻💻Как эффективно управлять ошибками в коде и избегать багов?
На открытом вебинаре 23 апреля в 20:00 МСК вы познакомитесь с мощной системой обработки ошибок в Rust и узнаете, почему этот подход считается одним из самых безопасных и надёжных. Вместе с экспертом вы освоите оператор «?» и работу с типами Result и Option.
Вы получите практические навыки и сможете легко писать код без неожиданных сбоев и исключений, повысив надежность ваших приложений.
👉Регистрируйтесь на вебинар и получите специальную скидку на полный курс «Rust Developer. Basic»: https://otus.pw/mbYb/?erid=2W5zFJ8tVPE
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
9 136
🦀 less_slow.rs — продвинутый Rust
Это практическое руководство по написанию высокопроизводительного кода на Rust.
Цель — увеличить скорость и глубже понять, как работает производительный Rust-код.
🚀 В проекте:
• Сравнение async и sync подходов
• Работа с кеш-френдли структурами и layout-оптимизациями
• SIMD-ускорения и многопоточность
• Разбор быстродействия через микробенчмарки
• Примеры быстрой сериализации и парсинга (JSON, Arrow, Parquet)
• Работа с полями struct, layout, memory alignment
📦 Используемые библиотеки:
rayon, tokio, simd, polars, serde, simd-json, tracing, mimalloc
💡 Must-read, если ты хочешь не просто писать на Rust, а писать быстрый и эффективный Rust-код.
🔧 Еще в серии:
🧠 less_slow.cpp — C++ без тормозов: ассемблер, кеши, SIMD, аллокации, парсинг JSON и трюки с памятью
👉 github.com/ashvardanian/less_slow.cpp
🐍 less_slow.py — Python на максималках: pandas vs polars, Cython, PyO3, Numba, Parquet, zero-copy
📚 Все проекты сопровождаются примерами, микробенчмарками и понятными объяснениями.
📚 Репозиторий:
github.com/ashvardanian/less_slow.rs
@rust_code
9 136
❔ ЗАДАЧА : Что выведет этот код?
use std::mem;
struct Tracer(&'static str);
impl Tracer {
fn new(name: &'static str) -> Tracer {
println!("Creating {}", name);
Tracer(name)
}
}
impl Drop for Tracer {
fn drop(&mut self) {
println!("Dropping {}", self.0);
}
}
struct Test {
a: Tracer,
b: Tracer,
}
fn main() {
let mut t = Test {
a: Tracer::new("A"),
b: Tracer::new("B"),
};
mem::replace(&mut t.a, Tracer::new("X"));
println!("Midpoint");
}
✅ ОТВЕТ:
```Creating A
Creating B
Creating X
Dropping A
Midpoint
Dropping B
Dropping X
```
1. Создание: Tracer::new("A") → Creating A
2. mem::replace(...): Creating X Dropping A
3. println!("Midpoint"): Midpoint
4. Drop поля: B, затем X
Этот код демонстрирует поведение Drop при замене полей структуры в Rust через std::mem::replace.
@rust_code9 136
⚙️Уже работаете с Rust, но хотите эффективно интегрировать его с другими языками? Или интересуетесь, как устроен процесс сборки и линковки в этом языке?
📆На открытом вебинаре 24 апреля в 20:00 мск мы подробно разберем, как собирать и линковать библиотеки в Rust, как использовать Rust-библиотеки в других языках, а также реализуем Си ABI (Application Binary Interface). Вы получите знания, которые помогут вам повысить производительность ваших проектов и интегрировать Rust в существующие решения.
👨💻Урок будет полезен всем, кто хочет углубить свои знания в Rust, повысить квалификацию и навыки работы с библиотеками и системами. Вы сможете применять полученные знания в реальных проектах.
👉Присоединяйтесь к открытому вебинару и получите скидку на большое обучение «Rust Developer. Professional»: https://otus.pw/PRWxe/?erid=2W5zFFz8mQt
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
9 136
👣 Вопрос:
Какие строки и в каком порядке будут выведены на консоль при запуске этой программы? Приведите полный список выводимых сообщений.этого кода.
use std::mem;
struct Tracer(&'static str);
impl Drop for Tracer {
fn drop(&mut self) {
println!("Dropping {}", self.0);
}
}
struct Container {
tracer: Tracer,
}
fn make_tracer(name: &'static str) -> Tracer {
println!("Creating {}", name);
Tracer(name)
}
fn main() {
let a = make_tracer("a");
let b = make_tracer("b");
{
let temp = make_tracer("temp");
println!("Inside block");
// temp перемещается в c
let c = temp;
println!("Exiting block");
} // <- здесь c (то есть «temp») умирает
let mut container = Container {
tracer: make_tracer("container1"),
};
// замена поля: старый контейнер1 будет сброшен
container.tracer = make_tracer("container2");
println!("Before dropping b explicitly");
mem::drop(b);
println!("End of main");
} // <- здесь умирают: container.tracer ("container2"), затем a
🔜 Ответ
Вот что выведется на консоль, построчно:
```bash
Creating a
Creating b
Creating temp
Inside block
Exiting block
Dropping temp
Creating container1
Creating container2
Dropping container1
Before dropping b explicitly
Dropping b
End of main
Dropping container2
Dropping a```
Пояснение по шагам:
let a = make_tracer("a");
Сначала вызывается make_tracer("a"), который печатает
Creating a
и возвращает Tracer("a").
let b = make_tracer("b");
Аналогично:
Creating b
Блок { … }:
let temp = make_tracer("temp"); → Creating temp
println!("Inside block"); → Inside block
let c = temp; — просто перемещение, без нового вывода.
println!("Exiting block"); → Exiting block
В конце блока выходит из области видимости c (он же temp), срабатывает Drop → Dropping temp
Инициализация container:
rust
let mut container = Container {
tracer: make_tracer("container1"),
};
→ Creating container1
Перезапись поля tracer:
```rust
container.tracer = make_tracer("container2");
Сначала вычисляется правая часть → Creating container2.
Затем старый container.tracer (то есть container1) сбрасывается → Dropping container1.```
Явное удаление b:
```rust
println!("Before dropping b explicitly");
mem::drop(b);
→ Before dropping b explicitly
Затем drop(b) вызывает Drop для b → Dropping b```
Выход из main:
```rust
println!("End of main");
→ End of main```
После этого по правилам Rust объекты уничтожаются в порядке обратном созданию (LIFO):
Сначала поле container.tracer (уже “container2”) → Dropping container2
Затем переменная a → Dropping a
Таким образом и получается приведённая последовательность.9 136
⚡️Хотите стать востребованным разработчиком и освоить один из самых перспективных языков программирования?
Курс «Rust Developer. Basic» от OTUS создан для тех, кто уже знаком с программированием и хочет уверенно развиваться в современной разработке. Rust гарантирует безопасность, высокую производительность и востребован в веб-разработке, блокчейне, анализе данных и даже в создании встроенных систем.
Вас ждут живые лекции от опытных экспертов, актуальные материалы и практика на реальных задачах. Вы научитесь писать безопасный и производительный код, создавать сложные многопоточные приложения, асинхронно работать с сетью и файловыми системами.
👉Оставьте заявку прямо сейчас и получите скидку на обучение: https://otus.pw/oMlC/?erid=2W5zFGjLASU
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
9 136
Repost from Python/ django
🖥 Python на скорости Rust
Новый Function (fxn) — фреймворк, который компилирует Python-функции в нативный код с производительностью, сравнимой с Rust.
🧠 Как это работает?
- Использует символическое трассирование на CPython для анализа функций
- Генерирует промежуточное представление (IR)
- Транслирует IR в C++ или Rust, а затем компилирует в бинарный код
- Поддерживает платформы: Linux, Android, WebAssembly и др.
📦 Пример:
@compile
def fma(x: float, y: float, z: float) -> float:
return x * y + z
После компиляции вы получаете нативный бинарник, который можно запускать без интерпретатора Python.
🔗 Подробнее
🔗 Github
@pythonl
#Python #Rust #fxn #Compiler #Performance #AI #ML #Wasm
9 136
👣 garde — это библиотека для валидации данных в Rust 🦀, то есть проверки, что структура или переменные соответствуют определённым правилам (например, "email должен быть валидным", "возраст больше 18", "строка не пустая" и т.д.).
🧠 garde позволяет:
✅ Легко описывать правила валидации прямо внутри структур (через атрибуты).
🔁 Работать с вложенными структурами (inner types).
🧊 Поддерживает newtypes — обёртки над типами.
🛠️ Писать свои кастомные валидаторы.
⚡ Проверка происходит во время исполнения, но декларативно выглядит как часть типа.
📦 Пример использования
rust
use garde::Validate;
#[derive(Validate)]
struct User {
#[garde(length(min = 3))]
username: String,
#[garde(email)]
email: String,
}
Тут username должен быть минимум из 3 символов, а email — валидный адрес.
⭐ GitHub: https://github.com/jprochazk/garde
#rustlang #type #validation #programming #library #opensource9 136
✨ Machine Learning na Rust ✨
🔍 Ключевое из статьи The Beginner’s Guide to Machine Learning with Rust:
▪ Rust — безопасный и быстрый: Исключает критические ошибки, дает скорость C/C++
▪ ndarray — аналог NumPy
▪ tch-rs — обертка над PyTorch
▪ linfa — алгоритмы МЛ на Rust
▪ Cargo — для управления проектами
📝 Rust еще рано заменять Python, но уже есть что пощупать 🚀
9 136
🎶 Glicol — это экспериментальная среда для live-кодинга, где звуки рождаются из соединения узлов, как в модульном синтезаторе.
Написанный на Rust, он работает где угодно: в браузере, как VST-плагин или даже на аппаратуре вроде Bela.
Можно начинать с простых битов, а потом углубляться в сэмплерные точные синтезы — без необходимости устанавливать что-либо. Особенность Glicol — в его низком пороге входа, но и без ограничений для профессионалов.
🤖 GitHub
@rust_code
9 136
🎶 Glicol — это экспериментальная среда для live-кодинга, где звуки рождаются из соединения узлов, как в модульном синтезаторе.
Написанный на Rust, он работает где угодно: в браузере, как VST-плагин или даже на аппаратуре вроде Bela. Можно начинать с простых битов, а потом углубляться в сэмплерные точные синтезы — без необходимости устанавливать что-либо. Особенность Glicol — в его низком пороге входа, но и без ограничений для профессионалов.
🤖 GitHub
@javascriptv
9 136
💥 Urx (сокращение от "Extracts URLs") — это инструмент на базе Rust, который я создал для сбора URL из различных OSINT архивов.
В результате для указанных доменов формируется обширный список URL‑адресов, который можно использовать в исследованиях, тестировании безопасности или при аналитической работе.
Основные функции Urx:
▪ Получение URL‑адресов сразу из нескольких источников (Wayback Machine, Common Crawl, OTX)
▪ Гибкая фильтрация по расширениям, шаблонам или заранее заданным пресетам (например, «no‑image» для исключения изображений)
▪ Поддержка различных форматов вывода (plain text, JSON, CSV)
▪ Возможность направлять результаты в консоль, файлы или другие инструменты (через stdin для пайплайнов)
▪ Валидация и проверка URL‑адресов по статус‑кодам и паттернам, а также извлечение дополнительных ссылок из собранных страниц
Urx значительно упрощает процесс сбора и анализа URL, сочетая высокую скорость работы (Rust, асинхронная обработка) и разнообразие функций для фильтрации, сортировки и экспорта данных.
Установка:
cargo install urx
🔗 Github
@rust_code
#security #bugbounty