суббота, 10 августа 2013 г.

А вдруг есть такой чудесный плагин для Scala?


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

Есть у меня одна уже работающая задумка, но мне нужен для Scala хороший и удобный синтаксический сахар для монад (эх, еще бы для стрелок…). Мечтаю о чем-то подобном computation expressions из F# - это такой аналог нотации do для языка, в котором нет классов типов. Как понимаю, нужен плагин к компилятору в случае Scala.

Ни встроенный for-comprehension, ни плагин продолжений не впечатляют нисколько. Отчасти они дублируют друг друга, но ни одно из них не решает свою задачу хорошо в моем понимании, давно извращенным другими языками. В общем, тот случай, где количество не переходит в качество, и даже не помышляет о том.

Очень хотел использовать Scala, но сейчас пребываю в полной печали. Для моей задачи технически идеально подходит Haskell, но я хочу продвинуть библиотеку в широкие массы, а потому Haskell пока хорош только как полигон для выработки, обкатки и кристаллизации моих безумных идей, и здесь он свою миссию уже выполнил на все 350% с блеском и шиком. Но сейчас хочется получить уже широкую аудиторию из исключительно меркантильных соображений, а потому интересует Scala. 

12 комментариев:

  1. А чем for конкретно не устраивает? Он же от do-нотации отличается только ключевым словом.

    ОтветитьУдалить
  2. Есть важные отличия. Хаскелевский do поддерживает if и case. Плюс в случае императивного языка, каким является Scala, обязательно должна была бы быть поддержка для try и while, которая, к слову сказать, есть в плагине продолжений, но у того свои недостатки. Итого фактически получается, что сложную логику записать нельзя, тогда зачем этот for-comprehension нужен?

    Если что, то это риторический вопрос - для примитивных вещей я его часто использую, но прекрасно осознаю, насколько он примитивен и ограничен.

    Так, что сопоставлять как равное с нотацией do из Haskell или с вычислительными выражениями из F# я бы точно не стал, поскольку я со всем этим много работал.

    ОтветитьУдалить
    Ответы
    1. > Хаскелевский do поддерживает if и case.

      В каком смысле "поддерживает"? В do-нотации (и скальном for) же нету никаких ограничений, то есть оно искаробки поддерживает все - и if, и while и try. Или что имеется в виду?

      Удалить
  3. Ну, и на закуску. Я не нашел красивого способа включить вычисление типа m () в for-comprehension. Так, чтобы без липовых переменных и подчеркиваний. В общем, говорить как о равных нотациях точно нельзя. Даже в случае F# приходится писать дурацкое do!.

    ОтветитьУдалить
  4. Эм... в do-нотации Хаскеля нет никакой специфической поддержки if и case. Точно так же можно утверждать, что хаскелевский do поддерживает умножение.

    ОтветитьУдалить
  5. 2migmit: Ну, ладно, тут можно согласиться. Это я с F# попутал (и еще со стрелками Haskell). В F# match и if явно поддерживаются на уровне comp exprs. Точно также, match и if явно поддерживаются в плагине продолжений в Scala. Пойнт еще в том, что в Haskell эта интеграция идет естественно, а в Scala ее надо явно поддерживать. В общем, без этой штуки жизни не представляю на Scala.

    ОтветитьУдалить
  6. https://github.com/aztek/master-thesis
    https://github.com/aztek/scala-workflow

    ОтветитьУдалить
    Ответы
    1. 2triampurum: Спасибо! Изучаю.

      Удалить
    2. Здорово! Примерно такое я и надеялся найти. Буду пробовать. А автору могу пожелать хорошего продвижения на инглише. Наверное, надо на этом языке ему написать хорошую обзорную статью.

      Удалить
  7. Увы, не все так гладко со scala-workflow. Идея замечательная, но пока нет поддержки while, try, match и if, еще (мечтательно) lazy. Это решаемо, даже lazy. Но мне непонятно, как быть с тем, что untyped macros, вероятно, решили выпилить из Scala. Вот, последнее - уже очень серьезная проблема. А без них не видать полноценного синтаксического сахара для монад, похоже.

    Всерьез начал рассматривать возвращение к F# поле перерыва в несколько лет, но ужасно не хочется быть привязанным к продукции Микрософта.

    ОтветитьУдалить
    Ответы
    1. Стоит обговорить эти моменты с https://twitter.com/#!/xeno_by , он в курсе этой и других разработок монадических DSL'ей (были и другие, с ходу не вспомню линки) и, к тому же, в курсе будущей судьбы макросов.

      Удалить
  8. xeno_by, если что, общается по-русски

    ОтветитьУдалить