views:

333

answers:

9

I ask cause I'm designing a programming language and would like some new material. By interesting, I don't mean languages like LOLCODE and brainf*ck - I mean real languages. The newer the better really, since chances are I've heard of all the really old ones.

Oh and it'd be nice if you include why you think its interesting. That'd help.

A: 

Personally, I like the idea of Befuge most. That second dimension thing really adds to the complexity I like in esoteric languages.

Martin Hohenberg
But did you ever see it used in production? To me Befuge is more like brainf*ck...
Peter Kofler
Thats pretty nuts. Not exactly what I was looking for, but definitely interesting : )
B T
+5  A: 

Lucid Synchrone is a language that is to ML what Lustre is to Pascal (you know about Lustre, right?). Writing reactive programs as stream equations is as interesting as in Lustre, and new features make it nice to someone who is used to type inference and higher-order.

Since ianh mentions Lucid in the comments, a word to position these stream languages with respect to one another: Lucid is the ancestor. The idea was to make programs easier to reason about by removing the hardest part - the loops. Instead one would write recursive stream equations.

while (some condition) { s = s + i; i++ }

would instead be written as (sorry but it was a long time since I used Lucid syntax, so this probably wouldn't compile):

next i = i + 1
s = s + i

These equations are equations on streams. Every expression in it ("i + 1", "next i") is a stream. "'next i'" is the stream i shifted towards the future, so that the n-th element of next i is the (n+1)-th element of i. Thus the equation next i = i + 1 increment the values in the stream i, while the language remains purely functional (no side effects) and close to mathematical equations that are easy to reason about.

Lustre stands for "Lucid Synchrone et Temps Rêel", and borrows from Lucid the idea of stream equations, but stream-shifting is made to look towards the past ("pre" operator) instead of the future ("next" operator). It can be compiled to efficient imperative code, and is generally well adapted for implementing reactive programs such as can be found embedded in various contexts. The name "Lucid Synchrone" is in fact a reference to the expansion of the name "Lustre", more than a reference to Lucid, although it is inspired by it indirectly.

Pascal Cuoq
Just plain Lucid (http://en.wikipedia.org/wiki/Lucid_(programming_language)) is worth a look, too. A very different paradigm for sure.
ianh
Ugh, add a parenthesis at the end of that URL.
ianh
This is interesting, I'll look into this. I didn't know about Lustre btw.
B T
+1  A: 

Lua is underrated in my opinion: Lua is a lot like Python (it also has all the advanced features like OOP, co-routines and first class functions), but it syntax is simpler, which I consider an advantage. It does not have lists an tuples, but its tables (Like Python's dictionaries) can be used for the same purpose. It is fairly well known, but doesn't have the same mainstream appeal as Python, so I don't know if you'd consider it obscure.

Have you looked at Erlang? It is an interesting functional language made for highly multi-threaded types of applications.

Awk is also becoming obscure because of its age, and I know a lot of people who's never even heard of it. I like Awk because it is so simple that you can nearly keep the entire language and its standard libraries in your head, and you seldom have to look at the manuals once you're familiar with it. This simplicity does prevent you from doing more advanced stuff, but I really like Awk regardless

iWerner
I have looked at Lua and Erlang before. Erlang isn't pretty, but it looks like it does concurrency pretty well. I think i've heard of Awk, but never really looked into it.Whats the most interesting feature of each of Lua, Erlang, and Awk? Something that isn't really there in more mainstream languages.
B T
+1  A: 

I don't know whether many would consider it interesting, but I still do some work on the obscure BCPL.

I consider it interesting since it's the beast that spawned (with apologies to Wes Craven) that "b*st*rd son of a hundred maniacs" otherwise known as C.

Don't get me wrong, I love the C language, it has all the speed and efficiency of assembly language with the readability and maintainability of ... well ... assembly language, I guess :-)

paxdiablo
A: 

I've always found the K and Q language families used in the financial community to be interesting. Although general purpose, they are vector-based functional programming languages mainly used to process time series data.

They interest me for their brevity, and the fact you need to think in an entirely different way to solve problems effectively (vector/functional). You can see some examples: Sudoku and Life.

Jon
Woh, reminds me of regex. Its especially confusing after reading the first example in wikipedia: 2!!7!4 . Is there a operator reference somewhere for K?
B T
A: 

Shell script is pretty obscure, yet quite useful. One of my colleagues once described it as write-only. Sums it up quite well imho.

troelskn
A: 

AppleScript, its just a scripting language, but very useful in many directions, from beginners to ninjas.

What i like about it? Its ENGLISH writing. Check this example, i wrote this few days after buying my Mac!!

tell application "Safari" to activate
   tell application "System Events"
       tell process "Safari"
          click menu item "New Window" of menu "File" of menu bar 1
       end tell
   end tell
end tell
medopal
A: 

Whitespace! http://compsoc.dur.ac.uk/whitespace/

From the website:

Whitespace is a particularly useful language for spies. Imagine you have a top secret program that you don't want anyone to see. What do you do? Simply print it out and delete the file, ready to type in at a later date. Nobody will know that your blank piece of paper is actually vital computer code!

just_wes
A: 

As far as esoteric languages go, the most interesting for me is Lazy K.

As far as useful languages, I'm currently learning C-- because I'm implementing a compiler, it's a language meant to be targeted by compilers, but as it looks now, I'd see myself coding in C-- by hand before C or C++ later.

Lajla