måndag, november 19, 2007

A new language

So, it's that time of the year again. The restlessness flows over me. I feel cold and numb. And no, it's not because I live in London - it's because I need the warmth of learning a new language.

Now, I want something I can actually get into and learn. I've tried to get into OCaml, but I gotta admit I hate the type system. I have no problem with bondage static typed languages (Haskell's type system is really nice, for example) but OCaml's really feels like half of it exists just to cover up holes in the other half. There seems to be a large overlap in functionality, and lots of workarounds for handling things that should be simple.

I'm half way into Erlang, but for several reasons the language feels very primitive.

I've kinda thought about maybe getting serious with Scala. I like many of the language features, it's a nicely designed language and so on. But - hear this, people - I would love to get away from the JVM for a while, just for the sake of it. I can do Scala later. I actually have a medium sized project lined up for my Scala learning. But not right now.

So, what do I want? Something I haven't touched before. I would love something that involves radically new language features, if there are any left to discover. I have no need for it to be static or dynamic specifically. Doesn't really matter. It would be fun if it's new, but if it's old, good and still in use in some sectors that would be fun too. Specifically something that's not mainly run on the JVM or CLR. And of course, not any of the "mainstream" languages, who I actually tend to know fairly well (and yeah, to my sorrow that includes the whole W-family...).

Please help me! Give this December new meaning for me. I promise, if someone comes up with a nice language to try out, I'll be very fair to it when I evaluate and learn it. =)

52 kommentarer:

Peter sa...

You should try out IO (iolanguage.com) or Forth sometime. They've been on my wishlist for a long time and look very promising.

Ola Bini sa...

Ah, yeah, Io is a really, really nice language. A shame I already know it quite well. =)

Forth could be an interesting exercise.

Marcel Molina sa...

Prolog?

Anonym sa...

D?

Ola Bini sa...

Prolog I know to well, thanks. =)

D is a better suggestion, though it gives the bad taste of C and C++ in my mouth. =)

Ola Bini sa...

I seem to be slightly picky.

Joshua Graham sa...

JoCaml (Join Calculus + OCaml) has been revived, on the same site as previously (http://jocaml.inria.fr/) and is performing very well in the Tim Bray Wide Finder project.

Maths, functions, concurrency, distribution. You know you want to.

F# possible, but a way to go yet.

schmidt sa...

Smalltalk, JavaScript - but I guess you already know them.

Self or Slate, which would be a mixture of the above.

Something with an X in front - XSLT, XQuery, although I'm not sure, if you can build a whole application with it.

Looks like you already got in touch with most of the well-known languages.

Matthew sa...

If you don't mind useless academic languages then you have a lot to chose from. A fun one from a few years ago is Aardappel:

http://strlen.com/aardappel/index.html

Also, you may want to consider raising the bar for what it means to be to know or be good with a given language. It may be the case that you're an expert Prolog, IO, Dylan, etc etc programmer. However, it's probably more likely the case that on any given language there's a ton more learning to be done. But this may not satisfy the Big Ideas I imagine you're seeking.

Programming directly in the lambda calculus can be very rewarding (obviously after you've written your own interpreter/compiler). Again, not entirely practical but potentially more eye opening than mere Lisp/Scheme implementation which I'm sure you're familiar with.

LeifJ sa...

If not for anything else, then for a laugh try Brainfuck

n7 sa...

Kogut is a serious, experimental programming language implemented by Polish programming languages expert, Marcin Kowalczyk. Have a look:
http://kokogut.sourceforge.net/faq.html

kevin sa...

Oz is next on my list. It seems to fit the bill for what your are asking for: http://www.mozart-oz.org/

Anonym sa...

How about lolcode? lol.

http://lolcode.com/

Anonym sa...

I second the Oz recommendation. We used it for an AI class in college.

Tuxie sa...

Eiffel, ADA, Rebol, Oz, SML, D or Dylan?

I think you should create an OSS implementation of Rebol. It's a cool language with a sucky license. To make it more challenging you can implement it in Shakespeare. :)

Brian Mitchell sa...

Given that you've looked at Io already, I would have to recommend Factor as another very interesting language. Other interesting languages I can think of:

- Lua (and extensions like metalua)
- nu (as in http://programming.nu/)
- Erlang (I know some things like strings are primitive but I urge you to get past that)

(trying to avoid listing all the classic languages like Lisps, Prolog, Smalltalk, etc..)

I guess it really comes down to what kind of projects you want to work on. Learning a new language without using it is like studying the theory of bicycle riding without actually trying it for yourself.

Paul J. Beel sa...
Den här kommentaren har tagits bort av skribenten.
Paul J. Beel sa...

Have a look at REBOL. They are currently working on a new version, so a lot of improvements are on the way.

http://www.rebol.com

Hubert Cumberdale sa...

Maybe ADA... If you like A.I. you'll like ADA.

But I'm in love with........... PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL PERL !!!!

Chris sa...

Factor does look interesting :
http://factorcode.org/

I'd also like to learn more R :
http://www.r-project.org/

Victor Rodriguez sa...

I will second those that have recommended Factor.

Factor is, IMHO, right up your alley: a concise, powerful language to which you can start contributing code right away.

Slava Pestov is a fine fellow too, and so are the other contributors, so you won't lack from stimulating conversation.

Best Regards,

Victor Rodriguez.

Patrick sa...

I will concur with Factor. The IRC channel is very active and the development environment is a real diamond in the rough.

Of course I have a soft spot for stack based languages, so your milage may vary.

pootytang sa...

K is fun...

Krzysiek sa...

Why not to take ANTLR and implement your own simple language?

Anonym sa...

You could always go old school and try assembly language. The Menuet people are showing that it really CAN make a huge difference with modern software.

Joshua Graham sa...

Yeah I looked at REBOL 10 years ago - being an Amiga nut, I'll have a go at anything Carl Sassenrath does. I loved the lack of statements and keywords.

Looks like it's come a long way, and it plays into the current meta-programming interest.

[Guru Meditation #00000007.4341524C]

(kudos to those who work out what the crash code means)

Anonym sa...

haXe. You mentioned a dislike of OCaml typing; haXe uses implicit types but 1. it's also a dynamic language, so you can ignore type restrictions at will, 2. the syntax is Javascript-like, and 3. the compiler targets and officially supports three different VMs for different supporting roles.

So there's a nice mix of features which I find sits really well with what I'm doing right now.

Anonym sa...

I have found SuperCollider to be a very elegant language that is often overlooked. It is primarily focused on audio, but is a very capable language in its own right.

http://supercollider.sf.net
http://audiosynth.com

Christian sa...

inform?

http://inform-fiction.org/I7/Welcome.html

first looks great

Mathias sa...

Ola, with your experience i think it is time for you to make your own language. Take the best from all the languages you know and make it a killer!

zak sa...

I'm sad to see noone suggested "Beta". It's been around since the 1980s or so. Fantastic and radical ideas in there. e.g. methods, constructors and classes are the samething (patterns), and its the least specific method being invoked first, rather than the least specific. Also you have better support for annonymous subclasses and quasi parrallelism...

Jonathan Parker sa...

If you have access to Visual Studio pro then try VPL (Visual Programming Language) which is part of MSRS (Microsoft Robotics Studio).
From what I've heard it's completely visual.

Anonym sa...

Could you create a language to replace regular expressions which is more readerble. RE are grait when you just wont to change a load of code in your editor/IDE but I dont find them very self documenting when used in production code.

Anonym sa...

Fortress?

Ravi sa...

J

ashishwave sa...

(i) take some/many exciting features from other languages ,
(ii) add it into ruby/jruby (preferably somehow at DSL or somehow like library/macro level OR even if it introduces some incompatibility with native (standard) ruby , then it doesn't matter much)
(iii) add your own experties in this area

and Voila! you have got your dream come true.

for example:
reactive programming like kanaputs
optional static types declaration in ruby
some features from C# 3.5 (linq and what not) and scala and prolog etc.

bye :-)
Ashish Ranjan
ashishwave@yahoo.com

Guillermo sa...

Have you tried pathological languages? Brainfuck and so on.

Check this blog:
http://scienceblogs.com/goodmath/goodmath/programming/pathological_programming/

Martin sa...

I've always been a big EIFFEL fan myself! Besides... Betrand Meyer (creator of Eiffel) has been an inspiration of mine since the 80's when he produced the seminal book on OOP entitled "Object Oriented Software Construction", and more or less gave birth to "Design By Contract".

Bill Six sa...

There are a few others that deal with concurrency in a different way:

E
erights.org
wikipedia

OpenCroquet
opencroquet.org
(while not a language, I personally like the idea of islands and replicated computation)

Anonym sa...

Some links regarding the Shakespear programming language mentioned earlier:

Homepage:
http://shakespearelang.sourceforge.net/report/shakespeare/shakespeare.html

Example program source:
http://shakespearelang.sourceforge.net/report/shakespeare/shakespeare.html#sec:primes

Anonym sa...

Excel:
-functional programming
-macro VBA
-Array Formulas
-database conductivity
-practical
-real world analytics
-com
-XLA addins
-extensible
-misunderstood

Rapha sa...

I'd second the vote for E. Some very cool ideas and approaches to concurrency.

The current main implementation is built on the JVM, but there are also incomplete versions in CL and C++.

Jorge L. Cangas sa...

Well. I suggest you an domain focused language: TXL (http://www.txl.ca). Is not a general language like Ruby or Java, but I found it very cool and "mind breaker" for their pourpouse :)

hgs sa...

Features: scanning instead of regexps;
goal directed execution (a bit like prolog) with all {statements, expressions} succeeding or failing; logical operators return right hand side on success so you can write x < y < z
and it makes sense. What am I talking about? Unicon http://unicon.sourceforge.net/
which came from Icon ,developed by the author of SNOBOL, Ralph Griswold.

Matti sa...

If you really want to try something different - learn how to program your gpu! It forces you to think differently about computation and it gives yous insight into superscalar architectures.
more info here: http://www.gpgpu.org/

Anonym sa...

I also second Rebol. It's an interesting language, although derivative (then again, so is Ruby, so there's nothing wrong with that). It's concise and the extreme focus on maximal features and simplicity with minimum bloat is quite refreshing, keeping sourcecode extremely small.

Meta-programming is catered for by extending the language with your own dialects.

The main runtime has excellent support for easy OS independent GUI construction through the VID dialect, rendered by the blazing AGG engine. The plans for VID3 include tighter style support to simplify maintenance on visuals.

While not truely Open Source, with the upcoming version 3 it's makers, Rebol Technologies, have opened up to community requests by Open Sourcing components, while keeping full control of the main language library to protect it from bloat and bifurcation.

Although this decision is seen as "too little, too late" by a minority of open source advocates, it's very understandable for Carl Sassenrath to try and keep the vision behind the language intact.

vseloved sa...

J

the_dormant sa...

a modern forth with a nice interface, Factor http://factorcode.org/. learn to program with a stack and higher order combinators .. (see joy too)

Oz (concurrent like erlang, functional , but also constraints -dataflow variables.-) runs on Emacs (weird environment).

J (APL? K Iverson, weird too)

Perl 6 (Pugs) multi paradigms ..

Beyond the language and the syntax, you'd better seek one which make you solve problems in different ways.

Coq (a proof assistant) is interesting too, it make you embed proofs in your code(google fingertree in coq), it has also dependent types, induction ..

Haskell is also a great language to spend time with ..

Steve sa...

Clean - home page

unless you've somehow neglected Common Lisp...

davidmathers sa...

Beta!

http://c2.com/cgi/wiki?BetaLanguage

Or gBeta:

http://www.daimi.au.dk/~eernst/gbeta/

Beta is the only object language I've found that calls object identity what it actually is in the human world: a pattern match.

I only discovered it a few weeks ago and haven't had time yet to dig deeper, unfortunately.

Kaveh Shahbazian sa...

As you know Lisp, take a look at Qi(http://en.wikipedia.org/wiki/Qi_(programming_language)).
From it's description on Wikipedia:
"It includes most of the features common to modern functional programming languages such as pattern-matching, currying, partial applications and (optional) static type checking. The combination of all these features within the Lisp environment makes Qi in many senses a rationalization and modernization of Lisp. Qi won its creator a Promising Invention Award from the State University of New York in 2003."

Anonym sa...

Recently I began attempting to learn a new language online, just to have something else to put on my CV, and I was amazed how many different types of language software there are available. In the end I decided to purchase some gear that would help me learn French and it has been amazing, I can’t believe how quickly I am picking it all up! Going to give Russian a go next!