Here at Untyped Central Dave and I are hacking away like lumberjacks, which is a good thing as the project we’re working on is due soon. We’re constantly running tests and loading code into the web server, and we’ve noticed that these processes have been getting slower and slower. It turns out the bottleneck is the time to parse and byte compile our Scheme code. Simply byte compiling the code beforehand has made an incredible difference. Tests that used to take minutes now run in seconds. Two features of PLT Scheme make it really easy to integrate byte compilation into our development process. Firstly, mzc will follow dependencies when given the -k flag. So we just run mzc -k main.ss and all our code is compiled. Also useful is that PLT Scheme does the Right Thing and loads source code if it’s newer than byte compiled code, so we don’t have to constantly recompile our code. So we can just code away as normal, except every time we take a break we run mzc. Eventually we might write some code to recompile at regular intervals (say, every 10 minutes) but for now it isn’t worth the effort.
Archive for May, 2006
Compile Your Code!
Wednesday, May 31st, 2006Of Interest 24/05/2006
Wednesday, May 24th, 2006If you’re a web developer then you pretty much have to read Brendan Eich’s slides on JavaScript 2 / ECMAScript Edition 4. The quick summary: it looks like Scheme with an optional type system, which is a way of saying it looks damn good. All Hail Professor Bloggy McHerman!
Gilad Bracha’s rant against continuations and the subsequent followups are interesting and infuriating in equal parts. Once again Prof B comes to the rescue. His pedantic aside is particularly important. I’ll also add my own brief rejoinder: I’m not an idiot. Give me all the tools in the toolbox, and I’ll make the decision when to use them. In some situations it is appropriate to use cookies (e.g. login), for others encoding continuations in URLs is the right solution (e.g. persistent URLs), and for others server-side continuations are right (e.g. temporary pages such as form validation)
Seems like no-one really knows how much sleep you should get, but a drug is in development that might do away with the need, for short periods of time. When travelling around Spain I found siestas worked really well. I got by better on 2 sleeps a days, and studies of experts have shown the highest performers often take an afternoon nap. Matt’s on to something in his tree-house.
Interesting Stuff 18/05/2006
Thursday, May 18th, 2006Amazon is a platform, not a retailer. And an interesting platform at that.
The algorithmization of science is the next step to applying mathematics to problems that have been difficult to model equationally. Humanities students better dust up on their computer science!
Google releases a AJAX framework. Catching up to Yahoo on this one. Does anyone care? Well, pundits say AJAX is no different than eating large quantities of chocolate so I guess a lot of women should.
How American are Startups?
Wednesday, May 17th, 2006Dave, living it up at XTech in Amsterdam, IMed me about Paul Graham’s latest. A quick search finds that lightening fast typist Suw Charman offers the best synopsis: Xtech 2006: Paul Graham – How American are Startups?.
There are some good points; nothing surprising if you’ve ever been involved in a startup but it is worth a read. My main gripe: there is no Europe. It is a collection of disparate countries with vastly different governments, values, and so on. Capitalist UK is not socialist Denmark.
That aside, by Paul’s criteria the real Cambridge is pretty close to getting it right. It just might be too expensive for real in-the-garage type startups. When paying the rent is a challenge spending time on a risky proposition like a startup seems less attractive.
More Dagstuhl Talks
Wednesday, May 17th, 2006Modules
Matthew Flatt
A module is "the way you share code with other programmers"
Module systems in different languages: Python, Ruby
Mutually dependent modules are the first issue
Ruby example: mutually dependent modules sometimes work
(when required from files) but dependent on order of
execution. Shows that a module definition is a
side-effecting operation. Similarly a module may be
extended. Hence a module is a runtime concept.
Ruby modules also function as mixins.
MzScheme modules are not side effects. Runtime order does
not matter. However expand time (aka static analysis time)
order does. Mutually dependencies disallowed. Use units
for mutual dependencies. (New!) Unit/signature modules. A
module can be written in a unit or signature language.
External linking — the module no longer decides what it
links to (cf internal linking, the usual method).
Scheme48 modules, known as structures. Similar to MzScheme
units and ML functors. However allows units to export
macros, unlike MzScheme.
Smalltalk modules
Alexandre
Smalltalk 80 has no modules. Distribute changesets.
Changesets have no composition.
VisualWorks/Squeak packages track their changes and so can
be uninstalled. Packages have prerequisites.
Selector namespaces in Modular Smalltalk. They are not
reentrant. Seems to have strange scoping rules.
Classboxes allow re-entrance.
CPAN
Mike Sperber
Pragmatics and deployment.
Tools create boilerplate. Standard format for packaging and
creation.
Online distribution (CPAN) and shell for retrieval and
installation. Can automatically install dependencies.
Perl code may branch depending on installed modules and
versions.
Social features (e.g. number of available modules) make it
difficult to change the implementation. For instance, you
can only have 1 version installed at a time. Cf PLaneT
allows multiple versions. However there are still issues
with loading multiple versions at once.
Java’s Future
Gilad Bracha
JSR-277 attempting to add a module system for Java. Main
interest is deployment, versioning etc.
Initial proposed system: modules are like units –
parameterised.
Actual proposed system: no language changes allowed.
Instead embed using reflective API. Turing complete
therefore any particular implementation possible
(first-class, higher-order, etc.)
Module implementations check for prerequisites at runtime.
Just code, so anything is allowed. Lots of state.
My comments: As usual for Java has taken a
reasonable idea and turned it into a huge hairball.
Soapbox Session
Context-oriented Programming
Pascal Constanza
Make program change behaviour due to context of use
(e.g. personalisation) without making it a huge hairball.
Basically a new type of modularity. Similar to aspects, and
OO inheritance / overriding.
F-Script
Philippe Mougin
Open source scripting language for Cocoa / OS X
Unifies OO and array programming
Interactive environment.
Source Code Mining for Latently-Typed Languages
Dave Mandelin
Extracting information from source code. Perhaps to find
out how to use a library from example code.
Example: what are the types of the arguments in a latently
typed language?
[Reflection!]
BabyUML
Trygve Reenskaug
Modularity, again.
My comments: I didn’t really get this talk, so my summary is brief and perhaps incorrect.
Ambient Oriented Programming
Ambient resources and volatile connections
Non-blocking communication
Reified communication traces
Reified environmental context
OO sans classes to handle code updates
Converge
Laurence Tratt
Pythonic language with compile time metaprogramming ala
Template Haskell.
Converge’s role is to host DSLs, and so must be very
flexible. In a senese a Lisp with curly braces.
Customisable parsing.
Father Time
Greg Cooper
MzTake
Guillaume Marceau
My comments: I’ve seen FrTime and MzTake before
so I didn’t take notes. If they’re new to you check them
out — they come as part of
href="http://www.plt-scheme.org/">PLT Scheme
Binding! The beer of choice for Computer Science
Monday, May 8th, 2006David van Horn and I were wandering around Frankfurt after Dagstuhl when we came across this sign. It’s beer, and it’s also one of the major issues in programming language design. Clearly this is the drink of choice from discerning computer scientists!
Dagstuhl 06181
Thursday, May 4th, 2006Due to what I can only assume was a clerical error, I was invited to the Dagstuhl seminar on latently typed languages. I accepted before this error could be rectified, and so it is that this blog post comes to you from room 23 in Dagstuhl.
There have been a number of talks of various topics of
interest. Being a good student, I’ve taken notes, which I
intend to put online as time allows. You’ll have to fill in
a few gaps but I hope they’ll give you an idea of what has
been discussed. The first talk is below:
Cross Language Runtimes
Wolfgang De Meuter, Marc Feeley, Robby findler, Roel Wuyts et al.
Sapir-Whorf
- not true, but illustrates a problem
- the programming language used determines how we see and
think about the solution e.g. malleable syntax Java vs
Scheme
Ralph Johnson: study at IBM on what characteristics making
people learn Smalltalk more easily. Number one
characteristic was how many languages you already knew. The
more you know the easier it is to pick up new languages.
Matthias F: ppig.org Productivity of programmers is directly
dependent on number of languages they know not the number of
years of experience.
Cross-languages
- mix several languages, choose the right tool for the job
- problem mapping concepts betweeen different languages
Survey cross language systems
Gambit-C (Scheme) FFI to C/C++
(c-define (f x y) (int int) int "f" "" (* x y))
Defines a procedure called f in C, and wraps Scheme
around it.-
c-lambda(inline C)
Matthias F: Scheme is not a safe language as the spec
leaves many things undefined.
ProfessorJ
- Java extended with dynamic, Scheme with contracts.
- Java types mapped to Scheme contracts
Robby F: dynamic is like the Any (TST) type for Java. Too
much to explain now.
SCM2JS Scheme to Javascript
- Embed Scheme is web pages like Javascript (neat!)
- Compile to JS
SHard Scheme to VHDL
- Allow programming techniques and transformations to be
applied to hardware - Dataflow language: extends Scheme with par like Occam
for parallelism - CPS analysis of control flow
- Allows calls to VHDL components
- Key was to implement function calls — so full
programming language can be comiled to hardware
Soul Prolog and Smalltalk
- Logic programming language interpreted by Smalltalk
- Prolog symbols are Smalltalk objects
- Reason about code, using reflection
- LogicAJ Generic AOP language
- Logic meta variables
- Carma Smalltalk + Soul
- Generic AOP language
- Very dynamic
etc [other examples]
Linguistic symbiosis
- Making data and operations from one language accessible
in tohe other language - Essentially quote/unquote between languages
- Requires careful distinciton between evaluation
contexts (between languages) to handle (un)wrapping and
(more importantly) semantics
Robby F: sometimes wrappers must stay around to enforce
constraints when, for instance, mixing static and latently
typed languages.
Andrew Black: copying implementations don’t work in parallel
systems with mutable state
My comments: There were a lot of questions so the talk ended up being a bit rushed. A lot of time was spent on the survey (and answering questions) which unfortunately left little time to really tease out the interesting issues.
The Rumour Starts Here!
Thursday, May 4th, 2006Salacious rumour suggests the next version of Javascript will have tail recursion. We can neither confirm nor deny this rumour, but we can rock an old style w00t!