2013-01-17 9 views
6

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! 

は、なぜこれらの名前が変更されましたか? aを追加しています!コレクションの状態を今や大会に変える機能には?

+0

私はジュリアを経験していませんでしたが(他の言語では '!'接尾辞を見たことがありませんでした)。関数型プログラミングの観点から、 '!'は、主な目的が突然変異の副作用である関数を示します。一見すると、Juliaはparellelの処理を念頭に置いているように見えます。そして、mutabilityは並行性の複雑さを増します。そのため、その特定の呼び出しがその点で追加の注意を必要とすることを補強します(そして代替関数がより良い代替手段かもしれません) 。 –

答えて

9

julia-devスレッドhereを読むことができます。基本的に、それは単にarraysマニュアルに記載されたルールを尊重するために変更しています:

最後の関数を、埋める!、それは代わりに新しいものを構築する既存の 配列を変更することで異なっています。規則として、このプロパティの関数 には感嘆符で終わる名前が付いています。これらの 機能は、「突然変異」機能または「インプレース」 機能と呼ばれることがあります。

FWIWこれは良い考えです。少なくともBaseです。

7

!の使用は、突然変異を示すための明示的な慣習であり、最近まで正しく実施されていなかった。 pushについては、それは必須ではないと容易に主張することができます。しかしpushの代わりにpush!を使用すると、を使用した場合に突然変異が起こるのとまったく同じ方法で突然変異が起こっていることが明らかになります。これはsortとはまったく異なります。

この感嘆符の表記規則はSchemeとRubyに存在し、おそらくいくつかの他の言語にも存在します。 Rのような言語では存在しません。Rのような言語では、言語の根底に頼らずに突然変異を行うことができません。

関連する問題