Esoteric Programming Languages
led_belly writes: "I came across this interesting page from the #alt.linux IRC chat room topic (irc.keystreams.com). It is an interesting read for all those who have ever been baffled by why/how some people do things. The Yahoo! Webring listing of similar topics is here."
"It is a greater offense to steal men's labor, than their clothes"
My other car is first.
I'd like to see how Intercal is actually used for anything or if it keeps up with other emerging languages. When new (and useful) languages hit the scene, it probably has to drop some features because they're used in that language. I guess maybe it's the first language with the ability to shrink from it's original set of features, unlike other languages out there today (like Java or even Perl)
Of course, it appears very inefficint - A search for prime numbers less than 65535 took 17 hours while C can handle that in a about half a second.
The One Rule Of Chess You'll Ever Need: Don't play someone who carries a kit in their bookbag.
writing Haskell in the HUGS implementation for my programming language design class. Some of these obscure languages look, possibly, even worse!
If you celebrate Xmas, befriend me (538
As an intellectual challenge, rewrite DeCSS in any of these languages. Feel free to share your results with us.
To get something done, a committee should consist of no more than three persons, two of them absent.
Post Comment
Lameness filter encountered. Post aborted!
Reason: Please use fewer 'junk' characters.
Goddamnit, I just want to post brainfuck source.
It has to be a toss up between:
(from INTERCAL)The Sieve of Erosthenes test for prime numbers up to 65535 took over seventeen hours on a SPARC--it requires only a half second using C.
and
(from SMETANA) The language has two instructions: "Swap step n with step m", and "Go to step p".
For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
A clueless moderator marked it down as flamebait. A language has to be pretty awful for that to happen.
Anyway, here's Brainfuck Also here
It's Turing complete, 8 instructions, and programs look something like this
If tits were wings it'd be flying around.
That's right a Klingon programming language. Waaaaaaa! As far from Perl as one can get....
Comparing it to Windows will be a moot point, since El Dorado is going to have a 40% larger code base than XP.
Reminds me of all those fun hours wasted drawing cool pictures with LOGO.
No list of esoteric programming languages would be complete without a link to the Beer Page:
http://core.federated.com/~jim/99/ (mirror)
This is a collection of programs written in over 200 languages designed to print the canonical "99 bottles of beer on the wall" song.
A mere 371 bits suffice to encode a universal combinator equivalent to ...(a) universal Turing machine:
11100110010100110010110011000010001110010101110010 110 0 100 1 100 1 100 0 010 0 110 0 001
0110010100110010110010100110010110010101110011001
0110111001100110011000101101011010010101110010101
1011001100101001100001000111001100101001001010010
0111000101110011000010001101110011001010011001011
1001100101100101011100110010100011011100110001011
0011011100110010100110011001010011000010001100011
Dan Brumleve has a written a combinator interpreter in Perl that may be capable of evaluating Tromp's strange machine.
Seastead this.
When I was able to do my own spam-armoring, you got a chance to email me. Now you can only hope I see your reply.
The oddest language from my point of view was Refine. It was a lisp based object oriented language with relatively few parentheses. Yes, you heard right, lisp and "few parentheses" mentioned in the same breath. We used it to create a prototype and it was interesting. I believe it grew out of Teitelbaum's group at Cornell (creators of the Synthesizer, which 1st year CS majors at Cornell were forced to code on way back when). Anyone else ever use it? I found it to have many of lisp's disadvantages (garbage collection, anyone?) without all the advantages. It did have a good plugin for emacs though (and forced this vi veteran to learn emacs).
Users of unlambda should note that the "i" combinator is strictly speaking unnecessary. For further obfuscation, replace "i" with "skk".
sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
Care to elaborate on what you think is wrong with it?
Easy, automatic testing for Perl.
And how many computer languages have you written that are better than any of these? The point isn't that these languages are useful in a commercial sense or even an academic one, only that someone was challenged enough in an intellectual way to try something different. As I posted in another thread here, "Befunge" and "Orthogonal" have some interesting properties that are worthy of consideration in and of them selves. God forbid our next round of languages should only evolve out of C, C++, and Java!
Letter To Iran
The page says that Unlambda's interpreter is written in Scheme, which isn't strictly true. The CUAN contains interpreters written in Java and Scheme, and more than one in C. I think there's a buggy Perl interpreter, as well.
k s``s`kk
``s`kk``s`kk`ki``s``s`ks`ks``s`kk``s`kk`kk``s`k@`k i``s``s`k|`kii`kei
I've written an Unlambda interpreter/stepper in Python, available here. It's correct, as far as I know, but extremely slow for lengthy programs.
Incidentally, here's "cat" in Unlambda:
```sii ``s``s``s``s``s``s`ks``s`kk`kc``s``s`ks``s`kk``s`
Loads of fun!
If you want a strange programming language that garnered virtually no support and was a real pain in the ass, look up APL (primarily used at Pomona College in Claremont, CA, because the guy who invented it was a professor there).
APL was defined by coding which wasn't particularly inventive but which required a complete keyboard overlay - it didn't use ASCII characters (except in text, as I recall), but rather a mixture of greek symbols and shit the author just plain made up. So in effect you had to match 'objects' to keys on the keyboard, a completely non-intuitive way of typing. Talk about watching your hands while you work....
Unfortunately the college was incredibly gung-ho on APL and thought it would revolutionize coding, so if we wanted to do any serious work we had to do it in APL. This meant that about a dozen of us sat around learning APL so that we could program what might have been (don't really know, but I don't know of any other examples in 1983) the most massively multiplayer Star Trek ship battle game to date (up to 127 players, although the mainframe usually came to a grinding halt when we passed the 70 or 80 player mark). We then passed this program off as a science project, which it was accepted as since no one else could read the damned thing.
Well, I guess it had a use after all....
Max
My god carries a hammer. Your god died nailed to a tree. Any questions?
Aha! The first mention of our glorious and unheralded IRC network. Anyone looking to hook up to a newer, reliable network... You may want to try connecting to irc.geeksanon.ca, the round robin DNS name. Of course, you can also use irc.keystreams.com, irc.gravitysucks.org (hosted by www.gravitysucks.org) and irc.duped.net. I am done.
"It's amazing what velocity can do when human beings are in season" -Matthew Good
What's all this about erotic programming languages? Oh...nevermind.
To-do List: Receive telemarketing call during a tornado warning. Check.
Seems that 'round here EVERYTHING should be opensource...but in the case of Brainfuck OS...all I can say is OUCH, we should be careful what we wish for ;)
Learn them all !!!
Of course, you could also approach the task a little more systematically. A possible approach, and this is based purely on learning a language in order to improve one's thinking processes, rather than learning a language based on the marketability improvements possession of such knowledge brings, is to broadly catergorise them along the lines of 'problem solving styles', or 'programming mindsets' that they directly support or encourage.
Assuming no prior knowledge, you could start by learning procedural programming; a very good starting point is C. It is a small, compact language that will help you learn the basics of procedural programming; it's not a difficult language if you stay away, initially, from its more esoteric features like pointers and bitwise operators. Having learnt C, you will have a very solid grounding for learning languages such as JavaScript, C++, and Java because the 'syntactic core' of these languages is very similar.
Another procedural language is COBOL. It is quite a big language in terms of the number of reserved words ('verbs' in COBOL-speak) it offers. However, it is really quite a simple language and provides, as core facilities, tremendous file processing capabilities. In addition, it forces the programmer to be systematic, that is, you need to spell out exactly, and in painstaking detail, what it is you wish to do. In a way, its wordiness is its strength, and it is difficult to produce 'sloppy' code the way it is possible to do in, for example, C.
Next, you could tackle object oriented programming. You could start with either one of the very popular object-oriented languages, C++ and Java. Personally I would start with C++ as it is, I believe, more complex, and thus, more difficult to learn; if you master it, Java will come easy, and the hardest part will be simply to learn its rich set of packages (collections of objects).
Smalltalk is probably one of the purer object-oriented languages, is widely respected in the programming community, and, I should admit that the main reason I included it here is that its the next language on *my* list to learn. I've looked at a couple of Smalltalk code listings and have found it difficult, at first glance, to understand it; that being the case, I look forward to the challenge of learning it !
Now, for a couple of oldies, but goodies: LISP and Prolog. Neither of these has, as far as I'm aware, very significant commercial application, but if you are looking to try some truly 'different' programming approaches, in a bid to extend your thinking processes, then these are it !
LISP, for me, is a truly enjoyable programming experience. I won't pretend to be an expert in it, but by simply spending time with this language I have learnt so much about data structures, programming techniques, and, generally, problem solving techniques. It's a really good tool for 'doodling', that is, quickly whipping up little algorithms and immediately testing them. A definite 'must-learn' language !
Prolog is one I find fascinating. I'm still struggling with it, and although I've developed nothing more than simple database query applications with it, every time I work with it I find myself approaching a 'simple' problem in non-conventional ways, always forced to rethink how something should be done. I would recommend you look at this language to learn how to program in a truly non-procedural way, that is, to work 'with' the help of the language itself, rather than simply writing down commands for the compiler / interpreter to follow.
Finally, on top of these you could add interpretive 'scripting' languages, tools which are aimed more at 'gluing' applications together than being fully-fledged development languages in their own right (I know perl purists will probably scream, claiming this is heresy, but basically it is not so much a development language as a 'super-shell', an all-encompassing environment, almost an 'operating system within an operating system').
Finally, I should stress that, as a programmer, it is not just languages that you should be striving to learn, but to expand your knowledge in general. For example, acquiring general business, management, communication and 'people' skills will make you more aware of the 'real world' in which you must apply your skills.
While the idea of learning other programming languages is to extend your ability to identify and abstract problems, as well as adding to your 'armory' of programming tools, there is no substitute for a good grasp of your problem environment, that is, understanding the nature and type of 'problems' you will be asked to solve. Not every problem necessarily translates into a computer-based solution, hence the importance of also acquiring non-programming skills.
...was called abuse. I don't know if my friend came up with the idea himself or got it somewhere else and implemented it himself. The interested thing about the language is that anything could be redefined including the keywords of the language. It allowed you to really obfuscate things. I wish I had that interpreter, it was quite fun.
"You can now flame me, I am full of love,"
It won't be complete if I don't include The Language List. Not only this page contains resources for those esoteric ones, but also other "saner" languages too.
For those of you who want to create programming languages, make sure you read the underlying principles. If you know all these stuffs, your programming language will not be just a toy!
--
Error 500: Internal sig error
Another page on weird languages is here.
Qu'on me donne six lignes écrites de la main du plus honnête homme, j'y trouverai de quoi le faire pendre.
Back when I took compiler construction at Drake University three of us got together and made our own programming language called Eubonicode to help those who like to engage in ghetto algorithmic expression. I threw it up on the website. Here is the fibbonacci code:
sup
{
gimme fibo bitch
a be 1 bitch
b be 1 bitch
putou a bitch
putou b bitch
fibo be fibo widout 2 bitch
slongas (fibo bepimpin 0)
c be a an b bitch
a be b bitch
b be c bitch
putou b bitch
dissin fibo bitch
nomo
}
bash-2.04$
bash-2.04$yes "Don't you hate dialup connections?"| write USERNAME
Because apparently, you're the only person on the face of the planet who doesn't know perl.
:)
I know perl. My boss even knows perl.
The lame "I-know-Visual-Basic!" interns where I work even know perl.
(Yes, I know I'm an intern, but... I'm not lame)
My point is that tons of people know perl. It's not exactly an obscure language... it's easily in the top 10 most used languages.
I think this is shorter in perl. Compare:
,olleH">:#,_@
55+".dlrow
print"Hello, world.\n"
Note that the space after print and final semicolon are optional in perl.
-Ted
while taking a programming languages & compilers class, the prof, after talking about parse trees, mentioned that we could implement double backwords for loops. A buddy and I looked at each and said, "huh? double backwards for loops?" The prof went on to describe a loop where:
for (condition) {
statement1
statement2
statement3
}
the condition is checked, and statement1-3 get executed. Then statement3, 2, 1 get executed followed by the condition being examined. Essentially flow runs down and then *up* the block.
I always thought this was a kinda cool, half baked idea. Useful? No, not really, but cool nonetheless.
Around 1983 (+-2 years), Hopper visited the University of Alberta which was, at the time, ripe with computer language types. FLACC (Full Level Algol/68 Checkout Compiler) and, (I think) MAPLE were (partly) developed there. C, APL, SNOBOL, FORTRAN, ALGOL/W, PASCAL, PL/1, PL/C, PL/360 and LISP were just some of the languages taught in undergraduate classes there.
In any case, A friend of mine was talking to Grace, and she commented that "Some of the people here were instrumental in the development of COBOL. I wonder why they don't mention it more?", to which Dan replied:
"Perhaps they're ashamed of it".
Another friend quickly pulled him aside and explained the history of Grace an COBOL. Apparently, you could see him blush through his (infamous) grizzly-adams style beard.
Sometimes boldness is in fashion. Sometimes only the brave will be bold.
Oh, great! Now just watch them try to blame it on the "open sores" movement.
Sometimes boldness is in fashion. Sometimes only the brave will be bold.
Incidentally, APL was invented by Kenneth Iverson, who never taught at Pomona. Perhaps you're thinking of somebody involved in APL's descendent, J. But neither language was the pet project of one prof.
The best language on the list is Intercal. Unfortunately, it's very hard to learn. It's not that the language is particularly complex. It's just that all the constructs are so absurd, you can't stop laughing long enough to focus on what you're doing!
Very cool.. but doesn't it just translate to C?
ObShamelessPlug: that would certainly explain
http://www.geocities.com/connorbd/varaq
I'm right in the middle of writing one. Hopefully I'll get free time to go back and work some more on it, after GCC 3.0.2 gets released (in a week).
Why? Because I can, and it's fun.
You cannot apply a technological solution to a sociological problem. (Edwards' Law)