Size: a a a

2020 September 22
Блог*
#prog

PR в репозиторий #rust, который укорачивает сообщения об ошибках за счёт удаления путей до имён типов в тех случаях, когда их можно однозначно восстановить по имени.
источник
Блог*
dereference_pointer_there
#prog #rust #amazingopensource

Хозяйке на заметку

Подборка библиотек для работы с serde от замечательного Толяна dtolnay.

erased-serde — трейты из serde со стёртыми типами. Позволяют сделать из (де)сериализаторов трейт-объекты. Обычно это запрещено правилами object safety из-за наличия обобщённых типов.

typetag — сериализация и десериализация трейт-объектов. Работает на костылях.

serde-repr — делегирует (де)сериализацию C-like enum его числовому значению.

serde-stacker — позволяет десериализовывать глубоко вложенные структуры, динамически выделяя память под стек. Работает, увы, не на всех OS: нормально работает на linux и MacOS и течёт на Windows.

serde-ignored — позволяет обернуть десериализатор с кастомный коллбеком, который будет вызываться на всех проигнорированных в процессе десериализации ключах.
#prog #rust #amazingopensource

serde-query — библиотека для эффективного разбора форматов, поддерживаемых serde, которая десериализует данные не целиком, а только части, относящиеся к типу, в который происходит десериализация.
источник
Блог*
#prog #article

Разбор различных подходов к парсингу. TL;DR: используйте LR-парсеры.
источник
Блог*
#prog #rust #article

Советы по поводу написания более структурированной документации (на примере nalgebra).
источник
2020 September 23
Блог*
dereference_pointer_there
#prog #моё

Если вы используете регулярные выражения — вам должно быть за это стыдно

У регулярных выражений есть куча недостатков, и, на мой взгляд, их слишком часто используют там, где не надо. Сейчас я расскажу о том, что же с ними не так.

Проблемы

1. Регулярные выражения (за некоторыми исключениями - 1, 2) парсятся в рантайме.
В подавляющем большинстве случаев строка, используемая для построения регулярных выражений, является константной, поэтому принципиально ничего не мешает провести компиляцию регулярного выражения одновременно с компиляцией программы. Большая часть моих следующих претензий напрямую вытекает из этого свойства.

2. Регулярные выражения (далее RE) фактически динамически типизированы.
Разберу подробнее:

2.а. Если в описании RE есть ошибка (незакрытая скобка, обратная ссылка на несуществующий паттерн) — ты не узнаешь об этом до запуска программы. Если RE находится в функции, которая редко вызывается и которую не покрывают тесты, то баг может всплыть уже в, казалось бы, сто лет нормально работающей программе.
2.б. В качестве аргумента для RE используется строка — слабо структурированный тип данных. Какой бы сложной не была бы структура, заданная RE, в статически типизированном языке приходится возвращать значение одного и того же типа, поэтому вся информация о структуре теряется.
Хочешь достать текст из некой группы захвата? Вот тебе геттеры по индексам — разумеется, все возвращают Option, даже если данная группа заведомо присутствует. Ах да, не забудь на всякий случай их все проверить и поменять, где надо, когда поменяешь RE.
Что, вы говорите, именованные группы захвата? Ну, окей, именованные. Ну, геттеры по строкам, а не по индексам. Но геттеры всё равно отдают  Option, а теперь у тебя появилась невероятная возможность опечататься в геттере. Конечно, можно использовать строковые константы, но, во-первых, Option никуда не денутся, а во-вторых, эти же константы по-хорошему надо использовать для строки, из которой создаётся RE, так что вместо просто литерала будет конкатенация нескольких строк. Ура, читаемость!
2.в. Хочешь, чтобы IDE ловила ошибки? А вот хрен тебе: если только у тебя RE не встроены в язык, тебе IDE ничего не подскажет, ибо для неё это всего лишь строка, не отличающаяся от всех прочих.
2.г. Хочешь быстрые RE? Надейся, что автор используемой тобой библиотеки смог написать хороший компилятор RE. Что, говоришь, у твоего ЯП есть оптимизирующий компилятор? Очень хорошо, да только он тут не поможет и не может помочь, потому что он ничего про конкретное RE не знает.

3. Такой вещи, как "просто регулярное выражение", не существует.
Есть Perl RE (и PCRE), POSIX RE (и не одна разновидность), и есть... Библиотеки, которые реализуют один из этих стандартов.
Или не реализуют.
Или реализуют не полностью.
Или реализуют с отличиями.
Или просто бажные.
А есть ещё жадное и нежадное сопоставление. Движок для RE, который ты используешь, точно умеет в оба варианта? А какой использует по умолчанию?
Короче, практически любое нетривиальное RE, вероятно, непереносимо между разными языками и разными библиотеками одного и того же языка.

4. У RE просто отвратительная композируемость. Не, ну серьёзно.
Тебе нужно сматчить подряд два RE или одно, но несколько раз? Делай сам. Руками. Ты ж программист, писать программы — это твоя обязанность.
Хочешь протестировать отдельно кусок сложного RE? Не вопрос, компилируй отдельно подстроку. Да, компилируй заново. Ну и что, что там структура одинаковая? А почему одинаковая, собственно? Ты разве синхронно меняешь строки привнесении изменений? Да, да, можно конкатенировать строки. Да, так структура у этих кусочков будет одинаковая. Нет, ты не можешь этим воспользоваться.
Что, говоришь, у тебя структура текста параметризована некоторым значением? Нет, ты не можешь сделать RE с аргументом. Ручками вклеивай значение и компилируй каждый раз отдельно. Да, и кеш у JIT-компилятора RE не забудь инвалидировать полностью.
Что ты там говоришь про декомпозицию? Да не ссы, пиши всё в одну большую строку. Деды, вон, в одном файле всё писали — и ничего, выжили. Они терпели — и ты потерпи.
#prog

Переписал по работе одну утилиту для анализа логов. Раньше для разбора строк использовались регулярные выражения, а я заменил на наколенный лексер. В результате утилита, которая почти 23 гигабайта перемалывает за чуть больше, чем за 5 минут, стала на тех же данных работать за чуть меньше, чем полторы минуты. Результат, разумеется, тот же самый.
источник
Блог*
источник
2020 September 24
Блог*
#prog #amazingopensource #abnormalprogramming
источник
Блог*
Морской бой в постгре:

https://github.com/Firemoon777/sql-battleships
источник
Блог*
#prog #sql

Сборник WTF в SQL. Всячески рекомендую к прочтению.
источник
Блог*
В прошлый понедельник SQL-TIL не зашел, поэтому я решил сделать перерыв :) Кип ин тач.

Первые три выпуска:
https://t.me/nosingularity/535
https://t.me/nosingularity/541
https://t.me/nosingularity/548
источник
Блог*
#prog #rust
источник
Блог*
pretty_assertions — крейт который делает вывод assert_eq! более читаемым.
источник
Блог*
Это победа. В одной из моделей боинга в софтине, управляющей генераторами, каждые 248 дней переполняется память и генераторы вырубаются. Проблемы в авиации решают красиво: кривую софтину обнуляют, обесточивая самолёт во время техобслуживания o\

Problem:
This condition is caused by a software counter internal to the GCUs that will overflow after 248 days of continuous power. We
are issuing this AD to prevent loss of all AC electrical power, which could result in loss of control of the airplane
.

Solution:
This AD requires a repetitive maintenance task for electrical power deactivation.

(c) https://s3.amazonaws.com/public-inspection.federalregister.gov/2015-10066.pdf, по наводке https://t.me/sqaunderhood/217
источник
Блог*
Инсайды от Антона Репушко
источник
Блог*
Переслано от Anton Repushko
мне один челик с работы прошлой одной (он до этого работал в маленькой компании, которая саппортила и мониторила спутники в космосе телевизионные), что спутники запланированно обестачиваются и перезагружаются каждые N-минут, чтобы никакой хрени не случалось, мол так спокойнее. Знаешь, что если переполнение или какая-то хрень, то он перезагрузится
источник
Блог*
#prog #meme сквозь слёзы
источник
Блог*
источник
2020 September 25
Блог*
#prog #rust

Тайп-левел программирование на расте с вменяемым синтаксисом.

github.com/jerry73204/typ
источник
Блог*
#prog #quotes #cpp
источник
Блог*
Переслано от (((Mike Lubinets)))
В C++ больше всего бесит что любое мало мальское удобство приходится писать себе самому. И каждый сука считает удобными разные вещи.
источник