Я только начинаю работать со Scala. Я использую Python для исследовательского программирования и конвертирую довольно большую (~ 4000 строк) программу Python.
Несколько комментариев:
- Похоже, пришло время заняться Scala, так как в версию 2.8 было добавлено много хорошего.
- С другой стороны... Интересно, почему у Scala нет приличного пакета ввода-вывода, и почему это не кажется приоритетом. В большинстве языков ввод-вывод считается одной из самых фундаментальных операций, и части языка обычно разрабатываются специально для того, чтобы ввод-вывод работал хорошо. Например, библиотека IO в Python кажется одной из самых старых и стабильных частей языка (по крайней мере, в ее интерфейсе). Тем не менее, в комментариях двухлетней давности говорится что-то вроде «Source.fromFile() — это массовый взлом, подождите, пока такой-то закончит новый пакет ввода-вывода» — и я не вижу движения к завершению этого. Еще хуже тот факт, что Source.fromFile().getLines() — который, взломанный или нет, является широко рекламируемым интерфейсом — был полностью сломан изменениями, внесенными в 2.9.0.1 (см. https://issues.scala-lang.org/browse/SI-4662). Очевидно, что для этого простейшего интерфейса ввода-вывода вообще не проводится регрессионное тестирование, что является плохим признаком.
- Стирание типов настолько ужасно, что мне действительно интересно, почему в Scala было принято решение его вставить. Да, я знаю, что в Java есть стирание типов, а Scala построена на JVM, но в результате возникает необходимость добавлять явно видимые вещи, такие как манифесты, аннотации специализации и т. д. и т. д., чтобы обойти стирание типов, просто очень плохо пахнет ... Я чувствую, что в конечном итоге дизайнеры Scala осознают всю глупость всего этого и будут вынуждены реализовать правильную общую типизацию, после чего они тогда есть много ненужного хлама, чтобы осуждать.
Мой вопрос:
Планируется ли добавление определения типа для параметров функции с аргументами по умолчанию? Становится немного неприятно писать такие вещи:
def add_words(words:Traversable[String], ignoreCase:Boolean=true,
stopwords:Set[String]=Set[String]()) {
...
}
В этом случае просто нет необходимости в аннотациях типов для ignoreCase и стоп-слов, и они просто добавляют ненужную многословность.
Спасибо за любые комментарии от тех, кто занимается разработкой Scala.