четверг, 9 июля 2009 г.

[comp.prog] Интересная статья о проектировании интерфейса Lock на Scala

Jorge Ortiz: Pimp My Lock: A case study in Scala API design – статья, в которой показывается, как используя возможности языка Scala создать интерфейс Lock, более удобный в использовании, чем аналогичный ему интерфейс из Java. (Для понимания статьи желательно иметь общие представления о языке Scala.)

После ее прочтения у меня в сухом остатке оказались три вещи:

1. В статье показано, как в языке с лямбда-функциями (блоками кода) можно обходиться без идиомы RAII. Не могу сказать, что отсутствие RAII – это хорошо. Но уж если его в языке нет, но есть удобная возможность оформления блоков кода (как в Scala и Ruby), то можно жить и вот так.

2. На мой взгляд, статья демонстрирует, что чем богаче язык, тем сложнее приходиться в проектировании общеупотребительных библиотек. Проблема “богатства выбора” и все такое :)

3. Гибкость языка и богатые выразительные способности все-таки усложняют восприятие кода. Вот, например, смотрит человек с посредственными знаниями Scala на фрагмент:

lock.attemptFor(10.minutes) {
    // blocking (with timeout) attempt at access
    // to shared resources
  } getOrElse {
    // code to execute if attempt fails
  }

и пытается понять, что же такое getOrElse и к чему он относится. Насколько быстро ему это удастся?

Комментариев нет: