Thoughts on Robust Systems

Reading Building Robust Systems, by Gerald Sussman. I'm not done yet, but so far (page 7) the paper is pretty vague and metaphorical. So I thought I'd scribble down some of the slightly-more-concrete thoughts that it triggers in my head:

More...
fanqin: It is no doubt that Replica Louis Vuitton Speedy 30 enjoys h...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Nike Air Max 90: Nike Air Max 90 http://www.airmax-shox.com/7-air-max-90 Air...
nike sports: replica watchLouis Vuitton watch for saleU-boat replicarepli...
NikeAirMax90: hahahhahahah...
replica Audemars Piguet: replica watchesLady Watch watchesLouis Vuitton watchesVacher...
ugg classic tall grey: [url=http://www.whosugg.com]UGGs Clearance On Sale[/url]!A l...
ugg classic tall grey: [url=http://www.whosugg.com]UGGs Clearance On Sale[/url]!A l...
ugg classic tall grey: [url=http://www.whosugg.com]UGGs Clearance On Sale[/url]!A l...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Extracting Queries by Static Analysis

Here's a very interesting paper, Extracting Queries by Static Analysis of Transparent Persistence, by Ben Wiedermann and William Cook. The idea is that instead of constructing a SQL query and then iterating over the results, you just write a program as if all the records in the database are available, and the language automatically figures out what (efficient) SQL query to construct. If-statements are automatically turned into where clauses, and reference traversal is automatically turned into a relational join. Unfortunately the paper doesn't cover the more interesting cases of aggregation or grouping.

More...
[url=http://www.buddyugg.com/]ugg cardy boots[/url]: Now i am very happy, Thank you for my beautiful [url=http://...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Burberry replica: Rolex Day-Date II watch for salereplica FerrariBurberry repl...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
nike sports: watches replicareplica movadoMaurice Lacroix watch for saleo...
replica Audemars Piguet: Christian Louboutin on salediscount Christian Louboutin Pump...

Haskell JPEG decoder

Here's a simple Haskell JPEG decoder. The cool part about it is that the web page that describes the program is the actual source code -- it's a literate haskell program that happens to also be a web page. The program doesn't handle color images, so it's more of an executable tutorial than an actual library for handling jpegs, but it's still pretty cool. I love the fact that the program's "comments" have embedded images.

replica watches: replica watchesreplica BreitlingPiaget watchesebel watchesre...
fanqin: Gucci is famous as top quality, Louis Vuitton Tivoli PM luxu...
Rcat: Respectable Reviews Fat Loss 4 Idiots Review The Tweet Tan...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
Hermes Handbags: carrera calibre 36 white sgpg maurice lacroix replica jim...
nike sports: cheap replica watchesPatek Philippe watchesVacheron Constant...
replica Audemars Piguet: cheap Christian Louboutindiscount Yves Saint Laurent Sandals...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...
Guam: Guam Page | Guam Jobs | Guam Map | Guam Hotels | Guam Home |...

A Monster in my Haskell

Here is a wonderful post by Andrew Pimlott, which introduces monads as monsters. Very appropriate for Halloween. Snippet:

(>>=) should be read as the monster on the left expelling values through its rows of teeth and over its tongue at the function on the right. (Its pronunciation is a sort of bestial hissing that is difficult to describe; when you say it correctly, the terminal may become slightly moist.)
nike af1 light up mens shoes: Nike Men's AF1 Light-up Shoes light up air force light up ...
fitch: People all over the world know the abercrombie and fitch,but...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Indonesia: One Simple Tech - Computer News, Reviews and Guides The For...
Guam: Guam | Guam Page | Guam History | Guam Map | Guam Music | Gu...

Shriram has a blog

There's a guy you may have heard of, named Shriram Krishnamurthi. He's the author of the classic presentation at LL1, The Swine Before Perl. He has also written a free online textbook, Programming Languages: Application and Interpretation, plus scores of papers on programming languages, security, and verification. He's the senior advisor for FrTime, a functional reactive programming language in Scheme, and Flapjax which is the same thing for Javascript. He also happens to be my advisor at Brown.

He now has a blog. You may want to check it out.

nike sports: watches replicaBreguet watchesAudemars Piguet watchesBurberr...
nike sports: watches replicaBreguet watchesAudemars Piguet watchesBurberr...
nike sports: watches replicaBreguet watchesAudemars Piguet watchesBurberr...
Spanish eye: [b][url=http://www.snowyboots.com/]ugg boots uk[/url][/b] [...
ebel watch for sale: [url=http://www.iwcwatches.us/Franck-Muller/]replica Franck ...
ebel watch for sale: replica watchreplica HermesBvlgari watchesFerrari replicaTag...
replica Audemars Piguet: Christian Louboutin on saleChristian Louboutin Boot on saled...
http://www.christianlouboutinbuy.org/: replica watchreplica DeWittFerrari watchesreplica Franck Mul...
buy cheap puma shoes on puma store: Merry Christmas ! Go to puma store buy a pair of puma sneake...
cheap ugg boots: Search UGG Classic Cardy for long, buy uggs boots on ugg boo...

Flapjax

The Flapjax language has just been publically released. This is very exciting, for many reasons.

First, Flapjax is globally persistent. The language comes with built-in server-side storage, and you don't even have to provide the server. User-based ownership is also built in, and data can be shared between users. So you can easily build little web services without having to deal with all the issues surrounding user authentication, email confirmation, secure data sharing between users, building a server farm, etc.

Second, Flapjax is reactive, which means it has a cool dataflow-like, spreadsheet-like mechanism that makes it easy to work with dynamically-changing variables (called behaviors) without having to write a bunch of glue code to propagate changes. For example, you can display the current time, and the user interface will just automatically update whenever the time changes.

Third, Flapjax is web-based, so Flapjax programs are immediately relevant to the modern world. Flapjax grew out of a project that was based on Scheme, and the Scheme part alone pretty much doomed that previous project to irrelevance.

Fourth, Flapjax is built by the same group that I've been working with for the last year or so at Brown, so it's exciting to me personally. I'm currently writing a paper on how to do static optimization for the previous Scheme-based version, and I'm glad to see the ideas live on in a new, more accessible incarnation.

So now you should go read through the Flapjax tutorial. It's entertaining, englightening, and if you're anything like me, it may rekindle your spark of curiosity and excitement.

adgfh: UGG Fake Women's Highkoo Fake UGG Women's Liberty Fake UGG...
Hermes Handbags: rolex winner replica quartz watches replicas wyler hermes ...
nike sports: replica watchesRolex Explorer watchesAlain Silberstein watch...
replica Audemars Piguet: replica watchesMaurice Lacroix replicaRolex Sea-Dweller watc...
uggboots: ugg boots sale at a time when large heat has set off a winte...
indonesia: The Airlines Page. JAL - Japan Airlines. Malaysia Airlines...
indonesia: The Airlines Page. JAL - Japan Airlines. Malaysia Airlines...
adsense: President Inauguration. Sampai Kapan Indonesia Terus Memben...
adsense: One Simple Tech - Computer News, Reviews and Guides The For...
adsense: One Simple Tech - Computer News, Reviews and Guides The For...

Nervous about Mathematica

My computational biology class requires us to use Mathematica. I'm not very familiar with it yet, but I've discovered a couple basic design flaws that make me extremely uneasy using it.

More...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
dasfw: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
replica watches: replica watchesreplica Radoreplica Rolex GMTGlashutte watche...
UGGs: UGG Cardy UGG Cardy Boots UGG Cardy On Sale UGG Cardy Sal...
fanqin: It is no doubt that Replica Louis Vuitton Speedy 30 enjoys h...
adgfh: UGG Fake Women's Highkoo Fake UGG Women's Liberty Fake UGG...
Hermes Handbags: replica jacquet droz cheap louis vuitton wallets gucci kno...
nike sports: cheap replica watchesPiaget watch for salereplica Vacheron C...
replica Audemars Piguet: cheap Christian LouboutinYves Saint Laurent Shoescheap Chris...

Macros and modules and certificates, oh my!

I've spent the last couple weeks trying to what should have been a simple task, and I feel the need to publicly whine and complain about how hard it has turned out to be.

All I want is to fully expand a mzscheme module definition and then do some syntactic rewriting on it. I expected to be able to write something like this:

(define optimize (λ (code) (rewrite (expand code)))

Oh, how naive I was...

More...
ugg boots: Good day! Thx for your great post and Im thinking about how ...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Rolex Datejust II watches: cheap replica watchesRolex Datejust II watchesebel watchesre...
replica Audemars Piguet: replica watchesRolex Submariner watchesLongines watch for sa...

Justified Programming

I think it would be an interesting project to make a language that refuses to run any code that isn't justified by tests. This would basically enforce test-driven development. What I'm thinking of is something like Jester, but built into the compiler (or interpreter).

More...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
dasf: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
fanqin: It is no doubt that Replica Louis Vuitton Speedy 30 enjoys h...
ugg boots sale: uggs on sale ugg classic tall...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
nike sports: cheap replica watchesYachtmaster watch for saleBvlgari watch...
replica Audemars Piguet: cheap replica watchesoris watch for saleGlashutte watch for ...
Allio: Just wanted to say great job with the blog, today is my firs...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Logic in CS: Descriptive Complexity and Curry-Howard

If you're a CS person and you've ever wondered why formal logic matters to you, here are two answers that I've found so far.

More...
Cartier watch for sale: cheap replica watchesTudor watch for saleCartier watch for s...
ugg boots sale: uggs on sale classic tall uggs on sale...
fanqin: Speedy 30 Louis Vuitton Speedy 30 Replica...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
nike sports: replica watchJaquet droz watchesDeWitt watchesRolex watch fo...
replica Audemars Piguet: cheap replica watchesreplica HublotBvlgari replicaPiaget wat...
uggs on sale: The ugg Bailey Button boots is made with 100% premium twin-f...
Salty: Just wanted to say great job with the blog, today is my firs...
Salty: Just wanted to say great job with the blog, today is my firs...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Direction of the Inheritance Arrow

In visual representations of object oriented software designs, people traditionally draw subclass relations using an arrow that points from the subclass to the superclass. This seemed strange to me when I first learned it -- intuitively it seemed like the arrow should go the other direction. I remember reading a justification somewhere, based on the argument that subclasses "knew about" their superclass, but not vice versa. That argument always seemed weak to me.

However, I just realized that the direction of the arrow actually corresponds to implication in logic. In particular, the Liskov Substitutability Principle is exactly the same as Modus Ponens.

Cute.

adgfh: UGG Fake Women's Highkoo Fake UGG Women's Liberty Fake UGG...
UGGs: UGG Cardy UGG Cardy Boots UGG Cardy On Sale UGG Cardy Sal...
fanqin: Gucci is famous as top quality, Louis Vuitton Tivoli PM luxu...
Rcat: Respectable Reviews Fat Loss 4 Idiots Review The Tweet Tan...
ugg boots sale: uggs on sale ugg classic tall...
Hermes Handbags: montblanc bag replica price gucci joy tote apricot breguet...
nike sports: cheap replica watchesU-Boat watchesreplica Rolex GMTreplica ...
replica Audemars Piguet: Rolex Day-Date II watch for saleRolex Sea-Dweller watch for ...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Statically typed scheme

Very interesting post on LtU by Kevin Millikin. He shows a simple transformation to make scheme statically typed. You represent values as a (type, thunk) pair. You make all your primitive operations check the type of their operands before generating a (type, thunk) result. And you simply force the thunk at the top level. More...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
replica Breitling: watches replicareplica BreitlingAlain Silberstein watchesPia...
fanqin: Speedy 30 Louis Vuitton Speedy 30 Replica...
ugg boots sale: uggs on sale ugg classic tall...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Audemars Piguet: replica watchesA.Lange & Sohne watch for salereplica Rol...
uggs on sale: The ugg Bailey Button boots is made with 100% premium twin-f...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Complexity Thoughts

Random thoughts about logic, computability, etc that I was pondering tonight while in the shower.

More...
fitch: People all over the world know the abercrombie and fitch,but...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica oris: replica Franck MullerIWC replicareplica orisRolex Sea-Dwelle...
replica Audemars Piguet: replica watchesoris watchesreplica MontblancMaurice Lacroix ...

syntax-case epiphany

The other day I had a realization that suddenly made syntax-case seem a lot less magic.

syntax-case is not required to evaluate to a syntax object

More...
jerseysleague: chaoying nfl jerseys Giants Jerseys Patriots Jerseys...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Rolex Submariner watches: Rolex Day-Date II watch for saleRolex Submariner watchesrepl...
fanqin: Louis Vuitton Tivoli PM Louis Vuitton Replica Tivoli P...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Audemars Piguet: cheap Christian Louboutindiscount Jimmy Choo Handbagsdiscoun...
replica Audemars Piguet: cheap Christian Louboutindiscount Jimmy Choo Handbagsdiscoun...
replica Audemars Piguet: cheap Christian Louboutindiscount Jimmy Choo Handbagsdiscoun...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Torsors

Suppose you're defining a Point class, and you're trying to write the subtraction operator. What type should it return? Another Point? Or should you invent a new class called Vector? Vectors and Points have exactly the same machine representation, so it seems kind of a waste to create two classes. And yet you have this vague feeling that Vectors and Points really are different, and it might be a good idea to maintain different types for different things. Who knows, maybe it'll catch a mistake in your math. On the other hand, maybe you'll end up having to convert between them all the time, and it'll just end up being annoying rather than helpful.

Here's another example that's a bit more clear cut. Suppose you're working with a version control system, and you want to represent both documents and the differences between documents. In theory both of these could be represented by strings (for example the output from the unix diff command is just plain text). It makes sense to subtract two documents to get a diff, and to add a diff to a document to get a new, patched document. But it makes no sense to add two documents, or to subtract a diff and a document. In this example, it's pretty obvious that you want to keep the types separate, even if the physical representation is the same.

If you've ever found yourself designing a program that has these kinds of concepts, you might want to read about torsors. They're a concept from math that generalizes the idea of things as opposed to differences between things. My favorite quote from that article:

An affine space is like a vector space that has forgotten its origin. A torsor is like a group that has forgotten its identity.

To me, the interesting thing about the concept of a torsor is that it makes it clear that there's a mathematical justification for why addition and subtraction (or multiplication and division) might not have the same types. I love stuff like this. It makes me want to write a Torsor type class in haskell, just because it feels right, even though I have no immediate use for it.

replica rolex: $75 Replica Rolex Watches sale, Our site provides Rolex repl...
jerseysleague: chaoying nfl jerseys Giants Jerseys Patriots Jerseys...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
fasfw: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Bell & Ross watches: cheap replica watchesBell & Ross watchesRolex Datejust I...
fanqin: It is no doubt that Replica Louis Vuitton Speedy 30 enjoys h...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Audemars Piguet: cheap Christian Louboutindiscount Jimmy Choo Handbagsdiscoun...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Representing structure using number theory

The curry-howard isomorphism gives you mapping between formal logic and programming language type systems. There are many different kinds of formal logic, all of which correspond to different type systems.

Logic is all about what you can prove, and so type systems based on logic are all about properties that you can prove about the programs that are typeable in that system. In particular, you're usually interested in 1) whether a program can be typed at all (i.e. whether it obeys the rules of the logic), and 2) what kinds of things you can say about typeable program (e.g. can it "go wrong" by, say, accessing a null pointer).

I'm wondering whether there's a similar isomorphism between something like number theory and type systems. Unlike logic, the point of number theory isn't so much about making sure you follow valid rules of inference. The point of number theory is more about encoding, and discovering, structure. As a simple example, I could imagine using multiplication of primes to represent cross products of types. If you did that, then what does it mean to say that factoring of primes is hard? Is that the same as saying that it's hard to automatically split a data structure into two orthogonal data structures with meaningful operations on them in isolation? In other words, that it's hard to come up with an automated meta-divide-and-conquer algorithm?

My question is whether there are useful insights from number theory that could be applied to programs. For example I just came across quadratic reciprocity. It's a truly strange theorem. If the components of the theorem (primes, squares, modular arithmetic, congruence) could be given a programming language interpretation, what would quadratic reciprocity mean in that interpretation?

This is the same kind of question as asking what gaussian elimination means in terms of a geometric interpretation.

It seems likely that a program interpretation of number theory wouldn't be like a type system at all. Maybe it would be about computable functions, or runtime complexity, or whether an algorithm can be automatically parallelized.

I only picked number theory for this example because 1) it seems concerned with structure and I like structure, and 2) there many many surprising results in it since it's been around for so long. I could equally well have picked differential equations, or topology.

nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
fitch: People all over the world know the abercrombie and fitch,but...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Rolex Submariner watch for sale: replica watchRolex Sea-Dweller watch for saleRolex Submarine...
Rolex Submariner watch for sale: replica watchRolex Sea-Dweller watch for saleRolex Submarine...
replica Audemars Piguet: replica watchesoris watchesreplica MontblancMaurice Lacroix ...

Inference rules in HTML

I hacked together a javascript function to make it easy to write inference rules in HTML. For example, to generate this:

    a→b     b→c
     HYP-SYL
    a→c

I just have to write this:

    rule("HYP-SYL", ["a→b", "b→c"], "a→c"])
More...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
DOGTRAINING: belly fat lose weight jobs for 16 year olds jobs for 14 y...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
omega watches: replica watchesomega watchesTag Heuer watchesLouis Vuitton w...
omega watches: replica watchesomega watchesTag Heuer watchesLouis Vuitton w...
omega watches: replica watchesomega watchesTag Heuer watchesLouis Vuitton w...

Messages for Aliens

Mike Matessa has a cache of the Dutil-Dumas that were sent into space by Encounter 2001, intended to be read by aliens. If you like patterns and puzzles, they make fascinating reading.



Via Shae Erisson

ugg bailey button: Wermke's team Classic Short Ugg Boots classic short sho...
ugg bailey button: Wermke's team Classic Short Ugg Boots classic short sho...
ugg bailey button: Wermke's team Classic Short Ugg Boots classic short sho...
ugg bailey button: Wermke's team Classic Short Ugg Boots classic short sho...
ugg bailey button: Wermke's team Classic Short Ugg Boots classic short sho...
ugg bailey button: Wermke's team Classic Short Ugg Boots classic short sho...
ugg bailey button: Previous studies have shown that humanfetusescan memorize so...
replica Audemars Piguet: Christian LouboutinYSL Platform Pumps&Slingbacks on sale...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...

New Java Verifier

Gilad Bracha writes about the new java verifier that Sun is working on. Interesting pieces inclulde explicit type annotations for temporaries, and no more use of the jsr and ret instructions. Anyone who has tried to do a data flow analysis of java bytecode will especially appreciate the deprecation of jsr and ret.

Christian Louboutin sandal on sale: discount Christian Louboutin Pump discount Christian Loubou...
Jimmy Choo: Alexander McQueen Chloe Christian Louboutin Boots Christi...
Christian Louboutin Boot on sale: cheap Christian Louboutin cheap Jimmy Choo cheap Yves Sain...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
linkboots: UGG Bailey Button UGG Christmas Special Offer UGG Classic ...
linkboots: UGG Bailey Button UGG Christmas Special Offer UGG Classic ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...

PLT Online

I just found this great list of freely-available, online programming language theory books, compiled by Frank Atanassow.

cheap Christian Louboutin Pump: discount Christian Louboutin Boot discount Christian Loubou...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
ugg boots: Good day! Thx for your great post and Im thinking about how ...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...

It's all connected

Reading about dependent types led me to intuitionistic type theory, which led me to Heyting algebras, which led to point-free topology, which brought me back to higher-order functional programming.

I suppose it shouldn't be surprising that in a dependently typed world, the metatheory of a system starts looking a lot like the system itself, but it's still spooky. It's like seeing a series of small, incomplete glimpses of a colossal beast, and then one of those glimpses suddenly reveals that the monster is curling back and devouring itself. I assume there's a deeper intuition behind these connections, which I'm not quite grokking yet.

ugg boots: Good day! Thx for your great post and Im thinking about how ...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Rado watches: cheap replica watchesRado watchesPanerai replicaYachtmaster ...
replica Audemars Piguet: Christian Louboutin on saleChristian Louboutin Wedges on sal...

Dependent Types, and a "Wow" moment

While scanning LtU for articles I had missed, I found Why Dependent Types Matter. I've come across Epigram before, and I was charmed by the idea of programming by choosing a problem-solving technique and then filling in the blanks. However, at that time they hadn't implemented general recursion yet, so my interest level dropped substantially and I decided to ignore the language until it had matured a bit more.

This newest Epigram paper, however, is very interesting. When I got to section 4.1, I had a "Wow!" moment as I finally understood what they meant by "the point of writing a proof in a strongly normalizing calculus is that you don't need to normalize it". This means that they can express statements about expressions and prove that they hold in all cases -- and then the compiler can just rely on the existence proof, without actually having to do any work at runtime.

For example, they prove the trivial rewrite rule "m+(1+n) = 1+(m+n)", via induction on the natural numbers. The proof is simple, but the really amazing part is that because they've expressed the proof in a way that the typechecker can understand, they can use it to rewrite expressions without having to pay any runtime cost. The truly elegant part of this is that the proof is done with almost exactly the same language as is used for regular computation. This really makes the Curry-Howard isomorphism start to feel concrete, to me.

For the weak of heart, they point out that these kinds of proofs are optional -- if you don't want to go through the work, you can just use less precise types, and then programming in Epigram shouldn't be much more difficult than programming in any other strongly-typed functional language.

In section 5, the paper suggests that dependent types can help nail down the specification of a program to the point where the type system will prevent you from replacing subexpressions of the same type (e.g. swapping the true- and false-branch of an if statement). This seems to me to be a static version of tools like Jester, which measures test coverage by searching for code mutations that don't trigger test suite failures. The drawback to tools like Jester is that you may have to run the entire test suite for every mutation -- and with an average of 1 mutation for every 15 lines of code, that can take a very long time. A static version of this seems quite interesting to me, even if it does require thinking hard about how to prove various properties. It's unfortunate, however, that such proofs requiring mucking with the original definition, and changing its type.

If only I wasn't also trying to get through Types and Programming Languages, while also trying to become more familiar with MzScheme and FrTime, while also working full time, I'd love to download Epigram and play around with it a bit. Maybe someday :) I suppose my next step will be to read more about GADTs.

fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
linkboots: UGG Bailey Button UGG Christmas Special Offer UGG Classic ...
linkboots: UGG Bailey Button UGG Christmas Special Offer UGG Classic ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
.us/Alain-Silberstein/">: replica watchAlain Silberstein watchesreplica Alain Silberst...
replica Audemars Piguet: replica watchesoris watchesreplica MontblancMaurice Lacroix ...

MzScheme is surprisingly complicated

I first played around with scheme a few years ago -- enough to get the hang of things like macros and continuations -- and it struck me as a very small, elegant language. But for the last couple weeks I've gotten deep into MzScheme, and I'm coming to realize that it's actually quite complicated.1

More...
rolex replica: rolex replica A.Lange & Sohne replica Alain Silberstein r...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
cheap goods sale.: We are the best online sales for the china wholesale . Here...
nike af1 light up mens shoes: Nike Men's AF1 Light-up Shoes light up air force light up ...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...

Inductive graph algorithms

Here's a paper describing a very elegant view of graphs as an inductive (aka recursive) datatype.

More...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
nike af1 light up mens shoes: Nike Men's AF1 Light-up Shoes light up air force light up ...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...

NEPLS abstracts

Look what I found. The New England Programming Languages and Systems Symposium Series (NEPLS) has a whole bunch of interesting pointers to research projects in programming languages. They have three meetings a year, and the abstracts from the past 14 meetings are available online.

fitch: People all over the world know the abercrombie and fitch,but...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
fanqin: Speedy 30 Louis Vuitton Speedy 30 Replica...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Franck Muller watches: replica watchFranck Muller watchesomega watchesTudor replica...
replica Audemars Piguet: replica watchesoris watchesreplica MontblancMaurice Lacroix ...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Arrows versus Monads

So, haskell uses monads to do IO. Monads are very confusing to most people. Arrows are a generalization of monads, so one would expect that arrows would be even more confusing. However, once I read the arrows paper, which explains how arrows can model stream processors, arrows suddenly seemed like the most natural thing in the world.

More...
fanqin: Gucci is famous as top quality, Louis Vuitton Tivoli PM luxu...
Rcat: Respectable Reviews Fat Loss 4 Idiots Review The Tweet Tan...
ugg boots sale: uggs on sale ugg classic tall...
Hermes Handbags: bell & ross replica watches jaquet droz price replica dewi...
replica Audemars Piguet: replica watchesA.Lange & Sohne watch for salereplica Rol...
replica Audemars Piguet: replica watchesA.Lange & Sohne watch for salereplica Rol...
replica Audemars Piguet: replica watchesA.Lange & Sohne watch for salereplica Rol...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...
123: Cheap Chanel Quilted UGG Fake Ultra Tall 5245 UGG Cheap Wo...

Chasing the Declarative Wild Goose

Recently at work, I've been part of a committee that is trying to figure out a strategic plan for implementing various features. The features are all big and hefty, with several possible implementation paths, and our goal is to try to avoid the kind of schizophrenic codebase that can result from solving every problem on a case by case basis, with no thought given to the possible simplifications and generalizations. Because this committee is thinking about features that may guide the company for the next year or two, I have to remain vague about what exactly the features are, but I wanted to try to share a lesson that I've been learning. Hopefully the vagueness won't make the lesson incomprehensible.

More...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
A.Lange & Sohne watch for sale: replica watchRolex Day-Date II watch for saleA.Lange & S...
womens ugg boots: Buy a pair of womens ugg boots for christmas,women's Classic...
puma running shoes: Now more and more young people love to wear puma running sho...
replica Audemars Piguet: Christian Louboutincheap Christian Louboutin PumpsChristian ...

Composable Memory Transactions

This paper describes a technique for creating composable transactions, based in Haskell. It's an extremely elegant approach, for reasons which are completely unrelated to the fact that it's written in Haskell. Haskell merely allows them to give a static guarantee (via the type system) that the transaction system isn't perverted by the inclusion of non-transactional code.

You may think that "composable memory transactions" are not something that you have ever felt a need for, and therefore this paper is irrelevant to your life. However what the paper is really about is synchronization primitives for multithreaded code -- a topic that I have to deal with all the time. It just so happens that their proposed synchronization primitive has lots of other uses as well.

The authors point out that blocking within a transaction is not composable (due to the potential for deadlocks when other threads wait for locks that the transaction has already aquired), and that if you attempt to avoid blocking by introducing guards on transactions, then that also prevents composability. So instead of allowing blocking, they introduce a "retry" function which aborts the transaction and then schedules it for later execution. As an optimization, they put off rescheduling the transaction until at least one of the variables referenced before the retry has changed. In this way, they have the effect of blocking the calling thread, without locking the transactional store.

In the context of Haskell, the authors simply make retry into a function which returns a special value, which takes priority over any other values it is composed with. This is relatively elegant in the context of Monads, however I think the same effect could achieved in an imperative language by making retry throw a RetryException -- so the technique is not limited to functional programming. On the other hand, imperative languages make it so easy to modify global state that it may probably be difficult to apply the technique reliably to such languages.

(Via Lambda the Ultimate)

Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
linkboots: UGG Bailey Button UGG Christmas Special Offer UGG Classic ...
linkboots: UGG Bailey Button UGG Christmas Special Offer UGG Classic ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
Rolex replica: replica watchesRolex replicaPiaget watch for salereplica Rol...
replica Audemars Piguet: Christian Louboutindiscount Christian Louboutin BootChristia...
louis: Classical And Simple Style Of Louis Vuitton Spring 2010 .Let...

Duck Imprinting

I have to thank Eugene Wallingford for commenting on my blog, because he left a link that led back to his blog. He has a lot of interesting musings there, such as this one which was inspired by a keynote talk by Alan Kay:

Kay reminded us that what students learn first will have a huge effect on what they think, on how they think about computing... Teaching university students as we do today, we imprint in them that computing is about arcane syntax, data types, tricky little algorithms, and endless hours spent in front of a text editor and compiler. It's a wonder that anyone wants to learn computing.
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
cheap goods sale.: We are the best online sales for the china wholesale . Here...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
ugg boots: Good day! Thx for your great post and Im thinking about how ...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
louis: Classical And Simple Style Of Louis Vuitton Spring 2010 .Let...
louis: Classical And Simple Style Of Louis Vuitton Spring 2010 .Let...

Spreadsheets in Python

http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/355045

>>> ss = SpreadSheet()
>>> ss['a1'] = '5'
>>> ss['a2'] = 'a1*6'
>>> ss['a3'] = 'a2*7'
>>> ss['a3']
210
.nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Montblanc watch for sale: cheap replica watchesMontblanc watch for salereplica Rolexre...
replica Audemars Piguet: discount Christian Louboutincheap Christian Louboutin Shoesd...
louis: Classical And Simple Style Of Louis Vuitton Spring 2010 .Let...

Prolog Rules

Surana recently learned prolog, and discovered that it's great at problems involving search -- searching for compiler optimizations, for example. I had the same insight about Scheme a few years ago. I decided to prototype Ripple in Scheme. It turned out to be so easy that it popped my enthusiasm bubble, and I decided that the problem was simply that I had been using Java (where dataflow was hard) instead of Scheme (where it was easy). I can empathize with his comment that "Everything has already been done."

On a slightly different note, I was playing around the other night, using Prolog for a slightly different search problem. My problem related to finding potential runtime errors in code, using a technique called "abstract interpretation". I was only working on paper, sketching out various ideas. But after about fifteen minutes I found that the most natural way of expressing what I was thinking about was to write it down using Prolog's syntax and semantics. I suppose the sign of a sweet-spot language is when you naturally fall into using it for writing pseudocode. Considering how often I find myself aching to redesign the semantics of various languages, the fact that I felt perfectly comfortable using Prolog's goal-directed backtracking model is really saying something.

ugg classic cardy boots: Uggs on sale now.UGG Classic Cardy Boot makes me different f...
UGG Bailey Button Boots: UGG Bailey Button bootsis a new style in 2009.The classic ca...
1: Louis Vuitton , commonly referred to as LV Comes First In 20...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
China Wholesale: We are the best online sales for the china wholesale . Here...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...

Unknown Programming Languages

Andrew Cook posted a link to Bruce Axtens' list of unknown programming languages on LtU. What makes this list really useful is that it gives a brief description of what makes each language special.

More...
supra shoes: Supra Shoes Mens Supra Cruizer Shoes ---Special Men's Su...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
fitch: People all over the world know the abercrombie and fitch,but...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...

Multimethod Dispatch with Continuation Passing Style

This made me stop and gasp:

Now, even a cursory inspection will show that the function call and return continuation invocation are the same thing. What does this mean? Well, of course it means you can do MMD on function returns as well as on function calls.

Just think of the possibilities! Not that any possibilities are occuring to me at the moment... but just think anyway!

cheap goods sale.: We are the best online sales for the china wholesale . Here...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
A.Lange & Sohne replica: Rolex Day-Date II watch for saleA.Lange & Sohne watch fo...
replica Audemars Piguet: Christian Louboutin on saleChristian Louboutin Wedges on sal...

Dataflow in Python

I spent a little time playing around with operator overloading in Python, to create a Python module for doing dataflow programming. I got to the point where I can write code like this:

x = rock(1)
fact = factorial(x)
print fact.get()
x.set(6)
print fact.get()

However because python makes it much harder to work with statements than with expressions, the definition of factorial() is somewhat tortured:

one = rock(1)
two = rock(2)
def factorial(n):
    return _if(n < two, one, n*rock(factorial)(n-one))

Basically I had to turn the if-statement into an expression. And since expressions are always evaluated eagerly, I also had to wrap the recursive function call in order to make it lazily evaluated. It doesn't bother me that the code is sprinkled with calls to rock() to lift all the constants into dataflow-land, but it does bother me that the if statement got so mutilated. After all, part of the appeal of Python is its clear, indentation-based layout. And expressionification destroys that.

In fact, expressionification gets even worse if you're trying to use an iterative version of factorial. I still haven't figured out how to make a dataflow-capable version of this:

def factorial(n):
    result = 1
    while (n > 1):
        result *= n
        n -= 1
    return result

The problem, in essence, is that dataflow is based on creative interpretation of expressions. And I can't figure out how to turn statements into expressions, except by using full-blown functions. But it seems that full-blown functions can't have any mutable state. For example, this code gives the error "local variable 'n' referenced before assignment":

def foo(n):
    def bar():
       n += 1
       print n
    return bar
foo(1)()

So it appears that I'll have to package up all the state into a struct, and pass it in to the function definition. But that requires so much code that I expect it will completely obscure the intent of the function.

ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Audemars Piguet watches: replica watchAudemars Piguet watchesLady replicaYachtmaster ...
adgfh: UGG Fake Women's Highkoo Fake UGG Women's Liberty Fake UGG...
fanqin: Gucci is famous as top quality, Louis Vuitton Tivoli PM luxu...
Rcat: Respectable Reviews Fat Loss 4 Idiots Review The Tweet Tan...
Hermes Handbags: swiss replica hublot big bang watches le baiser du dragon j...
nike sports: watches replicareplica Franck Mullerreplica Rolex GMTmovado ...
replica Audemars Piguet: replica watchesreplica Rolex Day-Date IIFranck Muller watch ...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Native Continuations in Java?

An effort has begun to try to get the JVM to support continuations. If you don't know why that would be a good thing, read this. Apparently it wouldn't be too difficult to make Sun's JVM support them.

lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
dasf: Paul Smith has been collaborating with a few different organ...
faf: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Hublot replica: Rolex Day-Date II watch for saleHublot replicaRolex Milgauss...
fanqin: It is no doubt that Replica Louis Vuitton Speedy 30 enjoys h...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Audemars Piguet: replica watchesVacheron Constantin replicaYachtmaster watch ...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Lazy K

Lazy K is one of those esoteric languages that's meant only as a theoretical exercise, or cruel joke, depending on your perspective. It tickles my fancy for a few reasons:

First, it has multiple syntaxes: lisp-style s-expressions, Jot style binary, and Unlambda style backticks. Each syntax looks different. It's like having a whole new language for every day of the week (except monday and weekends)!

Second, my name starts with K.

Third, it's lazy. :)

Fourth, John Tromp, the author, has a delicately balanced sense of humor: "the identity function is a program which copies its input to its output. Since Lazy K's syntax is such that the empty program is the identity function, the behavior of the UNIX cat utility (without arguments) can be expressed at least as compactly in Lazy K as in any other language."

Fifth, it comes with a compiler so that you can actually write Lazy K programs without going insane.

Thanks to Bill Glover for pointing me at Lazy K.

Christian Louboutin on sale: cheap Christian Louboutin cheap Jimmy Choo cheap Yves Sa...
Christian Louboutin Wedges on sale: Alexander McQueen on sale Chloe on sale Christian Loubouti...
discount Jimmy Choo Shoes: Christian Louboutin Boot on sale Christian Louboutin Pump o...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Piaget watches: replica watchesPiaget watchesreplica GlashutteLouis Vuitton ...
replica Audemars Piguet: replica watchesRolex Submariner watchesLongines watch for sa...

MzVim

MzVim is a project to embed MzScheme into vim. I use vim all the time, but sometimes I miss emacs' programmability. I'm not sure I'll ever get over the hump required actually install this thing, but I'm glad to know it's there.

(Via Ben)

rolex replica: rolex replica A.Lange & Sohne replica Alain Silberstein r...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
cheap goods sale.: We are the best online sales for the china wholesale . Here...
fitch: People all over the world know the abercrombie and fitch,but...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Cartier replica: watches replicaCartier replicaLady Watch for salereplica Pat...
replica Audemars Piguet: Christian Louboutindiscount Christian Louboutin BootChristia...

Cyclone

Yesterday I went to a talk at Harvard, titled "Implementation and Evaluation of a Safe Runtime in Cyclone", by Matthew Fluet.

In this talk we outline the implementation of a simple Scheme interpreter and a copying garbage collector that manages the memory allocated by the interpreter. The entire system including the garbage collector is implemented in Cyclone, a safe dialect of C, which supports safe and explicit memory management...

Greg Morrisett, one of the designers of Cyclone, was also present and answered some of the more advanced questions about Cyclone itself.

Cyclone is a "safe" version of C, and it uses static analysis to catch memory leaks. The talk focused on how to write a garbage collector such that the implementation would be accepted by Cyclone's (strict) memory leak detection requirements. First I'll explain how memory leak detection is done in Cyclone, and then I'll explain why it's not trivial to implement a garbage collector using the scheme.

Cyclone's memory leak detection is based on regions. There are several different types of region, but the relevant kind for this talk was the "dynamic" kind. The main characteristics of dynamic regions are that you can allocate new objects into them incrementally, but they have to be freed all at once in one big batch. Perfect for a stop-and-copy garbage collector.

Cyclone restricts the operations you can perform on regions so it can guarantee that you don't leak regions, and that you don't dereference data within a region after it has been freed. This static analysis is based on the idea of capabilities (unforgeable, uncopyable unique handles). Briefly, all the data in a Cyclone program is statically tagged with the region it belongs to (the tag is part of the type, so "an integer in region 1" is different than "an integer in region 2"). You can't actually *use* the data in a region unless you present the requisite capability to the compiler (each region has its own capability). This is done syntactically, kind of like this:

present (region_capability) {
    ... data in the region can be accessed here ...
}
... but not here...

Note that I used my own syntax here. The actual syntax used by Cyclone seems less intuitive to me.

The Cyclone compiler makes it impossible to leak regions by making it illegal to let a capability go out of scope. It also prevents you from referencing previously-freed memory by revoking the capability for the region as soon as you free it. It's actually a pretty simple and straightforward scheme, so if it seems confusing it's probably because I've explained it poorly.

The garbage collector that Matthew Fluet implemented uses a simple stop-and-copy scheme. In other words it takes an old heap, traces through it to find memory still in use, copies that the memory to the new heap, and leaves a "forwarding pointer" in the old heap so that the garbage collector can handle cycles correctly.

It's the forwarding pointers that make things difficult. Because all datatypes have an embedded region name which specifies what region they belong to, it makes it difficult to come up with a type name for the forwarding pointers. Matthew had a very amusing slide that illustrated this. You end up with a type like this:

A pointer to a block in the region after this one, which has a pointer to a block in the region after the one after this one, which has a pointer to a block in the region after the one after the one after this one, which has a pointer to a block in the region after the one after the one after the one after this one, which has ...

To get around this, they introduced a new primitive into the Cyclone runtime, which lets you express this kind of recursion. There was some explanation about how they "used an existential to prime the pump", and some other feature which made some of the verbosity in the type signature become implicit... but I didn't really follow that part.

However what I did glean from the discussion was that Cyclone's straightforward memory leak detection algorithm doesn't lead to a small, well-defined interface. Case in point: in order to implement a garbage collector they had to extend the runtime. It was a small function (only 5 lines of code) but nevertheless it was not possible at the user level. In effect, they had to introduce a new proof rule into the type system. That's disturbing to me -- it means the type system is incomplete. And these are smart people, so if it wasn't complete to start with, that probably means it'll never be complete.

What's even more disturbing is that at the end of the talk, Norman Ramsey asked how they would implement a generational garbage collector. And the answer was, "We haven't figured out how to do that yet... it may require dependent types." Eeek! Suddenly I realized at a deep level that advanced type systems are equivalent to mathematical proofs, and that if you start trying to prove too much about such an unpredictable beast as a program, it will resist you with a vengence.

Just imagine trying to explain to a systems programmer that the reason they can't implement a "simple" generational GC scheme is because that would require that the type checker be extended to support dependent types. They'll look at you like you have three heads, and then they'll toss you and your silly little language into /dev/null.

fdasf: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Cartier replica: replica A.Lange & SohneCartier replicaRolex GMT watchesm...
Cartier replica: replica A.Lange & SohneCartier replicaRolex GMT watchesm...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
fanqin: Gucci is famous as top quality, Louis Vuitton Tivoli PM luxu...
adgfh: UGG Fake Women's Highkoo Fake UGG Women's Liberty Fake UGG...
Hermes Handbags: swiss replica ulysse nardin watches pre daytona replica rol...
nike sports: watches replicamovado watchesAudemars Piguet replicaRolex Se...
replica Audemars Piguet: discount Christian Louboutincheap Jimmy Choo shoescheap Mano...

Processing

Processing is "a programming language and environment built for the electronic arts and visual design communities. It was created to teach fundamentals of computer programming within a visual context and to serve as an electronic sketchbook."

Given an introduction like that, I expected it to have a much different feel than it does. I expected a domain-specific direct-manipulation model, and I got a thin procedural wrapper. For example, consider this RGB Cube demo. I'd expect the source code to look something like this: More...

cheap goods sale.: We are the best online sales for the china wholesale . Here...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
Rolex Sea-Dweller replica: Rolex Day-Date II watch for saleRolex Sea-Dweller replicaBur...
replica Audemars Piguet: replica watchesRolex Submariner watchesLongines watch for sa...
replica Audemars Piguet: watches replicaLongines replicaRolex Masterpiece replicaRole...

Sing a Song of ABC

From Darius Bacon:

A is for APL, with ciphers arrayed.
B is for BASIC, for kids and for trade.
C was successful, from Dennis, of course.
D is dead Dylan, entombed in closed source.
E is the language that limits your trust.
F is for FORTRAN and decks under dust.
G is for Goedel, a language of logic.
H is for Haskell's expression of magic.
I is for Intercal made up in fun.
J is for Java left under the sun.
K is APL sans its strange faces.
λ's for Lisp and its fond round embraces.
M is ML so your proofs are all sound.
N is the order of growth we must bound.
O for Oberon's slim binary tersity.
P is for Perl's postmodern perversity.
Q was QBASIC in Microsoft's youth.
R stands for art we were taught by Don Knuth.
S is for Smalltalk and corporate spending.
T is for types and flamewars unending.
U is for UML's silly CASE tools.
V is for Verilog -- hardware by rules.
W is web-code, the big killer app.
XML's X, better known as "that crap".
Y is recursion so self-referential?
Z specifies all that's essential.
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
fanqin: Speedy 30 Louis Vuitton Speedy 30 Replica...
edfashionclothes: Thank you for the message!With the advent of Christmas and t...
uggsnowbootsbest: Thank you for the great job!In order to welcome to Christma...
nikeaf1jordanshoes: Good job!Thank you for your message!It help me so much! Chri...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Rolex Masterpiece replica: watches replicaRolex Masterpiece replicareplica BreitlingJaq...
replica Audemars Piguet: discount Christian Louboutincheap Christian Louboutin Shoesd...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Complex Script Rendering

If you like alphabets and the arcane rules that go with them, you'll love this page: Examples of Complex Script Rendering. For example I had never heard of "vowel reordering and splitting" which is apparently common in Indic scripts.

I really love alphabets, for some reason. I especially like ones that modify the shape of their letters based on context, like this example from Tamil:

It's just so beautiful. Mongolian is another beautiful language. I love the contrast of vertical lines and diagonal slashes.

More...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
puma sneakers: Merry Christmas ! Go to puma store buy a pair of puma sneake...
cheap ugg boots: The ugg boots are hot now,Bailey boots,UGG Classic Tall,UGG ...
Yachtmaster watch for sale: replica watchesYachtmaster watch for saleTag Heuer replicare...
Yachtmaster watch for sale: replica watchesYachtmaster watch for saleTag Heuer replicare...
khana: The information in the post is nicely written, I always love...
lvjunpeng: GLT09a12peng01 Aion power leveling Aion power leveling Ai...
kahid: I am happy to find so many useful information here in this p...

Using Data In-Place

Russ Ross posted a question to the LL1 list, asking about any research people have done into allowing higher-level languages to use data structures from other higher-level languages in place. He points out that this is a strength of C -- you can take a pointer to the other language's memory, cast it to whatever type you want, and then go at it. But most high-level languages have their own requirements for how memory is laid out at runtime, and these requirements are almost always subtly different for each implementation.

More...
cheap goods sale.: We are the best online sales for the china wholesale . Here...
fitch: People all over the world know the abercrombie and fitch,but...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Rolex Explorer watch for sale: cheap replica watchesRolex Explorer watch for saleBurberry w...
Rolex Explorer watch for sale: cheap replica watchesRolex Explorer watch for saleBurberry w...
replica Audemars Piguet: Christian Louboutincheap Christian Louboutin PumpsChristian ...

Game Programming is Too Hard

Luke posted a rant summarizing why game programming is too hard. It echoes some of my thoughts about programming at the domain level (Put it in the Syntax), and visualizing runtime behavior (Visualizing Software Designs).

I used to be very interested in graphics programming, and I too ran into the problem of giving up on projects before I even began, simply because the overhead in getting anything working at all was too high. I didn't want to spend two weeks writing a program that only had a weekend worth of interest. My frustration with how difficult it is to write programs is what initially led me to my interest in programming language design.

Christiaon Louboutian boots: Thank you for the great job,it help me so much!With christma...
ugg boots: Thank you for the message supplyer!There are amazing ugg ult...
nishelly: [url=http://www.realugg.com/ugg-bailey-button-c-52.html]UGG ...
replica Audemars Piguet: watches replicareplica Louis VuittonRolex Milgauss replicaRo...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...
cheap paul smith: we know Paul Smith has an ability to anticipate and even s...
Guam: Guam Page | Guam Jobs | Guam Map | Guam Hotels | Guam Home |...
Guam: Guam Page | Guam Jobs | Guam Map | Guam Hotels | Guam Home |...

Interview with Robin Milner

Slashdot linked to a long interview with Robin Milner, creator of ML, and known for hindley-milner type inference.

More...
cheap goods sale.: We are the best online sales for the china wholesale . Here...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
fitch: People all over the world know the abercrombie and fitch,but...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Ferrari watches: replica watchRado watch for saleFerrari watchescroum watches...
replica Audemars Piguet: Christian Louboutin on saleChristian Louboutin Wedges on sal...

It Has Wrinkled Feet

There's an amusing post at Language Log which mentions that in some native american languages, the word for automobile is "it has wrinkled feet". Presumably this is inspired by the shape of a car's tires and/or the tracks those tires leave.

rolex replica: rolex replica A.Lange & Sohne replica Alain Silberstein r...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
cheap goods sale.: We are the best online sales for the china wholesale . Here...
fitch: People all over the world know the abercrombie and fitch,but...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...

Programming Languages Textbook

Here's an online text book (or is it a set of lecture notes?) from Shriram Krishnamurthi's Programming Languages class at Brown. It's quite readable. I'm currently reading through the section on Semantics and Types. If you found the Advanced Functional Programming Wiki useful, then you may like these as well.

More...
replica rolex: $75 Replica Rolex Watches sale, Our site provides Rolex repl...
jerseysleague: chaoying nfl jerseys Giants Jerseys Patriots Jerseys...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
fafw: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Franck Muller replica: cheap replica watchesFranck Muller replicaHublot replicarepl...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Audemars Piguet: watches replicareplica Louis VuittonRolex Milgauss replicaRo...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Scheme needs traits/properties

I just came across this post about the lack of good error reporting in the PLT scheme webserver:

I’m a fan of the PLT Scheme web-server. (I better be or else find another job!) But I get an error message like:
Servlet exception: "car: expects argument of type ; given #"

And when you have 2000 lines of code across four files, not to mention that it might not have been you who called car directly, you start to think, “will I ever find this bug?”

Could I get a line number, or any additional information from the web-server? No. And the bug I filed was closed without resolution in a record 4 minutes.

Now I don't actually know the real reason why the PLT folks don't want to give a line number with their error messages, but I'm going shoot my mouth off and assume it has something to do with the fact that the exception object they're throwing simply doesn't have that information currently, and has nowhere to put it without changing the object type and thereby breaking existing code. In fact I suspect they're throwing a simple string, and not a structured data type.

More...
ugg classic tall boots: Uggs have been identified as a fashion trend for both sexes ...
jerseysleague: chaoying nfl jerseys Giants Jerseys Patriots Jerseys Pack...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
fanqin: Speedy 30 Louis Vuitton Speedy 30 Replica...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Rolex watch for sale: replica watchesRolex watch for saleRolex Air-King watchesHer...
replica Audemars Piguet: replica watchesRolex Submariner watchesLongines watch for sa...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Visualizing Software Designs

In this interview, James Gosling claims that code would be more understandable if it wasn't restricted to plain-text ascii layout. For example, maybe you want to see your code as rich mathematical notation, or as rectangles that represent database tables.

I think this is a good idea as far as it goes, but it misses the real meat of what makes programs difficult to understand. The real problem is that programs are indirect -- they manipulate values that are known at runtime, but are not visible anywhere in the code because the code only shows the static parts of the program. For example, if I'm using a linked list, I won't see anything resembling a series of boxes connected by "next" pointers. At best, I'll see a class definition for a single node, which contains a single next pointer. The only place I'll see an actual list is in my imagination.

More...
Laptop battery: Dell Laptop Battery D5318 Dell Laptop Battery G5260 Dell L...
Laptop battery: Black Dell Keyboard P/N HT514 Black Dell Keyboard P/N NSK-D...
Laptop battery: Dell Laptop Battery 310-6321 Dell Laptop Battery 312-0340 ...
replica rolex: $75 Replica Rolex Watches sale, Our site provides Rolex repl...
jerseysleague: chaoying nfl jerseys Giants Jerseys Patriots Jerseys Pack...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
fwqfd: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
oris watches: Rolex Day-Date II watch for saleoris watchesreplica Longines...

Lightweight Languages 2003

The Lightweight Languages 2003 conference happened on Saturday. Here's my take, presented in chronological order. Skip to the parts on bluespec and Father Time for the interesting parts.

More...
ugg: ugg boots sale at a time when large heat has set off a winte...
ugg: ugg boots sale at a time when large heat has set off a winte...
Mengembalikan Jati Diri Bangsa: Iklan Baris Gratis Iklan Baris Gratis Kaos Kaos | Oes Tsetn...
magicstix: Guam Page. About Guam. Hafa Adai from Guam. Kalakas 671...
Kerja Keras adalah energi Bangsa: Your article very interesting, I have introduced a lot of fr...
paul smith on sale: now, Paul Smith shoes, paul smith clothing, and paul smith ...
123: Cheap Chanel Quilted UGG Fake Ultra Tall 5245 UGG Cheap Wo...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...

Perl 6 Essentials

I started reading Perl 6 Essentials last night. I got it mainly because Dan Sugalski is one of the authors, and because I like the idea of the Parrot VM.

I've been kinda sorta following the Perl Apocalypses, but it's much more convenient to have a book lay everything out all at the same time. The writing style of the book is also significantly more compact than Larry Wall's rambling, tangential style.

Anyway, I have some initial impressions to share.

More...
nike af1 light up mens shoes: Nike Men's AF1 Light-up Shoes light up air force light up ...
ebel replica: Louis Vuitton replica Maurice Lacroix replica Montblanc re...
Rolex GMT watches: Rolex GMT watch for sale Rolex Sea-Dweller watch for sale ...
cheap Christian Louboutin Pump: discount Christian Louboutin Boot discount Christian Loubou...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
replica Audemars Piguet: replica watchesRolex Submariner watchesLongines watch for sa...

Memoization in Haskell

On the LL1 list, it was claimed that strict functional languages make it impossible to cache computations without changing the interface. Alan Bowden replied with this bit of Haskell code that defines a memoized definition of fibonnaci numbers.

fib = ((map fib' [0 ..]) !!)
    where
      fib' 0 = 0
      fib' 1 = 1
      fib' n = fib (n - 1) + fib (n - 2)

This is a very interesting example of Haskell. It makes pleasant use of the mechanics of haskell in order to curry the !! operator so that it's invisible to the caller. But what I like most is that it manages to present a clean example of how to solve almost any dynamic programming problem in haskell, using only a few lines of code.

Unfortunately, while the code is very interesting, it doesn't really address the original problem of providing caching internal to the implementation of a function. In particular, it's not possible to extend this technique to allow cache eviction.

adgfh: UGG Fake Women's Highkoo Fake UGG Women's Liberty Fake UGG...
fanqin: Gucci is famous as top quality, Louis Vuitton Tivoli PM luxu...
Rcat: Respectable Reviews Fat Loss 4 Idiots Review The Tweet Tan...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
Hermes Handbags: cheap burberry handbags louis vuitton wallets sgpg bag ha...
nike sports: watches replicaRolex Sea Dweller watch for saleCartier repli...
replica Audemars Piguet: Christian Louboutincheap Christian Louboutin PumpsAlexander ...
nishelly: [url=http://www.realugg.com/ugg-bailey-button-c-52.html]UGG ...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Dataflow Languages

I want to see more languages that incorporate dataflow, the way spreadsheets do. That kind of execution model is perfect for user interfaces. I once spent some time thinking about a dataflow extension for Java, which I called Ripple. As I recall, Internet Explorer at one point was exploring spreadsheet-style continuously-updated functions for dynamic HTML. This was back around when Netscape came up with their ill-fated (and deservedly so) "layers" hack. I thought IE's data flow feature seemed like a great idea, but I think it died when the market showed no interest (probably because it was too "weird"). Unfortunately I have no idea what keywords to search for to find a reference to this.

Most UI-oriented languages these days seem to be based on events. But it's difficult to maintain invariants using events, unless you program in a stylized way where almost all events call a single "recalculate the entire UI" function. Dataflow would make invariants much easier to maintain, and would make the UI itself more efficient because only the parts that have changed would need to be recalculated.

More...
faf: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
fanqin: market to find a good job. And many young female think that ...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Audemars Piguet: replica watchesVacheron Constantin replicaYachtmaster watch ...
ugg classic boots on sale: You should go to www.uggssky.com who want to buy cheap ugg b...
buy cheap puma shoes on puma store: Merry Christmas ! Go to puma store buy a pair of puma sneake...
cheap ugg boots: Search UGG Classic Cardy for long, buy uggs boots on ugg boo...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Minesweeper with Constraints

This version of minesweeper written in Oz has a "digital assistant" that uses constraint propagation to help you play, by automatically uncovering squares that it can prove don't have mines, and marking mines where it can prove they exist. All in 600 lines of code.

Constraint programming is good reason to learn Oz. Actually, I'll probably learn Alice instead, because I prefer static typing. I really like Alice's explicit laziness with implicit forcing. Plus it has logic variables, dynamic loading, persistence, GUI support, and a repl (read-eval-print loop). I'm starting to get tingles in my stomach just thinking about it. I used to feel that way about Java, back around 1996 and 1997.

Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
cheap goods sale.: We are the best online sales for the china wholesale . Here...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
fitch: People all over the world know the abercrombie and fitch,but...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
replica Rolex Day Date: replica Franck Mullerreplica Rolex Day DateCartier replicare...
replica Audemars Piguet: replica watchesoris watchesreplica MontblancMaurice Lacroix ...

Prolog, Parlog, and the Fifth Generation Project

I've previously heard of Prolog, Parlog, and the Japanese Fifth Generation Project, but I never knew how exactly they were all related. This post over on LtU clarifies their inter-relationships, and how they developed into Oz. Seeing things in context like this makes me more interested in giving Oz another chance (I've tried to pick it up twice before, and failed to get hooked).

This kind of historical perspective is especially difficult to achieve unless you were paying attention to the field at the time. I'm glad Peter Van Roy shared it in a forum where I was paying attention.

More...
replica rolex: $75 Replica Rolex Watches sale, Our site provides Rolex repl...
jerseysleague: chaoying nfl jerseys Giants Jerseys Patriots Jerseys Pack...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
fasf: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
replica Rolex Datejust II: replica watchreplica Rolex Datejust IIreplica PiagetRolex Se...
fanqin: Louis Vuitton Tivoli PM Louis Vuitton Replica Tivoli P...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Audemars Piguet: discount Christian Louboutincheap Jimmy Choodiscount Jimmy C...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Parrot Forth

Dan is building a forth interpreter on top of parrot. As one would expect with forth, it's apparently relatively simple and straightforward. I'm tempted to see how difficult it would be to create a joy interpreter...

anf: People all over the world know the abercrombie and fitch,but...
ugg boots: My wife has very cute, nice and beautiful feet, and when sh...
wholesaler business website, net shopping site, external wholesaler,dvd wholesaler,wholesaler definition,china wholesaler,mutual fund wholesaler,define wholesaler,insurance wholesaler: www.enjoywholesale.com china wholesale clothing,china who...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
dfhtht: The quality of this ugg mayfaire boots is also good, I...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...

Concurrency-Oriented Programming

Peter van Roy, who designed the distribution model for Mozart/Oz, is guest blogging over on Lambda the Ultimate. One of his first posts, Currency-Oreinted Programming, is very interesting, and concisely written. For example, he points out that "Map is a broadcast that collects results, and FoldL is the heart of a concurrent object with internal state (it accumulates an internal state from a stream of messages). "

I was also pleased to read his claim that for objects to be independent, they must be concurrent. He puts into words an intuition I've been developing about how lazy evaluation decreases coupling.

I don't have much to add, other than that you should read the article. I think it's the best of the three he's posted so far.

Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
cheap goods sale.: We are the best online sales for the china wholesale . Here...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
ebel replica: Rolex Day-Date II watch for saleebel replicareplica Yachtmas...
replica Audemars Piguet: Christian Louboutincheap Christian Louboutin PumpsChristian ...

Review: Monads for Functional Programming

Monads for Functional Programming, by Philip Wadler, 1992.

After reading this paper, I think I finally have an intuition for what monads are. They're basically a fold over computations: unit is used to transform values, and bind is used to transform unary function application. The fact that a monad can only fold over unary application is, one would hope, not limiting because of currying (but I'm not sure). The monad laws can be thought of as restricting the fold to having semantics similar to function application (respectively: referential transparency, lambda abstraction, and composition).

More...
fitch: People all over the world know the abercrombie and fitch,but...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Rado replic: cheap replica watchesRado replicaYachtmaster watchesA.Lange ...
replica Audemars Piguet: Christian Louboutin on saleChristian Louboutin Wedges on sal...

Abstract Algebra

Marc Hamman mentioned that category theory makes more sense once you've learned abstract algebra. Category theory is referred to frequently in the more theoretical aspects of static type systems, and so I'm interested in trying to understand it better. Therefore I'm learning about abstract algebra.

You may have heard the terms "ring" and "group". These are terms that come from abstract algebra. Here's a good introduction to the intuition behind rings, groups, and fields. After reading that introduction, I find myself strongly reminded of haskell's type classes. Type classes seem much more similar to abstract concepts like rings and groups than to OO-style polymorphism.

I'm still looking for a deeper discussion of abstract algebra and its uses. Maybe I'll end up getting a textbook or taking a class. Google found this online textbook, but it doesn't seem to have enough concrete motivations to get me to tackle it on my own. The "enrichment" section helps, but I'd prefer if the main text were written like the enrichment section.

There doesn't seem to be anything on abstract algebra in MIT's OpenCourseWare Mathematics section, either.

ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
replica A.Lange & Sohne: cheap replica watchesreplica ebelreplica A.Lange & Sohne...
fanqin: When a girl has Eugenie Wallet experience the poor day, she ...
ugg boots sale: uggs on sale ugg classic tall...
Hermes Handbags: knockoff gucci handbags berkeley monogram br01-92 yellow r...
replica Audemars Piguet: watches replicareplica Louis VuittonRolex Milgauss replicaRo...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...
Guam: The Airlines Page. JAL - Japan Airlines. Malaysia Airlines...
One Simple Tech: One Simple Tech - Computer News, Reviews and Guides The For...

Historic CS Documents

The Historic Documents in Computer Science and Engineering page has links to a lot of papers, plus a few patents. A majority of the links are related to programming languages.

Interesting tidbits: A 1957 German patent describes a technique for parsing arithmetic expressions using a push down stack. Also, pictures of flow-chart templates, for use with pen and paper:

fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
fanqin: Speedy 30 Louis Vuitton Speedy 30 Replica...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Rolex Datejust: replica watchesLady replicareplica Rolex DatejustRolex Milga...
replica Audemars Piguet: Christian Louboutindiscount Christian Louboutin BootChristia...

Logical Joy

I came across Joy again recently. I've stumbled across it a few times over the years, but this time I finally understood the distinction that the Joy FAQ makes between compositional and applicative languages. So I decided to play around with making a Joy version for the Inverted Index Language Shootout. For example, here's a Joy function to remove all duplicate elements in a list: More...

cheap goods sale.: We are the best online sales for the china wholesale . Here...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
fitch: People all over the world know the abercrombie and fitch,but...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
replica Rolex Submariner: cheap replica watchesreplica Rolex SubmarinerRolex Masterpie...
fanqin: Speedy 30 Louis Vuitton Speedy 30 Replica...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...

Advanced Functional Programming

A coworker pointed out that the Advanced Functional Programming class at Harvard has a public Wiki. The semester has only just started, but there's already some interesting comments coming from the daily discussions. For example, on the first day, they had a puzzle of trying to figure out a way of writing postscript in haskell. They came up with something that could handle expressions like "psbegin push 2 push 3 add psend". I'm currently trying to one-up them by making something like "rpn [2, 3, add]" work.

On the second day, they read Why Functional Programming Matters, and then everybody in the class had to post a question. Reading a paper all by itself has a much different feel than reading the paper and then a bunch of comments by other people. For example, some people pointed out that the paper ignores issues like space leaks and over abstraction. Responding to the space leak question, the teacher posted a reference to this paper which describes a profiler for haskell that measures both time as well as space. I'm glad to have found this because space leaks have been a source of serious unease for me when trying to use haskell.

I've added their Wiki's RecentChanges to my list of links to check periodically. If you're interested in this kind of thing you might want to check it out as well.

weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
fanqin: When a girl has Eugenie Wallet experience the poor day, she ...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
nike sports: replica watchreplica BreguetBell & Ross watch for salere...
replica Audemars Piguet: Christian Louboutincheap Alexander McQueen shoesManolo Blahn...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...
buy cheap puma shoes on puma store: Merry Christmas ! Go to puma store buy a pair of puma sneake...
buy cheap puma shoes on puma store: Merry Christmas ! Go to puma store buy a pair of puma sneake...
cheap ugg boots: Search UGG Classic Cardy for long, buy uggs boots on ugg boo...

LL 2003

Oh boy, I'm excited already. The Lightweight Languages 2003 forum will be happening on the weekend right after I move into my new house. So I have a decision to make: shall I stay home and help unpack all the boxes, or shall I waste a whole day of pure hedonistic indulgence at the conference?

Boxes can wait! I'm going to replenish my soul.

wholesaler business website, net shopping site, external wholesaler,dvd wholesaler,wholesaler definition,china wholesaler,mutual fund wholesaler,define wholesaler,insurance wholesaler: www.enjoywholesale.com china wholesale clothing,china who...
uggs: Last weekend, I ordered chocolate ugg classic cardy boots ho...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
fitch: People all over the world know the abercrombie and fitch,but...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Tag Heuer replica: replica watchesTag Heuer replicachopard watch for salereplic...
replica Audemars Piguet: Christian Louboutindiscount Christian Louboutin BootChristia...

Perl Supports #line

I didn't see this anywhere in the Perl documentation, but it's a useful piece of information to know, if you ever find yourself generating Perl code. Perl supports C preprocessor-style #line directives. For example:

    #line 135 script.ci
    die;

The above script will print "Died at script.ci line 135". If you have a syntax error, then the Perl interpreter will claim that the error is at "script.ci line 135". And so on. This is extremely useful for embedding perl snippets inside other files, because you can cause the Perl interpreter to report all errors as if they were in the original file.

What I like most about this bit of hackery is that # is the comment character for Perl, so normally the entire line directive would have been ignored as a comment -- obviously Perl has a special-case hack for supporting this. I think that Perl's handling of #line directives reveals a tiny window through which you can see the entire design philosophy of Perl: in any battle of consistency versus usefulness, usefulness wins.

cheap Jimmy Choo: Christian Louboutin Pump on sale Christian Louboutin sandal...
Tiffany Silver Jewelry on sale: Christian Louboutin Boots on sale Christian Louboutin Eveni...
Tiffany Silver Jewelry on sale: Christian Louboutin Boots on sale Christian Louboutin Eveni...
discount Jimmy Choo Shoes: Christian Louboutin Boot on sale Christian Louboutin Pump o...
.nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
China Wholesale: We are the best online sales for the china wholesale . Here...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
replica Audemars Piguet: replica watchesoris watchesreplica MontblancMaurice Lacroix ...

Declarative Semantics

This post came out of the Blue Sky discussion. The disclaimer for that discussion applies here as well. I expect you to roll your eyes at how impractical it is.

Suppose I write "get http://www.kimbly.org/" in a program, exactly as shown. It won't compile in nearly any programming language. I have to write something more like this:

    url = new URL("http://www.kimbly.org/")
    url.get()

Having a reusable URL class is a lot better than having to work with sockets, but there's still a lot of noise there. From the user's perspective, I have to "quote" the url to turn it into a "string", and then I have to "pass" that string to the "constructor" of a "class". Then I "call" a "method" on the "object" that the constructor "returned". And so on. This is the price of modeling.

Application programmers shouldn't have to do modelling. Once a concept has been added to a library, the programmer should be able to talk about things directly, without having to use programming-language abstractions. This is Blue Sky.

More...
croum watches: replica watchcroum watchesRolex Datejust watch for salecroum...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
fanqin: It is no doubt that Replica Louis Vuitton Speedy 30 enjoys h...
ugg boots sale: [URL=http://www.ugggo.com/ugg-classic-tall-c-52.html]ugg cla...
ugg boots sale: uggs on sale classic tall uggs on sale...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
nike sports: replica watchesMaurice Lacroix watchesmovado replicaJaquet d...
replica Audemars Piguet: watches replicaLongines watchesPatek Philippe replicareplica...
ugg classic tall boots: Uggs have been identified as a fashion trend for both sexes ...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Async Methods in .NET

Yesterday I had to rewrite some C# code at work. We were trying to send a message to a webserver without waiting for a response, but for some reason it would hang after only sending a couple messages. I ended up rewriting it to use asynchronous sockets instead of the WebRequest class.

After I had it working, I realized that while the Begin/End pattern that .NET uses for asynchronous operations is better than not having any asychronous ability at all, it would be even better if it had some kind of syntactic support for this, instead of using callback methods. More...

fsafw: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
DeWitt replica: watches replicaDeWitt replicaYachtmaster replicaLouis Vuitto...
ghis: Thanks for sharing another post. Website Design Calgary...
fanqin: When a girl has Eugenie Wallet experience the poor day, she ...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Audemars Piguet: watches replicareplica Louis VuittonRolex Milgauss replicaRo...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Put it in the Syntax

I just came across this musing by Graydon Hoare:

I have an ongoing thesis at the moment which I'm exploring in the programming language literature, which is that programming language features do well (all other things being equal) when they eliminate either distant or dynamic state and replace it with either close or lexical state. the underlying point being that we may favour language features that facilitate copying and modifying small bits of code -- fragments which work in their new context -- as a fundamental programming activity.

Yeah, what he said! I'm now going to ramble through some less-than-half-baked ideas that have been going through my head recently. I hope you'll take what you can, and forgive the rest.

More...
ewferrewter: It seems that I got the right things! these chestnut u...
ewferrewter: It seems that I got the right things! these chestnut u...
eqwfwer: What forms of payment do you accept for this ugg ultra s...
nike sports: replica watchesMontblanc watch for salechopard replicareplic...
The supplier of most category of goods: cheap Christian Louboutincheap Manolo Blahnik shoesdiscount ...
wang: [url=http://www.realugg.com/ugg-bailey-button-c-52.html]UGG ...
http://www.christianlouboutinbuy.org/: replica watchesreplica Vacheron ConstantinRolex Explorer rep...
http://www.christianlouboutinbuy.org/: replica watchesreplica Vacheron ConstantinRolex Explorer rep...
http://www.christianlouboutinbuy.org/: replica watchesreplica Vacheron ConstantinRolex Explorer rep...
uggboots: ugg boots sale at a time when large heat has set off a winte...

RDF/XML is Readable

Here's an interesting discussion of whether RDF/XML is readable, compared to a custom-made XML syntax for Atom.

My first reaction to this discussion was that when I looked through the example RDF/XML on that page, it seemed pretty straightforward, assuming you're familiar with namespaces. I like how it's able to combine vocabularies from multiple standards (e.g. Dublin Core, FOAF, and XML itself).

My second reaction was that the debate over whether to use RDF or not is very similar to the static- versus dynamic-typing debate. RDF is the equivalent of static typing, and plain-old-XML is the equivalent of dynamic typing. It all comes down to how much the computer is able to understand about what the code/content is supposed to mean. It's interesting to note that most static-typing afficionados these days prefer type inference to explicit type declarations, but RDF/XML is still at the explicit declaration stage. It might be interesting to follow this train of thought further.

My third reaction was that those who are complaining about how RDF isn't as readable as the plain-old-XML syntax should really wake up and realize that even their simpler format is still XML. XML is not readable, people! Give it up!

Also, Bill de hÓra makes a good point that the syntax used to represent RDF is, in a way, more important than the semantics, when it comes to actually writing software that uses RDF.

lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
fwqr: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
fanqin: When a girl has Eugenie Wallet experience the poor day, she ...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
adgfh: UGG Fake Women's Highkoo Fake UGG Women's Liberty Fake UGG...
Hermes Handbags: tag heuer carrera calibre 1 knockoff monaco 24 concept chro...
replica Audemars Piguet: replica watchesA.Lange & Sohne watch for salereplica Rol...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...

N3

N3 is a notation designed to make writing RDF easier. (For those who don't know offhand, RDF is a standard for encoding predicate data in XML).

N3 has some interesting features. For example, it views the "." operator in OO languages as a graph traversal operator, and then promptly provides a "^" operator that traverses the graph in the opposite direction -- something that OO languages cannot do because of the underlying memory model of references and pointers.

Perhaps the most interesting thing about N3 is that it's a notation for a predicate-based data store, designed by someone whose apparent background is closer to C++ and Lisp than to Prolog. As such, it takes concepts from C++ and Lisp and mutates them in ways that force the programmer to think of those concepts in a very different light.

fitch: People all over the world know the abercrombie and fitch,but...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Rolex Explorer watch for sale: replica watchesRolex Explorer watch for saleRolex Datejust w...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Audemars Piguet: replica watchesRolex Submariner watchesLongines watch for sa...

Following Parrot

Here's a useful weekly summary of Perl 6 and Parrot, by Piers Cawley. I've put the link in my list of things to check every week or so.

I really, really hope Parrot works out. It would be great if all the open-source dynamic languages could pool their libraries. Hopefully it would also fuel language innovation, since you wouldn't need to rewrite all of your libraries from scratch.

nike-airyeezy: discount nike air yeezy china wholesale online discou...
ugg boots: Good day! Thx for your great post and Im thinking about how ...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Rolex Submariner watches: replica watchRolex Submariner watchesTag Heuer watch for sal...
replica Audemars Piguet: Christian Louboutincheap Christian Louboutin PumpsChristian ...

Japanese doesn't need Icons

I never thought about this before, but apparently Japanese software doesn't need icons. They have enough one-character words that they're unnecessary. Seems obvious in retrospect. I wonder what they think of software designed by English speakers, like Microsoft Word with all its icons for open-file, save-file, print, etc. Does the Japanese version of Word use ideographs instead?

nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Cartier watch for sale: cheap replica watchesRolex Prince watchesCartier watch for s...
replica Audemars Piguet: replica watchesRolex Submariner watchesLongines watch for sa...

Time vs Space

As I work more with functional languages, especially lazy functional languages, I'm starting to come to a deep understanding of the ways in which data and computation are interchangeable. I alluded to this earlier, in a blog post about perlisisms, and whether the distinction between data and function has any meaning for lazy languages.

I just came across a more detailed discussion of this concept by James Coplien, written in 1998.

(The rest of this post is going to be much less accessible than that article, because I'm too tired and rushed to write clearly right now. If anyone wants me to elaborate on what comes below, post a comment and ask.)

More...
Christian Louboutin Boots: Christian Louboutin Boots Christian Louboutin Pumps Christ...
Yves Saint Laurent Shoes: cheap Christian Louboutin Boot cheap Christian Louboutin Pu...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
try these: Thanks for the good article! Inforgers Magazine My Lov...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
fitch: People all over the world know the abercrombie and fitch,but...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
jerseysleague: chaoying nfl jerseys Giants Jerseys Patriots Jerseys...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...

Continuations as UI Elements

Haystack is a "universal information client" -- a program for integrating all the data that typical users work with (email, websites, rss feeds, etc). It has an interesting feature that I haven't seen in GUIs before: it supports "UI continuations" (look about halfway down the page). Visually, these things look like dialogs with a button that the user can click to complete the operation. Functionally, they're first class objects that can be bookmarked for completion later, or even executed multiple times.

This is similar to using continuations to simplify web programming, but it seems like a different enough application to be worth mentioning.

This, combined with Naked Objects, makes me wonder whether users might one day work directly with concepts that are currently exclusively the domain of programmers. Perhaps application programming as we currently know it will one day be viewed as excessively primitive and timid ("Let the user work with data directly? But they'll mess it up!").

Or from a different perspective, maybe theoretical computer science is really the art of discovering useful user interface idioms. Any guesses as to what the UI equivalent of a monad is? ;)

rolex replica: rolex replica A.Lange & Sohne replica Alain Silberstein r...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
cheap goods sale.: We are the best online sales for the china wholesale . Here...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
fitch: People all over the world know the abercrombie and fitch,but...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Louis Vuitton replica: cheap replica watchesLouis Vuitton replicaPanerai replicarep...
replica Audemars Piguet: replica watchesoris watchesreplica MontblancMaurice Lacroix ...

Closures, Objects, and Poor Men

The venerable master Qc Na was walking with his student, Anton. Hoping to prompt the master into a discussion, Anton said "Master, I have heard that objects are a very good thing - is this true?" Qc Na looked pityingly at his student and replied, "Foolish pupil - objects are merely a poor man's closures."

Chastised, Anton took his leave from his master and returned to his cell, intent on studying closures. He carefully read the entire "Lambda: The Ultimate..." series of papers and its cousins, and implemented a small Scheme interpreter with a closure-based object system. He learned much, and looked forward to informing his master of his progress.

On his next walk with Qc Na, Anton attempted to impress his master by saying "Master, I have diligently studied the matter, and now understand that objects are truly a poor man's closures." Qc Na responded by hitting Anton with his stick, saying "When will you learn? Closures are a poor man's object." At that moment, Anton became enlightened.

Thanks to Anton van Straaten.

weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
fanqin: It is no doubt that Replica Louis Vuitton Speedy 30 enjoys h...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
cheap ugg boots: The ugg boots are hot now,Bailey boots,UGG Classic Tall,UGG ...
nike sports: replica watchesFranck Muller watchesomega watchesLongines wa...
replica Audemars Piguet: Christian Louboutin on salediscount Christian Louboutin Pump...
cheap ed hardy: NFL Jerseys|Arizona Cardinals|Atlanta Falcons|Baltimore Rave...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...
gas trailer: The post is carrying really valuable stuff.I found lots of i...

Erlang is Icky

Erlang is giving me a bad taste in my mouth for two reasons.

More...
Longines watch for sale: replica watchLongines watch for salechopard replicaGlashutte...
adgfh: UGG Fake Women's Highkoo Fake UGG Women's Liberty Fake UGG...
fanqin: Gucci is famous as top quality, Louis Vuitton Tivoli PM luxu...
Rcat: Respectable Reviews Fat Loss 4 Idiots Review The Tweet Tan...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
Hermes Handbags: bell & ross replica watches jaquet droz price replica dewi...
nike sports: replica watchesPanerai watchesRolex Daytona watch for salere...
replica Audemars Piguet: replica watchreplica Rolex MasterpieceRolex GMT replicarepli...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Coroutines in C

Simon Tatham has an interesting variation on Duff's device, used to mimic coroutines in C. The guts are hidden inside macros, so the resulting code actually reads quite cleanly. Something to consider next time you find yourself writing a large state machine, wishing you didn't have to turn all your control statements inside out. Here's an example of the result:

More...
fitch: People all over the world know the abercrombie and fitch,but...
1: Louis Vuitton, commonly referred to as Louis Vuitton Bags an...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
aewrtwet: I love ugg mayfaire boots! It fits perfectly and arrived...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...

Erlang and polymorphism

I haven't started writing my erlang inverted index yet, since I'm still reading the copious documentation. I'm planning to make my inverted index be a process, and internally it will use either ets, dets, or mnesia to store the actual inverted index data.

Since I come from an OO background, I immediately noticed that ets, dets, and mnesia all presented roughly the same API. However erlang requires that all function calls be prefixed by their module, so I can't just write lookup(MyIdx, Key). Instead I have to write ets:lookup(MyIdx, Key), or mnesia:lookup(MyIdx, Key). This seems really unfortunate to me. Yes, it improves readability because there is no indirection involved, but it also decreases maintainability because if I want to switch from one implementation to another, I have to modify every function call.

I had been expecting something more along the lines of Ruby's "duck typing", especially since Erlang is dynamically typed. I can of course simulate the effect by using what Erlang calls "funs", but that would be against the Erlang mindset, and it's clunky to pass around multiple funs.

Apparently the "real" way to do polymorphism in Erlang is at the process interface level. However this begs the question of why there's a distinction between values versus processes, and messages versus functions. I suppose Smalltalk wins here for being more consistent; in Smalltalk, there is no distinction between these things (although Smalltalk objects aren't asynchronous the way Erlang processes are).

I want to point out that I think I do understand the "Erlang way" of doing polymorphism via processes. That's why I intend to make the inverted index a process (although I'm wondering about the performance overhead of passing long lists between processes). The problem that I'm running into is that the Erlang libraries are not designed to be polymorphic. The libraries use functions instead of messages, and so they lose in this respect. I assume that the reason for this is due to performance overhead.

It's not until you find yourself in a language without inheritance, type classes, or multimethods (all of which attempt to provide basically the same feature) that you realize how nice they are. On the other hand, other people have gone through the same learning process I'm going through now, and discovered at the end that they didn't miss polymorphism.

WikiWiki has a discussion of polymorphism in Erlang, as does the Erlang wiki.

jerseysleague: chaoying nfl jerseys Giants Jerseys Patriots Jerseys...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
fasf: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Burberry watches: cheap replica watchesreplica PiagetBurberry watcheschopard w...
fanqin: It is no doubt that Replica Louis Vuitton Speedy 30 enjoys h...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Audemars Piguet: replica watchesA.Lange & Sohne watch for salereplica Rol...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...

F#

I have to check this out. F# is apparently a cross between OCaml and C#. Perhaps in the future people will be able to get hired for working in a functional language!

Still just a Microsoft Research project, but here's hoping. I suspect they'll change the name if it ever gets actually released, since it looks like a four-letter word as it stands. (F#? F#!)

Perhaps I'll add it to the inverted index shootout.

Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
fitch: People all over the world know the abercrombie and fitch,but...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
fanqin: Speedy 30 Louis Vuitton Speedy 30 Replica...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
nike sports: replica watchreplica BreguetRolex Explorer replicaLouis Vuit...
replica Audemars Piguet: Rolex Day-Date II watch for saleebel watch for saleRolex Mas...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Inverted Index Language Shootout -- Haskell

I made a page for the Inverted Index Language Shootout.

I also posted my haskell version, even though I haven't gotten around to performance testing it yet. It amounts to 56 lines of code (not counting comments and tests). It took about 15 hours to write. It gets coolness points because QuickCheck makes testing easy.

replica rolex: $75 Replica Rolex Watches sale, Our site provides Rolex repl...
jerseysleague: chaoying nfl jerseys Giants Jerseys Patriots Jerseys Pack...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
fasfaf: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
http://www.longineswatches.org/Patek-Philippe/: replica watchPatek Philippe replicaCartier watchesreplica Hu...
fanqin: Louis Vuitton Tivoli PM Louis Vuitton Replica Tivoli P...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Audemars Piguet: discount Christian Louboutincheap Jimmy Choodiscount Jimmy C...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Reinventing things

Here's a post I made to the LL1 mailing list.

Bruce Lewis writes:
Geoffrey Knauth writes:

When children learn to walk or talk, do we parents squash their joy (and ours) with a "You aren't the first!" Hardly.

Children see others walking and talking, but it doesn't squash their joy to see that they aren't the first. I think it depends on the attitude with which old-timers tell the story. You remember someone coming up with the same idea 30 years ago? It must be a really good idea to be so memorable. All the more credit to someone who reinvents it.

The problem is that "new" ideas in programming are almost always incompatible with the old ones.

Suppose that the new generation collectively decided to walk in such a way that all the accessory technologies created by the previous generation were completely useless. Shoes, socks, bicycles, wheelchair ramps, and even walking paths in parks -- all would be unusable with the new, "improved" version of walking.

The new generation would gleefully reinvent new versions all these things, while the old generation would point out that it's all a collossal waste of time and money -- all that was really necessary was for the new generation to walk the same way.

It is the duty of those who have "been there" to point out when those who have not are wasting their time. It is *not* their duty to just smile and content themselves with the fact that the newcomers are at least striving towards the same goals, despite not taking advantage of all the work that has already been done.


Some ideas should not be reinvented, unless they also have a way to interoperate with what came before; file formats and internet protocols, for example. Other ideas are meant to be continually reinvented; patterns, for example. And some ideas are in between; execution models and syntax, for example.

ugg boots: Good day! Thx for your great post and Im thinking about how ...
nike-airyeezy.: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
fanqin: Speedy 30 Louis Vuitton Speedy 30 Replica...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Rolex Sea-Dweller watch for sale: replica watchesreplica DeWittRolex Sea-Dweller watch for sal...
replica Audemars Piguet: replica watchesRolex Submariner watchesLongines watch for sa...

QuickCheck

I want to tell you about this cool little tool for haskell, called QuickCheck. What QuickCheck does is test invariants against randomly-generated test cases. An invariant is simply a haskell function that takes an input value, and returns true if the invariant is satisfied, or false if it isn't. You then pass this invariant to QuickCheck, and it generates random input values, and checks to see if any of them break the invariant.

More...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
fanqin: When a girl has Eugenie Wallet experience the poor day, she ...
Hermes Handbags: knockoff gucci handbags berkeley monogram br01-92 yellow r...
UGG Bailey Button Boots: You should go to www.uggssky.com who want to buy cheap ugg b...
nike sports: watches replicaRolex Explorer watch for saleRolex watch for ...
replica Audemars Piguet: cheap Christian LouboutinManolo BlahnikChloe bootsdiscount C...
ugg boots bailey button: Previous studies have shown that humanfetusescan memorize so...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...
Hermes Handbags: Thank you !we offer Hermes Handbags, Gucci Purse,...

Type systems

I should point out that all the languages I'm considering are either dynamically typed, or have a more sophisticated static type system than C++. I'm tired of typing types (with my fingers).

discount Jimmy Choo Shoes: Christian Louboutin Boot on sale Christian Louboutin Pump o...
buy ugg boots: womens ugg ugg classic ugg boots nike dunk SB shoes nike...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
fitch: People all over the world know the abercrombie and fitch,but...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Louis Vuitton repli: cheap replica watchesLouis Vuitton replicaBreitling watchesB...
replica Audemars Piguet: Christian Louboutin on saleChristian Louboutin Wedges on sal...

Programming Language Shootout

Taking inspiration from Doug Bagley's Computer Language Shootout project, I've decided to write a sample program in each of the languages I'm considering for my rewriting-the-dgraph project. The sample program will be one that is relatively central to what the dgraph does: an inverted index.

Anybody who's ever worked on a search engine will know that the inverted index is the central data structure. A google search for inverted index turns up 227,000 documents (the most interesting of which is the paid advertisement from google itself, looking search engine developers).

The idea behind an inverted index is simple: you start with a bunch of documents containing words, and you want to "invert" that, to create a bunch of words each of which lists all the documents that contain that word. Or, in code-speak, you start with a MapDocToWords object, and want to create a MapWordToDocs object (except that I won't be limiting myself to objects).

More...
replica rolex: $75 Replica Rolex Watches sale, Our site provides Rolex repl...
jerseysleague: chaoying nfl jerseys Troy Polamalu Jersey Hines Ward Jerse...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
fsafa: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
fanqin: It is no doubt that Replica Louis Vuitton Speedy 30 enjoys h...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Audemars Piguet: replica watchesVacheron Constantin replicaYachtmaster watch ...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...

(Not) Learning Python

ESR wrote an article a couple years ago called Why Python?, in which he explains that he now prefers Python to Perl. Why? Because when he started using Python, he "was generating working code nearly as fast as he could type." To him, this was an "important measure of good language design".

To me, it's a measure of how uninteresting the language is. It means that Python is the dynamically-typed version of C# -- a polished implementation of the current programming language mainstream. I worked with someone a while ago who described learning Python as "a log-fall" -- like falling off a log. And that's why Python is not one of the languages I considered for rewriting the dgraph. I'm looking for large productivity improvements, and I just don't think I'm going to get it if I use the same OO style that I always use.

Ruby, on the other hand, made the list because it has a strong Japanese influence (who knows what might come of that), and because it has a strong Smalltalk influence, and because I liked Matz (its creator) when I saw him speak at LL2.

I considered adding Mercury to the list, as a statically-typed logic language. But Mercury restricts the Prolog feature set until it's basically just a functional language with integrated backtracking (e.g. no partial data structures). Since backtracking can be done pretty easily by using haskell's lazy evaluation of list comprehensions, I don't think I'm missing much. But then, I don't have much experience with logic programming -- maybe I'm missing a big chunk?

nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
fitch: People all over the world know the abercrombie and fitch,but...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
fanqin: Speedy 30 Louis Vuitton Speedy 30 Replica...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Graham watches: cheap replica watchesGraham watchesHermes watch for salerepl...
replica Audemars Piguet: Christian Louboutin on saleChristian Louboutin Wedges on sal...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Perlisisms

Today's perlisism is: Functions delay binding; data structures induce binding. Moral: Structure data late in the programming process.

Meditate on this. Consider why it is that variables, the most universal of data structures, are not parameterized yet functions are. Wonder why there are so many kinds of data structures, yet only a few kinds of functions. Ask what relationship this has to partial evaluation. Puzzle over what any of this means for lazy languages. Question whether data structures and functions could be unified.

cheap Christian Louboutin: discount Christian Louboutin discount Jimmy Choo discount ...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
fitch: People all over the world know the abercrombie and fitch,but...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
chopard watches: replica watcheschopard watchesRolex Day Date watch for salem...
replica Audemars Piguet: replica watchesRolex Submariner watchesLongines watch for sa...

Haskell

I decided to try rewriting the dgraph in haskell first. I was originally going to try ocaml first, but its syntax just rubbed me the wrong way -- I don't like using semicolons to separate list elements, and I don't like having to use separate symbols for integer and rational arithmetic (+ and +. respectively).

So far, I'm pleased with haskell. At first I tried writing it in bottom-up style, as is my habit. But after a couple hundred lines of code, I decided the ratio of signal to noise was too low. So I switched to top down. Wow! I like it! I spent about an hour figuring out how to encode things, and working through the type errors, and then of course, it just worked. Yes, I know that this is exactly what haskell is all about, so of course it worked. But it felt so good to experience it, instead of just hearing about it.

At the moment, I'm using an algorithm whose runtime I think is O(n3), so I have yet to tackle the performance issues of haskell. We'll see how long the love affair lasts once I try to address performance. I'm also somewhat disturbed by the fact that I don't really know how to estimate runtime or memory usage. I can always measure it of course, but I'm used to being able to figure it out by examining the code.

nike-airyeezy: discount nike air yeezy china wholesale online discou...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Montblanc replica: watches replicaRolex Datejust II watchesMontblanc replicaA.L...
replica Audemars Piguet: Christian Louboutin on saleChristian Louboutin Wedges on sal...

Programming Language Productivity

There are a lot of studies that show that programmers writing in programming language X are N times more productive than programmers working in other programming languages. You can find such studies for C#, Smalltalk, Java, Erlang, Haskell, Python, and even Forth.

But I wonder whether it's even possible to design this kind of study with proper controls. For example, you'd have to control for the fact that "average" programmers don't usually bother to learn new languages; so if you're trying to see how productive a new language is, you can't just find someone who's already familiar with it. That person is probably a better than average programmer anyway.

I'm currently considering rewriting my company's main product in another language, just for fun. It would be a learning experience for myself -- I would learn the product better by reimplementing it, and I would learn the new language better by using it to write a real program. I'm mainly considering erlang, haskell, ocaml, and ruby.

I will consider the project to be a success if the new program is around one tenth the lines of code (doable, since the current product has a lot of optimization code), and not laughably inefficient (which might be a problem for haskell).

Considering that even at one-tenth the size, the program would still be 13,000 lines of code, I would need a very productive language in order to even consider doing this in my spare time. Perhaps I'll just have to try one and see whether it works out.

jerseysleague: chaoying nfl jerseys Giants Jerseys Patriots Jerseys Pack...
zda: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
replica watches: replica watchesPiaget watch for saleRolex Datejust II replic...
fanqin: It is no doubt that Replica Louis Vuitton Speedy 30 enjoys h...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Audemars Piguet: watches replicareplica Louis VuittonRolex Milgauss replicaRo...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...
Indonesia: One Simple Tech - Computer News, Reviews and Guides The For...

With a type type here and a type type there...

There's an interesting discussion on types and metaclasses over on LtU. The discussion centers around whether types should be thought of as sets of values, or whether types should be thought of as algebras, and what exactly the difference might be between those two positions.

As an afficionado of static typing, I think this kind of discussion is very important, especially when considering designing my own languages. The central concern is what things can or cannot be decided statically. Since most of the language features that I wish for all involve deciding various things statically (e.g. checking that a lookup function will complete in constant time), it's an important discussion.

Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
cheap goods sale.: We are the best online sales for the china wholesale . Here...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
replica handbags: lijunrong Tiffany&Co Elsa Peretti Open Teardrop Pendant Neck...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
fitch: People all over the world know the abercrombie and fitch,but...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Alain Silberstein replica: watches replicaAlain Silberstein replicareplica MontblancGla...
replica Audemars Piguet: replica Franck Mullerreplica Bell & RossConcord watch fo...

Earth Minimal

Earth Minimal is an attempt to come up with a minimal set of words to allow people to communicate worldwide.

I like the emphasis on constructing words from smaller primitives (e.g. gray big animal longnose = elephant).

However, I don't like the extensive conjugation (em as a suffix means past tense, en means present tense, etc). I would rather the tenses be conveyed by explicit words, that are entirely optional. For example "I work" could mean "I will work" or "I had already worked", and you rely on context to determine which tense is intended. Chinese works this way to some degree, and I found it very easy to learn.

Rolex Daytona watch for sale: cheap replica watchesRolex Daytona watch for saleRolex Subma...
adgfh: UGG Fake Women's Highkoo Fake UGG Women's Liberty Fake UGG...
fanqin: Gucci is famous as top quality, Louis Vuitton Tivoli PM luxu...
ugg boots sale: uggs on sale ugg classic tall...
Hermes Handbags: bottega venetta handbags hermes handbags replica harry win...
nike sports: watches replicaRolex Datejust watchesRado replicaYachtmaster...
replica Audemars Piguet: Christian LouboutinChristian Louboutin PlatformsChristian Lo...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Java Bloat

First, consider Java's String class. Everytime you create a new String class, you are paying:

  • 12 bytes for the String's object overhead
  • 12 bytes for the String's member variables
  • 12 bytes for the character array's object overhead
  • 2 bytes for each character

So "hello world" consumes 58 bytes of memory, not counting the reference to the String object itself.

Now consider Java's HashMap class. For every entry in the map, you pay:

  • 5 bytes for the reference to the Entry (taking into account the empty entries in the Map, given the default load factor of 75%)
  • 12 bytes for the Entry's object overhead
  • 16 bytes for the Entry's member variables

Now what do you think happens if you create a HashMap whose keys and values are both Strings? A 5 megabyte file will bloat into 50 megabytes of RAM!

The main cost in this situation is the fact that all Java objects have to be created on the heap, with 12 bytes of overhead each, plus a 4-byte reference. If Java allowed classes to embed their member variables instead of having to refer to them indirectly, the String class could save 16 bytes per object. If it also added parameterized types, then HashMaps could embed their entries, and the entries could embed their keys and values -- saving 48 bytes per entry. And if those keys and values were Strings, then you'd end up saving 80 bytes per entry, total.

: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
jerseysleague: chaoying nfl jerseys Giants Jerseys Patriots Jerseys Pack...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
replica Rolex: replica watchreplica RolexBell & Ross watchesRolex Explo...
fanqin: Louis Vuitton Tivoli PM Louis Vuitton Replica Tivoli P...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Audemars Piguet: cheap Christian Louboutindiscount Jimmy Choo Handbagsdiscoun...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Hundred Year Language

I wrote a message to the LL1 mailing list in response to Paul Graham's Hundred-Year Language essay. Here it is.

More...
Tiffany Silver Jewelry on sale: Christian Louboutin Evening on sale Christian Louboutin Pum...
Jimmy Choo on sale: Christian Louboutin Boot Christian Louboutin Pump Christia...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Rolex replica: watches replicaRolex replicaLouis Vuitton watch for salerepl...
replica Audemars Piguet: watches replicareplica Audemars Piguetreplica chopardomega w...
http://www.christianlouboutinbuy.org/: discount Christian Louboutindiscount Jimmy Choo shoesdiscoun...

defmacro

Now I ask you, in what language other than lisp/scheme could you make dynamic programming this easy:

(defun-recurrence fib (n)
  (if (< n 2) 
      n
      (+ (fib (- n 1)) 
         (fib (- n 2)))))

with only 8 lines of code? And here I thought I had gotten over my despair at having to use C++ and Java all day.

: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
fitch: People all over the world know the abercrombie and fitch,but...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
replica U-boat: cheap replica watchesreplica U-boatRolex watch for saleRado ...
nike sports: cheap replica watchesJaquet droz replicaRolex Masterpiece wa...
replica Audemars Piguet: cheap replica watchesRolex Day Date watch for salechopard wa...
replica Audemars Piguet: cheap replica watchesRolex Day Date watch for salechopard wa...
replica Audemars Piguet: cheap replica watchesRolex Day Date watch for salechopard wa...
replica Audemars Piguet: replica watchesoris watchesreplica MontblancMaurice Lacroix ...

Whitespace

I learned about a new language called Whitespace from the the LL1 mailing list. The source code for this language consists entirely of whitespace, with all non-whitespace characters being considered as comments. The site says: "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!"

fitch: People all over the world know the abercrombie and fitch,but...
nike-airyeezy: discount nike air yeezy china wholesale online discou...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
topuggshoes: Ugg Classic Cardy Boots Ugg Classic Tall Boots ...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
cheap replica watches: cheap replica watchesreplica Rolex Daytonareplica Rolex Date...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Audemars Piguet: replica Franck Mullerreplica Bell & RossConcord watch fo...