Я о другом - конструкции с бэктркингом по-моему легко и без геммороя переписываются на Haskell с использованием монад.
У меня вобще есть сильное подозрение, что бэктрекинг - это частный случай монад. Кстати - я бы это с удовольствием проверил - то есть я готов попробовать попереписывать не слишком громоздкие примеры на Haskell. Если найдется что-то, что плохо переписывается - мне будет интересно.
По поводу синтаксиса - я вообще не очень верю в полезность синтаксической расширяемости. Точнее - польза есть, но imho более умеренная, чем можно подумать. В O'Caml ведь возможность делать практически произвольные расширения синтаксиса имеется. Она полезна, но довольно умерено (хотя пока я ей не попользовался - я ее тоже считал очень нужной). Скажем - можно сделать так, чтобы вместо Array.iter (fun x -> printf "%d " x) myArray писать foreach x from myArray do printf "%d " x done
Но так ли оно важно?
Более важен не синтаксиис, а семантика, а вот это-то тут полностью остается за кадром.
PS: Есть еще Tcl - он тоже макропроцессор, там вообще почти какой угодно синтаксис можно наописывать. Ну тоже - вроде как-то полезно, но не очень.
PPS: Вот гибкий синтаксический редактор с ala-"идейными" фичами - это полезно, но это другая задача. И опять же - значительная часть рефакторингов завязана на семантику. Скажем в O'Caml поиску предков соотвествует поиск всех супертипов, а subtyping там структурный и типы могут вообще не иметь имени.
У меня вобще есть сильное подозрение, что бэктрекинг - это частный случай монад. Кстати - я бы это с удовольствием проверил - то есть я готов попробовать попереписывать не слишком громоздкие примеры на Haskell. Если найдется что-то, что плохо переписывается - мне будет интересно.
По поводу синтаксиса - я вообще не очень верю в полезность синтаксической расширяемости. Точнее - польза есть, но imho более умеренная, чем можно подумать. В O'Caml ведь возможность делать практически произвольные расширения синтаксиса имеется. Она полезна, но довольно умерено (хотя пока я ей не попользовался - я ее тоже считал очень нужной). Скажем - можно сделать так, чтобы вместо
Array.iter (fun x -> printf "%d " x) myArray
писать
foreach x from myArray do
printf "%d " x
done
Но так ли оно важно?
Более важен не синтаксиис, а семантика, а вот это-то тут полностью остается за кадром.
PS: Есть еще Tcl - он тоже макропроцессор, там вообще почти какой угодно синтаксис можно наописывать. Ну тоже - вроде как-то полезно, но не очень.
PPS: Вот гибкий синтаксический редактор с ala-"идейными" фичами - это полезно, но это другая задача. И опять же - значительная часть рефакторингов завязана на семантику. Скажем в O'Caml поиску предков соотвествует поиск всех супертипов, а subtyping там структурный и типы могут вообще не иметь имени.
Reply
Leave a comment