Hacker News new | past | comments | ask | show | jobs | submit login
The next wave of programming languages (oreilly.com)
108 points by Anon84 on July 6, 2010 | hide | past | favorite | 85 comments



Programming language authors really need to learn how to make a website. Look at Ruby's: http://www.ruby-lang.org/en/

No long explanations about what it means for Ruby to be a dynamic, object-oriented language. I don't have to read its author's paper or book to get it. Just a short code snippet to show me what it looks like and several links so I can learn more.


Very much so. I don't get the (apparent) belief that code samples must be hidden at all costs.

If I'm looking at a language, I want to see what it looks like...


Only a small number of the language websites listed on the emerging langs camp site have any code on them, and that includes those with maybe just a couple of lines for an edge case scenario.

I guess a bunch of those languages are highly academic and the meat is in the implementation as opposed to the syntax. But language developers need to start putting some effort into the non-code parts of their projects. I'm not going to get inspired to pick up a new language by bullet points. At the same time, I'm working on my own language project so I know it can be challenging to use just the right code to give the best first impression.


Another good example: http://fantom.org/


Man that language is awesome - default nonnulable types, closures, mixins, static _and_ dynamic calls....

I am in love.


Although true, many of those authors are too busy with improving/fixing their compilers.

E.g. the D language doesn't have a very modern looking website atm., but someone has took the task to update it recently. It's not up yet since the community is trying it out.


The D language actually is an example of a good site, in that there's a large chunk of code on the front page.


True. The massive ammount of code examples on the D website is what got me interested in the language in the first place.


I think the 37signals guys had a go at fixing it up some, or am I mistaken?


Interesting languages not on the list:

* io : http://www.iolanguage.com

      Clean, minimalistic, prototype based OO.
* Reia : http://wiki.reia-lang.org

       Ruby-like syntax on Erlang's VM
* Curry : http://www-ps.informatik.uni-kiel.de/currywiki

      Functional logic language :  Prolog+Haskell.
* Oz/Mozart : http://www.mozart-oz.org

      Multi-multi paradigm language, includes constraint based programming.
Some of them are not necessarily up-and-coming but rather out-and-going. Oz is interesting, but it seems to be dying. Some like Reia are making slow progress. Curry is more of an academic language. io is probably the most up-and-coming so to speak.


Google Go looks interesting too.

http://code.google.com/p/go/

"Go is an expressive, concurrent, garbage-collected systems programming language."

Already in production on some internal projects.


Cobra (http://cobra-language.com/), a python derivative that also an up and coming language. Love the syntax refinements, the built in unit-testing, contracts, etc... all around a great language.


Reia is currently my wet dream language, similar to Ruby, and does concurrency(buit on top of BEAM for Christs sakes). And then you read the small print and learn that it's not available as a download. :<

Can't wait until it's ready though.


The repo is available at http://github.com/tarcieri/reia

Is it just too unusable right now?


Actually I havn't tried, I'm busy with work that does not in any way require Reia so I don't have time.

There's plenty of things I'd love to do with it when I've got time though.


Falcon (http://www.falconpl.org/) seems interesting too.


I'm curious, what interesting features does it have?


In that list, Clojure is the language that excites me the most. It's a modern, pragmatic Lisp ready for the multiprocessor world. You can do a lot worse than trying it out if you haven't already.


Lot of people claim that STM in Clojure is the big reason to use it. To me it's been a lot simpler:

a) I want some macros to use for JVM-based projects

b) I like using Emacs + SLIME (it's the best development environment, period).

Unfortunately the noise of Rails fanboys migrating to it with their usual laundry list of complaints ("no IDE support", "no good web framework") is annoying. I have nothing against Ruby in general (in fact I really like the language) and Rails in specific (I know people who love it), but the whole reduction of programming languages to merely web frameworks is a setback for software engineering. That mindset has now been spreading: not only is it impossible to hear about Ruby without "Rails" mentioned next to it, it's now common to hear "Python/Django" and "Scala/Lift".

Web is just a UI layer, a fairly mundane and boring part of an application. Lisp has very little to show for these sorts of applications, but has a lot to show for more science/engineering intensive ones. You hear all the time about webapps being re-written into PHP and other blub languages, but the community is interpreting it as a setback for the languages (and an argument in favour of using blub from the start) rather than the fact that advanced language features make really little difference for web development.


Are "Rails fanboys" really complaining about lack of IDE support? I was under the impression that IDEs weren't especially popular among Rails programmers (as compared to Vim and TextMate).


Yeah, I should probably have been less vitriolic and more refined. The IDE complaints mostly come from Java migrants and people who are looking out for the newbies. Honestly, using an IDE (or at the other extreme, vi) for a Lisp is like using Latin to write in Russian: you can do it, but you're better off if you take some time initially to learn Cyrillics.

(Doug Hoyte disagrees with me on the vi point, arguing in his book that Lisp is expressive enough not to require any editor support. I respectfully disagree.)


I don't think strlen is being accurate by saying its "Ruby fanboys" who are the source of a lot of criticism. Clojure does have a lot of former Java developers who aren't used to non-IDE development on the JVM. Others don't like the apparent complexity Emacs comes with (Emacs, Slime, Swank, Paredit? All I want to do is enter some ascii characters and run a compiler!) That said, I think Clojure is improving in those fronts with broader editor support, guides to getting Emacs set up, and a growing list of libraries.


I think there's at least one clojure plug-in for each of the main Java IDEs:

    Enclojure (NetBeans)
    Counterclockwise (Eclipse)
    La Clojure (JetBrains)
The other thing that has really improved immensely is "project management" (right term?) provided by Leiningen. Now you can basically do "lein new proj_name", then edit a simple config file in the created directory and do "lein deps" to get all the packages that you referenced.


Plus "lein swank," which once you've got slime set up is an absolute godsend. The two things I do first on a new machine are install clbuild to get slime and the emacs config, then leiningen to get clojure working. It does make things nice and simple.


"lein swank" is reason enough (for me) to use Clojure


Though whining is annoying, publicizing a gap - an unsatisfied need - can encourage someone to fill it. a problem is an opportunity

A web framework is still useful, even if many people assess a language purely in terms of it.


I was playing with Clojure this last weekend, and so far have enjoyed it. I ran through a dozen or so project euler problems, but am now looking for something that takes longer than 10 lines of code to complete.

HN, what other projects do you do to familiarize yourself with a new language?


I found going through "Introduction to Algorithms" and porting the algorithms in the book to <new language> a great way to get used to a new language.


Okasaki's _Purely Functional Data Structures_ can be a good choice, too - depends on the language.


Write a game. ASCII Tetris or Pac Man or Space Invaders would be fine. Whether that is a simple afternoon activity or a somewhat epic undertaking might tell you something about the language.


I've been writing a couple of small games with Clojure + Swing as a way of learning Clojure, and it's been very smooth so far. I haven't even touched concurrency or macros yet but the basic language feels even more consistent and logical than Ruby.


Read some of the Clojure code, both in main and in contrib.


The full list of speakers and languages:

    Rob Pike and Robert Griesemer – Go
    Steve Dekorte – Io
    Charles Nutter – Duby
    Matt MacLaurin – Kodu
    Gilad Bracha – Newspeak
    Jeremy Ashkenas – CoffeeScript
    Adam Chlipala – Ur
    Francisco Tolmasky – Objective-J
    Jonathan Shapiro – BitC
    Luke Hoban – F#
    Tav – PyPy
    Rich Hickey – Clojure
    Christopher Bertels – Fancy
    Jonathan Edwards – Coherence/Subtext
    Alex Eagle – Noop
    Slava Pestov – Factor
    Erik Meijer – C#
    Mark S Miller – E, Caja
    Brian Rice – Slate
    Walter Bright – D
    Wolfgang De Meuter and Tom Van Cutsem – AmbientTalk
    Phil Mercurio – Thyrd
    Melvin Smith – Cola
    Carson Gross – Gosu
    Alexander Fritze – Stratified JavaScript
    Alan Eliasen – Frink
    Dan Bornstein – Dalvik
    Steve Folta – Trylon
    Ola Bini – Ioke
    Amos Wenger  - ooc


The dynamic/compiled distinction needs to go away. Combine a simple syntax with very rapid compilation with LLVM, Type Inference, and very advanced emulator-based debugging, and there would be no need to have anything like Smalltalk/Perl/Python/Ruby any more. Instead of dynamic Duck Typing, you'd have Go's version, with auto-magic help from type inference. The emulator-based debugger could subsume many of the capabilities granted by a VM and enable the freewheeling runtime monkey-patching that can be leveraged for the same jaw-dropping ingenious debugging available in many current dynamic langs. This last component would be the hardest to implement.

(Cue the Haskell guys so they can point out how they're most of the way there already.)


The dynamic/compiled distinction needs to go away

dynamic / compiled are orthogonal.

CL is dynamic and gets compiled as you enter in the REPL.


Pretty much the same with Smalltalk, but people still make this distinction in their minds. That's part of my point. The distinction no longer even has so much basis in the actual organization of code and runtimes!


Dynamic/compiled should be orthogonal, but rarely have been in practice. Witness PHP, Perl, Ruby, Lua, Python.


It's time for it to be so in practice. The technology is way ahead of our cultural expectations.


Can you expand on this a bit?


You mean expand on the emulator-based debugger?


Concurrency should really be the number one issue for any new programming language. To my knowledge, none of the popular languages out there today are really able to handle concurrency in a seamless way which doesn't generate headaches for the developer. Distributing computation over threads and machines needs to be easier.


I found Kodu very interesting. It's a graphical programming language by Microsoft Labs, that allows kids to create games. It runs on the XBox and uses only the XBox controller.

The XBox part turned me off right away, because that's the last thing I need in my house while we're homeschooling our children, however, I found a free academic version that runs on the PC: http://fuse.microsoft.com/projects-kodu.html


Out of curiosity, why would having an XBox in your home be a problem? I was homeschooled (though only in high school) with several consoles in our house, and it doesn't seem to have been a problem. I wasn't allowed to goof off school time on video games any more than I could have played my Game Boy in a public school classroom.

edit: I suppose a more clear question would be: What is it specific to homeschooling that you don't like about the XBox? Or am I reading too much into your comment?


I'm trying to avoid constructing the school-time/video-game-time dichotomy because to do so would just mean I was a missionary for consumerism. Think about it: Why should I reinforce to my children, from an early age, that videos and such are fun and learning is not fun; consuming entertainment is what you want to do, and productive work is what you don't want to do, but rather have to do so you then can consume entertainment. That's just the type of people who the captains of industry hope I will introduce into the world: people who will obediently go work for them, only to turn around and consume their products.


Maybe I misunderstand, but surely Kodu is a fantastic advert for your ideas, and you should be welcoming it? Here's a fun thing to do that is learning and on a platform with which your kids' friends will be familiar.

I can understand that the balance between Halo 3 app types and Kodu app types is the wrong way around from your perspective, but the XBox does make it fairly cheap and simple to understand how the games are written and provides you with the chance to show your kids how the magic tricks are done, so to speak. I'd have thought that was a good thing :-)

Kudos on educating your kids on what you think is important though; I think it's great when people really think through education and put a lot of effort into it.


"Why should I reinforce to my children, from an early age, that videos and such are fun and learning is not fun; ..."

That's my question. By banning something with an iron fist, that is exactly the lesson you are teaching. You are putting video games into the same category as drain opener and power tools.

The lesson needed is that there is a time and place for everything, and that deliberate control and planning of activity is valuable. Self-control is learned by practice, not by having a helicopter parent prevent the opportunity to make the choice.

And anyway, planning and self-control are mainly driven by the maturation schedule of the brain. Before age 11 or so (in Caucasians), the frontal lobes simply are not active enough to accept much logic. After that age, the ability to plan and focus concentration develops almost automatically. (One school even did an experiment where math was not taught until that age. There did not appear to be significant bad effects.)

"These days, media is designed to be sticky and most media is driven by advertisements, ..."

You have confused cause with effect. Most content is appealing because people who make unappealing content go broke and stop making it. Survivor bias means that those who sing for their supper have a tendency to create content based on emotional appeal rather than abstract notions of value, and this is equally true for textbook authors, architects, and medieval bards.


Hey thanks for your comments. I though of the backlash that comes from denying something, as you say, with an iron fist. I intend to shape a culture in my home by addition of a bunch of activities which I feel will be beneficial, rather than simply subtracting video games and such.

As to me confusing cause with effect, I though of that too, and I think that the purveyors of media entertainment aren't simply providing what people want. Why do your crops die on Farmville if you don't log in for a few days? Is that what users want, for their crops to die?


I have a suspicion that "screen time" whether it be TV, videos or games, has a detrimental affect on: attention span, tranquility and susceptibility to advertisements and psychological mass-manipulation in general.


I suspect it matters very much what is on that screen. Music videos and action movies are practically designed for people with ADHD. Many video games are the same way.

On the other hand, there are some high quality documentaries and prerecorded college lecturers will not hav ethe issues you describe and as an avid (though very bad) GO player I personally feel that there is very little difference between playing on a screen and playing in front of a board.


Designed for, or designed to induce?


Let's stop throwing around the word ADHD. It encourages people who just don't have the discipline to focus to give themselves an excuse, while lessening the perception of the problems for people who are actually debilitated by it.

There's no media-driven conspiracy to alter your mind. There has been an evolutionary trend to favor the animal who could quickly notice the approaching bear versus the animal too intent on its task. Conversely, human evolution has needed intense concentration to drive innovation in things like tool development, construction, and art.

There's media that caters to both. WIth action-packed movies and games thriving on quick attention-shifting, and grinding-based MMO's relying on the ability of players to do repetitive tasks for hours on end.

One could give the same attention-reducing arguments against books and for oral stories. That said, you shouldn't just make a blanket statement against all screen media. Teach your kids how to discriminate between what's good for them and what's not.


"There's no media-driven conspiracy to alter your mind."

I think that's wrong. Forget whether it's a conspiracy or not; many things are effective conspiracies. These days, media is designed to be sticky and most media is driven by advertisements, the goal of which are to make you think you're not good enough unless you buy certian things.

Video is a think pipe directly into your brain, and I believe there is evidence to suggest that "screen time" does alter the way your mind functions.


Yes, me too.

Meanwhile, back in reality, my wife complains when I ask her to mute the booming commercials in the latest USA Network cop show.

Sadly, legislators are not specialized enough to grasp the notions of loudness and compression in commercials so they could be legislated out of existence.


Isn't that what this (http://www.opencongress.org/bill/110-h6209/show) bill is supposed to resolve?


why would a medium that requires concentration like video games have a detrimental affect on attention span?


I don't know how you're using the word "concentration" here, but playing an FPS (for example) usually demands that you pay attention to something new every few seconds, and definitely does not encourage lengthy focus or sustained thought. I think tends to be even more true for console games than games in general.

In any case, I doubt it's so much that video games are detrimental and more that you ought to have a hobby which actively cultivates concentration.


Maybe something like UT or CS, where it's all over in 3 minutes, that's true.

I remember being a kid and playing games like Tomb Raider where you would have to really think and work hard to unlock puzzles. Even games that offered you the opportunity to just fly through them usually had some form of deeper gameplay. For instance, SF Rush was all about things flashing by really fast, but the real challenge was to collect all the keys in the game, which often required a lot of innovative thinking about finding things to jump off.


The main difference here is between action and puzzle games. I personally disliked the pure puzzles because they felt too restrictive. Large-scale strategy games like simcity were a better fit for me. The same pattern shows up in my coding. I really don't like simple puzzles, but love challenges where I feel like I'm building something, not just solving it.


You know, that's a pretty good point. Most console games have some "completionist" aspects that usually encourage some degree of cleverness and persistence, if nothing else. I know that I always enjoyed that aspect when I was a kid, although I don't know if it's the prevailing mindset.


...says the person replying on an internet forum...



That's indeed very impressive. I hope they are recording and putting the videos online.


I've just sent them an email asking this question. Waiting for the reply..


Update: Just got the reply, there will be Video. Yay!


I'll be there to talk about the D programming language.


Interesting, I kinda liked D, but I heard about it years ago and assumed it had died in the meantime.

Good to hear it hasn't.

Edit: I seem to be unable to find the actual license of the digital mars compiler - does anybody know where it is?


Newspeak looks really fascinating. Relavent paper:

http://bracha.org/newspeak.pdf


Yeah, but that picture on the website doesn't really make me want to try it, benefits of the language nothwithstanding... :-(

(http://bracha.org/Site/Newspeak.html)


I hate to be critical, but I really wish programming languages would show code samples more prominently. I like how factor does it: http://factorcode.org/


Don't downvote him. He is absolutely right. The picture on that page is a major WTF and it doesn't offer a great first impression to the visitor interested in the language.


The copyright reads "Rachel Bracha". Probably a picture taken by his wife or daughter.

Terrible choice nevertheless.


I downvoted it because, whether he's right or not, the comment and resulting discussion of uncooked food isn't worth 8 points.


Downvote me all you want, but if I go to a web page and the first thing I see is dead chicken plastered onto a wall, I close that page.


You just made me look at that page. I was about to email it to a friend when I realized that newspeak's real home page doesn't have any dead chicken pictures: http://newspeaklanguage.org/


Better, (ok, so _much_ better) but it's still a barely-modified default wordpress template.


That's why I linked to the whitepaper, instead of the author's site's entry on the language. Other responses have linked to the project's main page.

Wondering why I got downvoted? Should I have vacuumed it into scribd?


I'm genuinely curious: what advantage accrues to a programming language designed for concurrency that you can't get with a good concurrency library for an existing language?


Syntactic support, immutability semantics, and compile-time limitations on side-effects.

Of course, it's POSSIBLE to do everything with a library + discipline. For example, I can import the Clojure jar and use Clojure's data structures and STM in a Java program. But it is _very_ verbose, and you have to know that certain variables are immutable, or that certain operations are illegal in certain places, etc, rather than having that information encoded into the language.


Immutable data structures are several times more useful if they're built-in to the language because all libraries assume you're using them.

There's no technical reason they couldn't be added on with a 3rd-party library, but it's really a cultural thing.


Safety. You can do anything in C, but the language/compiler can't help you at all. So languages with support for a feature can help you perform that task more easily and catch some errors for you. That applies to GC, concurrency, distribution, failure handling, and on and on.


Not much, really, the benefits of intrinsic support for concurrency in languages are very overhyped.

Java is a great illustration: it has syntactically close to no support for concurrency (synchronized, pretty much) but it has been able to keep up with today's concurrency challenges by the simple virtue of its libraries (java.util.concurrent is very, very powerful) and ingenuity of its developers.

The amount of concurrent Java that powers major web sites and other places that we don't even know of is simply staggering.


I think I'll stop reading HN and go do something useful!


I wonder why to Go guys aren't there.


They are: http://emerginglangs.com/speakers/

First one in the list :)


Clojure and D are the two languages of the newer wave that I'm most likely to end up using. They each have a combination of elegance and practicality which are pretty rare among new languages I think.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: