Creates separate choices
I think that them being listed together does however muddle the value of the poll because you cannot tell how many Python and how many Ruby votes there are.
But again, I understand the logic behind their their association as I was someone who was first drawn to Ruby and then later to Python because of its proximity - I have since stuck with Python...
Check it out: http://clojure.org
It's the best intro to monad transformers I've come across.
An elegant, minimalistic and fast scripting language. It's like Javascript without all the cruft.
The only thing is lacking a little bit of OO design. It is duable, but OO on lua always feels a little bit hacky.
It was inspired by Lua (among others).
I think I had the most fun and frustration at the same time programming with Lua. I love the syntax and minimalism, yet I would have loved some more support for OO. Also, there is a lack of tools and libraries, which definitely hamper productivity.
The actor model is a very powerful conecpt. It will become more and more revelant as multiple cores, concurrency, and scalability become more and more important.
I think that Facebook successfully used Erlang for their chat system.
object.message(arg1, arg2) vs. [object messageOne:arg1 Two:arg2]
But now I'm really enjoying it and working at it full time.
That is time I could spend building out more productive libraries and architecture for my real goals.
All of my large-ish projects have been in either Java or Python (I've done smaller things in Ruby, Haskell, CL, Erlang, C, C++ - I enjoy playing around with different languages). I love the conciseness of Python, but I always find myself either spending way too much time writing tests or hunting down bugs after simple refactorings. Java, on the other hand, is, as a language, misery incarnate, but there's something intensely satisfying about being able to just delete large chunks of code and have the compiler tell me exactly where the functionality those chunks provided needs to be replaced.
I had looked at Scala in the past, but always from the POV of learning functional programming. For the last week, though, I've just been treating it as a Java replacement, and I'm in love. It has the same feeling of liberation as the first time I really dug into Python (and is actually more expressive than Python in several cases I've come across), but I can use my slash-and-burn refactoring style without any hiccups.
It inherits the huge number of Java libraries out there, and it has a fantastic web framework (liftweb), an Erlang-style concurrency library that feels like a built-in part of the language, pattern-matching, etc. etc. People evaluating languages for new projects should really take a serious look into this one.
I voted Haskell, because their libraries are finally getting the language to a point where it is competitive. There's even a story about this on the front page today!
I haven't even heard of half of these, so I know what I'm doing the rest of the day.
Note: This is not to say I do not appreciate the value of learning different languages. It just seems to be an obsession to tally up as many different languages as possible instead of building new stuff with the languages you know.
I've been floating in high-level land for too long, feel like I need to get close(r) to the metal.
Having a book handy means I have something to turn to the next time I give it a go.
Smalltalk is radically different in a fundamental way when it comes to your relationship to source code and the dev environment. All your source code changes are in something like a transaction log. When you're programming, you're just manipulating the meta-level more or less directly. When you do get it, there's a "whoa!" experience. Better yet, persevere and "get it" then go back to something like iPython. You'll get a real perspective shift!
But being born and raised on the commandline, it's Smalltalk-the-Environment which causes me trouble. I often find myself wishing that I could just play with it like you would with, say, Ruby's irb. I find the conventions (having to highlight code and hit Ctrl-I to get it to run, and so on) quite off-putting. If I can get over that, I'm sure it'll be worth it, but it's a bit of a struggle.
If you want something like a command line, you can write it fairly easily. You could probably subclass it from the Workspace.
But why would you want to? Most Smalltalks have lots of context-aware goodness! If you are browsing on the class side, highlighting code and executing does it in the context of the class. If you are looking at an instance in the inspector, it does it in the context of that object instance! If you are in the debugger, writing and executing code does it in the context of that stack frame!
Those last two bits of context-awareness have been the environment where I have done some of my best debugging and coding in the past decade!
Command-line or highlight/right-click is only the medium. The message is the thing! Think of it as like adjusting to the controls of a new video game.
Fun fact: I've never heard of Q, MPI, and Cuda .. time to wiki em :)
It's more about expanding my mind than about picking up a tool, with a number of exceptions for my workhorse languages (which are constantly changing)
* Lisp (Interesting, recently bought pg's ACL)
* C (Would be useful at work, recently bought K&R)
* Obj-C (Have both an iPhone and a MBPro that would be neat to develop for)
I'm leaning towards C.[edit: list formatting]
C precedes C++ (and uses the same basic syntax) and C++ changes the paradigm to object oriented (but like C is statically typed and compiled). Ruby and Python are part of the same paradigm of dynamic, object oriented languages.
Virding is one of the original contributors of Erlang.
http://groups.google.com/group/erlang-questions/browse_threa...
Copied here:
I have finally released LFE, Lisp Flavoured Erlang, which is a lisp syntax front-end to the Erlang compiler. Code produced with it is compatible with "normal" Erlang code. The is an LFE-mode for Emacs and the lfe-mode.el file is include in the distribution. Most things seem to work but some things have not been done yet:
- The interpreter does handle recursive letrecs, binaries, receive or try. - There is no lisp shell. - Documentation!
Yet. The system will be updated as new features are added. This is the 1st release so there is much left to do.
I have include the existing documentation lfe_guide.txt in this mail. There are a number of LFE test files and a version of the LFE interpreter written in LFE as examples of code. There are also a number of issues which need to be decided for the next version and I have included a file lfe_issues.txt which describe them in this mail. Both files are in the distribution.
Note that while this this lisp has been inspired by Scheme (one of the issues) it is a NOT Scheme, it is Erlang with a lisp syntax and many nice lisp features. Not for that matter is it Common Lisp. In fact features of the Erlang engine mean that it is actually impossible to implement full Scheme of CL. No, they shouldn't be changed or added.
It was quite writing Erlang code in lisp and I could easily consider using a lisp syntax for Erlang. I suppose it depends where your preferences lye. It was also easy to get into the traditional lisp habit of using long names for everything which I personally think is not a Good Thing. Perhaps we should do AFE, Arc Flavoured Erlang, instead? Although I think they have gone too far and missed what makes programs easy to read.
Macros are very nice, and it is easy to generate LFE code, which is one of the benefits of lisp syntax.
LFE also shows that it would probably be possible to write other front-ends inspired by other languages, though why anyone should want to I don't know. Perhaps back to a real Prolog syntax again.
But in Erlang records and math are kinda broken, and we needed both. Hence, LFE.
Regardless, the answer (I believe) is, not at this time. But soon enough...
It's awesome. But, the shell is a little neutered, i.e. it breaks on (lambda (x) x)...hopefully that'll be fixed soon.
From the Recless project page:
http://code.google.com/p/recless/
Recless is a type inferring Erlang parse transform. Instead of writing these lines:
City = ((Project#project.owner)#person.address)#address.city,
NewProject =
Project#project{owner =
(Project#project.owner)#person{address =
((Project#project.owner)#person.address)#address{city =
'Boston'}}}.
it lets your write these lines: City = Project.owner.address.city,
NewProject = Project.owner.address.city = 'Boston'.Yes that's right. I regard it a programming language.
ducks ;)