Size: a a a

Compiler Development

2020 January 03

MB

Mikail Bagishov in Compiler Development
(матч, рассмативающий не все случаи это ошибка компиляции)
источник

А⚙

Антон ⚙️ in Compiler Development
Roman Elizarov
Да понятно. Guards спасают в любом случае. Ну вот pattern matching как раз и делают, чтобы для "частых случаев" не выписывать условия, и чтобы вмесето f x  | x == 1 = ...  писать просто f 1 = ....
Вовсе не для этого, а для проверки полноты покрытие возможных вариантов. А с типами-суммами без PM работать вообще нельзя
источник

YS

Yuriy Syrovetskiy in Compiler Development
Val Krylov
def !f (?x int, ?y int) = x + y

Зато предсказуемо одинаково можно рассматривать в любых конструкциях языка, как существующих, так и добавляемых пользовательскими EDSL. В отличие от непредсказуемой синтаксической магии GHC extensions. В общем, кому что. :)
а всклзн здесь зачем?
источник

А⚙

Антон ⚙️ in Compiler Development
Yuriy Syrovetskiy
мне бы хотелось посмотреть на компромисс с одновременным явным введением переменных в образцах и образцами в аргументах функций
Юра, подскажи, пожалуйста, почему в Haskell неполный матч по умолчанию даже предупреждение не выдаёт?
источник

RE

Roman Elizarov in Compiler Development
Ну образцы в аргументах функции (когда функциою можно определить несколько раз с разными образцами) это вроде как фишка исключительно присущая функциональным языкам. Вроде в более императивные языки их пока не затаскивали. Там вроде в целом принято функцию один раз определять.
источник

YS

Yuriy Syrovetskiy in Compiler Development
Антон ⚙️
Юра, подскажи, пожалуйста, почему в Haskell неполный матч по умолчанию даже предупреждение не выдаёт?
не знаю. истерические перчины. но меня это тоже бесит
источник

А⚙

Антон ⚙️ in Compiler Development
Roman Elizarov
Ну образцы в аргументах функции (когда функциою можно определить несколько раз с разными образцами) это вроде как фишка исключительно присущая функциональным языкам. Вроде в более императивные языки их пока не затаскивали. Там вроде в целом принято функцию один раз определять.
Так это просто сахар над матчем, не более
источник

YS

Yuriy Syrovetskiy in Compiler Development
Roman Elizarov
Ну образцы в аргументах функции (когда функциою можно определить несколько раз с разными образцами) это вроде как фишка исключительно присущая функциональным языкам. Вроде в более императивные языки их пока не затаскивали. Там вроде в целом принято функцию один раз определять.
ну хотя бы деструктуризацию произвольной глубины. в Питоне 2 такое было, а в 3 убрали почему-то
источник

YS

Yuriy Syrovetskiy in Compiler Development
в Питоне "образцы" тоже только вводят переменные, использовать внешние нельзя даже с гвардами
источник

RE

Roman Elizarov in Compiler Development
Да всё сахар. Просто весь этот сахар, когда его слишком много, начинает путаться и приводить к неоднозначностям и сложности понимания кода человеком. Компилятору-то все-равно. Он разберется в любой неоднозначности, если приоритеты расставлены. А вот человек, читающий код, не всегда может осилить.
источник

DP

Dmitry Ponyatov in Compiler Development
Alexander Tchitchigin
Можно не банить (тем более - хороших людей), а просто удалять сообщения не по теме. Это довольно быстро сворачивает флуд и не даёт разгораться флейму. 😉
есть еще способ тушения ядерным взрывом, вкинуть чего-нибудь типа haskel vs python, а потом кто успел тот присел
источник

VK

Val Krylov in Compiler Development
Yuriy Syrovetskiy
а всклзн здесь зачем?
!f также вводит новый идентификатор, но являющийся константой времени компиляции. Удобно, (субъективно) красиво.
источник

YS

Yuriy Syrovetskiy in Compiler Development
Val Krylov
!f также вводит новый идентификатор, но являющийся константой времени компиляции. Удобно, (субъективно) красиво.
типа как в Хаскеле образец x y вводит x во внешнее пространство, а y — во пространство для функции x?
источник

А⚙

Антон ⚙️ in Compiler Development
Yuriy Syrovetskiy
ну хотя бы деструктуризацию произвольной глубины. в Питоне 2 такое было, а в 3 убрали почему-то
Ещё в питоне 3 нельзя разбирать кортежи в лямбда-функциях. Когда я это узнал, меня это выбесило
источник

YS

Yuriy Syrovetskiy in Compiler Development
Dmitry Ponyatov
есть еще способ тушения ядерным взрывом, вкинуть чего-нибудь типа haskel vs python, а потом кто успел тот присел
Хаскель и Питон слишком похожи, холивара не получится
источник

RE

Roman Elizarov in Compiler Development
Yuriy Syrovetskiy
ну хотя бы деструктуризацию произвольной глубины. в Питоне 2 такое было, а в 3 убрали почему-то
Ну она же там без вариантов. Деструктуризация и в JS есть, но это еще не совсем pattern matching. Грубо говоря, там разрешены только всегда успешные шаблоны. Там нельзя константы и выражения использовать и путаницы нет.
источник

DP

Dmitry Ponyatov in Compiler Development
Yuriy Syrovetskiy
Хаскель и Питон слишком похожи, холивара не получится
продувка один....
источник

YS

Yuriy Syrovetskiy in Compiler Development
Roman Elizarov
Ну она же там без вариантов. Деструктуризация и в JS есть, но это еще не совсем pattern matching. Грубо говоря, там разрешены только всегда успешные шаблоны. Там нельзя константы и выражения использовать и путаницы нет.
JS ведь может кинуть исключение, если нужного поля в рантайме не окажется. то же самое можно было бы сделать и для значений
источник

DP

Dmitry Ponyatov in Compiler Development
Roman Elizarov
Да всё сахар. Просто весь этот сахар, когда его слишком много, начинает путаться и приводить к неоднозначностям и сложности понимания кода человеком. Компилятору-то все-равно. Он разберется в любой неоднозначности, если приоритеты расставлены. А вот человек, читающий код, не всегда может осилить.
не важно сколько сахара, главное следить чтобы Perl дрожжей не подкинул...
источник

А⚙

Антон ⚙️ in Compiler Development
Yuriy Syrovetskiy
JS ведь может кинуть исключение, если нужного поля в рантайме не окажется. то же самое можно было бы сделать и для значений
BTW именно такой вариант в C++ предлагают
источник