The Next Big Language
steve-yegge.blogspot.com
steve-yegge.blogspot.com
The submitter clearly pasted the correct URL and got a link to the original submission (1311 days ago) but went ahead and added "?" to the end of the url to fool the dup filter and submitted again. It is not even a case of two different urls to the same dynamically generated page!
I don't want to rush to accusation of karma whoring because maybe there is a value in reposting old article that some people might have not seen ... But something feels sub-optimal!
Maybe an automatic "best of this week in HN" page that shows the highest rated stories from a few years back that people can casually check for older interesting articles?
If the community agrees there is value in reposting old articles, maybe change the dupe detector to allow reposting old articles after N days. Since that would become part of the system (instead of working around it), it would become easier to link old and new submissions for example...
I just don't like it when one has to work against the system to do something if the community seems to feel that something is worth doing.
I'm glad this was posted. It was written four years ago (Feb. 2007), and his quote is, "[The NBL] is going to arrive very soon (timeline: 18-24 months ...)" He later gave away that he was thinking the NBL was to be server-side Javascript. You have to hand it to him; that was a great guess, even if the timeline was off.
That said, I miss his longer-form and more frequent posts too.
I used to work on this project. It's pretty rad from a tech standpoint.
After that, he started building a system for extending emacs with JS, named "ejacs". It never got fully baked, but the effort produced the very nice js2-mode. Details here: http://steve-yegge.blogspot.com/2008/11/ejacs-javascript-int...
So, I think NBL was just "Javascript". Awesome call. Despite the problems with the standards process, JS has exploded in popularity over the past three years.
I am currently in the middle of a 100k(not all mine) LOC embbeded Javascript project consisting of multiple files and it is rough going.
Eclipse IDE for JavaScript Web Developers is the crutch I am currently using, it feels better than most commercial packages I tried(Aptana, Komodo, etc.), but that is not saying much.
What I want most is the ability to reliably zoom in and out of functions, but the indexing over multiple files is quite shoddy.
The bad habits Javascript encourages make for frustrating reading of code (like where did that foo.bar just come from, if bar was not a property in the initial declaration of foo). Not everybody reads Crockford...
Until Javascript is feasible on larger projects, it will not be general purpose NBL.
Will there ever again be a single language that captures as much of the mindshare as any of the other big languages have in they heyday? C, C++, Java, even Visual Basic occupied a huge fraction of the developer community at their peak. Some of those may be rising still in eyeball hours per month, but definitely not rising in terms of total fraction of all programmer hours being spent.
Perhaps the future is really more about consolidation for virtual machines and compiler middleware, and proliferation of end user languages? Different strokes for different folks?
Today it's not unusual at all for a larger system to use a a mixture of Scala, Java, and Python, plus some Erlang via RabbitMQ or eJabberd or CouchDB, not to mention pulling in data sources from REST or RPC type sources. Do we see that kind of mixed bag of choices getting smaller in the future, or larger?
Maybe the future is diverging on technology choices at the end points, where applications are written, and converging under the covers, where the applications are compiled and executed.
Also, on a tangential note -- the garbage collection is a huge deal if an adoption of the NBL among C/++ programmers is considered. The only way is to have the garbage collection optional. Similarly to how D has it, but much much simpler. Something like adding new_gc operator (or a malloc_gc function) and to have two kinds of memory blocks - manually managed and garbage collected...
Anyway, it's just a thought from an old fart camp :)
malloc'ed item could be the same as malloc_gc'd, but with its reference count artificially bumped up by 1. free() would decrement the count and the item will be picked up by the GC later on. If there's a provision for an immediate disposal of unreferenced items, then we are back to the standard malloc/free behaviour in case when malloc and malloc_gc items are not mixed.
(edit) </sarcasm>
All those stuff and sure much more have to be done:
- performance of eval() (yes, I even don't know if this is ever possible)
- tools (great-eclipse-visual-studio-like IDE)
- Destructuring bind (e.g. x, y = returnTwoValues())
- Standard OOP with classes, instances, interfaces, polymorphism, etc.
- Visibility quantifiers (public/private/protected)
- Iterators and generators
- Namespaces and packages
- Operator overloading
- Static typing and duck typing
- Solid string and collection libraries
Does anyone know if ECMA Script is going to implement half of the stuff?
This will probably not happen, the general consensus is that eval is basically considered harmful and you should use new Fuction(argname, argname, argname, code) to do the same thing. ES5 strict mode places a number of restrictions on what eval can do.
tools (great-eclipse-visual-studio-like IDE)
This is tricky and less necessary for non-C/Java/C# languages but I assume you mostly mean code completion and minor refactorings. The mozilla JS team has a type inferencer for JS, which is the first step, but it's not particularly useful. I've been poking at this, so we'll see if I come up with anything. Someone will get to this at some point even if I don't actually manage to make anything useful. For integrated debugging, I know the cloud9 IDE (web based) has been messing with node.js/Chrome debugger integration but I haven't messed with it.
Destructuring bind (e.g. x, y = returnTwoValues())
http://wiki.ecmascript.org/doku.php?id=harmony:destructuring
Standard OOP with classes, instances, interfaces, polymorphism
http://wiki.ecmascript.org/doku.php?id=strawman:classes
Visibility quantifiers
access control via proxies: http://wiki.ecmascript.org/doku.php?id=harmony:proxies
Iterators and generators
Support available in Mozilla's implementation with the correct mime type. Brendan Eich wants to add them, but I can't find a harmony strawman for it (maybe it was accepted?). I do know yield is a reserved keyword in ES5 strict.
Namespaces and packages
Called modules: https://docs.google.com/Doc?id=dfgxb7gk_34gpk37z9v
Operator overloading
Not aware of anything.
Static typing and duck typing
Static typing is available in ActionScript3. Not aware of any efforts beyond this. I know there were proposals for type annotations in ES4 but I haven't heard much from ES5/Harmony in this area. I think most JS developers aren't particularly interested.
Solid string and collection libraries
Unlikely to be in the standard, look to implementations/userland libraries.
- Fix "this". Even people who know what they're doing screw it up.
- Make keywords not reserved unless the language actually uses them. I mean seriously.
- Namespaces / packages / something.
- A package manager, like CPAN / Rubygems / whatever.
- A good IDE (even a half-assed attempt at code completion) and a debugger. I happen to really like Dashcode, I think it would be good if it were more generic.
Everything else on your list is great, but I think it can wait until later, or it's really just a feature of the language (not all languages have Smalltalk-style OO and That's Okay). Iterators and generators it actually has; operator overloading is widely reviled so I don't think that'll be a barrier to adoption.
An example snippet: https://gist.github.com/783394
The implementation: http://lampsvn.epfl.ch/trac/scala/changeset/23993
http://www.indeed.com/jobtrends?q=F%23%2Cclojure%2Cscala&...
The (+), (+'), "=" and "==" thing has started to bother peeps
http://groups.google.com/group/clojure/browse_frm/thread/59a...
http://groups.google.com/group/clojure/browse_frm/thread/506...
http://www.indeed.com/jobtrends?q=F%23,clojure,scala,+C,+Jav...
But maybe this is just a result of comparing relative growth rates of job postings. If you take the time to a look at the percentage of matching job positions, then Scala is pretty dominant (compared to Clojure and F#) :D
BUT, I can't see Joe Public programmer adopting a functional language, even one as nice as F#
Similar to JVM languages, it can import C# libraries directly and allows you to effortlessly use all that's gravy about C# but in a much more Pythonic manner. It has static and dynamic binding, which you can turn on and off, and since it's on Mono, does not have a GIL.
I think it's definitely a language to consider in the future. It certainly has potential to become the NBL.
Honestly i don't know, nor does it matter. The language doesn't matter until the kill app gets built with it. Once that happens switch, i switched to Ruby in July 2004, because Rails was released.
What's Perl to do, then?
Seems odd to me to criticize a language for allowing people who haven't learned it to get things done, but there you go.
As an aside, RingoJS (successor to Helma) is a nice server-side Rhino JavaScript framework.
I use PyCharm and RubyMine a lot and they do a very good job of dealing with two dynamic languages. They are commercial products but fairly inexpensive.
Also, disappointing that the NBL will not have a Lisp-like syntax :-)
EDIT: I didn't notice this was a 4 year old article
You certainly wouldn't want that to happen - I hear they still program in Pearl there.