Size: a a a

2021 February 10

SA

Sergey Arkhipov in rannts
с оговорками нормальный. с ним можно меньше сделать, чем в тех же эрлангах и эликсирах
источник

AM

Artem Malyshev in rannts
Байт Словович
афигенно.. то есть даже не сишный switch, а нормальный pattern matching как в нормальный функциональных языках.
Это так, жалкая пародия на for макрос из common lisp.
источник

『Serg』 in rannts
Нормальные, это haskell?
источник

AM

Artem Malyshev in rannts
Sergey Arkhipov
с оговорками нормальный. с ним можно меньше сделать, чем в тех же эрлангах и эликсирах
В тех же эрлангах и элекмирах он всё ещё не умеет.
источник

БС

Байт Словович... in rannts
Artem Malyshev
Нет. В нормальных языках сопоставление с образцом умеет на этапе компиляции сказать, что у тебя не все кейсы покрыты и доказать это на уровне типов.
да хватит пургу нести
источник

AM

Artem Malyshev in rannts
『Serg』
Нормальные, это haskell?
F#, OCaml, тысячи их.
источник

SA

Sergey Arkhipov in rannts
Artem Malyshev
В тех же эрлангах и элекмирах он всё ещё не умеет.
мм? чего не умеет? кто?
источник

SA

Sergey Arkhipov in rannts
я чот потерялся
источник

SB

Sergey Belash in rannts
『Serg』
Нормальные, это haskell?
В Scala например, на счет ее нормальности можно усомниться, но вот статическая типизация есть
источник

БС

Байт Словович... in rannts
Artem Malyshev
F#, OCaml, тысячи их.
ну не тысячи.. но есть разные языки. Со строго и не строгой типизации, есть языки с выводом типов.. Питон не относится к ним. Как ты блин на этапе компиляции сделаешь такие проверки?
источник

SA

Sergey Arkhipov in rannts
А, я понял. Артем, с Эрланге другой подход. Там не надо все клозы покрывать. Наоборот, это вполне валидная ситуация, когда какую-нибудь дичь ты не покрываешь, и у тебя код эксепшном про no function clause matching взрывается. Там же let it crash так-то. На практике достаточно удобно выходит
источник

AM

Artem Malyshev in rannts
Байт Словович
ну не тысячи.. но есть разные языки. Со строго и не строгой типизации, есть языки с выводом типов.. Питон не относится к ним. Как ты блин на этапе компиляции сделаешь такие проверки?
Так чем это тогда не сишный switch, кроме того, что умеет раскрывать выражения? Как собственно и любой assignment expression в питоне? С for (a, (b,c)) in foo: почему-то так кипятком никто не писает.
источник

SB

Sergey Belash in rannts
Вот если я тут забуду сделать case _: и point = None
```
def whereis(point):
      match point:
          case Point(0, 0):
              print("Origin")
          case Point(0, y):
              print(f"Y={y}")
          case Point(x, 0):
              print(f"X={x}")
          case Point():
              print("Somewhere else")

```
То прилетит какой-то MatchException?
источник

AM

Artem Malyshev in rannts
Sergey Arkhipov
А, я понял. Артем, с Эрланге другой подход. Там не надо все клозы покрывать. Наоборот, это вполне валидная ситуация, когда какую-нибудь дичь ты не покрываешь, и у тебя код эксепшном про no function clause matching взрывается. Там же let it crash так-то. На практике достаточно удобно выходит
Я готов с этим жить в эрланге, где можно фиксы на горячую заливать. Но не в питоне.
источник

БС

Байт Словович... in rannts
Artem Malyshev
Так чем это тогда не сишный switch, кроме того, что умеет раскрывать выражения? Как собственно и любой assignment expression в питоне? С for (a, (b,c)) in foo: почему-то так кипятком никто не писает.
а чё писать? норм сделали..  И от паттерн матчинга никто не обоссыццо. Просто у них был вариант делать сишный свитч, а сделали по нормальному.
источник

SA

Sergey Arkhipov in rannts
Реллапы - это практически антипаттерн. Ими очарованы только те, кто ни разу в продакшоне не пробовал)

Кроме того, какие реллапы когда везде докер
источник

БС

Байт Словович... in rannts
Artem Malyshev
Я готов с этим жить в эрланге, где можно фиксы на горячую заливать. Но не в питоне.
зачем тебе на горячую заливать? Ты кстати в эрланге делал это? Там не всё так хорошо, если сложнее Hello world
источник

БС

Байт Словович... in rannts
в питоне тоже можно на горячую менять importlib, только это никто не делает, ибо нефиг
источник

БС

Байт Словович... in rannts
В эрланге, можно менять, благодаря иммутабельности памяти. Без этого не сделаешь даже как эрланге.
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Sergey Belash
Вот если я тут забуду сделать case _: и point = None
```
def whereis(point):
      match point:
          case Point(0, 0):
              print("Origin")
          case Point(0, y):
              print(f"Y={y}")
          case Point(x, 0):
              print(f"X={x}")
          case Point():
              print("Somewhere else")

```
То прилетит какой-то MatchException?
Скорее всего нет. Ты ведь не ожидаешь исключений от питона, если забыл написать ветку else для if-чика? Скорее всего у тебя просто дальше что-то упадёт, от то-то что ты, например, не создал внутри match переменную с дефолтным значением, и потом пытаешься её использовать.
источник