Re[29]: Длинная нудная статья, почему не Scheme
От: thesz Россия http://thesz.livejournal.com
Дата: 07.10.09 20:14
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, thesz, Вы писали:

T>>И получается, что то, что в Хаскеле делается системой типов и регулярными средствами, в Схеме с Лиспом делается макросами
MC>В некоторых случаях — да (канонический случай с myif). Но в обратную сторону неверно.

Я не понял, что означает здесь "в обратную сторону".

T>>(Software Transactional Memory, например).

MC>А зачем для stm макросы?

Для контроля.

Чтобы ты не потребовал transaction-peek вне atomic block.

Как в Схеме сделать так, чтобы транзакционные примитивы не могли быть вызваны вне атомарного блока?

T>>Покажи, пожалуйста, жизненный пример, в котором потребуется вводить связывающие конструкции, не выражаемые через сравнение с образцом, лямбды, ФВП и let/where.

MC>Я уже предлагал — дополнить паттерн-матчинг новой конструкцией. Пример с (list (pattern) ...) тебе не нравится почему-то, хотя штука удобная. Можно придумать другой — например, сделать матчинг по типу того, как в эрланге сделан для binary. Или чтобы можно было матчить строчку по регулярному выражению и биндить именованные группы к переменным.

Ну, вот binary уже туда-сюда.

Строка по регулярным выражениям — это комбинаторы в сочетании с rewrite rules.

T>>Да только я всего один раз ощутил нужду в Template Haskell. Недавно.

MC>Ну вот видишь, и ты не безнадежен

И это, я считаю, самый большой недостаток Хаскеля — то, что мне TH все-таки понадобился.

Это очень, очень неудобно.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[30]: Длинная нудная статья, почему не Scheme
От: Mr.Cat  
Дата: 08.10.09 10:27
Оценка:
Здравствуйте, thesz, Вы писали:
T>Чтобы ты не потребовал transaction-peek вне atomic block.
T>Как в Схеме сделать так, чтобы транзакционные примитивы не могли быть вызваны вне атомарного блока?
Ты про монаду STM? Да, мне тоже нравится идея контролировать все, что можно, в компайл-тайм на уровне типов, но scheme — динамически типизированный язык со всеми вытекающими.

T>rewrite rules.

Которые, судя по описанию (сам не юзал), близки к syntax-rules.
Вот увидишь, пройдет немного времени (лет 5?) — и хаскелисты будут знакомиться с макросами чуть ли не раньше, чем с монадой ЙО.
Re[31]: Длинная нудная статья, почему не Scheme
От: thesz Россия http://thesz.livejournal.com
Дата: 08.10.09 11:03
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, thesz, Вы писали:

T>>Чтобы ты не потребовал transaction-peek вне atomic block.
T>>Как в Схеме сделать так, чтобы транзакционные примитивы не могли быть вызваны вне атомарного блока?
MC>Ты про монаду STM? Да, мне тоже нравится идея контролировать все, что можно, в компайл-тайм на уровне типов, но scheme — динамически типизированный язык со всеми вытекающими.

То-то и оно.

Схема никак не помогает не совершать ошибок.

T>>rewrite rules.

MC>Которые, судя по описанию (сам не юзал), близки к syntax-rules.

Нет, не близки.

MC>Вот увидишь, пройдет немного времени (лет 5?) — и хаскелисты будут знакомиться с макросами чуть ли не раньше, чем с монадой ЙО.


Нет, не будут.

rewrite rules нужны для оптимизации чего-то там. Оптимизация возникает тогда, когда сама программа уже написана.

Ты как-то всё не поймёшь, что макросы и метапрограммирование нужно тогда, когда язык сам по себе низкоуровневый. См. того же Брукса, "Мифический человеко-месяц".

У Хаскеля с уровнем всё в порядке, даже занижать приходиться, чтобы поверили.

Тут и разница: на Схеме программу не написать, не воспользовавшись макросом, на Хаскеле макросы нужны для оптимизации.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[32]: Длинная нудная статья, почему не Scheme
От: Mr.Cat  
Дата: 08.10.09 11:17
Оценка:
Здравствуйте, thesz, Вы писали:
T>Схема никак не помогает не совершать ошибок.
По сравнению с хаскелем — да. По сравнению с другими динамическими языками — иногда помогает.

MC>>Вот увидишь, пройдет немного времени (лет 5?) — и хаскелисты будут знакомиться с макросами чуть ли не раньше, чем с монадой ЙО.

T>Нет, не будут.
Ну по крайней мере я буду на это надеяться

T>rewrite rules нужны для оптимизации чего-то там.

Подожди. Ты только что собирался их применять совсем не для оптимизации.

T>Ты как-то всё не поймёшь, что макросы и метапрограммирование нужно тогда, когда язык сам по себе низкоуровневый.

Ну в целом да. Это преподносится как достоинство схемы: небольшое ядро плюс всемогущие макросы. Ты зачем-то разделяешь понятия, для разделения не предназначенные: тебе видится убогий язык и макросы, исправляющие его убогость. А scheme — это на самом деле красивый язык с макросами.

T>См. того же Брукса, "Мифический человеко-месяц".

Там и про это есть? Возможно, и правда полистать стоит.
Re[33]: Длинная нудная статья, почему не Scheme
От: thesz Россия http://thesz.livejournal.com
Дата: 08.10.09 11:38
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, thesz, Вы писали:

T>>rewrite rules нужны для оптимизации чего-то там.
MC>Подожди. Ты только что собирался их применять совсем не для оптимизации.

Макрос сделает статический код, выполняющийся эффективно. Rewrite rules нужны для того же.

То есть, для оптимизации.

T>>Ты как-то всё не поймёшь, что макросы и метапрограммирование нужно тогда, когда язык сам по себе низкоуровневый.

MC>Ну в целом да. Это преподносится как достоинство схемы: небольшое ядро плюс всемогущие макросы.

Какие же они всемогущие, если даже не могут проверить обращение к транзакции вне блока работы с транзакцией?

MC>Ты зачем-то разделяешь понятия, для разделения не предназначенные: тебе видится убогий язык и макросы, исправляющие его убогость. А scheme — это на самом деле красивый язык с макросами.


Да я как-то красоты в языке не вижу.

Как только показывают что-то красивое, так оказывается, что это макросы. Посмотришь внимательней внутрь, так и красоты нет — один синтаксис.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[34]: Длинная нудная статья, почему не Scheme
От: Mr.Cat  
Дата: 08.10.09 12:13
Оценка:
Здравствуйте, thesz, Вы писали:
T>>>rewrite rules нужны для оптимизации чего-то там.
MC>>Подожди. Ты только что собирался их применять совсем не для оптимизации.
T>Макрос сделает статический код, выполняющийся эффективно. Rewrite rules нужны для того же.
T>То есть, для оптимизации.
Стоп. Ты говорил собрался сделать, что rr позволят позволить писать вот вот такое (я это имел в виду под паттерн-матчингом к регекспу):
f "^\\d+$" = doSomething1
f "^\\w+$" = doSomething2

Все-таки это можно и без rr сделать?

T>Как только показывают что-то красивое, так оказывается, что это макросы.

Таки ты макроненавистник
Re[35]: Длинная нудная статья, почему не Scheme
От: thesz Россия http://thesz.livejournal.com
Дата: 08.10.09 13:00
Оценка: 6 (1)
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, thesz, Вы писали:

T>>>>rewrite rules нужны для оптимизации чего-то там.
MC>>>Подожди. Ты только что собирался их применять совсем не для оптимизации.
T>>Макрос сделает статический код, выполняющийся эффективно. Rewrite rules нужны для того же.
T>>То есть, для оптимизации.
MC>Стоп. Ты говорил собрался сделать, что rr позволят позволить писать вот вот такое (я это имел в виду под паттерн-матчингом к регекспу):
MC>
MC>f "^\\d+$" = doSomething1
MC>f "^\\w+$" = doSomething2
MC>

MC>Все-таки это можно и без rr сделать?

Без rewrite rules.

Будет выглядеть, как
{-# LANGUAGE ViewPatterns, PatternGuards #-}

data Match = M [String] | F -- match or failure.

type REString = String

re :: REString -> String -> Match
re re string = M [re,string] -- должно быть что-то из regexp, что в ghc

f (re "something" -> M []) = "do something"
-- try f "really nothing".
f (re "nothing" -> M ["nothing","really nothing"]) = "do nothing"
f _ = "huh?"

-- Второй вариант:
g string
    | M [] <- re "something" = "do something"
    | m ["nothing","really nothing"] <- re "nothing" = "do nothing"
    | _ = "huh?"


Вот кусок реального кода:
getPart (ValueArr arr) ((Right index):path)
    | Just value <- lookup index arr = getPart value path
    | otherwise = dummyValue


При сравнении можно получать значения переменных.

T>>Как только показывают что-то красивое, так оказывается, что это макросы.

MC>Таки ты макроненавистник

Мне они не нравятся с практической точки зрения.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[36]: Длинная нудная статья, почему не Scheme
От: Mr.Cat  
Дата: 08.10.09 13:21
Оценка:
Здравствуйте, thesz, Вы писали:
T>{-# LANGUAGE ViewPatterns, PatternGuards #-}
Вот-вот. Нет бы развивать макросы в хаскеле — вместо этого плодят расширения.
Re[35]: Длинная нудная статья, почему не Scheme
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 08.10.09 13:50
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Стоп. Ты говорил собрался сделать, что rr позволят позволить писать вот вот такое (я это имел в виду под паттерн-матчингом к регекспу):

MC>
MC>f "^\\d+$" = doSomething1
MC>f "^\\w+$" = doSomething2
MC>


В Haskell не принято менять синтаксис ради синтаксиса. Эту декларацию можно записать так:

f x | x =~ "^\\d+$" = doSomething1
    | x =~ "^\\w+$" = doSomething2


MC>Все-таки это можно и без rr сделать?


Rewrite rules не меняют синтаксис.
Re[37]: Длинная нудная статья, почему не Scheme
От: thesz Россия http://thesz.livejournal.com
Дата: 08.10.09 15:17
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, thesz, Вы писали:

T>>{-# LANGUAGE ViewPatterns, PatternGuards #-}
MC>Вот-вот. Нет бы развивать макросы в хаскеле — вместо этого плодят расширения.

И как ты себе это представляешь, расширение Хаскеля макросами?

Попробуй спроектировать макросистему, чтобы на ней можно было сделать (хотя бы) PatternGuards/ViewPatterns. С учётом строгой типизации и сообщений об ошибках.

Так что вот так-то вот так.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[38]: Длинная нудная статья, почему не Scheme
От: Mr.Cat  
Дата: 08.10.09 15:51
Оценка:
Здравствуйте, thesz, Вы писали:
T>Попробуй спроектировать макросистему, чтобы на ней можно было сделать (хотя бы) PatternGuards/ViewPatterns. С учётом строгой типизации и сообщений об ошибках.
В ближайшее время и пробовать не буду. Но у plt есть typed scheme — надо будет посмотреть, как там дела с макросами.
Re[39]: Длинная нудная статья, почему не Scheme
От: thesz Россия http://thesz.livejournal.com
Дата: 08.10.09 16:24
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, thesz, Вы писали:

T>>Попробуй спроектировать макросистему, чтобы на ней можно было сделать (хотя бы) PatternGuards/ViewPatterns. С учётом строгой типизации и сообщений об ошибках.
MC>В ближайшее время и пробовать не буду. Но у plt есть typed scheme — надо будет посмотреть, как там дела с макросами.

http://www.ccs.neu.edu/home/matthias/Presentations/STOP/stop.pdf

* type errors in SML are difficult
* type errors in Soft Scheme are pure torture
* explaining type errors in Soft Scheme remains for PhD-level experts


Вот так-то.

Ещё добавь вывод типов, а не просто проверку, и тебе станет совсем хорошо.

А в Typed Scheme-то, как раз, от вывода типов ушли. И про макросы ни слова. Так что ничем тебе typed scheme не поможет.

PS
Smith's Law: Any sufficiently large test suite for a program written in a dynamic language will contain an ad-hoc, informally-specified, bug-ridden, slow, patchy implementation of half of the Haskell type system
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[39]: Длинная нудная статья, почему не Scheme
От: geniepro http://geniepro.livejournal.com/
Дата: 08.10.09 17:18
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC> ... Но у plt есть typed scheme — надо будет посмотреть, как там дела с макросами.


Ещё есть Liskell -- вроде там макросы должны быть...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.