Linker Unsafe
220 subscribers
182 photos
24 videos
18 files
859 links
Собираю ржавые и лямбдообразные новости, прикольные цитатки с форумов, ссылки на статьи и всё такое. В-общем, сюда я тащу такие крупицы, которые мне будет жаль потерять в цифровой бездне. Возможно, они покажутся интересными и вам.

Фи сюда: @nlinker
Download Telegram
Forwarded from Маjко
Кто тебе сказал что адрес лямбды является ее типом?
Forwarded from Dmitry Ikryanov
Кто тебе сказал что адрес лямбды является ее типом?

Адрес лямбды (функции) известен только ллвм

|| 10 и || 20 имеют разный тип

и правильно

И? Адрес функции то тут при чем?

короче то что у лямбд уникальный тип это нифига не удобно

сделали бы структуру Fn(A) -> B

и все функци одной сигнатуры были бы этой структурой

Нормально. Если описывать тип целиком, это приведет к комбинаторному взрыву.

Растокомпилятор и так не очень быстрый

я к тому, что вещи if foo { move || x } else { || 20 } не должны требовать обмазывания either'ами

Ну конкретно это и не требует)

fxd

Не-а, лямбда, которая ничего не захватывает, кастится в обычный fn-тип

ну так она x захватывает

А, увидел, да

Ну вроде был пропозал автоматически герерировать енам в таких случаях

Процедурный макрос для этого всяко есть)

ну он помер вроде. Макрос чел сделал но он очень ненадежно работал, и наглядно показал что без полноценной поддержки компилятора это сделать невозможно

Да, там типы надо знать

ну из вещей которые прям поломаны вроде все на самом деле. Остальное сырость и недостаток фичей типа const fn

ArrayWithAtMost32Elements можно отнести правда еще к костылям)

Ну, имхо, честно, не самая большая проблема. Там где на перформанс похуй -- велкам ту боксед трейт обджектс

Там где не похуй -- Either

Есть даже отличный крейт

ну ок
[Forwarded from A64m AL256m qn[cores]]
какой самый модный и быстрый считатель loc сейчас?
[Forwarded from Alex Gryzlov]
https://github.com/vmchale/polyglot
Forwarded from AV_N
Функциональное программирование не противоречит численным
методам, а, наоборот, помогает более чётко и кратко сформулировать
задачу: https://keldysh.ru/papers/2019/prep2019_114.pdf
Forwarded from Snarpix
А почему не сделать select на футуру и oneshot channel, который используется как cancellation token? Вроде рабочий вариант для отмены футуры.
Forwarded from pl 🦑 hk
Раньше так и делали
Forwarded from Αλεχ Zhukovsky
symbols = ['a', 'b', 'c']
values = [1, 2, 3]
for x in symbols:
print(x)
squared = [x*x for x in values] # Все плохо. "x" из верхнего "for" затёрт
print(x)


Вывод программы будет следующим:

a
3
b
3
c
3
Forwarded from Αλεχ Zhukovsky
Кто там про блочные скоупы питона ругался?
можно считать это одним и тем же?
type family X (p :: Type) :: Type

class X (p :: Type) (a :: Type) | p -> a
в обще на TF я могу такое написать, а вот с FD пока не понял как

type family Ext (p :: Type) :: Type

data Ast p
= Add (Ast p) (Ast p)
| Num Integer
| Other (Ext p)

class EvalAst p where
evalAst :: (Ast p -> Integer) -> Ext p -> Integer

data Expr
type instance Ext Expr = Void

instance EvalAst Expr where
evalAst _ x = absurd x

data Mul p = Mul (Ast p) (Ast p)

data MulExpr
type instance Ext MulExpr = Mul MulExpr

instance EvalAst MulExpr where
evalAst go (Mul x y) = go x * go y

eval :: forall p. EvalAst p => Ast p -> Integer
eval = go where
goAst = evalAst @p go
go (Add x y) = go x + go y
go (Num i) = i
go (Other x) = goAst x

main :: IO ()
main = do
print $ eval (Add (Num 20) (Num 10) :: Ast Expr)
задам опять каверзный вопрос
почему тут не может быть выведен функтор?

class Functor t => ExtF p t a | p -> t a

data AstF p a
= ValF Int
| AddF a a
| OtherF (forall t. ExtF p t a => t a) deriving Functor
Couldn't match type ‘b’ with ‘a’
arising from a functional dependency between constraints:
‘ExtF p t a’ arising from a use of ‘a1’ at <playground>:8:51-57
‘ExtF p t b’
arising from a type expected by the context:
forall (t :: * -> *). ExtF p0 t a0 => t a0
как победить?