Size: a a a

2021 February 08

X

XÆA-XII in pro.elixir
Ihor Katkov
Не всегда/везде эта безопасность нужна. Я напомню, что дискуссия началась с Akka для .net
Точно ведь
источник

AN

Alexey Novoselov in pro.elixir
XÆA-XII
Можно пример?
Любая типизация ломается об Code.eval_string()
источник

AN

Alexey Novoselov in pro.elixir
в эрлаге решили, что значит она не нужна)
источник

LL

Lama Lover in pro.elixir
Типа в этом и прелесть elixir, ты можешь взять и прикрутить себе статическую типизацию (и практически все её себе прикручивают)

А вот к akka ты никак не сможешь отказаться от кооперативной многозадачности. Придётся как-то валидировать что код когда-нибудь закончится и отдаст управление  (а это проблема остановки, если что)
источник

A ß in pro.elixir
XÆA-XII
Можно пример?
вот тебе метапример, третий абзац https://en.wikipedia.org/wiki/Type_system#Static_type_checking
источник

A ß in pro.elixir
Lama Lover
А где про это можно почитать, кстати?
Types and Programming Languages, B. C. Pierce
источник

X

XÆA-XII in pro.elixir
Lama Lover
Типа в этом и прелесть elixir, ты можешь взять и прикрутить себе статическую типизацию (и практически все её себе прикручивают)

А вот к akka ты никак не сможешь отказаться от кооперативной многозадачности. Придётся как-то валидировать что код когда-нибудь закончится и отдаст управление  (а это проблема остановки, если что)
А в эликсире вытесняющая многозадачность?
источник

LL

Lama Lover in pro.elixir
XÆA-XII
А в эликсире вытесняющая многозадачность?
Угу, там система редукций
Типа один актор может выполнить около 4000 редукций без прерывания
Можно сказать, что редукция это один вызов функции (не считая всяких линейных функций типа :lists.reverse)
источник

X

XÆA-XII in pro.elixir
Понял
источник

((

(fun () -> ()) in pro.elixir
Lama Lover
Типа в этом и прелесть elixir, ты можешь взять и прикрутить себе статическую типизацию (и практически все её себе прикручивают)

А вот к akka ты никак не сможешь отказаться от кооперативной многозадачности. Придётся как-то валидировать что код когда-нибудь закончится и отдаст управление  (а это проблема остановки, если что)
а покажи что ты имеешь ввиду под "прикрутить себе статическую типизацию (и практически все её себе прикручивают)"
источник

V

V in pro.elixir
Lama Lover
А где про это можно почитать, кстати?
можно начать с дискуссий про unsafe в расте.
тезисно: "статически типизированные программы" - это подмножество, полностью находящееся в множестве "рабочие программы".
источник

IK

Ihor Katkov in pro.elixir
(fun () -> ())
а покажи что ты имеешь ввиду под "прикрутить себе статическую типизацию (и практически все её себе прикручивают)"
он говорит о dialyzer
источник

LL

Lama Lover in pro.elixir
(fun () -> ())
а покажи что ты имеешь ввиду под "прикрутить себе статическую типизацию (и практически все её себе прикручивают)"
Диалайзер, например. Есть ещё другие, более точные решения. Я могу попытаться вспомнить, если сильно интересно
источник

AN

Alexey Novoselov in pro.elixir
последнее время тенденция наоборот отходить от статической типизации, и использовать ее только там, где явно указано. Gradualizer например пилят по такому принципу. Ибо в BEAM, не считая hot code reloading есть еще сообщения, которые можно отправить кому угодно в рантайме. Ты никогда корректно не получшь тип входящего сообщения в compile-time, только паттерн матчинг спасает. Т.к. в рантайме можно отправить что угодно кому угодно, хоть из iex, хоть из другой ноды со старой версией софта и работающей с другим типом сообщений
источник

LL

Lama Lover in pro.elixir
Alexey Novoselov
последнее время тенденция наоборот отходить от статической типизации, и использовать ее только там, где явно указано. Gradualizer например пилят по такому принципу. Ибо в BEAM, не считая hot code reloading есть еще сообщения, которые можно отправить кому угодно в рантайме. Ты никогда корректно не получшь тип входящего сообщения в compile-time, только паттерн матчинг спасает. Т.к. в рантайме можно отправить что угодно кому угодно, хоть из iex, хоть из другой ноды со старой версией софта и работающей с другим типом сообщений
Такой себе аргумент, потому что сообщения неправильного типа можно просто отбрасывать, реализуя тайп-чекинг в рантайме
Понятное дело, что это будет жутко медленно работать, но всё-таки
источник

AN

Alexey Novoselov in pro.elixir
Lama Lover
Такой себе аргумент, потому что сообщения неправильного типа можно просто отбрасывать, реализуя тайп-чекинг в рантайме
Понятное дело, что это будет жутко медленно работать, но всё-таки
тайп-чекинг в рантайме это не статическая типизация)
источник

A ß in pro.elixir
Alexey Novoselov
последнее время тенденция наоборот отходить от статической типизации, и использовать ее только там, где явно указано. Gradualizer например пилят по такому принципу. Ибо в BEAM, не считая hot code reloading есть еще сообщения, которые можно отправить кому угодно в рантайме. Ты никогда корректно не получшь тип входящего сообщения в compile-time, только паттерн матчинг спасает. Т.к. в рантайме можно отправить что угодно кому угодно, хоть из iex, хоть из другой ноды со старой версией софта и работающей с другим типом сообщений
тут есть два пути, можно закодировать все возможные сообщения в пиде и запретить отправку некорректных сообщений процессу
источник

LL

Lama Lover in pro.elixir
Alexey Novoselov
тайп-чекинг в рантайме это не статическая типизация)
Ну, любая программа имеет IO и проверяет данные на входе на соответствие нужному типу и всё такое
источник

A ß in pro.elixir
а можно разрешить паттерн матчинг по типам, который у наc и так есть
источник

LL

Lama Lover in pro.elixir
A ß
а можно разрешить паттерн матчинг по типам, который у наc и так есть
По типам матчинга вроде нет, есть адовая смесь матчинга по коллекциям и гардов
источник