> -----Original Message----- > From: [EMAIL PROTECTED] On Behalf Of Maciej Stachowiak > Sent: 30. oktober 2007 21:23 > > By the way, I think the discussions about language size could > benefit from some quantitative data. I think the following > comparisons would be interesting:
... > 2) Size of the ES4 standard library by count of classes, > methods and properties. Below is a breakdown of classes (C), interfaces (I), types (T), functions (F), methods (M), properties (P), variables/constants (V); * means new in ES4, + means it replaces something else in ES3 (typically a "primitive value"). "s" means "static", "p" means prototype. Based on current understanding; expect some minor adjustment over time. Do not count lines uncritically. Where ES3 had prototype methods, ES4 has intrinsic methods in addition and sometimes generic static methods as well (Array, String, Function), but in almost all cases, only one of the set has a nontrivial body and the others delegate to it. Furthermore, many "String" methods delegate to "string" methods, and there are shared prototypes (String and String; byte, int, uint, double, decimal, and Number; boolean and Boolean). As a consequence, the footprint for the library is probably substantially smaller than it would appear at first glance. (Note also that [[Construct]] and [[Call]] have new names but are not new.) --lars * V __ECMASCRIPT_OBJECT__ [version number] * V __ES4__ [reserved namespace constant] * V __ES4__::intrinsic [reserved namespace constant] * V __ES4__::meta [reserved namespace constant] * V __ES4__::reflect [reserved namespace constant] C Object Ms Object Ms meta::invoke Vs length Vs prototype Mp toString Mp toLocaleString * Mp toJSONString Mp hasOwnProperty Mp isPrototypeOf Mp propertyIsEnumerable * M intrinsic::toString * M intrinsic::toLocaleString * M intrinsic::toJSONString * M intrinsic::hasOwnProperty * M intrinsic::isPrototypeOf * M intrinsic::propertyIsEnumerable C Function Ms Function Ms meta::invoke Vs length Vs prototype * Ms apply * Ms call M meta::invoke V length V prototype Mp toString Mp apply Mp call * M intrinsic::toString * M intrinsic::apply * M intrinsic::call * C __ES4__::GenericFunction [proposed, not fully spec'd] C Array Ms Array Ms meta::invoke Vs length * Ms concat * Ms every * Ms filter * Ms forEach * Ms indexOf * Ms join * Ms lastIndexOf * Ms map * Ms pop * Ms push * Ms reverse * Ms shift * Ms slice * Ms some * Ms sort * Ms splice * Ms unshift Mp concat Mp every Mp filter Mp forEach Mp indexOf Mp join Mp lastIndexOf Mp map Mp pop Mp push Mp reverse Mp shift Mp slice Mp some Mp sort Mp splice Mp unshift M get length M set length * M intrinsic::concat * M intrinsic::every * M intrinsic::filter * M intrinsic::forEach * M intrinsic::indexOf * M intrinsic::join * M intrinsic::lastIndexOf * M intrinsic::map * M intrinsic::pop * M intrinsic::push * M intrinsic::reverse * M intrinsic::shift * M intrinsic::slice * M intrinsic::some * M intrinsic::sort * M intrinsic::splice * M intrinsic::unshift C String Ms String Ms meta::invoke Vs length Ms fromCharCode * Ms charAt * Ms charCodeAt * Ms concat * Ms indexOf * Ms lastIndexOf * Ms localeCompare * Ms match * Ms parseJSON * Ms replace * Ms search * Ms slice * Ms split * Ms substring * Ms toLowerCase * Ms toLocaleLowerCase * Ms toUpperCase * Ms toLocaleUpperCase * Ms trim Mp charAt Mp charCodeAt Mp concat Mp indexOf Mp lastIndexOf Mp localeCompare Mp match Mp parseJSON Mp replace Mp search Mp slice Mp split Mp substring Mp toLowerCase Mp toLocaleLowerCase Mp toUpperCase Mp toLocaleUpperCase Mp trim M get length * M get * M intrinsic::charAt * M intrinsic::charCodeAt * M intrinsic::concat * M intrinsic::indexOf * M intrinsic::lastIndexOf * M intrinsic::localeCompare * M intrinsic::match * M intrinsic::parseJSON * M intrinsic::replace * M intrinsic::search * M intrinsic::slice * M intrinsic::split * M intrinsic::substring * M intrinsic::toLowerCase * M intrinsic::toLocaleLowerCase * M intrinsic::toUpperCase * M intrinsic::toLocaleUpperCase * M intrinsic::trim + C __ES4__::string * Ms string * Ms meta::invoke * Vs length * Ms fromCharCode * Ms charAt * Ms charCodeAt * Ms concat * Ms indexOf * Ms lastIndexOf * Ms localeCompare * Ms match * Ms parseJSON * Ms replace * Ms search * Ms slice * Ms split * Ms substring * Ms toLowerCase * Ms toLocaleLowerCase * Ms toUpperCase * Ms toLocaleUpperCase * Ms trim * M get length * M get * M intrinsic::charAt * M intrinsic::charCodeAt * M intrinsic::concat * M intrinsic::indexOf * M intrinsic::lastIndexOf * M intrinsic::localeCompare * M intrinsic::match * M intrinsic::parseJSON * M intrinsic::replace * M intrinsic::search * M intrinsic::slice * M intrinsic::split * M intrinsic::substring * M intrinsic::toLowerCase * M intrinsic::toLocaleLowerCase * M intrinsic::toUpperCase * M intrinsic::toLocaleUpperCase * M intrinsic::trim C Boolean Ms Boolean Ms meta::invoke Vs length Mp toString * Mp toJSONString Mp valueOf * M intrinsic::toString * M intrinsic::toJSONString * M intrinsic::valueOf + C __ES4__::boolean * Ms boolean * Ms meta::invoke * Vs length * M intrinsic::toString * M intrinsic::toJSONString * M intrinsic::valueOf C Number Ms Number Ms meta::invoke Vs length Vs MAX_VALUE Vs MIN_VALUE Vs NaN Vs NEGATIVE_INFINITY Vs POSITIVE_INFINITY Mp toString Mp toLocaleString * Mp toJSONString Mp valueOf Mp toFixed Mp toExponential Mp toPrecision M intrinsic::toString M intrinsic::toLocaleString * M intrinsic::toJSONString M intrinsic::valueOf M intrinsic::toFixed M intrinsic::toExponential M intrinsic::toPrecision * C __ES4__::byte Ms meta::invoke Vs length Vs MAX_VALUE Vs MIN_VALUE * C __ES4__::int * Ms int * Ms meta::invoke * Vs length * Vs MAX_VALUE * Vs MIN_VALUE * M intrinsic::toString * M intrinsic::toLocaleString * M intrinsic::toJSONString * M intrinsic::valueOf * M intrinsic::toFixed * M intrinsic::toExponential * M intrinsic::toPrecision * C __ES4__::uint * Ms uint * Ms meta::invoke * Vs length * Vs MAX_VALUE * Vs MIN_VALUE * M intrinsic::toString * M intrinsic::toLocaleString * M intrinsic::toJSONString * M intrinsic::valueOf * M intrinsic::toFixed * M intrinsic::toExponential * M intrinsic::toPrecision + C __ES4__::double * Ms double * Ms meta::invoke * Vs length * Vs MAX_VALUE * Vs MIN_VALUE * Vs NaN * Vs NEGATIVE_INFINITY * Vs POSITIVE_INFINITY * Vs E * Vs LN10 * Vs LN2 * Vs LOG2E * Vs LOG10E * Vs PI * Vs SQRT1_2 * Vs SQRT2 * M intrinsic::toString * M intrinsic::toLocaleString * M intrinsic::toJSONString * M intrinsic::valueOf * M intrinsic::toFixed * M intrinsic::toExponential * M intrinsic::toPrecision * C __ES4__::decimal * Ms int * Ms meta::invoke * Vs length * Vs MAX_VALUE * Vs MIN_VALUE * Vs NaN * Vs NEGATIVE_INFINITY * Vs POSITIVE_INFINITY * Vs E * Vs LN10 * Vs LN2 * Vs LOG2E * Vs LOG10E * Vs PI * Vs SQRT1_2 * Vs SQRT2 * M intrinsic::toString * M intrinsic::toLocaleString * M intrinsic::toJSONString * M intrinsic::valueOf * M intrinsic::toFixed * M intrinsic::toExponential * M intrinsic::toPrecision C Date Ms Date Ms meta::invoke * Ms intrinsic::parse * Ms intrinsic::UTC Ms now Vs parse Vs UTC Vs length Mp toString Mp toDateString Mp toTimeString Mp toLocaleString Mp toLocaleDateString Mp toLocaleTimeString Mp toUTCString * Mp toISOString * Mp toJSONString Mp valueOf Mp nanoAge Mp getTime Mp getFullYear Mp getUTCFullYear Mp getMonth Mp getUTCMonth Mp getDate Mp getUTCDate Mp getDay Mp getUTCDay Mp getHours Mp getUTCHours Mp getMinutes Mp getUTCMinutes Mp getSeconds Mp getUTCSeconds Mp getMilliseconds Mp getUTCMilliseconds Mp getTimezoneOffset Mp setTime Mp setMilliseconds Mp setUTCMilliseconds Mp setSeconds Mp setUTCSeconds Mp setMinutes Mp setUTCMinutes Mp setHours Mp setUTCHours Mp setDate Mp setUTCDate Mp setMonth Mp setUTCMonth Mp setFullYear Mp setUTCFullYear * M intrinsic::nanoAge * M intrinsic::toString * M intrinsic::toDateString * M intrinsic::toTimeString * M intrinsic::toLocaleString * M intrinsic::toLocaleDateString * M intrinsic::toLocaleTimeString * M intrinsic::toUTCString * M intrinsic::toISOString * M intrinsic::toJSONString * M intrinsic::valueOf * M intrinsic::getTime * M intrinsic::getFullYear * M intrinsic::getUTCFullYear * M intrinsic::getMonth * M intrinsic::getUTCMonth * M intrinsic::getDate * M intrinsic::getUTCDate * M intrinsic::getDay * M intrinsic::getUTCDay * M intrinsic::getHours * M intrinsic::getUTCHours * M intrinsic::getMinutes * M intrinsic::getUTCMinutes * M intrinsic::getSeconds * M intrinsic::getUTCSeconds * M intrinsic::getMilliseconds * M intrinsic::getUTCMilliseconds * M intrinsic::getTimezoneOffset * M intrinsic::setTime * M intrinsic::setMilliseconds * M intrinsic::setUTCMilliseconds * M intrinsic::setSeconds * M intrinsic::setUTCSeconds * M intrinsic::setMinutes * M intrinsic::setUTCMinutes * M intrinsic::setHours * M intrinsic::setUTCHours * M intrinsic::setDate * M intrinsic::setUTCDate * M intrinsic::setMonth * M intrinsic::setUTCMonth * M intrinsic::setFullYear * M intrinsic::setUTCFullYear * M get time * M get year * M get month * M get UTCMonth * M get date * M get UTCDate * M get day * M get UTCDay * M get hours * M get UTCHours * M get minutes * M get UTCMinutes * M get seconds * M get UTCSeconds * M get milliseconds * M get UTCMilliseconds * M set time * M set year * M set fullYear * M set UTCFullYear * M set month * M set UTCMonth * M set date * M set UTCDate * M set hours * M set UTCHours * M set minutes * M set UTCMinutes * M set seconds * M set UTCSeconds * M set milliseconds * M set UTCMilliseconds C RegExp Ms RegExp Ms meta::invoke Vs length Mp toString Mp exec Mp test * M meta::invoke * M intrinsic::toString * M intrinsic::exec * M intrinsic::test V source V global V ignoreCase V multiline * V extended * V sticky V lastIndex C Error Ms Error Ms meta::invoke Vs length V name V message C EvalError extends Error Ms EvalError Ms meta::invoke Vs length C RangeError extends Error Ms RangeError Ms meta::invoke Vs length C ReferenceError extends Error Ms ReferenceError Ms meta::invoke Vs length C SyntaxError extends Error Ms SyntaxError Ms meta::invoke Vs length C TypeError extends Error Ms TypeError Ms meta::invoke Vs length C URIError extends Error Ms URIError Ms meta::invoke Vs length * C __ES4__::EncodingError extends Error [for JSON] * Ms EncodingError * Ms meta::invoke * Vs length * C __ES4__::Name * Ms Name * Ms meta::invoke * Mp toString * Mp valueOf * M intrinsic::toString * M intrinsic::ValueOf * V qualifier * V identifier * C __ES4__::Namespace * Mp toString * M intrinsic::toString * C __ES4__::NamespaceSet [TBD -- small class] * C __ES4__::NamespaceSetList [TBD -- small class] * C __ES4__::Map.<K,V> * Ms Map * M intrinsic::size * M intrinsic::get * M intrinsic::put * M intrinsic::has * M intrinsic::remove * Mp size * Mp get * Mp put * M phas * Mp remove * M iterator::get * M iterator::getKeys * M iterator::getValues * M iterator::getItems * C __ES4__::Vector.<T> * Ms Vector * Ms meta::invoke * Vs length * Mp concat * Mp every * Mp filter * Mp forEach * Mp indexOf * Mp join * Mp lastIndexOf * Mp map * Mp pop * Mp push * Mp reverse * Mp shift * Mp slice * Mp some * Mp sort * Mp splice * Mp unshift * M get length * M set length * V fixed * M meta::get * M meta::set * M intrinsic::concat * M intrinsic::every * M intrinsic::filter * M intrinsic::forEach * M intrinsic::indexOf * M intrinsic::join * M intrinsic::lastIndexOf * M intrinsic::map * M intrinsic::pop * M intrinsic::push * M intrinsic::reverse * M intrinsic::shift * M intrinsic::slice * M intrinsic::some * M intrinsic::sort * M intrinsic::splice * M intrinsic::unshift * M iterator::get * M iterator::getKeys * M iterator::getValues * M iterator::getItems * C intrinsic::ControlInspector.<T> [may end up in reflect::] * Ms ControlInspector * M annotate * M getCurrentAnnotation * M getAnnotation * T __ES4__::AnyNumber * T __ES4__::AnyString * T __ES4__::AnyBoolean * T __ES4__::EnumerableId * I reflect::Type * M canConvertTo * M isSubtypeOf * I reflect::NominalType * M name * M superTypes * M [a few more here, TBD] * I reflect::InterfaceType * M implementedBy * I reflect::ClassType * M construct * I reflect::AnyType * I reflect::NullType * I reflect::UndefinedType * I reflect::UnionType * M fields * M members * I reflect::RecordType * M construct * I reflect::FunctionType * M boundThid * M argTypes * M defaultValues * M hasRestType * M returnType * I reflect::ArrayType * M fields * M members * I reflect::ParameterizedType * I reflect::Field * M name * M type * I reflect::FieldValue * M name * M value F eval F parseInt F parseFloat F isNaN F isFinite F decodeURI F decodeURIComponent F encodeURI F encodeURIComponent V Math V E V LN10 V LN2 V LOG2E V LOG10E V PI V SQRT1_2 V SQRT2 M acos M atan M atan2 M ceil M cos M exp M floor M log M max M min M pow M random M round M sin M sqrt M tan * M intrinsic::acos * M intrinsic::atan * M intrinsic::atan2 * M intrinsic::ceil * M intrinsic::cos * M intrinsic::exp * M intrinsic::floor * M intrinsic::log * M intrinsic::max * M intrinsic::min * M intrinsic::pow * M intrinsic::random * M intrinsic::round * M intrinsic::sin * M intrinsic::sqrt * M intrinsic::tan V NaN V Infinity V undefined * F intrinsic::eval * F intrinsic::parseInt * F intrinsic::parseFloat * F intrinsic::isNaN * F intrinsic::isFinite * F intrinsic::decodeURI * F intrinsic::decodeURIComponent * F intrinsic::encodeURI * F intrinsic::encodeURIComponent * V intrinsic::global * F reflect::typeOf > > I am willing to run the number on these if someone can help > me find the grammar and some sort of standard library index > in the spec. > > Regards, > Maciej > > _______________________________________________ > Es4-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es4-discuss > _______________________________________________ Es4-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es4-discuss
