I'm curious if anyone has any experience with Io ( http://iolanguage.com/ ). The description sounds like an appealing combination: Its unusual, minimalist and yet elegant and powerful syntax reminds of Smalltalk, but the language goes far beyond that. Io is an object-oriented, prototype-based, message-based and fully-reflective programming language. This means that you use messages like in Smalltalk, you create objec…
I co-wrote (with Steve) SoundConverter for Windows: http://dekorte.com/projects/shareware/SoundConverter/ The interface talks to an Io "server" which handles business logic. We're currently working on a shopping aggregation startup. The crawler is written in Io. Pixar's RenderMan image tool uses Io as its scripting language: https://renderman.pixar.com/products/tools/it.html Io is still under development so you might…
Programming languages worth checking out
51–60 of 70 posts
Re: Programming languages worth checking out
#52Earlier quoted context omitted.
If Microsoft can work out a sane licensing arrangement for compute farms/clusters/clouds (whatever we're calling them this week) of Win 2008 Server, then F# is a game-changer of a similar scale to Google's MapReduce. That's a big if tho'. Having said that, Windows is cheaper than RHEL already...
I think I can see how MapReduce could be argued to be a "game-changer" (although I'm not sure it's true), but why F#? If I understand correctly, it's basically OCaml on the CLR. So you get a Python-like brevity of code (and ease of programming? maybe it has better error messages than OCaml?} with C# performance and access to the CLR libraries. That sure sounds useful, but why is it a "game-changer"?
Re: Programming languages worth checking out
#53Earlier quoted context omitted.
I think I can see how MapReduce could be argued to be a "game-changer" (although I'm not sure it's true), but why F#? If I understand correctly, it's basically OCaml on the CLR. So you get a Python-like brevity of code (and ease of programming? maybe it has better error messages than OCaml?} with C# performance and access to the CLR libraries. That sure sounds useful, but why is it a "game-changer"?
Because functional languages are a good choice for extracting as much parallelism as you can get from your algorithms.
CUDA yes. Cg yes. HLSL yes. Verilog yes. VHDL yes. C++ or Java with MapReduce yes. PHP and MySQL with memcached yes. Erlang yes — and it really is functional, inside each process, anyway — that is, the level where you aren't getting any parallelism. Octave or R, potentially, but not today, as far as I know. Mathematica yes, and it, too, is mostly functional.
In theory, side effects are what make parallelism hard, and so languages whose semantics are side-effect-free (unlike F# or Mathematica or Erlang) should make it easy. So we all thought in 1980. Since then we spent 20 years or so trying to make that happen, and it basically didn't work.
There are basically four kinds of parallelism within easy reach today. There's SIMD, like MMX, SSE, 3DNow, AltiVec, and the like; you'd think that data-parallel languages and libraries like Numpy and Octave would be all over this, but except for Mathematica, that doesn't seem to be happening. There's running imperative code on a bunch of tiny independent processors that share no data; AFAIK that's what the shader languages are doing. There's instruction-level parallelism on a superscalar processor, which largely benefits from things like contiguous arrays in memory, or maybe what Sun is doing with Niagara, where the processor pretends to be a bunch of tiny independent slow processors. And then there's splitting up your data across a shared-nothing cluster, which is how every high-traffic web site works, and that's what MapReduce makes simpler.
Uh, and then there's designing your own hardware or programming FPGAs, which is what Verilog and VHDL are for.
Languages like OCaml (I don't know anything about F# except that it's like OCaml, but for the CLR) have no special advantage for any of these scenarios. They don't even have the theoretical advantage that they have no side effects and therefore you can speculatively multithread them without breaking the language semantics. They do have the massive practical disadvantage, in most of the scenarios I described, of needing unpredictable amounts of memory, having massive libraries, and using pointers all over the place. Using pointers all over the place kills your locality of reference and your ILP. Having massive libraries and using unpredictable amounts of memory makes it impossible to run them inside your GPU and means they can't run on an FPGA (except by using external memory, like the awesome Reduceron). And nothing about the language semantics helps with SIMD either.
So, sheesh, go read Alan Bawden's dissertation or whatever, but don't go around claiming that ML (or even Haskell) is going to magically make your algorithms parallel. We tried that. It didn't work. We're trying something else now.
Re: Programming languages worth checking out
#54Earlier quoted context omitted.
Ah, I see you're the creator of Io. Do you know of any Io tools for Vim? Syntax and indent would be great if nothing else...Google didn't turn up anything.
No, Steve Dekorte is the creator of Io. I work with him on some projects (including Io). I'm not sure about vim. I use TextMate (there is an Io bundle).
Re: Programming languages worth checking out
#55Earlier quoted context omitted.
Because functional languages are a good choice for extracting as much parallelism as you can get from your algorithms.
No. CUDA yes. Cg yes. HLSL yes. Verilog yes. VHDL yes. C++ or Java with MapReduce yes. PHP and MySQL with memcached yes. Erlang yes — and it really is functional, inside each process, anyway — that is, the level where you aren't getting any parallelism . Octave or R, potentially, but not today, as far as I know. Mathematica yes, and it, too, is mostly functional. In theory, side effects are what make parallelism hard…
And please, PHP and MySQL? For computation? Are you serious?
Re: Programming languages worth checking out
#56Earlier quoted context omitted.
Because functional languages are a good choice for extracting as much parallelism as you can get from your algorithms.
No. CUDA yes. Cg yes. HLSL yes. Verilog yes. VHDL yes. C++ or Java with MapReduce yes. PHP and MySQL with memcached yes. Erlang yes — and it really is functional, inside each process, anyway — that is, the level where you aren't getting any parallelism . Octave or R, potentially, but not today, as far as I know. Mathematica yes, and it, too, is mostly functional. In theory, side effects are what make parallelism hard…
Re: Programming languages worth checking out
#57experimenting with lua this evening. be curious to hear if others have had good/bad experiences with it.
It also has tail-call optimization, closures, coroutines, and other aspects that are interesting from a pure CS standpoint, such as the way the table datatype is implemented and its register-based VM.
For a good taste of Lua, skim "The Implementation of Lua 5.0" (http://www.tecgraf.puc-rio.br/~lhf/ftp/doc/jucs05.pdf), the quick intro to Lua in the LPEG paper (http://www.inf.puc-rio.br/~roberto/lpeg/lpeg.html , around page 6 of the PDF), or _Programming in Lua_ (http://www.inf.puc-rio.br/~roberto/pil2/). The first edition of the latter is online, though the second edition has a bunch of added material, and IMHO is well-worth buying if you get into Lua. Also, check out LuaJIT (http://luajit.org/), if you're using i386 hardware -- it's a FAST JIT.
Re: Programming languages worth checking out
#58Earlier quoted context omitted.
Is it still being used at all? I would be interested in it, too (and I don't think Erlang is very similar to it at all???).
Erlang gets a lot of its syntax and implementation technology from Prolog, but it's true that the distinctive things about Erlang (massive shared-nothing concurrency, supervision trees, tuples, pattern-matching on binaries) have nothing in common with the distinctive things about Prolog (backtracking). They both have pattern-matching, but so do lots of other languages (even Python to a small extent). I'm pretty sure…
Re: Programming languages worth checking out
#59Earlier quoted context omitted.
No. CUDA yes. Cg yes. HLSL yes. Verilog yes. VHDL yes. C++ or Java with MapReduce yes. PHP and MySQL with memcached yes. Erlang yes — and it really is functional, inside each process, anyway — that is, the level where you aren't getting any parallelism . Octave or R, potentially, but not today, as far as I know. Mathematica yes, and it, too, is mostly functional. In theory, side effects are what make parallelism hard…
It's not that it magically makes thing parallel. It's that it puts the tools to do it in the hands of Joe Developer who has hankered to do functional programming in the "real world" and now can say to his manager, look, it's part of Visual Studio now, it's official, there's no reason I shouldn't do this. I am confused as to why you say OCaml/F# don't even have theoretical applications here - it it because the .NET li…
And please, PHP and MySQL? For computation? Are you serious?
What do you think people use PHP and MySQL for, fertilizing flowerpots? Computation is all they do! Obviously the PHP5 interpreter isn't the most computationally efficient medium in the world, but it's where it's at when it comes to horizontal web site scaling, i.e. parallelism.
Re: Programming languages worth checking out
#60Earlier quoted context omitted.
Erlang gets a lot of its syntax and implementation technology from Prolog, but it's true that the distinctive things about Erlang (massive shared-nothing concurrency, supervision trees, tuples, pattern-matching on binaries) have nothing in common with the distinctive things about Prolog (backtracking). They both have pattern-matching, but so do lots of other languages (even Python to a small extent). I'm pretty sure…
Wasn't Erlang originally implemented in Prolog?