[racket] Racket in the large
This reminds me of a project I once, some 20 or more years ago, did for
converting SPSS system files from CDC6400 and CDC205 to SPSS system files to
IBM9000. Unfortunately CDC has gone down shortly after. Different word size,
different character encoding etc. Typically these system files were stored
on magnetic tape, with or without labels. I designed a system for the
conversion in natural language both for interpreting the labels and the data
(may be interspersed with some pseudo code). The task to implement my design
was given to a colleague who was confined to Cobol. The consequence was that
I myself had to provide some code for binary reading of magnetic tapes and
their labels (6 bit encoding to 8 bit encoding) and for the conversion of
alphanumerical and numerical data from CDC to IBM EBCDIC. In the end it
appeared to work very well. Many data that otherwise would have been lost,
were recovered.
This I mention in order to show that good understanding of the required
processes is more important than the choice of the language, although
cooperation between two or more languages may require additional interfaces.
It remains a fact that using a LISP like language, in particular Racket, can
reduce the time for development by at least a factor of 10. Four factors are
important here:
1: The foreign interface of Racket gives full access to all alien formats of
data.
2: Scheme, especially Racket, provides a very reliable representation of
data. Also it provides very high hygiene.
3: Most important: Racket allows a very quick implementation of algorithms
based on data structure (see HtDP)
4: Although PLT Racket does (not yet) claim to include a highly optimizing
compiler, nowadays hardware allows me to use DrRacket to make computations
that (for reason of time and/or memory) could not be made on supercomputers
dating from 20 years ago. Even on the simple laptop I am using to send this
email, I can do much more complicated computations than on a machine that 20
years ago was called a supercomputer.
Nowadays supercomputers may include thousands of processors, usually each
processor having its own memory and interconnected by fast interconnection
network. I have hardly seen any machines with many processors sharing one
single space of memory. Probably because of racing conditions.
I sometimes have dreamt of a multiprocessor machine with one unified memory,
possibly with addition of private memories for mutable data. When
disallowing mutation on memory shared by multiple processors, there could be
a good chance to develop multiprocessor machines running parts of a Racket
program in parallel without requiring the user to specify which can and
which cannot be done concurrently. For example you can imagine a Racket that
computes the arguments of an application in parallel. For a single
invocation of a procedure this does do not much, but think of arguments that
themselves may call functions of arguments that can be computed
concurrently.
Kind regards, Jos
_____
From: users-bounces at racket-lang.org [mailto:users-bounces at racket-lang.org]
On Behalf Of gonzalo diethelm
Sent: sábado, 20 de agosto de 2011 0:08
To: users at racket-lang.org
Subject: [racket] Racket in the large
Hello everyone; this is my first post to this list. I present my apologies
beforehand, because I know these kinds of topics can be easily misconstrued
as trolling attempts or mental masturbation; all I can say in my favor is
that these are real, honest questions on my part. If any part of this has
been discussed before (and I cannot imagine it has not), please point me to
the relevant places and I shall leave in peace; I must say I did go over the
full Google Groups archive for this mailing list and could not find anything
to answer my questions.
I would like to start by saying that I have always had a strong attraction
to Lisp-like languages. In the past years I have been reading on functional
programming topics, specially about Scheme, the Y combinator, macros, Paul
Grahams ramblings, etc., and I can say that I have finally come to
understand the origins of my attraction: the purity, simplicity (of the
basic concepts), elegance and power in functional programming (in general)
and Scheme (in particular) are, in my view, unbeatable. So I declare myself
an outright Scheme lover.
In addition to that, my professional career has always been tied to
programming and software engineering, because that is what I enjoy doing the
most (as opposed to managing). I have had long stints (several years) of
developing in C, C++ and Java. Incidentally, when I am programming in
language X in that list, I usually find myself pining for language X-1 (from
Java to C++, from C++ to C); but I digress
The thing is, I must admit I have a secret desire and it is time to come out
in the open: I want to leave those imperative languages behind and finally
use Scheme for a real, in the large project
There, I feel better now that
I said that!
So let me get to my point before I bore everyone here to death: can my
desire be realistically fulfilled? Can Scheme (Racket) be used for a more
enterprise-y project (console app, GUI app, web app, whatever, accessing
data from any RDBMS in transactional ways) where I will have a team of
developers working on separate parts of the system at the same time? How can
Scheme (Racket) help me with the software engineering aspects of such a
project? Has anybody here had any experience in projects similar to this?
Which brings me to my second question: can Scheme (Racket) be used to
develop all these different kinds of applications (console, GUI, etc.)? Can
anybody point me to real life examples of each type of application developed
with Scheme (Racket)?
[In fact, I specifically came to Racket after having had a grand vision of
being able to develop all the components for a web app (SQL to access the
DB, business logic, HTML for presentation, CSS for styling, JS for
interactivity, even XML for configuration) using a single unified language
(or many small separate DSLs based on a single language) and I have been
kind of surprised at not finding this idea fleshed out anywhere as a
framework, library, module, etc.]
I guess at the bottom of my questions lurks the following (and this is the
non-trolling I was referring to before): if Scheme is the be-all and end-all
of programming languages, how come I dont hear of more success stories
using it, other than Paul Grahams (which, important as they are, in my view
are not recent enough to provoke and inspire anymore)? Where are the flag
web applications, GUI enterprise systems, even console applications, that
have become watershed proofs of Scheme (Racket) as THE SINGLE BEST
programming language there is (something of which I am 100% convinced)?
I really would appreciate (and am thankful for) any insight coming from the
illustrious people on this list. Best regards.
--
Gonzalo Diethelm
_____
Declaración de confidencialidad: Este Mensaje esta destinado para el uso de
la o las personas o entidades a quien ha sido dirigido y puede contener
información reservada y confidencial que no puede ser divulgada, difundida,
ni aprovechada en forma alguna. El uso no autorizado de la información
contenida en este correo podrá ser sancionado de conformidad con la ley
chilena. Si usted ha recibido este correo electrónico por error, le pedimos
eliminarlo junto con los archivos adjuntos y avisar inmediatamente al
remitente, respondiendo este mensaje.
Disclosure: This Message is to be used by the individual, individuals or
entities that it is addressed to and may include private and confidential
information that may not be disclosed, made public nor used in any way at
all. Unauthorized use of the information in this electronic mail message may
be subject to the penalties set forth by Chilean law. If you have received
this electronic mail message in error, we ask you to destroy the message and
its attached file(s) and to immediately notify the sender by answering this
message.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20110820/3e1b1a8a/attachment.html>