ICFP 2001 Contest Results 101
Phil Bewig writes: "Results of the 2001
ICFP
Programming Contest (previously mentioned at SlashDot
here and
here) have been
announced.
First place is to a program in
Haskell,
second place is to a program in
Dylan,
and the judges' prize is to a
program
in Erlang.
The judges also named
third place
(ocaml)
and fourth place (C) entries that were not awarded prizes.
ICFP Programming Contest pages for prior years are available:
2000,
1999, and
1998."
The task (Score:4, Informative)
Haskell: the weasely friend language (Score:1)
-Eddie 'Lambda' Haskell
Haskell, eh? (Score:3, Interesting)
The same goes for Erlang as well, which just seems to be an Ericsson R&D effort. In fact the only application I've seen written in the outside world in Erlang was Eddie [sourceforge.net] and even that was an in-house Ericsson creation.
But then, the increase in languages has always confused me. When I was browsing through a bookstore one day I was amazed to see a book entitled 'REBOL for Dummies' - who, in their right mind, uses REBOL????
Re:Haskell, eh? (Score:1, Interesting)
Lots of people use rebol - it's actually quite a nice language, and the network-transparent desktop environment thing is cool, though it's probably destined to be a proof-of-concept footnote to mainstream history.
Re:Haskell, eh? (Score:5, Informative)
I really recommend that you do sit down with Haskell. IMO, the judges were correct in naming it language of choice for "discriminating hackers". It has:
With regard to your qualms about lack of use, I understand Ericsson have created their own functional language for in-house use (the name escapes me). Arguably, since we've all got oodles of processor power to spare, there's no reason not to use functional languages in the general applications sector, given their greater reliability.
If you want more info on Haskell, check out the official website [haskell.org] (especially the Ode to Haskell on the humour page, which should give you an idea as to the language's feature set ;)). There you will find interpreters, compilers and other tools for a variety of platforms (incl. Windows and Linux) as well as complete documentation.
Re:Haskell, eh? (Score:1)
Err, that would'nt be erlang by any chance
Re:Haskell, eh?-correction (Score:2, Informative)
> ensures that the vast majority of coding errors
> result in a type error (although it can take a
> little while to get used to Haskell's type system);
Yes, Haskell has a strong type system that finds many errors at compile-time. This is IMHO one of THE arguments why YOU(yes you) should use Haskell. It will make your programs better. But the type-system is not object-oriented. It uses type-classes to provide a way for overloading in the type-system. See this paper [bell-labs.com], for example.
BTW. Did you know that, because of this type system, Haskell programs cannot segfault.?
Re:Haskell, eh?-correction (Score:2)
Perl, Python, TCL, Scheme, REBOL, and Lisp can't "segfault" either, but they don't have such a type system. Haskell is a fine language, but much of its advocacy is misguided (as is much Linux advocacy).
Re:Haskell, eh?-correction (Score:1)
You missed the point. Obviously, C or C++ cannot segfault when run in an interpreter.
Re:Haskell, eh?-correction (Score:2)
And compiled Lisp and Scheme can't segfault either. What's your point?
Re:Haskell, eh?-correction (Score:1)
The same cannot be said about Perl, TCL, and C. They intentionally allow you to confuse strings with numbers with window handles with file descriptors with pointers. This is just asking for confusions and mistakes that are hard to trouble-shoot. A program written in such languages usually goes nuts and corrupts data without crashing; or by the time it crashes, it is no longer possible to identify the problem by looking at core dumps. This happens to many a student: the C program segfaults at malloc, and it is because of a memory corruption in a function that has returned several hundred steps ago. And this is just a 200-line toy program for a school assignment.
My take at the issue is not whether the program crashes or not, but how much damage it has done before it crashes and how quickly I can identify the problem. It is from the perspectives of damage control and diagnosis.
I personally prefer static typing, though I accept dynamic typing as equally useful and possibly easier to work with. But I reject weak typing. If your Perl script doesn't crash, you'd better pray that it isn't pulling your leg.
Re:Haskell, eh? (Score:1)
Re:Haskell, eh? (Score:1)
robustness applications. Theres a tough learning curve, but once you are there its difficult to go back to procedural programming
Haskell? yuck. (Score:1, Interesting)
It is completely alien to those people who are used to C/Perl/Java/Basic type languages, it is obsessively recursive (which scares a lot of people).
It also by default uses whitespace to determine nesting, and HUGS (the compiler we use) gives error messages that look like garbage: complaining about unexpected brackets when there are no brackets in the whole program (the brackets are implied by the whitespace).
The combination of an eccentric compiler and the fact that Functional languages are 'alien' makes most of us hate Haskel and most 'Hackers' would rather shoot themselves or use Visual Basic than use Haskel.
BUT if you can cope with recursion (which you should) and are willing to forget a lot about 'normal languages' and learn functional languages, (HUGS is fine too once you get used to it and is free so its unfair to complain), then Haskel can produce beautiful simple concise programs and 5% of the course love it (those that know how to use it - you might even call them software engineers [not hackers]).
-I should be working but I doubt my license is valid.
Re:Haskell, eh? (Score:1)
Re:Slashcode? (Score:2)
ICFP not a programming language comparison (Score:5, Insightful)
Before everyone runs out and says "Haskell is the best programming language", as seemed to happen with things like OCaml in the past, please bear in mind that the ICFP tasks are somewhat biased toward functional languages. It is principally a contest for functional programmers, after all. This year's task, in particular, seems to be particularly suited to the built-in features of many such languages -- more so, perhaps, than things like the ray tracer task in the past.
It's to the credit of the coders that they produce such impressive results so fast, and it'll certainly be interesting reading when the full details are out. But let's not try to read too much into it this time, OK? Haskell is not suddenly a million times better than OCaml was last year, just because OCaml doesn't feature in the top list this time around. Functional programming still may not be the best approach for writing low-level instrument control code or operating systems.
So, before the millions of posts start arriving, I make a small plea: don't treat this as an objective (no pun intended) programming language comparison!
Re:ICFP not a programming language comparison (Score:2)
Forth certainly has a lot in common with functional langauges.
Functional/declarative langauges are great where bug-free precision is required because you specify what the results *are* rather than the steps required to produce the result. I'd feel much more comfortable with my mission-critical stuff written in Haskell than C/C++.
Re:ICFP not a programming language comparison (Score:5, Interesting)
That's a fair point. Playing devil's advocate somewhat, I'll contend that a purely functional paradigm can be more awkward for certain types of job than a procedural language such as C. Note the number of "functional" languages that now offer heavyweight extensions beyond strict lambda calculus style functionality as a result. In those extensions is found extra power, but also some of the risks present in the other languages.
Being slightly more objective, I agree that for a 0% bug rate, C and C++ are not the solution (and I am a professional C++ programmer, so I have no axe to grind here). The catch is that most (not quite all) real-world programs can tolerate a 0.01% bug rate instead, and that can be reasonably achieved by a competent programmer in non-functional languages as well. At that point, the correctness argument loses a lot of its weight, and you have to consider many other factors as well. Like I said before, which language is most useful often depends deeply on the context in which it will be used.
Re:ICFP not a programming language comparison (Score:1)
Re:ICFP not a programming language comparison (Score:3, Interesting)
Interestingly, I *used* to think that pure functional languges were inconvenient, particularly for stuff like IO and user interfaces.
I have now changed my opinion after investigating a concept called "Monads". These are seriously cool, they are an abstract data type that effectively descibes an "operation". They basically allow you to capture procedural/OOP type concepts of state, communication etc. in a purely functional manner.
Techniques like this may be the key to achieving the best of both functional and procedural/OOP worlds. You get all the accuracy and development speed advantages of functional languages, but gain the ability to manipulate state and interact with the world in a procedural style.
Extremely cool, though it's a tricky concept probably best left to computer scientists and the more hardcore coders....
Re:ICFP not a programming language comparison (Score:1)
If only this were true. We've all seen here on
Re:ICFP not a programming language comparison (Score:1)
Yes.
That was a serious comment.
The USRobtoics Effect (Score:2)
Being slightly more objective, I agree that for a 0% bug rate, C and C++ are not the solution
This reminds me of how things were in tech support. Everybody thought USRobotics modems were bad. So did I until I heard that USR had a *huge* chunk of the modem market. Then I realized that the only reason we dealt with so many crappy USR modems is simply that there were so *many* USR modems.
Same thing applies here. There is a lot of crappy C and C++ because there is so much of it. Let Haskell, OCaml or any of these functional languages become dominant in the industry, and we will see just how crappy they can be.
Re:The USRobtoics Effect (Score:1)
There are no pointers. No segfaults, no pointer arithmetic, no array out of bounds.
It's strongly typed, so most bugs just don't compile in the first place.
It's a pure functional language with no side effects, which means that functions are nicely compartmentalised and can't mess with global variables, or indeed affect anything else in the program other than their return value. This is also great for testing.
There are no mutable variables (though you can simulate them with Monads if you like). This avoids a lot of bugs since it encourages you to write in a style where you're not trying to keep track of a load of changing variables.
You implement looping and control constructs with lists and/or recursion, which tends to avoid bugs with boundary conditions. Also leads to some impressively compact code.
You get lots of reusability through polymorphism and first-class functions, which means you're not endlessly rewriting similar code (and invariably forgetting to update one instance...).
Haskell uses Lazy evaluation, which means that things don't get calculated until they are needed. This allows amusing tricks like using infinite sized data structures:
ones = 1 : ones
(defines an infinite list of ones)
or:
numsfrom x = x : numsfrom (x+1)
positiveintegers = numsfrom 0
naturals = numsfrom 1
(all positive integers and naturals)
Numbers are arbitrary length integers, so no problem with data type size.
Programs are written as declarations, so it is usually easier to spot logic errors. Check out the Haskell and C implementations of Quicksort for example.
Basically, I reckon that if everyone coded in Haskell or some other functional language, there genuinely would be less coding errors, for quite a lot of concrete reasons as listed above. This goes quite a long way to explaining why the functional languages do so well in contests like the ICFP.
Re:ICFP not a programming language comparison (Score:1)
--
Onorio Catenacci
Re:ICFP not a programming language comparison (Score:1)
People will never get this. It's much like fat people getting exercise machines: if every time they watched an infomercial they'd just get on the floor and do sit ups and push ups for a half hour they'd be good to go. (ok maybe some aerobic too).
Re:ICFP not a programming language comparison (Score:3, Insightful)
Boy, you sound nervous! If this were the "Object-oriented programming language contest," and C++ and Python and Eiffel won, I wonder if you wouldn't be saying just the opposite.
No one (at least, no one associated with the contest) is saying this is an objective comparison of programming languages or that the winners are the best programming languages for any and all purposes. Indeed, the prize-winners' appelations ("language for discriminating hackers") are so laughable, no one in his right mind would take it seriously.
This contest is about having fun, taking pride in your favorite language, giving a few kudos where they are deserved, and a little bit of advocacy for a class of programming languages that are overlooked by the programmer community at large. It's not a pissing contest.
BTW, what is an "objective" language comparison anyway? I am a programming language researcher, and I can think of a few theoretical ways to compare programming languages, but I would think that most programmers-in-the-trenches would be more satisfied with tests that compare languages on real life problems, and these contest problems are not far off from that. So what are you so unhappy about?
Re:ICFP not a programming language comparison (Score:1)
No, I wouldn't.
Sadly, numerous people on /. do take these things as if they were a sudden divine indication of The Way To Go. Just look at any of the past threads on the subject; try OCaml as a keyword in a search. They are absolutely littered with silly language advocacy. I hoped that by getting this comment in early on this thread, we could avoid that this time around and stick to the interesting, factual discussion.
In real terms, there's probably no such thing.
Re:ICFP not a programming language comparison (Score:1)
So, before the millions of posts start arriving, I make a small plea: don't treat this as an objective (no pun intended) programming language comparison!
I don't think many are running out shouting "Haskell is the best programming language". Or that functional languages are great for everything ... However for the 4th time in a row, they did extremely well, on a fun and non-obvious programming task. Usually, *some* people claim functional languages are slow or hard to program with, or only useful for toy programs: to some extent the contests proved the contrary.
I don't agree that the contest favored functional languages at all : the first one (1998) clearly didn't (how many chess or go programs are written in functional languages ?). This one didn't ; it was actually a document/optimization processing contest: it actually favored intelligence, and clever algorithms. Maybe such algorithms can be better be expressed in functional languages ?
Don't treat this as an objective (no pun intended) programming language comparison!
It isn't, but do you have more objective programming language comparisons ?
Re:Sampling (Score:1)
Re:ICFP not a programming language comparison (Score:2)
A serious C++ entry, for example, would be from a team headed by Bjarne Strousrup.
Re:ICFP not a programming language comparison (Score:2)
A serious C++ entry, for example, would be from a team headed by Bjarne Strousrup.
There is probably a little validity to this, but I don't think it's the whole story.
First, there are a lot more entries (171 this year) than there are languages used, so not *everyone* can be the designer of their language.
It probably is a slight advantage to be the designer or implementor of the language just because that means that you're probably pretty familar with it. You also get to be able to fix any compiler or library bugs that you find during the contest, but that applies to anyone using an Open Source compiler, not just the original author. We didn't make any changes to the Dylan compiler during this contest but we did note a couple of performance problems in the standard library when it was abused with huge inputs, and we'll be fixing those soon.
It's obviously not *necessary* to be the implementor of the language. The winning team (Haskell Carrots) didn't invent Haskell. The guy who wrote "Beamer" (which looked as if it might win until it failed on some later test files) certainly didn't design C++. And none of the Dylan Hackers invented Dylan. We weren't even the brilliant people at CMU who wrote the compiler we're using -- we're just running as hard as we can to prevent bitrot and make a few small enhancements to it.
For myself, I'm probably far more expert in C++ and Java than I am in Dylan (my current job is taking a 400,000 line Windows program written in C++ by a couple of Russian guys and figuring out how to port it to Mac and Linux) but I know enough Dylan to know that it's the far better language. It's far faster to write in, far simpler than C++ while still offering all the power, and it can generate extremely fast programs.
Some languages do have a reputation for requiring a PhD in order to understand them. I've tried writing programs in OCaml and Haskell and something about them just doesn't sit well with me. And I read the Haskell Carrots' scientific-paper writeup and my head spins about twice per paragraph. Did they really think about all that stuff during the 72 hours? We Dylan Hackers couldn't think of any "literature" to consult for algorithms, and didn't write any proofs -- I guess we were too busy hacking
Another factor is that with a language that doesn't yet have many users it's far more likely that it will be the language designer using it. Who else is there? Languages such as Dylan, Erlang and OCaml are virtually unknown among the general programming community, not because they are bad languages but just because they are new and they don't have Sun's or Microsoft's billions of $$ behind them -- and those companies design and use programming languages as political weapons rather than as the best programming languages they can be.
Even if you still believe that this is really "a battle of top notch programmers" rather than a contest of languages, I think it's still pretty interesting to see what languages top programmers choose to use. Aren't they likely to choose pretty good languages?
Re:ICFP not a programming language comparison (Score:1)
For the record, the ICFP problems can hardly be said to be tailored to FPLs, although there probably is some truth in the suggestion that you get a higher proportion of docs/post-docs using them (lo! another hint!)
Re:ICFP not a programming language comparison (Score:1)
I'm sure it would inject great vigor in 4th generation language research. They need all the help they can to bring them away from traditionnaly functional problems.
And it would make me happy. I hate waiting the whole year to see my favorite constest come back.
Re:ICFP not a programming language comparison (Score:1)
Re:ICFP not a programming language comparison (Score:1)
I would attempt maybe the acm programming constest were more imperative. Of particular notice, the problems where the best pure-functional code is provably less efficient (in the big-O sence, and they exists). Those problem will tend to have massive non-local garbage collecting going on and/or degenerative lazy-hunks allocations patterns.
Re:ICFP not a programming language comparison (Score:1)
Do you think language researchers sit around thinking, "Hmm, today I will add yet another obscure and utility-free aspect to my carefully-constructed-to-be-useless language"?
These languages are designed for universal utility and/or to do research into better ways to solve problems faced by contemporary programmers working with C/C++/Java/... They are not niche languages.
It would be so nice if people would go and try these things out for real before spouting this sort of utility-divide crap.
Re:ICFP not a programming language comparison (Score:1)
>TAILORED FOR DECLARATIVE LANGUAGES!
I refused to judge of the declarativeness of the challenges for fear of exposing my own bias. I would say though the orginizers are doing a might good job at comming up with cool challenges.
>Do you think language researchers sit around
>thinking, "Hmm, today I will add yet another
>obscure and utility-free aspect to my carefully
>constructed-to-be-useless language"?
>These languages are designed for universal
>utility and/or to do research into better ways to
>solve problems faced by contemporary programmers
>working with C/C++/Java/... They are not niche
>languages.
Well, I've seen alot of mislead language-design going on. I saw many preaching : "computers are getting faster so we can affort our language to be slow". It's sad to see how many languages failed because of this premise; Java is certainly surfering from it everyday.
This, along with other pervasive misconceptions, the need to create niche languages to explore particular aspect of languages design, and just the raw fact that's it's pretty hard to grow a languages to full general usefulness; With all that, alot of languages don't make it, sadly enough.
Anyway, do you have more examples of non-niche aspiring 4th generations languages? I'm somewhat familliar with the efforts of Ocaml and Haskell. Their aspiration as non-niche multi-paradims languages is fresh, difficult and brave.
Re:ICFP not a programming language comparison (Score:2)
The Ray-Tracer was, I think. (Score:2)
Almost all of the C/C++ entries were disqualified for crashing or being buggy!
At least for last year's task, I believe this was a fair language comparison in terms of developer productivity.
(Of course, I am biased. 9th place, woo hoo!)
Re:ICFP not a programming language comparison (Score:2)
OCaml didn't happen to win this year, but there were a number of OCaml programs in the top 20 or 30 (out of 170) entries. It's still a great language and one that I admire a lot (but I still prefer Dylan...)
please bear in mind that the ICFP tasks are somewhat biased toward functional languages
In what way? I don't think that's true. With this year's task, for example, with a suitable amount of brains and understanding of the problem it turns out that you could write an *extremely* good entry quite simply in C -- using a technique called "Dynamic Programming" you could read the input and find its length (call it N), create an NxN array, and write a fairly simple 3-deep loop to iterate over the table to fill it in. I guggest you go and look at Tom Rokicki [rokicki.com]'s excellent page to see how. If he'd got it finished in the 72 hours then he would have won the contest.
Of course that's the thing. He didn't get finished in time, which is the whole point of the contest. Tom was prototyping in Perl and then rewriting into C for speed. With Dylan we didn't need to do that. We could prototype in Dylan without worrying about declarations and types and fiddly things, and then when we found some part was too slow we could stay within Dylan and add a few declarations where they were most needed, rather than having to totally rewrite the program. That's the strength (by design) of Dylan.
Dynamic programming (Score:1)
contest.
More than one entry implemented dynamic programming: Rokicki's,
Sawicki's, and our winning entry. (We call dynamic programming "CYK
parsing", but as we explain in section 3.2 of our write-up, they are
the same thing.) Dynamic programming by itself is not enough, because
the algorithm takes time cubic in the input length, and with large
inputs it takes too long. Some "end-game" approximation technique is
therefore necessary. Rokicki didn't finish in time with his coding,
but Sawicki did put together dynamic programming with a simple
end-game technique. His entry placed 15th in your unofficial rankings
and did not officially qualify for the final round.
What made the difference between our entry and Sawicki's entry seems
to be the approximation techniques our entries used. Our technique
simplifies of techniques known to work in the parsing literature. We
couldn't have thought of what we implemented without the help of this
literature.
The bottom line: The programming language may matter (the essence of
dynamic programming is 10 lines of beautiful Haskell), but what is
more important is understanding the problem, relating it to existing
research, and taking advantage of previous work.
Re:Dynamic programming (Score:1)
I thought about using dynamic programming for solving the problem, but rejected it quickly because I saw the cubic growth, and wasn't aware of the literature on solving the problem. Hats off to you.
Still, our code runs five times faster than yours
Dylan links (Score:2, Informative)
Functional Objects [fun-o.com], Inc. sells Functional Developer, their Dylan implementation, for Windows and soon for Linux.
Re:Dylan links (Score:1)
Re:Dylan links (Score:1)
Re:Dylan links (Score:2)
I don't know why that particular link was used by whoever submitted the story. There are certainly more appropriate ones.
Dylan started out around 1990 at Apple's Advanced Technology Group, which wanted a single language that would meet all the needs of different groups then using Common Lisp, Smalltalk and C++. Apple worked closely with people at Harlequin (who were selling Lisp and ML development systems and consulting services as well as a popular PostScript RIP) and Carnegie Mellon University (who do major programming language research, and produced the Open Source CMUCL compiler for Lisp).
The three groups agreed on a spec and started implementing compilers for Windows (Harlequin), Macintosh (Apple) and Un*x (CMU).
The subsequent history is sad.
Apple started making big losses in its core business and cancelled projects and products all over: Dylan, Newton, OpenDoc... The Dylan group managed to get out an alpha-quality version and Apple sold it very cheaply ($30) for a while. Very very cool stuff, but still buggy
The CMU "Gwydion" project lost some funding and changed direction a little, and stopped Dylan development. Fortunately, they released their work to the public domain and we "Dylan Hackers" have been able to pick it up and (too slowly
Harlequin hit some financial problems and were acquired by someone who wanted their PostScript technology. The language implementations were I think mostly closed down, but the Dylan team managed to get the rights to their work and formed a new company, Functional Objects, to continue it.
Does anyone know if the Dylan language is being actively developed by anyone?
Functional Objects has a very nice Windows IDE. Since getting the rights from Harlequin they have put out a 2.0 (and 2.01) version on Windows and just this month they have started an alpha test program for a Linux command-line compiler.
The open-source Gwydion Dylan is being actively improved, with a significant new release being issued roughly every six months over the last three years (hmm
We're very pleased that Gwydion Dylan has recently become a standard package in the FreeBSD and Debian GNU/Linux distributions.
So, in summary: Yes, Dylan is being actively developed, by more than one group.
KenShan and Vampires? (Score:2)
It's often said that genius and eccentricity often go hand-in-hand, I'm just not sure what's in the photo. Dare I say it's a vampire bat feeding off the 2001 ICFP Contest Winner's arm? Anyone else know?
Someone has got to get an interview with this guy for slashdot!
Re:KenShan and Vampires? (Score:1)
Anyway, it seems that KenShan is also the writer of a superb multiplexing output Perl module [cpan.org].
Different ways of scoring (Score:3, Informative)
Just found this interesting analysis [hoult.org] by the captain of the highly-placed Dylan Hackers entry. He uses his own sensible-sounding criteria for rating the entries, obviously somewhat different from the real judges', but not so far off in final results. It makes for an interesting alternative perspective.
BTW, after I earlier posted that this shouldn't be taken as a fair comparison between programming languages, this information shows exactly why. The top entry is written in C++, and didn't figure in the "big five" mentioned by the judges of the real contest. In other words, the languages coming out on top change significantly, based on two different, but both reasonable, methods of ranking the entries.
Re:Different ways of scoring (Score:2, Insightful)
You neglect to mention the significant fact that the ranking on that page only takes into account the first round results.
Re:Different ways of scoring (Score:2, Informative)
Re:Different ways of scoring (Score:1)
Re:Different ways of scoring (Score:1)
Re:Different ways of scoring (Score:2)
Thanks for that.
BTW, after I earlier posted that this shouldn't be taken as a fair comparison between programming languages, this information shows exactly why. The top entry is written in C++, and didn't figure in the "big five" mentioned by the judges of the real contest. In other words, the languages coming out on top change significantly, based on two different, but both reasonable, methods of ranking the entries.
I'd been wondering what happened to "Beamer" myself, but it seems that it crashed&burned on several later input files by using too much VM and going into swapping and never terminating. A pity, because it was obviously a great effort, but it's those little correctness details that make or break an entry in a contest like this.
On the correctness topic, it's interesting that both our programs and the winning Haskell Carrots entry failed on the empty input file and the <PL></PL;> test. In the case of the Haskell program they had a shell script to catch the crash and output a fallback solution (the original input). I refuse to do such things as a matter of principle -- I think you should be able to handle it within your program itself. Both Dylan and Haskell (and OCaml, and others...) are supposed to be "safe" languages that can never segfault. Do we believe our own propaganda, or not?
So, these inputs caused an "array index out of bounds" exception in some part of our code that was making unwarranted assumptions about the input (that it actually contained at least one printable character!), and this exception was safely caught by a handler in the main program.
Re:Different ways of scoring (Score:1)
Dylan (Score:4, Informative)
For example, Dylan's syntax is based on whitespace; so identifiers are permitted to contain most characters except whitespace and punctuation. (The downside, of course, is that you must type spaces around most operators. However, any character can be escaped with \, and you can even reuse reserved words this way.)
This flexibility gives you a lot of freedom. For example, the official convention uses dashes to separate words; methods/functions that return a boolean value ends with ?; globals are surrounded by asterisks; and types are surrounded by angle brackets. So a method may be named is-camera-on?(), a global may named *game-clients*, and a class may be named <socket-server>.
Dylan provides other small, but distinctive, features. For example, it supports per-file metadata: Any source file can start with an RFC 822-like header, which you'd typically use for version, author, copyright, license and documentation data.
Of course, I haven't even started on the language features. Dylan has an interesting, elegant object model. It has explicit support for "slots", analogous to Delphi's class properties: data members whose access is delegated to accessor methods. It has explicit support for singletons and generic programming. It has multiple inheritance. It has garbage collection, type safety, a modern module system, etc. Dylan is usually compiled, but can be interpreted. Its extremely dynamic nature means that method dispatching and "smart linking" can be a complex affair; this is a weak link, and at least for Functional Developer [http] (formerly Harlequin Dylan), program efficiency is dependent on the compiler being able to do "whole program" analysis.
However, I would hesitate to call it a functional programming language. According to the Dylan reference manual [indiana.edu], "Dylan is a general-purpose high-level programming language, designed for use both in application and systems programming". It is a structured programming language belonging to the same paradigm as C++ and Java. There are clear signs of having been influenced by functional programming, though.
The name "Dylan" does not come from Bob or Thomas, but from the phrase "dynamic language".
For more information, I recommend the Functional Objects [http] site. They provide a Windows/Linux-based IDE and compiler for Dylan. The "Basic Edition" is free as in beer.
Re:Dylan (Score:2, Informative)
By this definition, Dylan is a functional langugage, it even supports currying, function composition and closures.
But Dylan isn't a purely functional language, like Haskell is, but supports a mixture of other paradigms. Also, Dylan has no parametric polymorphism. In this sense, it's close to Scheme.
And "Dylan" does come from Bob and Thomas, but Apple could never admit that, otherwise they would have lost quite some law suits.
Re:Dylan (Score:1)
BTW, I used to work at Harlequin and heard once that (back at Apple) Dylan used to be called "Ralph", after some guy on the project, until he left the project. Could be a complete fallacy, though -- can anyone confirm that former name?
Re:Dylan (Score:1)
They even had a prototype operating system for the Newton written in Dylan, but management decided against that.
Best language? (Score:1)
willing to point out that there is no best language, only the best language for certain use. While there is certainly truth in that, it's usualy used as a poor excuse to excuse using perl or some other monstrosity, and the people saying it would have no idea whether Haskell or Scheme or Eiffel or whatever would be much better than their use of C or perl on the theory "I think this is the best language for this use", when likely it is not at all.
Re:Best language? (Score:2)
I think the important areas for a langauge:
-Readability
-Development speed
-Run time performance
-Correctness (i.e. encouraging bug-free code)
-Popularity (availability of skilled coders)
-Portability (availability of platforms)
-Libraries (availability of ready-made toolkits)
-Conceptual fit with problem
Work out what you want for your project, prioritise the above and make your langauge selection on that basis.
I do often use Haskell (the winning language) myself, because it is pretty near the top in all except run-time performance (it's more than fast enough) and popularity (I'm a hobbyist, so don't care what anyone else uses)
Anybody active in both Dylan and Scheme? (Score:1)
I understand Scheme was a big influence in the design of Dylan.
Scheme was a huge influence... (Score:1)
You can map Dylan's constructs pretty much one-for-one to Scheme. The big difference between Scheme and Dylan is that Dylan is completely OO in design, and has an object system that is reminiscent of CLOS or Cecil's -- multimethods and generic functions. Perhaps as a result, Dylan also has a vastly larger standard library than Scheme does, though the SRFI process will with luck eventually alleviate this somewhat for Scheme.
Dylan also limits continuations compared to Scheme, so that they have a dynamic lifetime and can be only called once, so that code can be compiled to use a stack efficiently. (You can't code coroutines with Dylan's block() statement, so there's a separate threading standard to cope with this.) Like Scheme, Dylan also has a hygienic macro system, and this is used to implement most of Dylan's control structures, like loops, case, and select statements.
Re:Anybody active in both Dylan and Scheme? (Score:1)
Re:Anybody active in both Dylan and Scheme? (Score:1)
Basically you're right, Scheme had a lot of influence on Dylan. The original Dylan even had prefix notation as known from Scheme and Lisp, but that was changed to infix, because it was perceived that more people would prefer the syntax as it is.
Dylan adds some features not found in Scheme: hygienic macros, an object system inspired by Common Lisp, modules and libraries.
The object system is especially interesting: it is based on the generic function model of OO, as opposed to the message passing model most people know from Smalltalk, C++, Java, or perl. Basically objects don't "own" methods anymore, they are standalone. To select the right method (or "virtual function" in C++ lingo), all the parameters are looked at at runtime, not just the first one.
Re:judging criteria? (Score:1)
The elimination round results were posted shortly after the contest. Beamer was clearly the winner...
Maybe they couldn't take it?
The horror... the horror :)))
What happened to Beamer in C++? (Score:1)
Re:What happened to Beamer in C++? (Score:1)
It could also be that Beamer was eliminated due to bugs not turning up with the first few files. We will see when the judges publish the complete results.
Re:What happened to Beamer in C++? (Score:1)
Re:What happened to Beamer in C++? (Score:1)
I know it didn't get best results in all of the tests; our program was the best for one of them. =)
Maybe it was disqualified for crashing or producing incorrect results?
Love to see these languages outside of contests (Score:2)
Re:Love to see these languages outside of contests (Score:1)
And Dylan was designed with performance in mind, and it is able to compete with C in terms of speed.
Re:Love to see these languages outside of contests (Score:1)
Re:Love to see these languages outside of contests (Score:2)
While designers of better languages like to spread the word far and wide, it seems that people actually using them often regard their choice of language as a competitive advantage and try to keep it a secret.
An excellent example is described by Paul Graham [paulgraham.com] who got rich by writing what is now Yahoo! Store in Lisp but deliberately kept very quiet about that fact.
So if you notice that I'm suddenly not mentioning Dylan any more then you'll know what is happening
For those of us too late... (Score:2)
Editors, would it hurt to expand uncommon acronyms in stories?
Re:Erlang - in real use (Score:1)
9th place!! (Score:2)
SML rulez!!!!!@!!!
New page up (Score:1)