Spam detection software, running on the system "nibbler.dojotoolkit.com", has
identified this incoming email as possible spam. The original message
has been attached to this so you can view it (if it isn't spam) or label
similar future email. If you have any questions, see
postmaster for details.
Content preview: On Jul 6, 2009, at 7:23 PM, Mark S. Miller wrote: > On Mon,
Jul 6, 2009 at 6:10 PM, Alex Russell<[email protected]> > wrote: >>>>
The original "classes as sugar" sketch Mark did to general >>>> agreement
at >>>> Oslo >>>> included freezing the class object (constructor function)
*and* >>>> bind the >>>> class name as a const (neither writable nor
configurable
in the >>>> binding >>>> object or frame). >> >> This point disturbs me.
Making classes frozen solves no existing JS >> programmer problems, introduces
new restrictions with no mind paid >> to the >> current (useful) patterns
of WRT the prototype chain, and >> introduces the >> need for a const that
only seems there to make some weird security >> use-cases >> work. >> [...]
>> Questions of "integrity" here to my mind should be justified by why >>
they'll >> be good for ALL code, not just abuse of built-ins, and then
weighed
>> against >> other possible solutions. Freezing classes seems premature
to me. > > > For low integrity patterns (or "loosey goosey" as Allen sometimes
> says), JavaScript has always been and will remain a fine language. [...]
Content analysis details: (5.0 points, 5.0 required)
pts rule name description
---- ---------------------- --------------------------------------------------
0.1 RDNS_NONE Delivered to trusted network by a host with no rDNS
4.4 HELO_DYNAMIC_IPADDR2 Relay HELO'd using suspicious hostname (IP addr
2)
0.6 FH_HELO_EQ_D_D_D_D Helo is d-d-d-d
2.3 TVD_RCVD_IP TVD_RCVD_IP
-2.3 BAYES_00 BODY: Bayesian spam probability is 0 to 1%
[score: 0.0000]
--- Begin Message ---
On Jul 6, 2009, at 7:23 PM, Mark S. Miller wrote:
On Mon, Jul 6, 2009 at 6:10 PM, Alex Russell<[email protected]>
wrote:
The original "classes as sugar" sketch Mark did to general
agreement at
Oslo
included freezing the class object (constructor function) *and*
bind the
class name as a const (neither writable nor configurable in the
binding
object or frame).
This point disturbs me. Making classes frozen solves no existing JS
programmer problems, introduces new restrictions with no mind paid
to the
current (useful) patterns of WRT the prototype chain, and
introduces the
need for a const that only seems there to make some weird security
use-cases
work.
[...]
Questions of "integrity" here to my mind should be justified by why
they'll
be good for ALL code, not just abuse of built-ins, and then weighed
against
other possible solutions. Freezing classes seems premature to me.
For low integrity patterns (or "loosey goosey" as Allen sometimes
says), JavaScript has always been and will remain a fine language.
/me scrapes jaw from floor
JS may have many fine "loosey goosey" primities, but it's not a "fine"
language for dynamic programming (yet). It's only a plausibly OK
language that allows you to (at great expense) build your own tools up
from the (ample and useful) raw materials that populate the landscape.
It is not, however, simple to communicate the meaning of many of the
discovered patterns, use them to construct larger-scale constructs, or
treat them as a stable baseline from which to work.
Suggestions that JS is just fine for what people are using it for
today but insufficient to handle some laudible but unapproachable
class of tasks by dint of its looseness strike me a disingenuous. Why
should the "high integrity" programs get to annex the new keywords and
constructs for their own with little or no improvements to the main-
line tasks which have been so painfully executed for years?
Your null hypothesis is broken.
In
ES5 for the first time, it is possible to engage in high integrity
patterns; but it is not easy.
Welcome to the club!
We don't need syntactic sugar to provide
yet another way to express what can already be expressed easily.
Yes, yes we do.
In part we need them because "expressed easily" isn't the whole story.
It says "I, a person of above average means, can see a way through
this problem which can be communicated to others of above average
means who have trudged through the same semantic desert and arrived at
this shore with me". Blarg. What's being proposed is not an
improvement in the ability of JavaScript programmers to communicate to
other programmers (who may be in more of a hurry) as to what their
programs are supposed to mean.
If the point of introducing classes isn't to make the common case
easier, simpler to read, and more efficient....well, then I'm not sure
why everyone is spending so much time on this. There are plenty of
fine little research languages that can use the love.
It is
when something valuable becomes possible, but can't be made easy
without syntactic sugar -- like high integrity programming in ES5 --
that syntactic sugar may be justified.
Indeed! That does not imply a pre-judgement as to the relative merit,
programmer cost, or usability price for such sugar vs. other uses of
the language, though.
High-integrity is not the common case, so it deserves worse huffmann
codings. The (unadorned) word "class" should be reserved for efforts
that benefit the common case, while modifiers to it should indiciate
the special case. How 'bouts:
class(frozen) Foo {
}
Or for the syntax loving amongst us:
frozen class Foo {
}
New keyword? You bet. But this is something that's turned on by a new
mode to start with, right?
So no, it doesn't need to be justified for all code.
It's weighting sure does. You can't just duck the charge on this by
saying the feature is important. HOW important relative to other (more
popular) uses of the language matters.
More to the point, why does this problem need to be solved in the
language, anyway? Isn't it something that is more of a "platform"
issue...i.e., something we can be asking browsers to help us out with?
That, or we could bring Workers into the scope of the language and
expand the standard library in directions that it probably should go
anyway.
Not everything needs syntax. Not even everything new.
It just needs to
be justified by code that isn't well served by ES5 as it is. No one is
proposing removing JavaScript's support for making low integrity
programming easy.
As for whether high integrity is only of interest to security weirdos,
I did not call those with an interest in the security of the platform
weirdos. I suggested that with regards to the big problems that the
largest bodies of JS code face today, security barely makes the list.
Now, with regards to the web platform as a whole, I'll buy the
argument that it's both underserved and pressing. But not at the JS
language level.
I'll just remind everyone that the notion of objects [Simula,
Smalltalk, Actors] -- or similarly abstract data types [Clu] -- was
conceived from the beginning as: reusable packages of encapsulated
state together with the code responsible for maintaining that state's
invariants and presenting an abstract interface. That interface that
quickly came to be characterized in terms of pre-conditions and
post-conditions [Liskov].
Virtually none of the systems or literature that brought about this
revolution was concerned with security per se. These notions were
created for the sake of modularity, abstraction, and flexible
composability.
I support most of those goals = )
None of these concerns have gone away; hence the
frequent complaint that JavaScript today provides inadequate support
for serious large scale programming -- a need which classes-as-sugar
hopes to address.
There's no quarrel with "classes-as-sugar" from me. Only the
requirement that they be frozen by default.
Finally, I make no apology for being a security weirdo or for wanting
to see JavaScript become more securable.
Nor should you. As we discussed in person, I empathize with your
concerns and appreciate the approach you're taking.
JavaScript is uniquely
positioned as the fastest growing portion of many organizations'
attack surface; and often also their weakest link.
I reject that. I'll accept this, though:
Web applications are uniquely positioned
as the fastest growing portion of many
organizations' attack surface; and often
also their weakest link. JavaScript plays
a part in most compromises, but these are
enabled primarily by a lack of platform
awareness of ambient authority granted
to objects originated by naive domains.
Implicating JavaScript as a language in this situation seems unfair to
me when the original (and permeating) sins were committed elsewhere.
Further, I distrust language-level fixes for what is a platform
problem since they're hard to reason about and encourage too much fine-
grained coordination for my comfort.
Regards
This is a role for
which it was not designed and for which it has been ill suited. By the
same token, JavaScript is also uniquely positioned to capitalize on
prior work on programming language security. It's continued evolution
should indeed be shaped by the unique niche it occupies.
--
Cheers,
--MarkM
--- End Message ---
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss