Брагилевский завтра поспорит о нужность книжек в эпоху GPT
https://youtu.be/UeaBOd2BCc4
https://youtu.be/UeaBOd2BCc4
YouTube
Виталий Брагилевский, Филипп Дельгядо, Владимир Иванов: Книги это прошлый век?!
В эпоху GPT, курсов и бесконечных туториалов кажется, что читать техническую литературу — это медленно, скучно и бесполезно. Но так ли это?
В этом выпуске — честный разговор о том,
– зачем вообще читать техлит в 2025 году
– чем книги отличаются от статей…
В этом выпуске — честный разговор о том,
– зачем вообще читать техлит в 2025 году
– чем книги отличаются от статей…
Такс внимание, я узнал что эффекты бывают двух видов
tail resumptive
продолжают выполнение только последним экспрешоном, правила такие же как в тэйл рекурсии
умные троли говорят что такие системы неотличимы от тупых трейтов, тк кк по сути им эквивалентны(соглы)
Вот самые простоые примеры
не продолжаем вообще:
Продолжаем в конце
или вот еще, продолжения 2, но оба внутри иф елса
multi-shot эффекты
могут продолжаться несколько раз, или в середине
ровно в тысячу раз сложнее в реализации, сначала я даже не мог понять, каким это образом можно продолжить из эффекта код 2 раза
Так вооот, оно блять копирует котинуэйшон, то есть по сути кусок всего кода после эффекта, вместе с текущим стеком, и просто запускает его, в данном случае 2 раза
resume(1) запустит КОПИЮ код2 в кором в стеке x будет равно 1, resume(2) запустит тот же код еще раз, абсолютно изолированно от первого запуска, но с x = 2
а теперь представим что внутри продолжения есть вызовы других эффектов, насколько сложным это все начинает быть с ветвлением
tail resumptive
продолжают выполнение только последним экспрешоном, правила такие же как в тэйл рекурсии
умные троли говорят что такие системы неотличимы от тупых трейтов, тк кк по сути им эквивалентны(соглы)
Вот самые простоые примеры
не продолжаем вообще:
def unsafeDiv(a: Double, b: Double): Double / {} =
try {
div(a, b)
} with Exception {
def throw(msg) = {
panic(msg)
}
}
Продолжаем в конце
def tellTime[A] { prog: () => A / tell }: A =
try { prog() }
with tell { () =>
resume(bench::timestamp())
}
или вот еще, продолжения 2, но оба внутри иф елса
def filter[A] { keep: A => Bool } { prog: () => Unit / Yield[A] }: Unit / Yield[A] =
try prog()
with Yield[A] {
def yield(x) = if (keep(x)) { do yield(x); resume(()) } else { resume(()) }
}
multi-shot эффекты
могут продолжаться несколько раз, или в середине
ровно в тысячу раз сложнее в реализации, сначала я даже не мог понять, каким это образом можно продолжить из эффекта код 2 раза
код
код
переменная
x = эффект
код2
handle эффект {
код
resume(1)
код
resume(2)
}
Так вооот, оно блять копирует котинуэйшон, то есть по сути кусок всего кода после эффекта, вместе с текущим стеком, и просто запускает его, в данном случае 2 раза
resume(1) запустит КОПИЮ код2 в кором в стеке x будет равно 1, resume(2) запустит тот же код еще раз, абсолютно изолированно от первого запуска, но с x = 2
а теперь представим что внутри продолжения есть вызовы других эффектов, насколько сложным это все начинает быть с ветвлением
🤓2
gavr_sas
Такс внимание, я узнал что эффекты бывают двух видов tail resumptive продолжают выполнение только последним экспрешоном, правила такие же как в тэйл рекурсии умные троли говорят что такие системы неотличимы от тупых трейтов, тк кк по сути им эквивалентны(соглы)…
то есть, страшно подумать, но вот здесь
с таким хендлером, запустятся все варианты choose
1 + 4 = 5
1 + 5 = 6
2 + 4 = 6
2 + 5 = 7
3 + 4 = 7
3 + 5 = 8
то есть это уже полиморфизм какого то нереального уровня, мы можем поставить эффект с обычным рандомом, а можем такой который переберет нам все возможные варианты
(чую нужен пост про эффекты в целом)
val x = choose(1, 2, 3)
val y = choose(4, 5)
println(x + y)
fun handleChoose(choices: List<Int>, k: (Int) -> List<Int>): List<Int> =
choices.flatMap { choice -> k(choice) }
с таким хендлером, запустятся все варианты choose
1 + 4 = 5
1 + 5 = 6
2 + 4 = 6
2 + 5 = 7
3 + 4 = 7
3 + 5 = 8
то есть это уже полиморфизм какого то нереального уровня, мы можем поставить эффект с обычным рандомом, а можем такой который переберет нам все возможные варианты
(чую нужен пост про эффекты в целом)
алгебраические эффекты, это ответ монадам в сторону упрощения!
#ENA
Они решают все проблемы программирования!
- цветные🏳️🌈 функции
- корпоративную💼 многозадачность
- генераторы
- эксепшоны(этот пример даже был выше)
- полиморфизм наивышего уровня, ООП сасать
пример имеем дженерик код вызывающий эффект лог
вызываем этот лог с хендлером который пишет в базу\ пишет в мок базу\ пишет в консоль
- глобал стейт\инверсия зависимостей
#ENA
Они решают все проблемы программирования!
- цветные🏳️🌈 функции
- корпоративную💼 многозадачность
- генераторы
- эксепшоны(этот пример даже был выше)
- полиморфизм наивышего уровня, ООП сасать
пример имеем дженерик код вызывающий эффект лог
вызываем этот лог с хендлером который пишет в базу\ пишет в мок базу\ пишет в консоль
- глобал стейт\инверсия зависимостей
def unsafeDiv(a: Double, b: Double): Double / {} =
try {
div(a, b)
} with Exception {
def throw(msg) = {
panic(msg)
}
}
def main() = {
unsafeDiv(1.2, 0.0)
()
}
> /Fun/Effekt/out/hello.js:146
else throw e
^
division by zero
Node.js v24.2.0
[error] Process exited with non-zero exit code 1.
афигенно, спасиба папаша, за этот замечательный "стек трейс"
Просто вывело что был throw Внутри сгенерированного js кода!
(Effekt - язык университетских скалистов)
я что один думаю как это потом будет юзаца, тоже ведь кодогеню, но вывожу из стактрейса оригинальные строчки, пока это возможно(скрин)
Forwarded from ASCII-Nova 🇺🇦
Читал про киевлян фаундеров Grammarly и случайно для себя обнаружил, что Grammarly использует Common Lisp для грамматического движка. Ого!
https://www.grammarly.com/blog/engineering/running-lisp-in-production/
https://www.grammarly.com/blog/engineering/running-lisp-in-production/
grammarly blog
Running Lisp in Production
At Grammarly, the foundation of our business, our core grammar engine, is written in Common Lisp. It currently processes more than a thousand sentences per…
ASCII-Nova 🇺🇦
Читал про киевлян фаундеров Grammarly и случайно для себя обнаружил, что Grammarly использует Common Lisp для грамматического движка. Ого! https://www.grammarly.com/blog/engineering/running-lisp-in-production/
В коммон лиспе оказываестя макросы не гигиенические, пиздец
я думал это база, основа всех лиспов
мойте руки
я думал это база, основа всех лиспов
мойте руки
Forwarded from Transhumanism_in_our_hearts
Там распространяются новости о вакцине о ВИЧ, lenacapavir, которая полностью защищает от ВИЧ. Но, об этом ещё год назад был пост, и на удивление весьма похож на то что я собирался писать уже. Я ещё тогда писал о профилактике, но сейчас читаю что раньше типа использовали для лечения, но только потом поняли что работает и на профилактику отлично, причём для профилактики не нужно комбинировать с другими лекарствами. Из нового видно что на женщинах 100% эффективность, а на мужчинах занимающихся половыми связями с другими мужчинами - 96%. Также упоминается потенциал для создания единоразовых вакцин против ВИЧ и дальнейшего уменьшения цены на этот препарат:
https://time.com/7295343/fda-hiv-shot-lenacapavir-yeztugo/
Главная новость в том, что FDA одобрил данный препарат и его уже готовят к выпуску коммерческому. В остальном нового мало, но тоже неплохо.
https://time.com/7295343/fda-hiv-shot-lenacapavir-yeztugo/
Главная новость в том, что FDA одобрил данный препарат и его уже готовят к выпуску коммерческому. В остальном нового мало, но тоже неплохо.
TIME
FDA Approves a Twice-Yearly Shot to Prevent HIV
The approval could slow new infections and move the world closer to eliminating HIV. But huge obstacles remain.
❤1
я переделал мутабилити чучуть, теперь мутабл поле можно хранить внутри типа
методы делятся на 2 вида, методы для мутабильных и иммутабильных типов
ранее у меня было 2 типа каждой коллекции, унаследованные от котлина MutableList и List, MutableSet и Set итд, ужасно некрасиво
теперь когда мутабильные типы можно передавать как аргументы внуть функций или держать внутри полей типов, ничего не мешает мне избавится от этих двойных коллекций, и просто объявить типы мутирующие коллекции для мутабл версий типов коллекций
то есть
теперь если вызвать этот add на обычной коллекции будет ошибка
вся это начисто спизжено у nim, с некотороыми отличиями, нельзя переприсваивать поля из любого места,
- только из методов того же типа чье поле, это сузит радиус атаки багов на конкретные методы внутри которых можно поставить принт и увидеть мутации этого поля со всей программы
- создавать мутабл типы из иммутбл можно только клонированием
ну и мутабл типы можно отправлять в иммутабл без потерь
методы делятся на 2 вида, методы для мутабильных и иммутабильных типов
ранее у меня было 2 типа каждой коллекции, унаследованные от котлина MutableList и List, MutableSet и Set итд, ужасно некрасиво
теперь когда мутабильные типы можно передавать как аргументы внуть функций или держать внутри полей типов, ничего не мешает мне избавится от этих двойных коллекций, и просто объявить типы мутирующие коллекции для мутабл версий типов коллекций
то есть
mut List add::T = ...
теперь если вызвать этот add на обычной коллекции будет ошибка
вся это начисто спизжено у nim, с некотороыми отличиями, нельзя переприсваивать поля из любого места,
- только из методов того же типа чье поле, это сузит радиус атаки багов на конкретные методы внутри которых можно поставить принт и увидеть мутации этого поля со всей программы
- создавать мутабл типы из иммутбл можно только клонированием
ну и мутабл типы можно отправлять в иммутабл без потерь
❤2
абсолютно сумашедшая фича смоллтолка
сообщение
"It is a feature of enormous power - and danger."
https://gbracha.blogspot.com/2009/07/miracle-of-become.html
сообщение
a become: b
, которое подменяет все инстансы объекта а на б"It is a feature of enormous power - and danger."
https://gbracha.blogspot.com/2009/07/miracle-of-become.html
Blogspot
The Miracle of become:
One of Smalltalk’s most unique and powerful features is also one of the least known outside the Smalltalk community. It’s a little method ca...
Forwarded from Lemora Electronics⚡️
This media is not supported in your browser
VIEW IN TELEGRAM
❤2💋1