#prog #rust #rustlib #amazingopensource
Symphonia is a pure Rust audio decoding and media demuxing library supporting AAC, ADPCM, ALAC, FLAC, MKV, MP1, MP2, MP3, MP4, OGG, Vorbis, WAV, and WebM.
Features
* Decode support for the most popular audio codecs with support for gapless playback
* Demux the most common media container formats
* Read most metadata and tagging formats
* Automatic format and decoder detection
* Basic audio primitives for manipulating audio data efficiently
* 100% safe Rust
* Minimal dependencies
* Fast with no compromises in performance!
И последний пункт — не пустой звук: согласно бенчмаркам, производительность сопоставима с FFMpeg (правда, тестировался только однопоточный режим)
Symphonia is a pure Rust audio decoding and media demuxing library supporting AAC, ADPCM, ALAC, FLAC, MKV, MP1, MP2, MP3, MP4, OGG, Vorbis, WAV, and WebM.
Features
* Decode support for the most popular audio codecs with support for gapless playback
* Demux the most common media container formats
* Read most metadata and tagging formats
* Automatic format and decoder detection
* Basic audio primitives for manipulating audio data efficiently
* 100% safe Rust
* Minimal dependencies
* Fast with no compromises in performance!
И последний пункт — не пустой звук: согласно бенчмаркам, производительность сопоставима с FFMpeg (правда, тестировался только однопоточный режим)
GitHub
GitHub - pdeljanov/Symphonia: Pure Rust multimedia format demuxing, tag reading, and audio decoding library
Pure Rust multimedia format demuxing, tag reading, and audio decoding library - pdeljanov/Symphonia
🔥7👍1
Forwarded from я что-то �� и всё ����
🔁 Bash.org.ru (типа)
1: как откасить от армии?
2: замутить с дочкой военкома
1: а если у него мальчик?
2: ну если ты такой принципиальный то иди в армию
1: как откасить от армии?
2: замутить с дочкой военкома
1: а если у него мальчик?
2: ну если ты такой принципиальный то иди в армию
😁20❤3💩2🤡2
Forwarded from Agagagagagagagaggagagaggaggaggaga
Вот сейчас все орут с Яндекса, а они дождутся, когда все самые кривые места разойдутся мемасами по телеге, и отрефакторят все косяки, не вложив ни часа в анализ. Stonks, не иначе
🔥34😁5🤡2🌚1
#prog #rust #rustreleasenotes
Вышла версия Rust 1.67.0! В этот раз заметных изменений не так уж и много. Вот полный список, если что. Как всегда, выпишу только то, что интересно мне.
▪️До стейбла докатилось изменение, о котором я уже писал:
▪️Ещё одно такое изменение: замена реализации MPSC-канала из std.
▪️И ещё одно такого рода: порядок дропа временных значений в цепочках из выражений, соединённых только
▪️И ещё одно:
▪️Трейт Sized стал коиндуктивным. Иными словами, если задача доказать ограничение
Остальное в подробных заметках о релизе.
Вышла версия Rust 1.67.0! В этот раз заметных изменений не так уж и много. Вот полный список, если что. Как всегда, выпишу только то, что интересно мне.
▪️До стейбла докатилось изменение, о котором я уже писал:
#[must_use]
на асинхроных функциях теперь предупреждает не только о неиспользуемой футуре, возвращаемой функцией, но и о неиспользуемом возвращённом этой футурой значении.▪️Ещё одно такое изменение: замена реализации MPSC-канала из std.
▪️И ещё одно такого рода: порядок дропа временных значений в цепочках из выражений, соединённых только
&&
и соединённых только ||
, теперь всегда слева направо, без специального отношения к первому подвыражению.▪️И ещё одно:
NonZero*::BITS
.▪️Трейт Sized стал коиндуктивным. Иными словами, если задача доказать ограничение
T: Sized
приводит к необходимости доказать это же самое ограничение, образуя цикл в логике, то вместо ошибки компилятор теперь выводит, что тип таки реализует Sized
. На практике это означает, что рекурсивные типы, параметризованные типом индирекции, теперь нормально компилируются. Скажем, этот код не компилировался до этого изменения и компилируется после:trait Allocator {▪️Компилятор слегка поумнел в плане вывода типов для замыканий.
type Allocated<T>;
}
enum LinkedList<A: Allocator> {
Head,
Next(A::Allocated<Self>),
}
Остальное в подробных заметках о релизе.
👍11
Forwarded from я что-то �� и всё ����
Оказывается, пайдантик может молча дропнуть создание класса, если немного накосячить с объявлением
Узнала я об этом при попытке проверить работу алиасов. Если базовая модель объявляет поле, а наследник переобъявит его через присваиваение pydantic.Field(alias=...), но *не* укажет тайпхинт, пайдантик дропнет вообще весь класс, как будто его и не было никогда
Причём достаточно одного такого поля, чтобы весь класс улетел в мусорку
Узнала я об этом при попытке проверить работу алиасов. Если базовая модель объявляет поле, а наследник переобъявит его через присваиваение pydantic.Field(alias=...), но *не* укажет тайпхинт, пайдантик дропнет вообще весь класс, как будто его и не было никогда
Причём достаточно одного такого поля, чтобы весь класс улетел в мусорку
🤣13👍4👎3😁1