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

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

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

|| 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
как победить?
Forwarded from Dmitry
Функтором мы можем тип a поменять на произвольный b. А dependency выполняться не будут
Forwarded from Dmitry
Откуда взять p->t b
и как тогда сделать? я помнимаю, что FD жестко захватили зависимость типов