2013-01-17 4 views
6

Julia에서 컬렉션에서 항목을 삭제하는 등의 일반적인 작업이 최근에 변경되었으며 이전 기능은 사용되지 않습니다. 예를 들어Julia에서 컬렉션에 대한 이러한 일반적인 작업이 변경된 이유는 무엇입니까?

,

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

지금 경고

WARNING: del is deprecated, use delete! instead. 

이름을 바꾼 일부 기능 팝업 :

@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! 

왜 이러한 이름이 바뀐를? 추가하고있다! 현재 컬렉션의 상태를 변경하는 함수에?

+0

필자는 Julia에 대한 경험이 없지만 (다른 언어에서는 '!'접미어를 보았습니다.) 함수형 프로그래밍 관점에서 '!'는 주요 목적이 돌연변이 부작용 인 함수를 나타냅니다. 주목할 것은 Julia가 parellel 처리를 염두에두고있는 것처럼 보이고 mutability는 동시성의 복잡성을 증가시킨다. 그래서'! '는 특정 호출이 그와 관련하여 추가적인주의를 필요로한다는 것을 강조 할 것이다 (대체 함수가 더 나은 대안이 될 수있다) . –

답변

9

julia-dev 스레드 here을 읽을 수 있습니다. 기본적으로, 그것은 단순히 arrays 문서에 설명 된 규칙을 존중 변화하고 :!,

마지막 기능을 입력하는 대신 새로 건설의 기존 배열을 수정하는 점에서 다르다. 규약에 따라이 속성이있는 함수의 이름은 느낌표로 끝납니다. 이러한 기능을 때때로 "돌연변이"기능 또는 "내부"기능 기능이라고합니다.

FWIW 이것은 적어도 Base에 대해서는 좋은 생각이라고 생각합니다.

7

!의 사용은 항상 돌연변이를 나타내는 명시적인 관습이었으며, 최근까지는 제대로 시행되지 않았습니다. push의 경우 필수적인 것은 아니라고 쉽게 주장 할 수 있습니다. 그러나 push 대신 push!을 사용하면 과 매우 다른 sort!을 사용할 때 돌연변이가 발생하는 것과 정확히 같은 방식으로 돌연변이가 일어나고 있음을 분명히 알 수 있습니다.

이 느낌표 표기 규칙은 Scheme과 Ruby 및 다른 여러 언어에 존재합니다. 그것은 R과 같은 언어로 존재하지 않습니다. R은 언어의 근원에 의존하지 않고 돌연변이를 수행하는 것을 허용하지 않습니다.