为什么集合上的这些常见操作在Julia中重命名?

为什么集合上的这些常见操作在Julia中重命名?,julia,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

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!

为什么要重新命名?正在添加一个!要使更改集合状态的函数现在成为约定?

您可以阅读
julia dev
线程。基本上,这只是为了遵守文档中描述的规则:

最后一个函数fill!,不同之处在于它修改现有的 数组,而不是构造新的数组。作为惯例,功能 使用此属性时,名称以感叹号结尾。这些 函数有时称为“变异”函数或“就地” 功能


FWIW我认为这是一个好主意,至少对于
Base

使用
一直是一种明确的表示变异的约定,只是直到最近才得到正确的实施。对于
推送
,人们可以很容易地认为它不是必需的。但是使用
push
而不是
push
表明,在这种情况下,突变的发生方式与使用
排序时发生突变的方式完全相同
,这与排序非常不同


这种感叹号约定存在于Scheme和Ruby以及其他几种语言中。它不存在于像R这样的语言中,它不允许一个人在不借助语言的内在本质的情况下执行变异。

我没有Julia的经验(以前没有听说过),但我看到了
其他语言中的后缀。从函数式编程的角度来看,
表示主要目的是产生变异副作用的函数。乍一看,Julia似乎在设计并行处理,并且易变性增加了并发的复杂性:所以
将强调该特定调用在这方面需要额外的注意(而另一个函数可能是更好的选择)。