Историческое происхождение Scala


14

Многие мои коллеги назвали Scala сложной, с ее богатым набором функций, а некоторые даже обвинили все эти новые функции. В то время как большинство программистов знают о ОО-функциях, и, по крайней мере, приличные знают и о функциональном программировании, в Scala есть одна особенность, для которой я не знаю ее исторического происхождения.

Учитывая, что главная мантра нашей профессии - не изобретать велосипед, я довольно уверен, что у Scala нет никаких реальных неслыханных возможностей, но я должен исправить это, если это необходимо.

Чтобы перейти к актуальному вопросу, хотя я знаю о происхождении большинства функций Scala, я никогда раньше не видел ничего подобного его implicitзаявлениям. Существуют ли другие (более старые!) Языки, которые также предоставляют эту функцию?

Имеет ли смысл различать различные случаи имплицитов (поскольку они могут происходить из разных источников), а именно конверсии импликов и неявные параметры?


Может быть, дубликат ?: stackoverflow.com/questions/3069432/…
gerferra

@gerferra Не точный дубликат, и нет понятия дубликата кросс-сайта. Если вы хотите, вы можете составить ответ со ссылкой на вопрос SO, и это ответы и их ссылки, это вполне приемлемо.
Яннис

Ответы:


9

Я не согласен с ответом Брайана на этот другой вопрос.

Насколько я знаю, на любом другом языке нет неявного понятия. История изменений для Scala подразумевает, что последствия были обобщением границ представления, а сама граница представления является обобщением автоматического преобразования типов, что на самом деле очень распространено.

Затем Implicits включили классы типов, но я был бы очень удивлен, если бы это было первоначальное намерение.

редактировать

В примечаниях к выпуску Scala 2.0 (2006) говорится:

Представления в Scala 1.0 были заменены более общей концепцией неявных параметров

Это, конечно, не означает, что неявные параметры были введены с целью замены представлений.

Однако Одерскому явно нравится, когда однажды концепция может заменить несколько. В этом смысле вполне может быть так, что Одерский хотел классы типов, но не хотел вводить механизм, который бы обрабатывал это исключительно, и, следовательно, придумал что-то еще, что позволило бы ему удалить одну концепцию (Views) и заменить ее с более общей концепцией, которая обрабатывает как представления, так и классы типов.

В случае, если кто-то заинтересован, классы типов бедняков, на которые ссылается Брайан в Stack Overflow, также датируются 2006 годом. Ясно, что Одерский был осведомлен о связи между имплицитами и классами типов, когда представил их.

Тем не менее, я поддерживаю свое требование. :-)


Как насчет ответа Нормана Рэмси? stackoverflow.com/a/3071461/63489 . Это относится к предыдущей реализации неявных преобразований в Haskell
gerferra

@gerferra Звучит разумно - обратите внимание, что в этой статье упоминается Одерский. Механизм другой, но он вполне может заставить мяч катиться. В упомянутой статье Одерского обсуждаются классы типов, и имплициты были введены в 2006 году, на дату презентации «Классы типов бедняков», на которую ссылается Брайан - ясно, что есть ссылка. Тем не менее, в примечаниях к выпуску Scala 2.0 (2006) говорится, что «представления в Scala 1.0 были заменены более общей концепцией неявных параметров» . Из того, что я знаю об Одерском, один механизм, который решает множество проблем, очень привлек бы его.
Даниэль С. Собрал

достаточно справедливо :-)
герферра

4

Implicit в Scala означает две разные вещи

  1. Неявные параметры. Они появились в Хаскеле, и, возможно, сначала на других языках. Подтверждающие данные: Этот документ с 2000 года и GHC 5.04.1 документации (сентябрь-2002, до того , как был на Scala)
  2. Неявные преобразования. Я не знаю первого языка, на котором они есть, но они были в C # 1.0 (с implictключевым словом), который предшествовал первой версии Scala примерно на год.

+1, я не знал, что неявные преобразования доступны в C #. Спасибо за указатель.
Фрэнк

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.