I have just sent this proposal through 
http://www.ecma-international.org/memento/register_TC39_Royalty_Free_Task_Group.php
 but I don't know what more I need to do. I am a high school student from China 
who is interested in next-generation ecmascript and has been working on an 
ecmascript implementation for months. Since I am not a native speaker, there 
might be grammar mistakes in following texts. I have sent this proposal to this 
mailing list this about 8 hours ago but to some reason it is not delivered.

Here is my proposal:

As known, Symbol Type introduced in ECAMScript provides a way to create private 
fields, and feature extensions without interfering with current usage, since 
each Symbol created is unique. However, sometimes software developers may not 
want to expose a private field to public, so they might not want to let the 
symbol to be easily accessed from Object.getOwnPropertySymbols function.

A change to the current Symbol constructor can be made to change this 
situation. Instead of using Symbol([Description]), we may use 
Symbol([Description], [Private]). When the private parameter is set to true, 
the symbol will be eliminated from Object.getOwnPropertySymbols. In later text, 
I will call such a Symbol private symbol.

This change will not only benefit developers, but also helps to clarify the 
standard. The ECMAScript 5.1 uses internal properties, while the ECMAScript 
Harmony uses internal slots as a way to define the properties that are not 
public accessible but exists in an object. However, this adds to the difficulty 
of implementing such objects with internal properties/slots. If private symbol 
is supported by the implementation, the implementation can simply just create a 
property of that object, with property key a private symbol. For example, we 
can say there is a private well known symbol (that is not exposed to user code) 
Symbol([[BooleanData]]), and we can eliminate the description about internal 
slot and express texts in a more uniform way.

This also allows more standard-defined objects to be implemented in ECMAScript 
itself, by only exposing these private symbols to certain ECMAScript modules 
that implement features required by the Standard. I uses the way that describes 
below to implement my own ECMAScript implementation.

For example:```js
// PrivateSymbol.js
var BooleanData = Symbol("[[BooleanData]]", true);
export {BooleanData}

// Boolean.js
import {BooleanData} from 'PrivateSymbol.js'
var global=this;
global.Boolean = function(x){
    if(this==global){
        return !!x;
    }else{
        this[BooleanData]=!!x;
    }
}

// User Code
var b=new Boolean(true);
b["[[BooleanData]]"] → undefined        // guaranteed by semantics of Symbol
b[Symbol("[[BooleanData]]")] → undefined // guaranteed by semantics of Symbol
b.getOwnPropertySymbols() → []  // guaranteed since Symbol is private```
So there is still no way to access or modify its [[BooleanData]] property, so 
the property is equivalent to internal slots/properties, while the way to 
describe them is uniformed.                                       
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to