Historyczne pochodzenie implikacji Scali

14

Scala została nazwana złożona przez wielu moich kolegów z jej bogatych funkcji, a niektórzy nawet obwinili wszystkie jej nowe funkcje. Podczas gdy większość programistów zna funkcje OO, a przynajmniej przyzwoici wiedzą także o programowaniu funkcjonalnym, w Scali jest jedna cecha, dla której nie jestem świadomy jej historycznych początków.

Biorąc pod uwagę, że główną mantrą naszego zawodu jest nie odkrywanie koła na nowo, jestem raczej przekonany, że Scala nie ma żadnych niespotykanych wcześniej cech, ale w razie potrzeby mogę je poprawić.

Aby przejść do rzeczywistego pytania, choć jestem świadomy pochodzenia większości cech Scali, nigdy wcześniej nie widziałem czegoś takiego jak jego implicitdeklaracje. Czy istnieją inne (starsze!) Języki, które również oferują tę funkcję?

Czy ma sens rozróżnianie różnych przypadków implicitów (ponieważ mogą one pochodzić z różnych źródeł), a mianowicie konwersji implikowanych i ukrytych parametrów?

Szczery
źródło
Może duplikat ?: stackoverflow.com/questions/3069432/…
gerferra
@gerferra Nie jest dokładnym duplikatem i nie ma pojęcia o duplikacie z innej witryny. Jeśli chcesz, możesz napisać odpowiedź odnoszącą się do pytania SO i jego odpowiedzi oraz referencji, co jest całkowicie do przyjęcia.
yannis

Odpowiedzi:

9

Nie zgadzam się z odpowiedzią Briana na to drugie pytanie.

O ile mi wiadomo, nie ma domyślnej koncepcji w żadnym innym języku. Historia zmian dla Scali sugeruje, że implikacje były uogólnieniem granic widoku, a granica widoku sama w sobie jest uogólnieniem automatycznej konwersji typów, co jest rzeczywiście bardzo powszechne.

Następnie włączono klasy typów, ale byłbym bardzo zaskoczony, gdyby taki był pierwotny cel.

Edytować

Informacje o wersji Scala 2.0 (2006) mówią:

Widoki w Scali 1.0 zostały zastąpione bardziej ogólną koncepcją niejawnych parametrów

Nie oznacza to oczywiście, że niejawne parametry zostały wprowadzone w celu zastąpienia widoków.

Jednak Odersky wyraźnie lubi to, gdy kiedyś koncepcja może zastąpić wiele z nich. W tym sensie może się zdarzyć, że Odersky chciał klas typu, ale nie chciał wprowadzić mechanizmu obsługi wyłącznie tego, i dlatego wymyślił coś innego, co pozwoliło mu usunąć jedną koncepcję (Widoki) i zastąpić ją z bardziej ogólną koncepcją, która obsługuje zarówno widoki, jak i klasy typów.

Jeśli ktoś jest zainteresowany, klasy ubogich, o których wspomniał Brian w Stack Overflow, są również datowane na 2006 rok. Najwyraźniej Odersky był świadomy związku między implikacjami a klasami typów, kiedy je wprowadzał.

Mimo to podtrzymuję swoje roszczenie. :-)

Daniel C. Sobral
źródło
Co z odpowiedzią Normana Ramseya? stackoverflow.com/a/3071461/63489 . Odnosi się do poprzedniej implementacji ukrytych konwersji w Haskell
gerferra
@gerferra Brzmi rozsądnie - należy pamiętać, że w tym artykule wspomniano o Odersky. Mechanizm jest inny, ale równie dobrze piłka może się toczyć. Artykuł odsyłający Oderskiego omawia klasy typów, a implikacje zostały wprowadzone w 2006 r., Kiedy to Brian przedstawił prezentację „Klasy typów biednych ludzi” - najwyraźniej istnieje link. Jednak informacje o wydaniu Scala 2.0 (2006) mówią „Widoki w Scali 1.0 zostały zastąpione bardziej ogólną koncepcją parametrów niejawnych” . Z tego, co wiem o Oderskim, jeden mechanizm, który rozwiązuje wiele problemów, byłby dla niego wielką atrakcją.
Daniel C. Sobral
wystarczy :-)
gerferra
4

Implicit w scala oznacza dwie różne rzeczy

  1. Implikowane parametry. Te pojawiły się w Haskell, a może najpierw w innych językach. Dowody potwierdzające: W artykule z 2000 roku i GHC dokumentacji 5.04.1 (Sept-2002, zanim nie było Scala)
  2. Niejawne konwersje. Nie znam pierwszego języka, który je ma, ale były one w języku C # 1.0 (przy użyciu implictsłowa kluczowego), które poprzedza pierwszą wersję Scali o około rok.
Philip JF
źródło
+1, nie wiedziałem, że niejawne konwersje są dostępne w języku C #. Dzięki za wskaźnik.
Frank