2013-01-17 14 views
6

Wiele typowych operacji na kolekcjach w Julii, takich jak usuwanie elementu z zestawu, zostało ostatnio zmienionych, a stare funkcje są przestarzałe.Dlaczego te typowe operacje na kolekcjach zostały zmienione w Julia?

Na przykład

del(IntSet(1,2,3), 1) 

teraz wyskakuje ostrzeżenie

WARNING: del is deprecated, use delete! instead. 

Niektóre przemianowany funkcji:

@deprecate push  push! 
@deprecate pop   pop! 
@deprecate grow  grow! 
@deprecate enqueue  unshift! 
@deprecate unshift  unshift! 
@deprecate shift  shift! 
@deprecate insert  insert! 
@deprecate del   delete! 
@deprecate del_all  empty! 

Dlaczego zostały one przemianowane? Dołącza! do funkcji, które zmieniają stan kolekcji teraz konwencji?

+0

Nie mam doświadczenia z Julią (wcześniej o niej nie słyszałem), ale widziałem przyrostek "!" W innych językach. Z perspektywy programowania funkcjonalnego '!' Wskazuje funkcję, której głównym celem jest mutacyjny efekt uboczny. W skrócie Julia wygląda na zbudowanego z myślą o przetwarzaniu parellel, a zmienność zwiększa złożoność w współbieżności: więc '!' Wzmocniłoby to, że to szczególne wezwanie wymagałoby dodatkowej opieki w tym zakresie (a alternatywna funkcja może być lepszą alternatywą) . –

Odpowiedz

9

Możesz przeczytać julia-dev wątek here. Zasadniczo, jest to po prostu zmieniając respektować zasady opisane w dokumentacji arrays:

ostatniej funkcji, wypełnić !, różni się tym, że modyfikuje istniejący tablicę zamiast budowy nowej. Zgodnie z konwencją funkcje tej właściwości mają nazwy kończące się wykrzyknikiem. Te funkcje są czasami nazywane funkcjami "mutującymi" lub "lokalnymi" .

FWIW Myślę, że to dobry pomysł, przynajmniej dla Base.

7

Używanie ! było zawsze wyraźną konwencją wskazującą mutację, do niedawna nie była właściwie egzekwowana. W przypadku push można łatwo argumentować, że nie jest to konieczne. Ale użycie zamiast push wyjaśnia, że ​​mutacja zachodzi w tym przypadku dokładnie w ten sam sposób, w jaki mutacja miałaby miejsce przy użyciu sort!, która jest bardzo różna od.

Ta konwencja dotycząca wykrzykników istnieje w Scheme and Ruby i prawdopodobnie w kilku innych językach. Nie istnieje w języku takim jak R, który nie pozwoliłby na dokonanie mutacji bez uciekania się do ukrytych wnętrzności języka.

Powiązane problemy