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. =)
måndag, november 19, 2007
Prenumerera på:
Kommentarer till inlägget (Atom)
51 kommentarer:
You should try out IO (iolanguage.com) or Forth sometime. They've been on my wishlist for a long time and look very promising.
Ah, yeah, Io is a really, really nice language. A shame I already know it quite well. =)
Forth could be an interesting exercise.
Prolog?
D?
Prolog I know to well, thanks. =)
D is a better suggestion, though it gives the bad taste of C and C++ in my mouth. =)
I seem to be slightly picky.
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.
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.
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.
Kogut is a serious, experimental programming language implemented by Polish programming languages expert, Marcin Kowalczyk. Have a look:
http://kokogut.sourceforge.net/faq.html
Oz is next on my list. It seems to fit the bill for what your are asking for: http://www.mozart-oz.org/
How about lolcode? lol.
http://lolcode.com/
I second the Oz recommendation. We used it for an AI class in college.
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. :)
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.
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
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 !!!!
Factor does look interesting :
http://factorcode.org/
I'd also like to learn more R :
http://www.r-project.org/
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.
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.
K is fun...
Why not to take ANTLR and implement your own simple language?
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.
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)
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.
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
inform?
http://inform-fiction.org/I7/Welcome.html
first looks great
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!
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...
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.
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.
Fortress?
J
(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
Have you tried pathological languages? Brainfuck and so on.
Check this blog:
http://scienceblogs.com/goodmath/goodmath/programming/pathological_programming/
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".
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)
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
Excel:
-functional programming
-macro VBA
-Array Formulas
-database conductivity
-practical
-real world analytics
-com
-XLA addins
-extensible
-misunderstood
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++.
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 :)
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.
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/
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.
J
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 ..
Clean - home page
unless you've somehow neglected Common Lisp...
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.
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."
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!
Skicka en kommentar