Lightweight Languages
Denise writes: "'What happens if you get a bunch of academic computer scientists and implementors of languages such as Perl, Python, Smalltalk and Curl, and lock them into a room for a day? Bringing together the academic and commercial sides of language design and implementation was the interesting premise behind last weekend's Lightweight Languages Workshop, LL1, at the AI Lab at MIT.' Simon Cozens report, on perl.com, says it wasn't the flame fest you might have imagined."
Ruby is an excellent lightweight language. They had made a comment that it was sadly not mentioned too often during this workshop.
All my votes goes to Lua. www.lua.org. A fantastic language, small and very fast!
XML is, as is touched upon briefly in the aritcle, just lisp s-expressions, but with phenomenally annoying syntax.
If you have to work with XML, and you know some Scheme, I recommend translating it into Scheme form, via ssax. It makes XML not quite such a pain in the arse.
Choice of masters is not freedom.
Interesting weekend! Here's the summary in case you can't get on, (or if you're lazy!)
As I've indicated, the interest of the workshop was as much what was going on outside the talks as well; Dan and I got to meet a load of interesting and clever people, and it was challenging for us to discuss our ideas with them - especially since we didn't always see eye to eye with our academic counterparts. Sadly, few people seemed to have heard much about Ruby, something they will probably come to regret in time. Dan seemed to have picked up a few more interesting technical tips, such as a way to collect reference count loops without walking all of the objects in a heap. Oh, and we found that you should pour liquid nitrogen into containers first rather than trying to make ice cream by directly pouring it into a mix of milk and butter. And that the ice-cream so produced is exceptionally tasty.
But seriously, what did we learn? I think we learned that many problems that we're facing in terms of Perl implementation right now have already been thoroughly researched and dealt with as many as 30 years ago; but we also learned that if we want to get at this research, then we need to do a lot of digging. The academic community is good at solving tricky problems like threading, continuations, despatch and the like, but not very interested in working out all the implications. To bring an academic success to commercial fruition requires one, as Olin Shivers puts it, "to become Larry Wall for a year" - to take care of all the gritty implementation details, and that's not the sort of thing that gets a PhD.
So the impetus is on us as serious language implementors to take the time to look into and understand the current state of the art in VM research to avoid re-inventing the wheel. Conferences such as LL1, and the mailing list that has been established as a result of it, are a useful way for us to find out what's going on and exchange experience with the academic community, and I look forward intently to the next one!
And the people shall be oppressed, every one by another, and every one by his neighbour Isaiah 3:5
So, did they get around to figuring out which language is best suited to control a robotic arm in such a way to dump milk and butter into liquid nitrogen?
"My language tastes better!"
Someone set us up the bomb, so shine we are!
To me, it would seem that the lighest I can come up with is:
So would that be usuable? A simple program such as:
VAR A
VAR B
INPUT A
INPUT B
C=A+B
PRINT C
GOTO 3
Can we get even more lightweight?
I think we learned that many problems that we're facing in terms of Perl implementation right now have already been thoroughly researched and dealt with as many as 30 years ago; but we also learned that if we want to get at this research, then we need to do a lot of digging. The academic community is good at solving tricky problems like threading, continuations, despatch and the like, but not very interested in working out all the implications.... So the impetus is on us as serious language implementors to take the time to look into and understand the current state of the art in VM research to avoid re-inventing the wheel.
I think that's the coolest part of probably the whole conference. If perl/Parrot/Python can manage to take the best of both the academic and the practical worlds, they'll be unstoppable. Heck, it might even be a first! The two seem allergic to talking to each other, as if they'll become contaiminated, rather then treating each other as a chance to learn, grow, and test.
And what about this ? At least to represent the commercial side of language design...
É que os desafinados também têm um coração
This is just the sort of discussion I like to see happening. Not a "my language is better than yours" bout, but a frank examination of what makes a language good, and what makes it better.
I get very tired of the "X is better than Y" fights. They're pointless, and if this collection of language pros can avoid it, so can we. The better language is the one that gets the job done best for you, period.
Rather than clinging to our cliques, getting together with users and creators of other languages is beneficial to everyone. Hybrid vigour, if you like.
It's this sort of cooperation the open source movement in particular should embrace, not petty squabbles over syntax preferences. In the end, everyone should win.
Oh, and we found that you should pour liquid nitrogen into containers first rather than trying to make ice cream by directly pouring it into a mix of milk and butter. And that the ice-cream so produced is exceptionally tasty.
Years ago I read an article about a guy from Jackson Hole, Wyoming who made gourmet ice cream. He had determined that the two things that separated good tasting ice creams from the rest were:
1. Fat. Ice cream needs lots of fat.
2. Size of the ice crystals. The water in ice cream can be frozen in big crystals or little ones. If you freeze it slowly, you get big crystals. Freezing quickly leads to small crystals. Small crystals == better ice cream.
So this guy found that he could make the smallest crystals by pouring everything into a big bowl with some liquid nitrogen and stiring it really quickly. This was after trying several different methods of freezing the ice cream, none of which were fast enough for him.
He said that a good test of ice cream was whether it floated in water. Good ice cream should be dense enough to sink. I guess this is due to the high fat content. Of course once you put it in water, it is no longer good ice cream, right?
Lasers Controlled Games!
I sure hope next year's LL2 addresses this issue.
"Trust me - I know what I'm doing."
- Sledge Hammer
any similar conference i've ever been to (including some W3C working sessions) have been extremely professional, even when working on standards. IMO the only time you get flamefests is on the internet on boards/newsgroups populated by wannabes who don't fully understand what they're flaming about, and the flames are pretty much just a front to cover their lack of knowledge/experience. on the other hand, stick a bunch of knowledgable people in the same room, and considerable respect for each other is shown.
Well, I don't know cURL, but I shure do know Flash. And from what I get from the cURL site it doesn't seem to have anything to do with Flash or it's "niche".
I wonder what this guy is talking about.
We suffer more in our imagination than in reality. - Seneca
There was a bit of a superior attitude from some of the academics, who feel that languages like Perl and Python reinvent the wheel and neglect the body of academic research by coming up with suboptimal solutions to PL problems that have long since been "solved" in the PL literature. Maybe "frustrated" is a better word than "superior." While I can totally appreciate their point of view, I found myself cringing in embarrassment once or twice when a harangue by one of the academics went a little overboard. There has already been one post on the LL1 mailing list that I feel crossed the line.
The discussion came to a bit of head during the (very interesting) "Worse Is Better" panel (based loosely on the writings of Richard Gabriel), which centered on the question of why the most popular languages aren't the "best" ones.
Like I said, though, it was mostly very congenial. Ultimately, I think each camp took something away from the encounter: both new-found implementation techniques, and a greater knowledge of and interest in the other community. There are some practical issues that the Perl/Python guys have to deal with (e.g., interfacing with legacy languages like C) that aren't really addressed by academics, and I think it was great that these issues were brought to light.
The LL1 website, if anyone is interested, is ll1.mit.edu.
I think we learned that many problems that we're facing in terms of Perl implementation right now have already been thoroughly researched and dealt with as many as 30 years ago; but we also learned that if we want to get at this research, then we need to do a lot of digging. The academic community is good at solving tricky problems ... but not very interested in working out all the implications.
This is the best paragraph in the article. Here's what makes me sad:
Slashdot-type hackers have an amazing ability to get things done. They can really come up with a working product faster than anyone.
BUT, slashdot-type hackers have a tendency to implement olddd ideas, and also frequently to make well-understood mistakes. It is true that we are on the cutting edge of implementing internet protocols and maybe window managers, but in other areas we are implementing 30 year-old ideas still. (OS design and programming languages come to mind especially.)
WHO, if not the hackers, will embrace this stuff? They are the only ones that are supposed look beyond the hype and marketing and status quo to evaluate things based on technical merits, and to create implementations of new ideas.
I know only the OS design that I learned in my undergraduate course. But that is enough to know that the design of the kernel is very conservative! Where are capabilities? Where is fine-grained access control? Does anybody *really* think that their internet daemons should run as *root* just so they can open up a port with a low number? (I know there are plenty of workarounds...) I am sure that there are dozens of great ideas in OS design from the last 20 years that would be totally appropriate for a hacker's kernel.
I know a bit more about PL design. Being in academia pollutes the mind, I know, but I am sure that almost all I see in the slashdot PL community is reworking of old, mediocre ideas. Who in the world will use and develop new programming languages if not hackers?
(So, the PL fanatic in me wants to point out caml, which, even though it is not my personal favorite, I think could become really popular with slashdot-style hackers. It is really fast -- probably the fastest, it is hacker buzzword-compliant (it has "objects"), and yet it has taken many great ideas from academia and put them in a really usable, accessible form. Try it if you are in for a taste of something different!)
Anyway, just trying to say that if you are tempted to go hack up your own programming language, please at least don't assume that Perl is the state of the art because it is the most popular scripting language or something. Take a class, read a book, and check out some of the weirder languages coming out of academia first. Hackers are how the revolution happens...
it wasn't the flame fest you might have imagined
Not surprising. The only people who get into flame-fests about programming language choice are insecure newbies. It comes down to the same reason kids argue about whose game system is better: they got one for Christmas and feel compelled to defend their choice, because they can't afford another. Once you know a sizable number of computer languages--especially different styles of language--then you no longer feel a need to be so petty. Different languages have different strengths.
Since programming language vocabulary and syntax is the human side of a human -> machine translation process (a process of translation through an interpreter, compiler, whatever etc.. to 0's and 1's), and usually requiring human "logical" thinking, isn't the real objective here one of identifying and defining abstraction manipulation functionality, the logic of translation mechanics?
Certainly if the target is to be an optimized sequence of 0's and 1's then is it not the translation mechanics responsible for getting it there, and from whatever vocabulary(s) and syntax(s) used?
This is where I believe genuine computer science and software development research got seriously distracted by the carrot of money. And as it was mentioned in the article regarding not doing it right in a tradeoff of getting it out the door, getting back to genuine computer science may be difficult to do! But it also seems to be an ongoing and growing problem in genuine Software Engineering. The latest version of a need to solve the software crisis?
Note that IBM presents a white collar high dollar I/T solution direction intent, but without any identification of the base functionality mechanics of translation.Read Written Comment #4 after reading the "Manifesto" at the above IBM link.
With all this in mind, what are all these "Lightweight Languages", but examples of how many ways you can create a custom vocabulary, syntax and translator that outputs 0's and 1's not always in the optimum sequence?
.
.
If we don't take the learning curve into account, you might en up with Color Forth
(or any other Forth derivate, such as BigForth - for Linux and Windows - which include a breathtaking GUI RAD : Minos)...
Here's a small ColorForth program: This consists of an IDE disk driver.
Trolling using another account since 2005.
http://mind.sourceforge.net/ruby.html is the Mind-to-Ruby liaison page between the Open Source AI Mind in JavaScript for Web migration or Forth for robots and the several hundred other SourceForge AI projects in the various "lightweight" languages and the ones made of sturdier, sterner stuff.
A Mind-to-Visual-Basic liaison page leads to the 3 April 2000 Mind.VB port from Mind.Forth into Visual Basic.
The Mind-to-Java liaison page links likewise to the Mind.JAVA port of June 2001 from JavaScript into Java.
The so-called "lightweight languages" will play a heavy-duty role in the emergence of public-domain, open source artificial intelligence.
I doubt this is the first effort to create a popular open VM, but it seems to be one of the most heavily promoted. Hopefully we will see Parrot-based languages springing up everywhere, and perhaps even ports of existing languages.
What exactly constitutes a lightweight language? Is it a scripting (interpreted) language? Or one that serves as a building block for other languages (a micro-language, so to speak)? Or is it merely any language that can be used for Rapid Application Development? I thought I caught a reference to Java in that article (used as a comparison), which I don't consider to be "lightweight" by any means, and I've heard people swear by Python as a full-blown development platform (I don't know anything about Python, so forgive me if I sound ignorant). It seems as if a lightweight language is basically one that is an open source work-in-progress.
"Sadly, few people seemed to have heard much about Ruby, something they
will probably come to regret in time."
--
CPAN rules. - Guido van Rossum
is C.
It's also my favorite language, period. I'm not talking about C++ either. Plain old C is as lightweight as you can get.
The agenda with some presentations is available http://ll1.mit.edu/agenda.html
The Arc presentation (an unfinished dialect of lisp) seemed especially intresting.
Sounded like fun, so here's a reverse-polish interpreter with a whopping 10 instructions (counting subroutine definition). It's not totally minimal, but it is useable, and Turing-Complete.
/\s+/,$2];
Odd numbers are true, evens are false, and control flow is through conditional return and conditional tail recursion. Comparisons and other arithmetic operations can easily be built up from addition and negation. Named variables can be created by making subroutines that return an address.
I call it, simply, rpol.
RPOL
#!/usr/bin/perl
%commands=();
%data=();
@mainstack=();
%builtins=(
'+'=>sub{push @mainstack, (pop(@mainstack)+pop(@mainstack))},
'neg'=>sub{$mainstack[-1]=-$mainstack[-1]},
'set'=>sub{$temp=pop @mainstack; $data{$temp}=pop @mainstack},
'get'=>sub{push @mainstack, $data{pop @mainstack}},
'in'=>sub{read STDIN,$temp,1; push @mainstack, unpack('c',$temp)},
'out'=>sub{print STDOUT (pack 'c',(pop @mainstack))},
'eof'=>sub{push(@mainstack, (eof STDIN)?1:0)},
'<?'=>sub{(pop(@mainstack)&1)?'repeat':0},
'ret?'=>sub{(pop(@mainstack)&1)?'return':0},
);
open(PROGFILE, "<$ARGV[0]") or die "Couldn't open program file.";
while(<PROGFILE>){
chomp;
if(/^#/){
#ignore comment
}elsif(/^:\s*(\S+)\s+(.+?)\s*$/){
$command=$1;
$commands{$command}=[split
}elsif(/^\s*(\S.*?)\s*$/){
rpol_exec(split(/\s+/, $1));
}
}
sub rpol_exec{
REPEAT: ;
for(@_){
if(exists $commands{$_}){
rpol_exec(@{$commands{$_}});
}elsif(exists $builtins{$_}){
$temp=$builtins{$_}->();
if($temp eq 'repeat'){ goto REPEAT }
if($temp eq 'return'){ return }
}elsif(/^(\d+)$/){
push @mainstack, $1;
}else{
print STDERR "Unknown token: '$_'\n";
exit(1);
}
}
}
#END FILE
For a sample, I wrote a program that swaps every two bytes of input, then writes them to output.
Sample Code (test.rpol):
#unused cat utility
:cat in out eof not <?
#unused newline function
:nl 10 out
#main program
:not 1 +
:swap 1 set 2 set 2 get 1 get
:cleanup eof not ret? out
:swapcat in cleanup eof ret? in swap out out eof not <?
swapcat
#END FILE
Do moderators actually read the post before modding it??
The article touches on the idea of academics looking down upon programming languages that badly solve again and again problems that have already been satisfied in the academic literature.
Is this literature free? Can I find it on the internet somewhere? Is someone maintaining a repository of best practices? Better yet, is there someone who sees mistakes being made and points the team to this freely available information?
I am asking because I don't know. My suspicion, however, is that most of this knowledge is locked in high-priced peer-reviewed journals, overpriced textbooks, and papers distributed among an elite group, rather than being released freely to the community of developers who work on free software.
[see subject]
No, it also has the advantage that, if some poor sap goes to all the trouble to write a deamon in it, you get to smile and say "bfd!"
-- MarkusQ
P.S. It's also occasionally useful to drive a spike in "you can't do Y in language X" debates that have gotten out of hand.
If you want to be able to use it directly for real general-purpose programming, in the existing environment, it has to interface to any C library. That's a long way above and beyond Turing completeness.
This changes it from a "closed" language, with fully-specified behavior, complete within itself, to an open language which may be extended to arbitrary behavior with external modules, so it's not really a small language at all, just a small interface to a huge language. It either needs to be a compiled language, or to have compiled modules.
On the other hand, if you are willing to allow an environment designed as needed, to access all needed functionality in the form of one input and one output line, it returns to the sort of task a Turing machine can do.
From the review:
Paul Graham rounded off the talks by talking about his new dialect of Lisp, which he called Arc. Arc is designed to be a language for "good programmers" only, and gets away without taking the shortcuts and safeguards that you need if you're trying to be accessible.
I predict that someone will later come out with a new and improved version of this language which is backward compatible, and runs 10 times faster. That language will, of course, be called Zip.
- Mike
Do any language designers do any useability testing on what they implement?
I always get the impression that they just run a few ideas past the bloke in the next office.
BTW, They talked to industry, but no-one mentioned COBOL, Fortran, PL/I or Rexx? Maybe they need to invite players from large systems (Banks, airlines, etc) too.
Forth
The Power and Speed Of Perl
And then, a way to generate executable programs with that language, without the need of a parser, that is, not a scripting language, but a compiled one.
Need GUI? There's PHP GTK.
Then again, there's also Delphi/Visual Basic.
Bottom line, can you, PHP guys, just make the language faster? It doens' really need to get compiled. Just freaking faster.
Bye, \n\n\r or just <br><br><p>
First John Malkovich, then Andrew Plotkin, now this. Aren't things getting a little out of hand?
-- MarkusQ
MSIL exists and its performance on m$ platforms is unlikely to be beat, and its being ported.
One of the big advantages of using objects with languages like Python, Ruby, Smalltalk, and sometimes Lisp is that one doesn't need to know the type of object that one is dealing with when one writes the code. One can ask it what it is, and proceed from there.
This is much more difficult with languages where the type of an object is expected to be know when you write the program. CaML seems to be of this latter class. (So are Java, Eiffel, Ada and C++.)
Notice that the second group of languages tends to be faster, but less flexible. This appears to be an inherent trade-off (though Java paid extra by having an interpreter for security and portability reasons).
I think we've pushed this "anyone can grow up to be president" thing too far.
And now that the "Ruby in a Nutshell" book by Matz ;-)
(published by O'Reilly) is available that should
give Ruby a continued boost. In fact three other
Ruby titles are due out by year's end:
"The Ruby Way"
"The Ruby Developer's Guide"
"Learn Ruby in 21 days" - well, ya gotta have one
of those to make a language legit
Ruby Rocks!
Caml does full type inference for you, so that you have to write fewer types than you would in C or java.
In fact, in Caml you really only have to write types when you write down an interface to a module -- and this is exactly what languages without sophisticated type systems lack. It is very difficult to write precisely what your interface is without writing down types, and if the type language is poor (ie, Java, or worse: perl) then writing interfaces becomes more an exercise in documentation and finger-crossing.
(Personally, I also find that automatic type checking is very conducive to writing maintainable programs. It keeps me from making the gross hacks that are so tempting in perl. Typically it doesn't make my programs any longer or more difficult to write, since ML-family languages have lots of features to capture the common idioms that require this "flexibility" in perl et al.)
Careful not to make too many generalizations. I think Caml is much nicer than other typed languages you mention.
The actual syntax is relatively unimportant.
Thinking about XML as equivalent to S-expressions buys you nothing, unless, of course, you count about three decades of extensive experience and solid, mathematically-proved algorithms that do way more than one could imagine, all of which exist.
If, of course, one is simply interested in declaring that XML is a Hot New Revolutionary Concept and things like LISP are Dead Languages, none of this is important.
What do you get if you put ...
implementors of languages such as Perl, Python, Smalltalk and Curl, and lock them into a room for a day?
- 4 smashed-in heads.
Those who've watched the sometimes religious language discussions might get an idea.
--
Karma 50, and all I got was this lousy T-Shirt.
. That's to say, if there's a Perl module Foo and you subclass it to Foo::Advanced by adding a frobnitz method, then what happens when the original author of Foo produces the next version of Foo that already has a frobnitz method?
What am I missing here? In the subclass frobnitz() would be overridden, and the superclass should not care about subclasses.
Since functions are degenerate relations, and people need relations (remember the relational databases need stored procedures etc. guys) my favorite foundational prototype for "light-weight programming languages" is Libra -- a programming langauge based on binary relations. It's not what I would have done as a prototype, but hey, the guy DID IT and here I am talkin' about it! :-)
Seastead this.
I wrote a web site in it (about 3500 lines of ruby, not entirely polished) and it was super quick to write, includes an output class for generating content in various formats (HTML, plain text, whatever else you want to implement), a system for processing form data (not great, but reusable), and a template-ish system (uses the decorator pattern) for attaching arbitrary content to a page. The only problem is that it is far too slow to put into production, I'm porting it to perl, but I really hope that the execution times of ruby programs will increase, ruby is pure joy to program in.
marotti.com
Brainfuck
Here is a program:
http://pcblues.com - Digits and Wood
I'm curious. What about perl is easy to understand?
I think I would agree that, say, the core of scheme is lightweight according to your
You didn't claim that perl is a lightweight language, but those at the conference seem to think it is. To me, perl is quite complicated, since there is so much implicit activity meant to make certain things briefer or automatic. I am thinking in particular of its rules about automatic conversion in various contexts. (I suppose it usually does the right thing, but the ease of understanding why something is wrong falls into the "easy to understand" category for me!)
Maybe, "languages for writing throwaway programs for small tasks?"
Commercial information tends to be persistent, not transitory. A good language should work directly with stored data.
Processes in organizations are long-lived and distributed, whereas typical programming languages just deal with transient threads etc. (outside workflow systems such as WebLogic Integration).
Programs represent rules, algorithms and other forms of knowledge that end-users will want to add to (e.g. a discount formula). Not only should the environment allow run-time modification and extension, it should also support representations and syntaxes accessible by non-programmers.
Every action has a principal actor associated with it, and typical commercial environments need to record who it was for auditing and access control purposes. If a programming language has no concept of Principal, one has to be stuck awkwardly on the side (e.g. Java EJB isCallerInRole).
Transactions are a very common programming model. At the very least, there should be support for creating and propagating transaction IDs, restarting procedures etc.
What else? Run-time metrics, versioning, SQL-style set predicates... well, you get the idea. People have to wake up to the fact that there is still a huge disconnect here.
(Amazing to think that Java gave Microsoft some ideas and a wide-open goal, and they came up with C#).
Don't forget XSLT. It's already out there.
The real action right now is in the VM architecture.
CLI has leapfrogged JVM. Will they respond with a
JVM that supports continuations and memory-mapped
registers? Or will the open-source world end-run
them all? Is Parrot even in the game? Will silicon
JVM cells ever reach a mass-market CPU?
Screw syntax.
-I like my women like I like my tea: green-
This depends on how you define it. Lambda calculus is a contender for the same title, and in fact has largely superseded the Turing Machine as a model for computation.
If your metric is the size of the compiler, a Turing machine might win on current hardware - but that's at least in part because standard hardware has a similar architecture to a Turing machine. Someone should build a lambda calculus CPU... (No, Lisp chips don't qualify.)
Lambda calculus is certainly easier for humans to program in, and is more expressive in that it supports functions and named parameters. So I would say LC is the lightest, most powerful language that's easily usable by humans.
make file menu
put in file menu
"new"
"open"
"close"
"exit"
import "quake3 engine"
make game fun
end game
You couldn't be further from the truth. Someone's already mentioned CiteSeer. I've read and downloaded hundreds of papers from there. Google is great for tracking down papers, too.
Another nice resource is library.readscheme.org. It's Scheme-specific, but Scheme is the root of much research about programming languages and the underlying concepts - it pretty much spawned the field of functional programming.
The biggest barrier to entry for this sort of stuff is your own existing knowledge. There's no pill you can take to pick it all up overnight. You have to work hard at it. This is the real reason to go to a real universities - not to learn how to program in the language du jour, but to learn about what some very smart people have already figured out over decades, centuries, millenia, and to learn how to think like those people.
There aren't many shortcuts here. It doesn't help to be told that there's a simple solution to the problem you're working on, if it involves a network of deep concepts you've never heard of and are totally unfamiliar with. To take some examples from functional programming: closures, continuations, continuation passing style, fold operators, polymorphic type inference... If you don't know what all those things mean, and can't use them in your code, you're unnecessarily limiting yourself and denying yourself leverage that can help get big, complicated things done more quickly, with less fuss.
One way to start out is to learn some advanced languages. Scheme is a good starting point because there's so much tutorial literature for it. You can pick up the computer science concepts as you go along. Read Structure and Interpretation of Computer Programs (SICP) and How to Design Programs (HTDP). Join the ACM. There's so much stuff out there, go look for it, and apply yourself!
I am a bit of a language freak and have a long-time habit of hearing about a new language, reading a brief feature list, getting really excited, reading the language and library docs, discovering something I don't like, e.g. in C# the way methods aren't virtual by default, going off the language intensely then adding it to my cv anyway.
But when I checked out rebol that was mentioned in the article I found it was in fact as good as it first seemed, maybe better.
Within an hour of first hearing about rebol I had written a gui program that displayed the live picture of the Tokyo Tower on the net and updated it every 60s.
When I first wrote this program, it was as a learning experience for c#- and it took a hell of a lot longer to write and the code is much longer.
So maybe for me rebol is the ultimate lightweight language!
Turing is so powerfull I once made a replica of Unreal Tournament but since it was made in turing it was so fast you could only see a few flashes and stars on the screen.. I mixed in some drawmapleleaf commands just so it feels like you are in canada.
I also made the BobOs. it kept crashing and telling me that there was a error in bobby's special area.. I dont know what was up with that!.
Mod Re: what it buys you up.
I was at this workshop and it it really felt like something unusual was happening. I think everyone who was there will remember it.
;-)
Most conferences are deadly boring, because people go to them to present things they've already thought of. At this one you had a feeling that people were having new ideas right there.
There was also a strong feeling that the topic was an important one, where new things are happening every day. That, I think, is because new programming languages matter now more than they used to. In the 1970s and 80s, there was a vogue for inventing new languages, usually to prove a point about types, and they all just disappeared into a black hole, because no one used them for anything.
If you make a new language now, people can actually use it. In 1980, if you wanted to use a new language, you had to convince your sysadmin to install it. Now everyone (at least everyone who reads slashdot) is sysadmin of their own server. That changes everything: if you build it, they will come. I think that will make the next few years a period of rapid innovation in programming languages.
(At the very least, we'll probably see more Lisp features in Perl and Python.
You completely miss the point. If you want to address your so-called software crisis - which is only a crisis when you have unrealistic expectations, based on ignorance or denial of the issues being faced - then you need to provide humans with languages that allow them to express programs in powerful ways, that make programming easier and more reliable. Focusing on the 1's and 0's completely misses the fact that the challenges lie at the level at which the humans controlling the machines operate.
Academia has produced many innovations in these areas. All modern mainstream languages can benefit from these "new" language technologies (some of which are actually decades old). The LL1 workshop was about communicating between those who have developed sophisticated and powerful ways of dealing with language problems, and those who have a record of having implemented languages that are popular with humans - languages that are used not because of mandate from on high, but because they're perceived as easy to use and also powerful, and thus desirable to use.
An additional interesting element here is that the mainstream "Lightweight Lanugages", like Perl and Python, have a better track record than the big commercial languages of incorporating these ideas - witness the fact that Perl and Python support advanced capabilities such as closures and continuations, whereas other recent languages, like Java, have limited to nonexistent support for such things.
A collaboration between the authors of mainstream lightweight languages, and academic language researchers, opens the possibility to accelerate language development in a sorely needed way - instead of innovations taking literally decades to make their way from academia to the mainstream (e.g. the way object-orientation did), this lead time could be reduced to mere years.
In addition, via lightweight languages, these features would be delivered in a form more palatable to the audience consuming them. Lightweight languages tend to recognize the pragmatic needs of their users, as opposed to imposing restrictions based on aesthetic constraints such as "elegance".
In summary, the plethora of lightweight languages is a simple reflection of a dynamic and fast-evolving ecosystem, an absolute requirement for further progress in the extremely complex endeavour of humans programming machines.
just use PHP, based on THE language.c.
I wrote a paper about it. Although it's true I am a pointy-headed academic, I do occasionally hack a few lines of code, and I when I've solved a problem over in the research world whose solution would be useful to hackers, I try very hard to write papers that are readable by your generic hacker.
If you go here http://www.cc.gatech.edu/~shivers/citations.html you'll see a list of papers I've written. These are the ones that people in the perl/scripting/lightweight-languages community might find interesting:
-
A universal scripting framework
-
The SRE regular-expression notation
-
Atomic heap transactions and fine-grain interrupts
-
Automatic management of operating-system resources
-
Continuations and threads: Expressing machine
concurrency directly in advanced languages
-
Supporting dynamic languages on the Java virtual machine
-
A Scheme shell
-
Scsh reference manual
#1 is the lightweight-languages paper on which my talk last week was based. By the way, the expect/chat & make replacements I mention in the future work section of that paper are basically done. I've three students at Georgia Tech who are wrapping up the implementation of a nice recompilation system called sake (pronounced "sah-kay," like the fish), which I like very much. A student who worked for me at MIT two years ago did an expect & chat replacement. (Lots of the scripts in my#2 has an opening flame about a problem in the open-source community I call "the 80% solution" problem. The regex notation it describes is now standard with scsh.
#4 & #6 will be of interest to VM designers.
#8 is, ahh, somewhat more well known for its non-technical content. But I'm on a new set of meds now, and doing a lot better, really.
-Olin
"Christopher Barber gave a talk on Curl, a bizarre little language that fills the same sort of niche as Flash."
... that's terribly myopic.
Come on now
Actually, I had looked at your pages prior to writing the previous message, to make sure I wasn't missing something. I don't see anything to contradict what I was saying. In fact, there are some great examples of hand-waving on your pages: "doing stuff" qualifies as a perfect one.
All of the real problems that computer languages are designed to solve pretty much fall into the category of "doing stuff". Your nine steps don't seem to be much more than a shell architecture, or taken to their logical conclusion, a design for an operating system that has a more streamlined and integrated user interface model. Plan 9 comes to mind. Good for you.
However, this has nothing to do with solving the problems addressed by even the simplest computer language, except in exactly the sense I mentioned: every program consists of "input stuff", "do stuff", "process stuff". You've identified nine such steps - so what? Many more have been identified in work on these kinds of subjects, but it doesn't do anything to simplify real programs in any significant way, since the real work is what's done within the steps. This sort of analysis amounts to little more than an application framework, and in this case, not a particularly rich one.
I even went so far as to read some of your writings about patents. Grand visions are great and fun to play with, but it helps to have some understanding of the issues you're brainstorming about. I get the distinct impression that your formal background in these fields is limited. You might benefit from reading some of the material which I mention in this article. Some great research has been done on the sort of things you're talking about, and to ignore it would be foolish. You've written about the "failure of computer science", but you clearly don't know much computer science, so don't seem to be qualified to make such a claim.
Related to the material I mention in the above-linked message, you might find SCSH (Scheme shell) relevant to your work on VIC. Scheme's hygenic macro capability and support for developing higher-level languages within Scheme lends itself quite nicely to this sort of work - if you want to be able to create and manipulate abstractions, Scheme provides an excellent language to do that in. Learning Scheme is also a wonderful doorway to advanced directions in current language research.
You've made reference to computer science and related fields being elitist - but given the free availability of so much research and educational writing, the only qualification for entry is the ability to understand. If you don't have that, that doesn't make the field elitist, it just means that you need to seriously consider whether this sort of work is really what you're suited to. If I wanted to be a carpenter yet was incapable of visualizing or dealing with 3D forms, so that the items I built collapsed, what would your advice to me be? Would I be justified in suggesting that carpentry is elitist, that carpenters are imposing arbitrary requirements on the field, and that I ought to be able to build things without knowing any of the boring and petty details of carpentry?
---
"The mark of a truly intelligent person is the ability to introspect realistically."
That way the sets of "library stuff" already existant could be used, and they're not left re-implementing everything from the compiler on down...
If you're not part of the solution, you're part of the precipitate.