мне не нравится реальность
Я придерживаюсь презумпции няшности. Все — няшки, пока не доказано обратного.
То есть Вафель — няшка, Q. E. D.
🤮14👎3👍2
Forwarded from блог кекея
больше всего в жизни меня пугает что мой блог или блог моих друзей станет новым дневником анны франк
#prog #regex #parsing #haskell
Fix-ing regular expressions
TL;DR: We add variables, let bindings, and explicit recursion via fixed points to classic regular expressions. It turns out that the resulting explicitly recursive, finitely described languages are well suited for analysis and introspection.
Если читали мои претензии к регулярным выражениям, то наверняка помните, что одной из моих претензий было отсутствие декомпозируемости. В статье это решается за счёт добавления явных переменных (точнее, привязок в форме
К сожалению, не обошлось без ложки дёгтя: даже с некоторыми оптимизациями производительность итогового решения оставляет желать лучшего — что, в принципе, вполне ожидаемо, учитывая, что распознавание использует подход regular expression derivatives, который при применении в лоб приводит к сильному распуханию промежуточных структур данных. А ещё лично меня несколько расстраивает использование в финальной версии fix и полиморфной рекурсии — это означает, что итоговый результат не переносим в лоб на другие ЯП.
Fix-ing regular expressions
TL;DR: We add variables, let bindings, and explicit recursion via fixed points to classic regular expressions. It turns out that the resulting explicitly recursive, finitely described languages are well suited for analysis and introspection.
Если читали мои претензии к регулярным выражениям, то наверняка помните, что одной из моих претензий было отсутствие декомпозируемости. В статье это решается за счёт добавления явных переменных (точнее, привязок в форме
let x = r in re
). Также добавление явного fix
расширяет возможности языка и даёт возможность использовать рекурсию. На практике это означает, что подобное решение в состоянии распарсить известный пример грамматики, являющейся контекстно-зависимой: aⁿbⁿ
.К сожалению, не обошлось без ложки дёгтя: даже с некоторыми оптимизациями производительность итогового решения оставляет желать лучшего — что, в принципе, вполне ожидаемо, учитывая, что распознавание использует подход regular expression derivatives, который при применении в лоб приводит к сильному распуханию промежуточных структур данных. А ещё лично меня несколько расстраивает использование в финальной версии fix и полиморфной рекурсии — это означает, что итоговый результат не переносим в лоб на другие ЯП.
👎2👍1
#prog #rust #rustreleasenotes
Вышла версия Rust 1.59.0!
(Об известных событиях есть короткая ремарка в начале блогопоста, но, в отличие от заметок к релизу Rust 1.44.0, почти полностью убирать пост не стали. Впрочем, не исключено, что это лишь из-за того, что дата публикации поста совпала с этим днём)
Как обычно, не буду описывать полностью все изменения, а ограничусь лишь избранными примерами.
▪️ВАЖНО: из-за багов инкрементальную компиляцию по умолчанию отключили. Её всё так же можно активировать самостоятельно, но в таком случае готовьтесь к ICE. Хорошие новости: баг вроде пофиксили, так что в следующем релизе включат обратно.
▪️В присваиваниях (а не только в декларациях) теперь можно использовать паттерны. Пример из блога достаточно красноречив:
▪️Изменения в const generics: их теперь можно объявлять вперемешку с ти́повыми параметрами, а сами значения const generics на объявлениях типов теперь могут иметь значения по умолчанию. И если вы думаете, что это нишевая штука, то я могу совершенно точно сказать, что на предыдущей работе мне из-за отсутствия значения по умолчанию для const generics пришлось отказаться от одного кусочка API, которое я разрабатывал, и сделать его менее эргономичным.
▪️Совершенно внезапно стабилизировали ассемблерные вставки! Я удивлён, не думал, что они уже настолько готовы. С другой стороны, пока что они работают лишь для архитектур x86/x86-64, ARM, AArch64 и RISC-V.
▪️Линт private-in-public ослабили: теперь не является ошибкой иметь на
▪️С части методов
▪️ Ну и традиционно "о-боже-почему-они-стабилизировали-эту-простую-вещь-только-сейчас"-часть. Всё перечислять не буду, укажу только на std::thread::available_parallelism (кстати, в отличие от аналогичного API в стандартной библиотеке C++, эта функция возвращает
А ещё в этот раз в подробных заметках о релизе довольно объёмная секция о совместимости. Советую на всякий случай прочитать, но, если вы не делаете ничего странного, то вас наверняка ничего не затронет (кроме, разве что, того, что split_inclusive на пустых слайсах возвращает пустое значение — и то это приведение в соответствие с аналогичным методом у
Вышла версия Rust 1.59.0!
(Об известных событиях есть короткая ремарка в начале блогопоста, но, в отличие от заметок к релизу Rust 1.44.0, почти полностью убирать пост не стали. Впрочем, не исключено, что это лишь из-за того, что дата публикации поста совпала с этим днём)
Как обычно, не буду описывать полностью все изменения, а ограничусь лишь избранными примерами.
▪️ВАЖНО: из-за багов инкрементальную компиляцию по умолчанию отключили. Её всё так же можно активировать самостоятельно, но в таком случае готовьтесь к ICE. Хорошие новости: баг вроде пофиксили, так что в следующем релизе включат обратно.
▪️В присваиваниях (а не только в декларациях) теперь можно использовать паттерны. Пример из блога достаточно красноречив:
let (a, b, c, d, e);
(a, b) = (1, 2);
[c, .., d, _] = [1, 2, 3, 4, 5];
Struct { e, .. } = Struct { e: 5, f: 3 };
assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
И да, присваивания в духе (a, b) = (b, a)
работают, причём с не-Copy типами. Rust стал ещё чуть больше похож на Python (предыдущей фичей была f-строки).▪️Изменения в const generics: их теперь можно объявлять вперемешку с ти́повыми параметрами, а сами значения const generics на объявлениях типов теперь могут иметь значения по умолчанию. И если вы думаете, что это нишевая штука, то я могу совершенно точно сказать, что на предыдущей работе мне из-за отсутствия значения по умолчанию для const generics пришлось отказаться от одного кусочка API, которое я разрабатывал, и сделать его менее эргономичным.
▪️Совершенно внезапно стабилизировали ассемблерные вставки! Я удивлён, не думал, что они уже настолько готовы. С другой стороны, пока что они работают лишь для архитектур x86/x86-64, ARM, AArch64 и RISC-V.
▪️Линт private-in-public ослабили: теперь не является ошибкой иметь на
impl
-е трейта в where
clause ограничение публичного типа приватным трейтом и ограничение приватного типа публичным трейтом (в PR, который вносит это изменение, рассказывается, почему это ок).▪️С части методов
Hash{Map, Set}
сняли лишние ограничения на типы.▪️ Ну и традиционно "о-боже-почему-они-стабилизировали-эту-простую-вещь-только-сейчас"-часть. Всё перечислять не буду, укажу только на std::thread::available_parallelism (кстати, в отличие от аналогичного API в стандартной библиотеке C++, эта функция возвращает
io::Result<NonZeroUsize>
, так что с нулём разбираться не придётся), Result::{cloned, copied}
, ops::ControlFlow::{is_break, is_continue}
и is_power_of_two
на NonZeroX
типах.А ещё в этот раз в подробных заметках о релизе довольно объёмная секция о совместимости. Советую на всякий случай прочитать, но, если вы не делаете ничего странного, то вас наверняка ничего не затронет (кроме, разве что, того, что split_inclusive на пустых слайсах возвращает пустое значение — и то это приведение в соответствие с аналогичным методом у
str
).blog.rust-lang.org
Announcing Rust 1.59.0 | Rust Blog
Empowering everyone to build reliable and efficient software.
👍6👎3
Кстати, я тут понял, что посты с разбором нововведений сложно найти, так что сделал хештег rustreleasenotes и отредактировал все старые посты с ними, которые смог найти, чтобы они включали этот хештег
🔥12👍1👎1
Личные мыслишки Эмили
Я конечно против войны, и желаю Украине всего лучшего, но вот такие приколы не радуют
Если вам есть, что сказать — идите в чат канала, https://t.iss.one/decltype_chat_ptr_t, я не хочу читать комментарии, авторы которых даже ответы нормальные делать не могут
Telegram
Чат* ([не]большое [не] хорни комьюнити [воннаби-программистов])
Чат со звёздочкой. Компаньон для Блог*а: @dereference_pointer_there.
Немного флуда, много обсуждения.
Тут разговаривают на русском.
Мат разрешён только если из песни слов не выкинешь. Можно ли выкинуть — решает админстрация в каждом конкретном случае.
Немного флуда, много обсуждения.
Тут разговаривают на русском.
Мат разрешён только если из песни слов не выкинешь. Можно ли выкинуть — решает админстрация в каждом конкретном случае.
👎9❤3🤔1
#video
I Made A Water Computer And It Actually Works
(на самом деле не компьютер, а четырёхбитный двоичный сумматор, но всё равно впечатляет)
I Made A Water Computer And It Actually Works
(на самом деле не компьютер, а четырёхбитный двоичный сумматор, но всё равно впечатляет)
YouTube
I Made A Water Computer And It Actually Works
The first 200 people to sign up at https://brilliant.org/stevemould/ will get 20% off an annual subscription.
Computers add numbers together using logic gates built out of transistors. But they don't have to be! They can be built out of greedy cup siphons…
Computers add numbers together using logic gates built out of transistors. But they don't have to be! They can be built out of greedy cup siphons…
Блог*
#prog #rust #rustreleasenotes Вышла версия Rust 1.59.0! (Об известных событиях есть короткая ремарка в начале блогопоста, но, в отличие от заметок к релизу Rust 1.44.0, почти полностью убирать пост не стали. Впрочем, не исключено, что это лишь из-за того…
А Вафель, кстати, от своего имени на Хабре выложил перевод анонса
Хабр
Rust 1.59.0: встроенный ассемблер, деструктурирующее присваивание, отключение инкрементальной компиляции
Команда Rust публикует новую версию языка — 1.59.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение. [политическое сообщение удалено...
❤3
Блог*
Так, чтобы решить возможные споры раз и навсегда, предлагаю вашему вниманию следующий вопрос:
Вафель классный?
Вафель классный?
Сотня человек считает Вафеля классным
👎22👍1🤔1
#prog #go #article
Optimizing GoAWK with a bytecode compiler and virtual machine
Не смотря на то, что, очевидно, статья про программу, написанную на Go, почти ничего из перечисленного не является специфичным именно для Go. Единственным исключением является ремарка насчёт
(thanks @go_perf)
Optimizing GoAWK with a bytecode compiler and virtual machine
Не смотря на то, что, очевидно, статья про программу, написанную на Go, почти ничего из перечисленного не является специфичным именно для Go. Единственным исключением является ремарка насчёт
switch
: на момент написания статьи компилятор Go компилировал switch
по набору числовых констант, идущих по значению, в бинарный поиск, а не в jump table.(thanks @go_perf)
Benhoyt
Optimizing GoAWK with a bytecode compiler and virtual machine
How I sped up GoAWK by switching from a tree-walking interpreter to a bytecode compiler and virtual machine interpreter.
👍4
Тем временем Discord объявил об изменениях в Terms of Service, Privacy Policy и Community Guidelines, которые вступят в силу 28 марта, и насчёт изменений Community Guidelines там есть весьма занимательное добавление:
Off-platform behaviors. We will now consider relevant off-platform behaviors when making policy and enforcement assessments. This includes membership or association with a hate group, illegal activities, and hateful, violent sexual, or other types of violent acts.
Или, говоря иначе, Discord теперь сможет объявлять людей персонами нон грата в связи с их поведением вне платформы Discord, если Discord считает их поведение плохим. С учётом того, что список не исчерпывающий, фактически это означает, что Discord теперь в полном соответствии со своими правилами может банить людей по своему усмотрению. И, честно говоря, я не верю в то, что команда модераторов Discord является нейтральными неангажированными людьми, это было бы слишком нереалистично.
Большой брат Дискорд следит за тобой, пчел.
Off-platform behaviors. We will now consider relevant off-platform behaviors when making policy and enforcement assessments. This includes membership or association with a hate group, illegal activities, and hateful, violent sexual, or other types of violent acts.
Или, говоря иначе, Discord теперь сможет объявлять людей персонами нон грата в связи с их поведением вне платформы Discord, если Discord считает их поведение плохим. С учётом того, что список не исчерпывающий, фактически это означает, что Discord теперь в полном соответствии со своими правилами может банить людей по своему усмотрению. И, честно говоря, я не верю в то, что команда модераторов Discord является нейтральными неангажированными людьми, это было бы слишком нереалистично.
Discord
Discord Policy Updates August 2025
Discord has updated the Terms of Service, Paid Service Terms, Privacy Policy, and Community Guidelines. Learn about the highlights of the updates made.
😢7💩3👍1
Forwarded from мне не нравится реальность
YouTube
Forcing rustfmt to break code
Follow me on Mastodon: https://hachyderm.io/@fasterthanlime
Support me on Patreon or GitHub: https://fasterthanli.me/donate
Support Mara on GitHub: https://github.com/sponsors/m-ou-se
Print a, run cargo fmt, print b. Easy right?
Contents
00:00 Intro
00:52…
Support me on Patreon or GitHub: https://fasterthanli.me/donate
Support Mara on GitHub: https://github.com/sponsors/m-ou-se
Print a, run cargo fmt, print b. Easy right?
Contents
00:00 Intro
00:52…
Forwarded from flexagoon
Есть Worlde с названиями библиотек в js
Это просто обычный wordle
Потому что на любое слово есть библиотека для js
Это просто обычный wordle
Потому что на любое слово есть библиотека для js
😁10
Молодой динамично развивающийся блокчейн-стартап starter pack:
* "Мы строим будущее"
* претенциозное название, опционально включающее в себя "De" или ".io"
* команда — все, как один, passionate developer with big experience
* сайт — одностраничный лендинг, с отдельными секциями, которые появляются с анимациями при прокрутке
* продукт обязательно простой в использовании, автоматизируемый и работающий между различными чейнами
* в дорожной карте пункт реализации протокола отмечен, как запланированный, но деньги от инвесторов уже есть
* разработка ведётся на Rust поверх Substrate/Solana
* "Если не идёте к нам, то расскажите о нас друзьям, ну пжалста 🥺"
* "Мы строим будущее"
* претенциозное название, опционально включающее в себя "De" или ".io"
* команда — все, как один, passionate developer with big experience
* сайт — одностраничный лендинг, с отдельными секциями, которые появляются с анимациями при прокрутке
* продукт обязательно простой в использовании, автоматизируемый и работающий между различными чейнами
* в дорожной карте пункт реализации протокола отмечен, как запланированный, но деньги от инвесторов уже есть
* разработка ведётся на Rust поверх Substrate/Solana
* "Если не идёте к нам, то расскажите о нас друзьям, ну пжалста 🥺"
❤14🤮10👍3😁3