Section 3.7.5 of CTM introduces the NewName
concept for data encapsulation in secure abstract data types. It is meant to be used in this manner:
proc {NewWrapper ?Wrap ?Unwrap}
Key={NewName}
in
fun {Wrap X}
fun {$ K} if K==Key then X end end
end
fun {Unwrap W}
{W Key}
end
end
local Wrap Unwrap in
% This part uses the above definitions to implement a secure stack
{NewWrapper Wrap Unwrap}
fun {NewStack} {Wrap nil} end
fun {Push S E} {Wrap E|{Unwrap S}} end
fun {Pop S E}
case {Unwrap S} of X|S1 then E=X {Wrap S1} end
end
fun {IsEmpty S} {Unwrap S}==nil end
end
I could not find the proper technical term for this NewName
concept. So I'd like to know:
- What is this concept called outside of Mozart/Oz?
- Which of the more mainstream languages implement this mechanism?