dd if=/dev/stuff of=/dev/tg


Kanal geosi va tili: Rossiya, Ruscha


18+. По всем вопросам, кроме рекламы: @rsil_feedback_bot
По вопросам рекламы (внимательно читайте приветственное сообщение): @rsil_ads_bot


Kanal geosi va tili
Rossiya, Ruscha
Statistika
Postlar filtri






Перевел в текстовую форму свой доклад "Making Illegal States Unrepresentable in TypeScript": https://ybogomolov.me/making-illegal-states-unrepresentable
Сам доклад, если кто-то пропустил, можно найти здесь: https://www.youtube.com/watch?v=T7i2wlCqgJk




Чуть было не забыл вбросить ссылку на отличный разбор этой фичи от Олега Нижникова:
https://medium.com/@odomontois/several-days-ago-we-saw-the-new-experimental-feature-called-capture-checking-was-announced-in-e4aa9bc4b3d1




https://dotty.epfl.ch/docs/reference/experimental/cc.html эксперимент по добавлению в Scala 3 capture checking, которые мне напомнили о языке Flix, в котором разделение между чистыми и сайд-эффектящими функциями сделано на уровне синтаксиса.


А еще показали вот такой экспериментальный набор расширений для exceptions as abilities: https://docs.scala-lang.org/scala3/reference/experimental/canthrow.html


Габриель Вольпе написал очень интересный пост о том, как в третьей скале можно обрабатывать ошибки без явного использования Either, используя только типы-суммы:
https://gvolpe.com/blog/error-handling-scala3


Язык, который привлекает мое внимание в последнее время всё больше и больше — Unison.

Из интересного:
1. наличие как структурной, так и номинальной типизации из коробки благодаря ключевым словам structural и unique:
-- одинаковые типы:
structural type Maybe x = None | Just x
structural type Option x = Nothing | Some x
> Just 5 === Some 5

true

-- разные типы:
unique type Maybe x = None | Just x
unique type Option x = Nothing | Some x
> Just 5 === Some 5
The mismatch is because these types differ:
Option
Maybe

2. Наличие алгебраических эффектов в виде abilities:
f : '{Gen} Text
f = gen.Text.ascii

g : Text -> '{IO, Exception} ()
g txt = '(printLine txt)

-- abilities в композиции функций являются суммой abilities частей:
f_g : '{Gen, IO, Exception} ()
f_g = '(!(g !f))

3. Хранение кода в виде AST — что делает кэширование/мемоизацию/рефакторинг/поиск/etc гораздо более простым и мощным, нежели в случае хранения кода в виде текста. Это позволяет делать разные интересные штуки — вроде ускорения сборки кода благодаря закэшированным результатам сборки используемых частей библиотек.

Хороший обзор Unison сделал Рунар Бьярнасон в выступлении на Lambda Jam’21: https://www.youtube.com/watch?v=DF6zt0Q-pz4. Также могу смело порекомендовать отличную статью из их блога о том, как написать распределенную Spark-like структуру данных: https://www.unison-lang.org/articles/distributed-datasets.


Самое важное решение в моей жизни с @lene_love






Карл фон Госсеринг потратил 76 лет на написание трактата о часах. Об одник конкретных часах — часах-фонаре Николаса Валлина. В ходе написания этот трактата он предвосхитил специальную теорию относительности, поднял вопрос о проблеме останова, и даже построил исчисление для моделирования часовых механизмов.

Насладиться прекрасным тредом:
https://threadreaderapp.com/thread/1467417990744649728.html




Самое любопытное здесь — табличка с бенчмарками относительно JVM и ноды. Вопросы, конечно остаются — скажем, на код остальных примеров хотелось бы тоже взглянуть, — но значения времени холодного старта и потребления памяти вызывают заинтересованность, как минимум.


Lil Functor dan repost
Вот и пригодилась компиляция Scala → JavaScript. Только не для фронтенда.

Daniel Spiewak в концепте serverless-фреймворка предлагает компилировать код на Scala в JS, чтобы запускать его на движке V8. Таким образом получится избежать проблемы холодного старта JVM для короткоживущих функций. V8 не надо прогревать, а код для него можно писать всё на той же Scala. Не зря ведь scala.js делали и библиотеки под него кроссбилдили!

Понятно, что scala-native слишком далека от готовности к проду, но интересно, почему решили не использовать Native Image в GraalVM. Решение с js в любом случае оригинальное и может быть из него что-то вырастет.

Сам концепт: https://gist.github.com/djspiewak/37a4ea0d7a5237144ec8b56a76ed080d
Прототип библиотеки: https://github.com/typelevel/feral


Заметка об использовании ScalaJS для написания кода под AWS-ный V8 напомнила о проекте, который позволяет нативно запускать хаскельный код в AWS:
https://theam.github.io/aws-lambda-haskell-runtime


Новая статья — о простом тайп-левел представлении UUID:
https://ybogomolov.me/type-level-uuid


В продолжение недавней драмы, о которой хорошо написали в канале Lil Functor:
Джон Де Гоуз написал статью о том, что ZIO organisation ставит перед собой две важные цели: pro-community и pro-professionalism. Это означает, что все проекты, находящиеся в организации ZIO, будут хостить у себя интеграцию с другими экосистемами, и поддерживать запросы конечных пользователей вне зависимости от того, кто кому в песочнице по голове совочком дал каких мировоззрений или политической ориентации придерживается человек.
Мне близка эта позиция — ставить инженерные практики выше политики/гендеров/мировоззрений/etc. Да, всегда можно сказать, что Джон снова использует ситуацию для агрессивного маркетинга ZIO, но в конечном итоге, мне кажется, такое позиционирование экосистемы выигрышно для конечных пользователей.

20 ta oxirgi post ko‘rsatilgan.