--
Fabrizio Giudici - Java Architect, Project Manager
Tidalwave s.a.s. - "We make Java work. Everywhere."
java.net/blog/fabriziogiudici - www.tidalwave.it/people
Fabrizio...@tidalwave.it
To be fair, as a consultant you're probably generally working with
people who are slightly behind the curve. I bet Java 5 and earlier
come up for you too.
Read it... bah. In tutorials everything is simple and clear, if the writer is skilled. It seems that All The Problems Of The World lie in parentheses and semicolons. The real world is another thing. The validation of Scala, if it comes, won't be in tutorials. Critical mass and good ROI are very relative and still volatile at this point. While if I look at my situation I'd say that I won't find a single customer to whom I could sell my hypothetical skills in Scala (but maybe it's because since I don't know Scala I don't search for Scala customers; OTOH I seldom have to search for Java jobs, they come spontaneously), the point is another: I still find lots of things that I don't know that would give a much greater ROI if I spent some time in learning them.
--
You received this message because you are subscribed to the Google Groups "The Java Posse" group.
To post to this group, send email to java...@googlegroups.com.
To unsubscribe from this group, send email to javaposse+...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/javaposse?hl=en.
I was glad to see someone like Bruce express a similar sentiment. I'm
sure it wasn't intended to be a tutorial to Scala. It was merely akin
to similar blog posts comparing languages like Python to languages
like Java.
2011/6/12 Cédric Beust ♔ <ced...@beust.com>:
> --
> You received this message because you are subscribed to the Google Groups
> "The Java Posse" group.
> To post to this group, send email to java...@googlegroups.com.
> To unsubscribe from this group, send email to
> javaposse+...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/javaposse?hl=en.
>
--
Jeb Beich
http://www.jebbeich.com
On 06/13/2011 11:46 AM, Kevin Wright wrote:While others are "auxiliary" languages, which are focused on a specific scope and in the end one could live without them, Scala would be the primary one. As it has been already said, it's a powerful weapon. Powerful weapons are good for skilled people, self-destructive for others. This perfectly explains the dichotomy: Joe, Kevin, Mario and other skilled people that I know will do excellent things with Scala, giving it to masses would be a disaster. In a sense, it's not a pitfall of Scala itself: if the average project was decently managed, a powerful weapon could be properly managed and controlled. The reason for the huge success of Java in the industrial world is that it perfectly fits the average unmanaged project and, while perhaps sacrificing a bit of productivity, it contains damages (I wrote "contains", not "prevents from happening"). IMO, until this simple fact isn't well understood, we won't see any Next Big Language.
So what is it that people fear about Scala, when they're already so willing to move large chunks of logic into XML?
I find this a frightening view on the situation. Are we really more
poorly educated in programming than in other areas? More accurately
stated, are we really more poorly trained? (I suspect it is an
attempt to replace the later with the former that is the largest issue
here.)
I'm wondering why Scala is seen as being so "scary" from a risk perspective. After all, at the very core it's just another way of generating bytecode that comes with a support library.
But there's no doubting that many, many Java developers are looking
for something different, with some of the qualities that Bruce points
out. For me, after using the functional programming stuff in Python,
it was hard to go back to a language that didn't have it baked in. It
was something I genuinely missed on a daily basis. There are libraries
out there (FunctionalJava, FunctionalJ, etc) that help, but it's just
not the same.
Again, I agree with you that Java's a good language and working with
it is generally a pretty nice experience. But as good as it is,
there's nothing wrong with raising your standards and aiming higher.
2011/6/13 Cédric Beust ♔ <ced...@beust.com>:
I agree with this, but I think you understate just how much repetitive
"training" can actually help with producing creative items that are
ridiculously well done. Consider those carvings you linked, I
guarantee you the person that did those (and, ironically, the tomato
cuts) has done more than they can count. The technique isn't learned
in isolation, but by practice. (I think there are countless books and
such on this. Likely mostly horrible, but the point is I'm not trying
to be revolutionary here.) The outcome is highly creative with a lot
of skill, but the technique is likely very rigorous and was
strengthened by training.
That is, you can call them katas or whatever you want, but a short
assembly line constructing things in software could be used to train
skills.
Meh, I and the majority of people I encounter do feel that Java has
some rather annoying blemishes. For your analogy, it would be
replacing a 6 volt cordless power drill with either a corded or an 18
volt one with a clutch. The difference is staggering. Sure, you can
get by with the weaker one, but you'll likely make less mistakes if
you used the more powerful one.
We've entered the era of desktop multi-core, and computing power is now cheap enough that the world and its dog are now doing big data crunching. The paradigm has shifted and building materials have changed; it's time to give up the window putty and get with the double glazing.
> I still find lots of things that I don't know that wouldIn my opinion there is an enormous ROI in learning Scala. You're just
> give a much greater ROI if I spent some time in learning them.
looking for it in the wrong place. Let me make an easy example: why do
you spend so much time (I know you do) in configuring your building
tool?
Now consider Scala. You're right: none of your customer are asking for
it as much as none of them ask for a building tool or a test suite.
However, after I have been working with it for a few months, I can say
that in my experience the typical Scala program is more or less 3
times shorter than the equivalent Java one. In other words, by using
Scala you have to design, write, test, debug, refactor and maintain
only one third of the LOCs.
Don't you really see any ROI in it?
Another analogy could clarify (if necessary) my thoughts: just suppose
I could go to a car manufacturer and say I have a technology through
which he could build a given car with only 1,000 components instead of
the usual 3,000 ones. Don't you think he could be very interested in
it? I guess so and of course not because his customers asks for cars
with less components as possible (at least I didn't do that when I was
looking for my car), but because that gives him a big technical
advantage, by allowing to reduce the costs and the possibility of
defects and possibly to hit the market before of his competitors.
I'm curious on what are the examples you can think of that do this in
Java in ways that are easily scaled/maintained. I'm not saying you
are wrong, but I'm curious for some examples. (Also, remember that
JVM folks had to go out of their way considerably to speed up such
things as synchronized blocks to be virtually free because of how much
of java is written somewhat blindly to actual concurrency problems.)
> Languages that encourage immutability (which Scala doesn't, as we already
> discussed) or fancy actor-based frameworks are the way out of this mess
> (remains to be proven, and in the meantime, we have a lot of existing tools
> that are doing a fine job at that).
I agree with this to an extent. I think the way out are simpler to
read and logic about implementations of algorithms. I just happen to
think that immutable collections are often easier to logic about than
the mutable counterparts. I confess that my imperative habits often
trip me up.
Also, forget a reliance on actors or immutability. Going back to
Dijkstra's view on gotos "[we should do] our utmost best to shorten
the conceptual gap between the static program and the dynamic process,
to make the correspondence between the program (spread out in text
space) and the process (spread out in time) as trivial as possible," I
can't help but think continuations are going to be the "killer
feature" in the coming concurrency fun. (If I'm not mistaken, C# just
got them.)
> That's another fallacy that I'm planning to address in a future blog post.Java addresses it in a cumbersome, verbose, difficult to write well
> Well, two fallacies actually:
>
> - The "multi-core era" is a brand new phenomenon that we need to start
> addressing (it's not new and we've been addressing it for at least a decade
> in Java).
and to maintain way.
> - Languages that encourage immutability (which Scala doesn't, as we
> already discussed) or fancy actor-based frameworks are the way out of thisAll functional languages encourage immutability, and Scala isn't
> mess (remains to be proven, and in the meantime, we have a lot of existing
> tools that are doing a fine job at that).
different in that. Nevertheless Scala, being a multi-paradigm language
allows you even to take the "mutable way" if and when you need it.
That doesn't mean that Scala doesn't encourage immutability.
Mmmh, I thought we went over this already: Scala "the language" doesn't offer much more in terms of immutability than Java. Classes are mutable by default (you can even make case classes mutable if you want), variables are not "val" by default, methods can modify fields without any ceremony, etc...Mutable support in Scala comes much more from the libraries and developer discipline than the language itself (nothing wrong with that, by the way, it's one of the pragmatic aspects of Scala that I appreciate).
By using the awesome parallel
collections shipped with Scala 2.9, the only things you need to make
it run in parallel are to change the type of the list of words in the
constructor declaration in the first line:
1. class MnemonicsCoder(words: ParVector[String]) { ...
and add a ".par" in the 25th line:
25. splitPoint <- (1 to number.length).par
Scala is slower to compile because the compiler has more work to do,
because the programmer has less work to do.
That said, SBT does seem to make the difference in compile speed
disappear, though I haven't tried it in the large yet. I don't think
Scala has any pathological compile times (i.e., programs that take a
disproportionate amount of time or memory to compile), it's just a bit
slower than Java.
People are always bitching about maven too, but in general in #scala
we have more experience with maven than with SBT. If you went back 2
years you'd see a lot more moaning about maven, at least from me!
> All functional languages encourage immutability, and Scala isn't
> different in that.
Scala isn't functional. It's a hybrid. Saying it's functional
without mentioning the other half is like those adverts saying that an
oven costs <font size="infinitessimal">from</font> £200.
Most importantly, Scala gives you no way of visually or even
programmatically distinguishing functional from imperative code. But
then it probably couldn't while maintaining its excellent level of
Java interoperability.
> Also, forget a reliance on actors or immutability. Going back to
> Dijkstra's view on gotos "[we should do] our utmost best to shorten
> the conceptual gap between the static program and the dynamic process,
> to make the correspondence between the program (spread out in text
> space) and the process (spread out in time) as trivial as possible," I
> can't help but think continuations are going to be the "killer
> feature" in the coming concurrency fun. (If I'm not mistaken, C# just
> got them.)
Sweet Jesus, I think I need a syntax-highlighting email client to see
which parts of that were written by Dijkstra and which were written by
you! :)
Yeah, apologies on that. i had meant to redo it as a block quote but
hit send before retouching that section. :( Only part that is
relevant, I want to use continuations, badly. :)
On Mon, Jun 13, 2011 at 10:11 AM, Mario Fusco <mario...@gmail.com> wrote:> That's another fallacy that I'm planning to address in a future blog post.Java addresses it in a cumbersome, verbose, difficult to write well
> Well, two fallacies actually:
>
> - The "multi-core era" is a brand new phenomenon that we need to start
> addressing (it's not new and we've been addressing it for at least a decade
> in Java).
and to maintain way.That's subjective, and while I agree with you partially here, the same can be said for Scala code using actors or Akka.> - Languages that encourage immutability (which Scala doesn't, as we
> already discussed) or fancy actor-based frameworks are the way out of thisAll functional languages encourage immutability, and Scala isn't
> mess (remains to be proven, and in the meantime, we have a lot of existing
> tools that are doing a fine job at that).
different in that. Nevertheless Scala, being a multi-paradigm language
allows you even to take the "mutable way" if and when you need it.
That doesn't mean that Scala doesn't encourage immutability.No, but the fact remains that Scala doesn't intrinsically encourage immutability. Here is what I wrote a few months ago:Mmmh, I thought we went over this already: Scala "the language" doesn't offer much more in terms of immutability than Java. Classes are mutable by default (you can even make case classes mutable if you want), variables are not "val" by default, methods can modify fields without any ceremony, etc...Mutable support in Scala comes much more from the libraries and developer discipline than the language itself (nothing wrong with that, by the way, it's one of the pragmatic aspects of Scala that I appreciate).
By using the awesome parallel
collections shipped with Scala 2.9, the only things you need to make
it run in parallel are to change the type of the list of words in the
constructor declaration in the first line:
1. class MnemonicsCoder(words: ParVector[String]) { ...
and add a ".par" in the 25th line:
25. splitPoint <- (1 to number.length).parPersonally, I think that this claim is going to haunt Scala for many years.First of all, I've read the article that led to the parallelization effort and I think it's a brilliant piece that dives very deep in trying to isolate and identify how to make collections parallelizable. Very nice research work.Now: yes, adding ".par" will magically make your collection go parallel but I think people will soon start realizing that it takes much more than that to actually leverage parallelism, and in particular, they will learn the hard way that unless your data forms a group under the operation you pass, parallelism will not only "not work", it will actually return a different value every time.In other words, I have the feeling that there are very few cases where adding ".par" will provide a big performance boost, and I feel uneasy whenever I see this new feature being sold as such a silver bullet because there is no way it will live up to its expectations.
Right. I don't yet get to use Scala at work. :) I'm just making sure
they are considered when any of the concurrency stuff comes up. I
think they provide a ton more benefit than they are often given credit
for.
I'd be very curious to know exactly how consistent you are with marking even your method arguments as final, it's just oh-so-easy to leave out because it clutters up the code...
2011/6/13 Cédric Beust ♔ <ced...@beust.com>:
For what concerns Mario's points, I'm going to answer in a different
thread - in fact, I think we'd rather reason at a different level (thus
a different subject).
On 06/13/2011 07:58 PM, Cédric Beust ♔ wrote:For what concerns me, I declare final everything that I can. There must be less than five non final method arguments in several hundred thousands lines of code.
On Mon, Jun 13, 2011 at 10:49 AM, Kevin Wright <kev.lee...@gmail.com <mailto:kev.lee...@gmail.com>> wrote:
I'd be very curious to know exactly how consistent you are with
marking even your method arguments as final, it's just oh-so-easy
to leave out because it clutters up the code...
I hardly ever use final in my code, because the kind of immutability it enforces is not very useful in practice.
2011/6/13 Cédric Beust ♔ <ced...@beust.com>:
I've had this argument at work several times. We have a style guide
saying that you must make all parameters final. I'm not against it,
per se, but I do think it is silly to think that it prevents mistakes
in most places. (Now, fields, I'm all for making final and curse gwt
whenever I realize I have to stop doing so.)
Where i work, we dont use final on arguments but have checkstyle rules against reassigning method arguments
But static analysis can tell you that.
Optional static analysis is pretty hard to apply to a project
retrospectively. It's better if you can make invalid code fail
compilation.
Java isn't broken in the same way C isn't broken. It's more of a PITA
than it should be. It's unnecessarily clunky. But it's ubiquitous,
so that trumps any broken-ness.
I for one find it irritating coding in Java after spending some time
doing Ruby or Groovy. But fact is Java pays a lot better and is much
more widely used, so it's my main language.
2011/6/13 Cédric Beust ♔ <ced...@beust.com>:
> On Mon, Jun 13, 2011 at 2:46 AM, Kevin Wright <kev.lee...@gmail.com>
> wrote:
>>
>> I'm wondering why Scala is seen as being so "scary" from a risk
>> perspective. After all, at the very core it's just another way of
>> generating bytecode that comes with a support library.
>
> You are missing the point. It's not about being scared of Scala, it's about
> unwillingness to fix something that's not broken.
> Java is not broken. It has weaknesses, like most languages, but not only
> does it get an amazingly vast array of jobs done, most people who use it
> actually enjoy programming with it.
> You compare Java with a blunt knife but I think a more accurate metaphor
> would be trying to replace a perfectly working power drill with one that has
> more buttons and a different color.
> You can't have a revolution if nobody feels the need to pick up a pitch
> fork.
> --
> Cédric
> Java is not broken. It has weaknesses, like most languages, but not onlyJava isn't broken in the same way C isn't broken. It's more of a PITA
> does it get an amazingly vast array of jobs done, most people who use it
> actually enjoy programming with it.
than it should be. It's unnecessarily clunky. But it's ubiquitous,
so that trumps any broken-ness.
I for one find it irritating coding in Java after spending some time
doing Ruby or Groovy.
I've actually found that the majority of Java developers have never
touched another language. Those that have, I agree have likely done
C/C++, but they have been the minority for a while now. Seems that
those that switched from anything to Java are willing to switch away,
as well.
That's just depressing... While it may be impossible to mandate what's self taught, there really should be a good cross-section of paradigms covered in comp.sci courses for anyone who studies the subject formally.
Scheme, Haskell, Prolog, Erlang, Smalltalk & C all have something important and unique to offer here. With those under your belt, you'd be well equipped to handle any other language currently in production use.
Well, major caveat on this as it is just my observation. I'm
welcoming numbers showing I'm wrong. I just know that a lot of the
developers I work with shy away from even doing SQL.
> Scheme, Haskell, Prolog, Erlang, Smalltalk & C all have something important
> and unique to offer here. With those under your belt, you'd be well equipped
> to handle any other language currently in production use.
Also, I must confess that until recently I didn't have much experience
outside of Java. I've started trying to read up on a lot of topics in
the past few years and really take stock in some of the things I was
exposed to earlier, but never really used.
2011/6/13 Cédric Beust ♔ <ced...@beust.com>:
>
> This is precisely my point: Java annoys you because you have programmed in
> other higher level languages. Replace Ruby or Groovy with Scala, Fantom,
> Gosu or whatever your language of choice is.
> You need to realize that very, very few Java programmers have done that.
> Most of them come from a C/C++ background and for a growing number of
> developers, Java is the very first language they learned. Most of these
> people don't know much else beyond it.
> Also, don't make the mistake of thinking that all you need to do is expose
> them to another language and they will automatically start disliking Java.
> If the current trends I read today area any indication, there is at least as
> many people liking Scala as people who tried it and decided it wasn't for
> them. Groovy seems to be getting a bit more consistent positive reviews from
> Java developers, probably because it's more focused on addressing Java's
> weaknesses and sticking to that goal than Scala is.
> You will receive a lot less hostility from Java programmers about Java than
> you would asking C++ programmers about C++ ten or fifteen years ago (to be
> fair to C++; I am assuming the animosity toward C++ is even greater today
> than it was back then).
> --
> Cédric
>
So what triggered the mass adoption of Java?
2011/6/14 Cédric Beust ♔ <ced...@beust.com>:
2011/6/14 Cédric Beust ♔ <ced...@beust.com>:
+1 Garbage collection.
Matthew.
2011/6/14 Kevin Wright <kev.lee...@gmail.com>:
> +1 Garbage collection.
--
You received this message because you are subscribed to the Google Groups "The Java Posse" group.
To post to this group, send email to java...@googlegroups.com.
To unsubscribe from this group, send email to javaposse+...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/javaposse?hl=en.
Without garbage collection each object has an owner (or you have
memory leaks), so it's more obvious which 'direction' things are
supposed to flow in. For instance, in some code I've worked on, each
GUI object has a ControlSet, which is basically a copy of the model.
However, how ControlSets are delivered to those objects varies
immensely, and there are temporal dependencies, to the point where
actually supplying the thing at construction time instead of later
causes problems, and various parts of code actually rely on setting
the thing to null temporarily, etc. In short, it's a mess that I
managed to work with, but it resisted all refactoring I tried.
I still have some ideas, and access to the codebase, so I might have
another go just for fun..
I think without garbage collection, such a codebase would be so leaky
that it just wouldn't have been allowed to develop. I'm sure there
would have been other problems in place of that one though!
The key difference here is that there are clear technical reasons for favouring C over C++, C++ over Java or Java over Groovy. The arguments for using Java over Scala seem to be primarily social or political in nature.
--
Why scary?
so what do you think would trigger the next language to become
ubiquitous (a successful java.next)?
I'm fairly sure that java.next needs to have something compelling. A relatively small evolutionary step is not going to do the trick. If the C to java exodus is any indication, we should NOT actually be looking at language features / syntax, interestingly enough. What java had to offer at the language level was virtually nothing. It was explicitly designed to be like C, warts and all (that's the only explanation for postfix array brackets and the switch statement), but it did offer things C just couldn't offer at the time: Garbage Collection, a far more complete (and far more standard) standard library, write once run anywhere, and the promise of sandboxing (which I admit never quite panned out, but the promise was there). None of these things are language syntax related.
- Modularization (in all dimensions), built right into the language. A mix of OSGi (runtime modularization) and ivy/maven (build-time modularization), coupled with *NO* standard library (everything is a module available on the web, including the core libraries)
Fun, really. It should be more fun to write code in than Java is.
That means the runtime should start without noticeable delay, there
should be an interpreter installed by default, and the syntax should
be pleasant to read. To keep the sense of fun, it should be difficult
to get into difficulties with mutable values and threads, because it's
not a lot of fun to solve those problems. It should be difficult to
use the supplied APIs incorrectly, because working out what you did
wrong based on runtime errors isn't fun (I'm looking at you, Swing and
GWT).
<> brackets are not fun. C++'s templates, Java's generics and XML's..
XML show this quite clearly, so we don't need those.
Lambdas are fun, single-method anonymous classes are not. Type
inference is fun, repeating types everywhere is not.
A language that helps you as much as you want to get your types right
is fun, a language that delegates that to the runtime is not. Though
it is good to be able to selectively delegate that to the runtime as
you desire - sometimes you know (ahem!) code will work no matter what
the compiler says.
It should target fun platforms. The browser, Android, iPhone and
native are fun platforms for various reasons, the JVM and the CLR are
not. They're useful, but not fun.
So Java.next would have a syntax that is more expressive, more
powerful, but still approachable. And better, more pragmatic APIs. A
language where you wouldn't need Apache commons :)
Next, I think it should be a language that you can bend to your will
to a large extent (apparently Scala is a bit like this?). In addition
to DSLs, this would allow language features to be in effect added
without waiting for some JCP to approve it and build it out. The
language would evolve via idioms.
As mentioned before, it should start really fast.
It should support both compilation and interpretation. Interpretation
would come in handy for build tools and scripting tools. Isn't it
annoying having to write .bat files and .sh files to launch java apps?
And switch from your n
It should have a REPL. (how in 2011 can Java still not come with a REPL?)
I think you are on to something here. Java is definitely not fun.
It should have a REPL. (how in 2011 can Java still not come with a REPL?)
2011/6/15 Cédric Beust ♔ <ced...@beust.com>:
I find using the REPL in ruby and esp rails to be hugely useful. The
rails REPL launches with the same context as your application, so you
have instant access to database models, configuration, etc without the
hassle of any setup. Obviously, IDEs are better for certain things
such as debugging. But from Rails REPL I can achieve tasks much more
quickly than I could via an IDE setup. I want both - IDE and a REPL,
and an embedded REPL in my IDE.
Example:
pull in a User model from my database with ID 2:
ruby-1.9.2-p136 :002 > User.find(2)
=> [#<User id: 2, email: "du...@dummy.com", created_at: "2011-03-18
03:23:44", updated_at: "2011-06-15 01:52:51", device_token: nil,
badge_count: 0, notification_count: 2, perishable_token:
"Q59LiNwGDuhAbizdqibv">]
2011/6/15 Cédric Beust ♔ <ced...@beust.com>:
Assuming you have the IDE open and an appropriate project to hand.
Otherwise it is a matter of minutes.
> This is much, much more powerful than a REPL will ever able to offer you.
Common Lisp's REPL, and Erlang's, if I recall correctly, have full
debugging support available.
> Another reason why I think REPL's are not that useful is that most of the
> problems that I need to investigate require a full runtime environment to
> make sense. In other words, I usually need a breakpoint at a specific place
> and to run my application in order to set up the environment in a way that
> inspecting the code will make any sense. Again, a REPL is very limited for
> this and only useful for very trivial situations.
Sure, but those trivial situations crop up fairly often. You're in
Freenode's ##java, and can probably bear witness to the fact that
about 1 in 8 questions there are trivially answerable in fewer
characters than the question by using a REPL.
I'm a little confused. I make no claims that Scala invented this, but
aren't you just describing the presentation compiler and plugin nature
that it has? I think it was a little late to the game, but it does
exist now and is the reason the emacs environment is amazing. The
improvements with Eclipse have been from moving it to use this, if I'm
not mistaken.
It is also just plain fun when the algorithm you are implementing is
more visible in the code you are writing. Getting lost in the
language such that you can't see the algorithm you implemented is far
far from fun.
I still think askng what will be the next Java is the same as asking
what will be the next McDonalds. It isn't like the next one will
replace the old one. (I think by my own argument, one could already
say that there have been next Javas, unless you limit it to the JVM
maybe.)
I agree. My post-python life has been filled with this sort of
experimentation. I find myself frequently writing small functions and
wanting to simply prod at them. Firing up Eclipse or Netbeans
sometimes feels to heavy. I find that if I'm able to experiment with
what I'm building in the REPL, it's usually sort of a gauge of other
properties I'm after -- testability, for example.
> --
> You received this message because you are subscribed to the Google Groups "The Java Posse" group.
> To post to this group, send email to java...@googlegroups.com.
> To unsubscribe from this group, send email to javaposse+...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/javaposse?hl=en.
>
>
--
Jeb Beich
http://www.jebbeich.com
But there is an important lesson in Java's emergence: it succeeded not because it added more power but because it liberated programmers from tediousness.
- Modularization (in all dimensions), built right into the language. A mix of OSGi (runtime modularization) and ivy/maven (build-time modularization), coupled with *NO* standard library (everything is a module available on the web, including the core libraries)I think that would be a mistake. Standard libraries are critical for the initial success of a language. The initial libraries of Java were ridiculously bad, but the fact that they were shipped with the JDK empowered developers to prototype stuff right away and adopt a common vocabulary and patterns.