Just my opinion...
You sound as if you are looking for an ecosystem, rather than just a
language. If you've been working in the Perl and/or PHP languages, you've
been working in ecosystems that are alive and well. The languages
themselves may be awful, but the ecosystems are phenomenal. Each has
many, many libraries and tools to draw from. If you intend to learn one
language really well, it had better have an ecosystem that gives you the
support you need.
Here are a few suggestions:
(1) Haskell. The majority of the research in functional programming
languages is done in Haskell, a descendant of Miranda. Miranda attempted
to make a go is it as a commercial product, but the lack of an open system
persuaded the functional programming community build their own: Haskell.
You'll find that support on lists such as haskell-beginner and
haskell-cafe is very good. There's also a very active IRC channel,
#haskell. The number of packages / libraries available in Haskell has
skyrocketed in the past few years. See http://www.haskell.org Haskell
isn't as hard as the Miranda website would have you believe.
(2) OCaml / F#. The Haskell language is an experiment in pure functional
programming with a strong static type system. That means no
side-effecting functions like C's printf. See the Wikipedia article on
referential transparency for more. OCaml and its descendant, F#, share
the strong static type system of Haskell, but aren't quite as hard over as
Haskell is about side effects. For instance, mutable variables are
allowed. F# is supported by Microsoft in the new beta version of Visual
Studio, which you can download for free at the Microsoft site. F#'s
ecosystem is .Net, so if you want to write code that runs primarily on
Windows, F# is the way to go.
(3) Clojure, a new lisp that runs on top of the Java JVM. Clojure is an
experiment in writing a Lisp without regard to backwards compatibility. As
you no doubt know, the Java ecosystem is both broad and deep, although it
leans too far in the "enterprise software" direction for my taste. The
Clojure language itself borrows a lot of ideas from Haskell, but like all
other Lisps, uses a dynamic type system. If you've done Perl and PHP,
you've lived with a dynamic type system. Static vs dynamic typing is one
of those religious issues that you should avoid bringing up on mailing
lists. The Clojure site is at http://clojure.org.
(4) Factor. If you really want to do concatenative programming, and do it
in the real world, choose Factor. It's the only one in the concatenative
space that really has an ecosystem. Go to http://factorcode.org for more.
I should tell you that concatenative programming is one of those areas of
computer science that "don't get no respect." Programming language
researchers, especially academics, regard concatenative programming
languages as a mostly uninteresting implementation of point-free form,
e.g. as implemented in Haskell.
(5) Forth, the ultimate type-less language. Very close to the metal, as
you know if you've tried it. If you're at all interested in embedded
programming, particularly on small 8-bit or 16-bit chips, I think that
Forth is still the best thing out there. If you want to program anywhere
else, in my humble opinion, don't choose Forth. Or Joy, for that matter.
One of the charms of Forth is that you can easily write your own Forth,
should you be so inclined.
So there is my two cents. Do with it what you will.
-Rod
P.S. The ordering above is intentional. Haskell is my favorite.
From:
Duke Normandin <dukeofperl <at> ml1.net>
To:
concatenative <at> yahoogroups.com
Date:
05/10/2010 10:20 AM
Subject:
Re: [stack] Re: Joy noob checking in!
Sent by:
concatenative <at> yahoogroups.com
On Mon, 10 May 2010, William Tanksley, Jr wrote:
> Duke Normandin <dukeofperl <at> ml1.net> wrote:
> > The Joy language might be cool if there are still folks around that
> > can help with the learning curve.
>
> I think there are... I'm not really one, but I'll do what I can
.
> You might be interested in one of the remote derivatives of Joy and
> Forth... Rather than go through a list, though, it might be nice to
> hear what you're looking for. Are you a minimalist? Do you like to
> work close to the machine? Or do you like the compiler to do a lot of
> heavy lifting for you? Do you want type-checking? Do you want to write
> applications, embedded systems, or an operating system? There are too
> many possible questions... Go ahead and tell us the sort of things
> you've enjoyed working on or would like to...
You've hit on one of my major "programming" quandaries. I'm an avid
hobbyist programmer searching for "my ideal" language. To add to my
cloud of confusion, I don't really know what I want to do "my
language" at the moment. I started programming in as serious manner in
the late '90s, doing HTML-CGI stuff with Perl and then PHP. Along the
way, I taught myself to use a RDBMS (MySQL and Sqlite) and Javascript.
I know that I dislike C and its derivatives, so I soon tired of Perl
and PHP. I tried Pike and don't like it.
I suppose the truest thing I can say, is that I looking for a language
which resonates with me and "feels" right, and which I take to
easily. Once I find that language, productively expressing myself with
should not be a problem, given that the language is general-purpose
enough. I realize that this goes against the prevalent thinking of
using the right tool for the job. However, programming does not come
easily enough to me, for me to be the master of many languages. I want
to learn one language _very_ well. I once thought that Forth might be
cool, because each Forth is really a problem-domain-specific
Forth. However, it might be too close to the bare metal for me.
I've recently tried Lisp via Common Lisp and newLISP. I prefer the
latter, but still not "my cup of tea".
So now I'm looking at Joy and Miranda - both functional
languages. Miranda is not stack-based.
>
> > I tried to give Forth a go, but the c.l.f. newsgroup is nothing more
> > than an ever-ending argument, and pissing contest. Hans Beezemer's 4TH
> > language should have been my first exposure to "Forth".
>
> Sigh... no kidding. I gave up on them a while ago. The MachineForth
> list is often more interesting, although naturally you have to be at
> least a little interested in minimalistic programming to stay
> interested
. I do think that 4TH is an interesting dialect and
> implementation, yes.
Never tried the MachineForth list. I'll have to Google it. I am a
quasi-minimalist - I think. I hated Pascal, Modula, Oberon, Ada when I
looked at them because one had to write a book to get anything
done. OTOH, cryptic, obfuscated code is just so much
chicken-scratching / hieroglyphics. Should be sent to NSA / MI6 / FBI
for decoding to a natural language. ;)
Thanks for your thoughts.
--
duke
[Non-text portions of this message have been removed]