> On Jun 30, 2017, at 4:55 AM, Daryle Walker <[email protected]> wrote:
>> On Jun 30, 2017, at 1:11 AM, John McCall <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>>> 
>>> On Jun 23, 2017, at 3:28 AM, Daryle Walker via swift-evolution 
>>> <[email protected] <mailto:[email protected]>> wrote:
>>> 
>>> Swift is currently an alias-adverse language. The model for the equivalent 
>>> of pointers is supposed to be for short-term use, and not persisted. Other 
>>> constructs that would use references: read-write properties, read-write 
>>> subscripts, and inout function parameters, can all be implemented by 
>>> copy-in-then-copy-out, presumably to avoid alias dynamics and its 
>>> anti-optimizations. So the scope of aliases here will be limited to 
>>> local-scale renaming of object locations that the compiler can connect 
>>> statically.
>>> Yes, the use case is currently weak, but it is a stepping stone for 
>>> stronger cases, like changing the interface of an object with (currently 
>>> not in the language) strong type-aliases without copies.
>>> 
>> 
>> We usually expect language features to stand on their own.  Certainly 
>> something as core as a new kind of declaration would be expected to.
>> 
>> Anyway, this feature is rather similar to what I called a "local ephemeral 
>> binding" in the ownership proposal, except that your alias does not access 
>> the referenced storage until it itself is accessed.  Unfortunately, this 
>> actually makes it *more* complex, rather than less, as it creates a new way 
>> to abstract over storage, including local storage.
> 
> I was thinking posing aliases would be like symbolic substitution; we could 
> replace the alias with the text defining its source expression everywhere and 
> there should be no efficiency change. But I would want any evaluation of the 
> (sub-)object’s location to be computed once; is that where complexity could 
> come in? I was hoping that object location determination could be done at 
> compile-time; that’s the reason for restricting what kinds of objects can be 
> a source object.

I'm always wary of features that require a ton of restrictions because they can 
only be implemented using a sort of preprocessing.  Among other things, it 
suggests that they cannot possibly be made resilient.

I think a better way of thinking of your feature is as sugar on top of the 
generalized accessors feature from ownership — that is, a concise way to 
declare a var/subscript with accessors that automatically forward to some other 
entity, e.g.:

  var values: [Value]
  alias var count: Int = values.count
  alias subscript(i: Int) -> Value = values[i]

John.
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to