A lightweight, connected language for small devices
To design a language suitable for execution on a wide range of
consumer mobile devices.
'Consumer mobile devices' includes mobile phones and
PDAs. They are assumed to have some form of outside data
connectivity. These devices have several traits that have an
important impact on the design of the language:
- User interface:
- Small screen, usually black and white graphics only,
with limited text display ability, but greyscale and
colour devices possible.
- Very variable input facilities. Minimum is telephone
keypad, with menu navigation buttons, but may extend to
full keyboard or even a touch screen with handwriting
- 'Push' operations, such as SMS or receiving phone calls,
are often a more compelling reason for owning a mobile
communications device, than their 'pull' equivalent.
- Very little processing power in most of these devices,
although low power/high performance chips such as ARM offer the prospect of
much better performance in the future.
- 'Interesting' memory architechtures further limit
program design. While overall memory may actually be
large, dynamically allocatable RAM may be limited and call
stack size may be limited further still.
- Power consumption is a big issue in many of these
devices. Often they power down into a sleep mode when they
are not doing anything, and may cease to provide
non-essential events (for example, timeouts) to software.
- While these devices may offer the ability to switch
between many applications, they may not provide any
multitasking at the operating system level, leaving that
as an illusion to be maintained by the individual applications.
The most important question associated with any such application
as this is: "What will it be used for?". In my
opinion, a mobile language will be most useful for content
providers to add interactivity to their content. Aside from the
obvious mobile games applications, a stock company, for instance,
that might presently send important alerts as SMS messages or emails,
may use a program running on the users mobile device to display
graphs and other statistics, and offer the user the option to
request more information, or perhaps buy or sell shares.
These objectives are specified in roughly chronological
order. Objectives considered optional are also specified, and
may be qualified with 'preferred' if their completion is to be
preferred for the completion of the project.
- Provide a definition of the range of devices that the
language will run on
- Define the range of services the language will provide
- Define the language semantics
- Define a low-level bytecode for the language
- Define a high-level language for writing applications
- Define a standard library of routines for the language
- (Optional, Preferred) Write a bytecode assembler
- Define assembly language
- Write a BNF grammar for the bytecode
- Create a parser and code generator
- (Optional, Preferred) Implement a bytecode interpreter
- Define assumed device limitations
- Define hardware/OS abstraction layer
- Create interpreter and supporting software
- (Optional, Preferred) Write a language compiler
- (Optional) Design an interpreter intended to allow the
design of short programs on mobile devices
For this project, C is the language of choice. It is implemented
for a very wide range of devices and targets, and there are many
retargetable compilers (such as lcc or gcc) that make
exapanding the range easy. For the purposes of the project, I
will use the Palm Pilot, OS 3.1, as the intended target, as
development tools and emulators are freely available. Flex and
Yacc are traditional compiler building tools, and may make a
good choice for developing assemblers and compilers.
(To be decided)
- Standard UNIX and GNU utilities - gcc, flex, yacc, perl etc
- GNU PalmOS development environment
- PalmOS emulator (I am a registered developer)
The intention is to do most of the development on my home
machine, and maintain offsite backups of the data on the
University system, as well as through my normal CD backup
system. The University system will also be useful for providing
demonstrations of working code.
Last modified: Wed Jun 28 21:31:06 GMT 2000