Блог*
#prog #rust #dotnet #abnormalprogramming Compiling Rust for .NET, using only tea and stubbornness!
#prog #rust #dotnet #article
Автор продолжил заниматься своим проектом и планирует превратить его в полноценный бекенд для кодогенерации. С момента выпуска Compiling Rust for .NET, using only tea and stubbornness! автор опубликовал три заметки, рассказывающие о прогрессе имплементации:
Enumerating over Generics — рассказывает о том, как
Надо отметить, что сумм-типы есть и в F#, который также транслируется в CIL, но там отличается подход к реализации: сумм-типы всегда хранят все поля всех вариантов. Автор же определяет вложенные структуры для каждого варианта перечисления и хранит в сгенерированном коде дискриминант, а также все варианты с одним смещением от начала структуры — фактически, реимплементация паттерна tagged union.
Mixing C# and Rust - Interop — рассказывает о реализуемой автором библиотеке mycorrhiza для интеропа между Rust и C#. Показывает прекрасный пример, когда пригождаются
Mischievous miscompilations — рассказывает о нюансах перевода из MIR в CIL. Задача сложна тем, что MIR — это IR в SSA, не завязанный на конкретную архитектуру процессора, в то время как CIL является ассемблером для стековой машины. Дополнительные сложности также возникают из-за контекстной зависимости семантики инструкций CIL.
Автор продолжил заниматься своим проектом и планирует превратить его в полноценный бекенд для кодогенерации. С момента выпуска Compiling Rust for .NET, using only tea and stubbornness! автор опубликовал три заметки, рассказывающие о прогрессе имплементации:
Enumerating over Generics — рассказывает о том, как
enum
и дженерики из Rust транслируются в CIL. Автор решил реализовать дженерики Rust как дженерики C# (т. е. без мономорфизации на этапе компиляции). Важная вещь, потому как без этого нельзя скомпилировать никакой из циклов for
в Rust.Надо отметить, что сумм-типы есть и в F#, который также транслируется в CIL, но там отличается подход к реализации: сумм-типы всегда хранят все поля всех вариантов. Автор же определяет вложенные структуры для каждого варианта перечисления и хранит в сгенерированном коде дискриминант, а также все варианты с одним смещением от начала структуры — фактически, реимплементация паттерна tagged union.
Mixing C# and Rust - Interop — рассказывает о реализуемой автором библиотеке mycorrhiza для интеропа между Rust и C#. Показывает прекрасный пример, когда пригождаются
&str
в const generics. В настоящий момент открытая проблема — как предотвратить утекание ссылок на управляемую кучу в неуправляемую кучу.Mischievous miscompilations — рассказывает о нюансах перевода из MIR в CIL. Задача сложна тем, что MIR — это IR в SSA, не завязанный на конкретную архитектуру процессора, в то время как CIL является ассемблером для стековой машины. Дополнительные сложности также возникают из-за контекстной зависимости семантики инструкций CIL.
❤6
Парочка постов от команды crates.io.
A tale of broken badges and 23,000 features, или как отсутствие лимитов немного сломало сторонний сервис.
crates.io: Dropping support for non-canonical downloads — о планах отказаться от возможности скачивать одно и то же по разным именам вроде serde-derive, serde_derive и SerDE_DErive.
A tale of broken badges and 23,000 features, или как отсутствие лимитов немного сломало сторонний сервис.
crates.io: Dropping support for non-canonical downloads — о планах отказаться от возможности скачивать одно и то же по разным именам вроде serde-derive, serde_derive и SerDE_DErive.
blog.rust-lang.org
A tale of broken badges and 23,000 features | Rust Blog
Empowering everyone to build reliable and efficient software.
👍4🤯1
#prog #article
Читатели моего блога, скорее всего, знакомы с понятием Boolean blindness. Если коротко: это обозначение ситуации, когда использование булевых значений приводит к проблемам из-за того, что семантика true и false в значительной степени зависит от контекста.
Несколько менее очевидно (по крайней мере, до ознакомления), что подобная проблема не специфична для булевских значений. Похожие неприятности могут возникнуть и с другими недостаточно доменно-специфичными сумм-типами. Подробнее об этом рассказывается в статье Algebraic blindness.
Читатели моего блога, скорее всего, знакомы с понятием Boolean blindness. Если коротко: это обозначение ситуации, когда использование булевых значений приводит к проблемам из-за того, что семантика true и false в значительной степени зависит от контекста.
Несколько менее очевидно (по крайней мере, до ознакомления), что подобная проблема не специфична для булевских значений. Похожие неприятности могут возникнуть и с другими недостаточно доменно-специфичными сумм-типами. Подробнее об этом рассказывается в статье Algebraic blindness.
The Lumber Room
Boolean blindness
(Just digesting the first page of Google search results.) One of the lessons from functional programming is to encode as much information as possible into the types. Almost all programmers understa…
👍6
∏ρ؃uñçτØρ Øπτµç∑ | 👁🗨››››
Photo
Кстати, я в своё время на своей работе понял довольно простую вещь: если существующий код мешает решить задачу — его можно и поменять.
Принцип, конечно, не универсальный: я работаю над довольно небольшим и изолированным компонентом, который с остальными общается по gRPC. Для чего-то более крупного и более связного этот принцип наверняка применим хуже
Принцип, конечно, не универсальный: я работаю над довольно небольшим и изолированным компонентом, который с остальными общается по gRPC. Для чего-то более крупного и более связного этот принцип наверняка применим хуже
👍3
#prog
TIL что в Github есть возможность склонировать отдельно вики репозитория.
https://docs.github.com/en/communities/documenting-your-project-with-wikis/adding-or-editing-wiki-pages#cloning-wikis-to-your-computer
TIL что в Github есть возможность склонировать отдельно вики репозитория.
https://docs.github.com/en/communities/documenting-your-project-with-wikis/adding-or-editing-wiki-pages#cloning-wikis-to-your-computer
GitHub Docs
Adding or editing wiki pages - GitHub Docs
You can add and edit wiki pages directly on GitHub or locally using the command line.
🤔3😱2👍1🤯1💩1
Блог*
#music Занятный трек, который пытается органично совместить Doom-версию метала с симфоническим оркестром — и, на мой взгляд, делает это хорошо. https://geoffplaysguitar.bandcamp.com/track/crown-of-oris-fight-between-realms-4-of-4 А вот видео про создание…
#music
А вообще почему это четвёртый трек? Потому что он, кхм, четвёртый из набора оригинальных треков, каждый из которых сочетает стилистику Doom Eternal с другими темами.
Providence — Doom + киберпанк (не сразу, но зашло)
Maker's hand — Doom + постапокалиптичные пустоши в духе Mad Max
Livitica Void — Doom + sci-fi
Crown of Oris — Doom + симфонический орекстр
И, разумеется, есть видео о том, как эти треки создавались:
What if the Doom Eternal OST was made for fighting cyborgs instead of demons?
What if the Doom Eternal OST was made for fighting psychos and bandits?
What if Control had Doom Eternal style music instead?
I put a 56-piece orchestra into a Doom Eternal style song and it crashed my computer
А, и ещё есть ремикс Providence от Audiofreq. Доля Doom в этом варианте сильно меньше и куда больше, прости г-споди, дабстепа, но звучит тоже хорошо.
А вообще почему это четвёртый трек? Потому что он, кхм, четвёртый из набора оригинальных треков, каждый из которых сочетает стилистику Doom Eternal с другими темами.
Providence — Doom + киберпанк (не сразу, но зашло)
Maker's hand — Doom + постапокалиптичные пустоши в духе Mad Max
Livitica Void — Doom + sci-fi
Crown of Oris — Doom + симфонический орекстр
И, разумеется, есть видео о том, как эти треки создавались:
What if the Doom Eternal OST was made for fighting cyborgs instead of demons?
What if the Doom Eternal OST was made for fighting psychos and bandits?
What if Control had Doom Eternal style music instead?
I put a 56-piece orchestra into a Doom Eternal style song and it crashed my computer
А, и ещё есть ремикс Providence от Audiofreq. Доля Doom в этом варианте сильно меньше и куда больше, прости г-споди, дабстепа, но звучит тоже хорошо.
YouTube
Providence [HQ] from Fight Between Realms by Geoffrey Day | Doom-Inspired Video Game Music
Read the story "Fight Between Realms": https://www.geoffreydaymusic.com/fight-between-realms-pdf
Become a patron: https://www.patreon.com/geoffplaysguitar
Spotify: https://open.spotify.com/track/2tjUD60we0Dg6JwQ7ZBNaP
Apple Music: https://music.apple.co…
Become a patron: https://www.patreon.com/geoffplaysguitar
Spotify: https://open.spotify.com/track/2tjUD60we0Dg6JwQ7ZBNaP
Apple Music: https://music.apple.co…
#prog
Bloaty — инструмент для оценки размеров различных составляющих исполняемого файла.
Показывает размеры на диске и после погрузки в память. Поддерживает разбиение по секциям, сегментам, единицам компиляции, с достаточным количеством отладочной информации — и по отдельным функциям. Позволяет сравнивать файлы по размерам частей.
Поддерживает ELF и Mach-O. Поддержка PE и Wasm заявлена как экспериментальная.
Bloaty — инструмент для оценки размеров различных составляющих исполняемого файла.
Показывает размеры на диске и после погрузки в память. Поддерживает разбиение по секциям, сегментам, единицам компиляции, с достаточным количеством отладочной информации — и по отдельным функциям. Позволяет сравнивать файлы по размерам частей.
Поддерживает ELF и Mach-O. Поддержка PE и Wasm заявлена как экспериментальная.
GitHub
GitHub - google/bloaty: Bloaty: a size profiler for binaries
Bloaty: a size profiler for binaries. Contribute to google/bloaty development by creating an account on GitHub.
🤔2