I've been very pleased with Racket as a programming language, and I quite like 
the DrRacket environment (especially its debuggers).  However, there are some 
serious problems with I/O.  It's more difficult to repair these from a 'user' 
(programmer) standpoint than other problems, because fixing them would require 
writing code for each platform Racket runs on, and most programmers won't have 
access to all those platforms.

The GUI toolkit lacks some common, important, functionality and widgets.  The 
two biggest issues are:
* inability to drag and drop across widgets
* inability to read theme information (like the color for selected/unselected 
title bars)

Since you can write your own widgets in Racket, if those were repaired, it 
would be possible to implement the missing functionality and widgets from 
within Racket.  However, I am told there is great concern for making the GUI's 
look and behave like 'native' ones.  If that is so, then someone with access to 
all the platforms Racket runs on will need to provide access to native 
equivalents.

Missing functionality and widgets include:
* the tree view doesn't allow editing entries by double clicking or dropping 
items onto it, as far as I can tell; this is necessary for file managers and 
some other GUI's
* you can't associate icons with entries in pulldown menus, context menus, list 
views, or tree views
* there is no icon view, nor any way to use the table view as a icon view 
(occasionally done in other toolkits) - this is necessary for file managers, 
image viewers, and some other GUI's
* the table view is primitive - other table implementations support rearranging 
rows and columns by dragging the headers, selecting/deselecting the table by 
clicking the upper left corner (where row and column headers meet), 
selecting/deselecting entire rows or columns by single-clicking the headers, 
sorting the table by double-clicking the headers, dragging to select a 
rectangle of cells, holding Ctrl to add/remove from a selection, and embedding 
checkboxes, listboxes, and spinboxes or associating validators with columns
* there is no toolbar widget - toolbar widgets usually automatically handle 
arranging their buttons along the top, bottom, left, or right sides of the main 
window, below the pulldown menus if those are present
* there is no infobar widget - these are a alternative to dialogs when its okay 
if the user proceeds without responding, they're widely used in web browsers, 
and usually appear below the pulldown menus or toolbar if those things are 
present
* there is no status bar widget - status bars are usually fixed to the bottom 
of the main window, and are divided horizontally into sections that are always 
displayed, while others may be 'overwritten' by temporary messages
* there is no tooltip widget - applications that use them (like DrRacket) 
currently roll their own, which means they /don't/ look native
* there is no spinbox widget (sometimes called a spinner, though "spinner" can 
also refer to a display showing a process is 'busy') - this is a integer or 
floating point display that you can type numbers into, or click the 
corresponding up/down arrows that appear next to them to raise or lower the 
number; the default value, the range, the step size of the arrow buttons, the 
precision when displaying floating point, and optional text to the left or 
right (usually a monetary or percentage symbol) should be configurable; these 
widgets may also support strings where there is some inherent order, such as 
days of the week, though a combo box could be argued to be a better choice
* there is no toolbox widget (sometimes called a accordion widget) - these 
appear as a vertical series of undecorated window title bars, the top one of 
which will be open initially exposing its contents, and when you click another 
title bar the one that was open will close (only showing its title bar) and the 
contents associated with the title bar you clicked will open; see 
http://doc.qt.nokia.com/4.7-snapshot/images/designer-containers-toolbox.png ; 
these widgets are very useful for GUI builders, graphics editors, and similar 
tools
* there is no grid layout, though there is one on PLaneT 
http://planet.racket-lang.org/display.ss?package=table-panel.plt&owner=williams
* there is no window docking support
* there is no Multiple Document Interface (MDI) support
* there is no convenient way to save/restore window layout

I've tried to use the standard terminology so anyone unfamiliar with these 
things could look them up on sites like Wikipedia.  There are some curious 
naming decisions where Racket's widgets are concerned (e.g. I would have never 
looked for "gauge" when I needed a "progress bar").  Hopefully I haven't 
created more confusion in the process.


Out of the box, Racket lacks any way to output sounds.  I find this a strange 
omission.  Even the most boring business application will occasionally need to 
play sounds to notify the user of something.  PLaneT does have PortAudio and 
RSound, which appear to almost solve the problem.  Most sound file formats 
aren't supported, but I suppose support for that could be written in portable 
Racket.  Perhaps at least PortAudio and RSound should be integrated officially, 
lest they go unsupported in the future.


While it may seem like I'm doing nothing but heaping criticism on Racket, 
that's not my intent.  I like Racket a lot, and would prefer to use it for most 
things, but the limited support for I/O has driven me to experiment with 
Clojure and Swing with Java Sound.

                                          
____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to