Introduction
What's New?
The List of SDKs
Benchmarking
Acronym Glossary
Links
One of my interests is in being able to develop software for the Pilot.
When it comes to developing software for the pilot (and for other platforms!) I don't have the time or the patience to learn a new API and to write complex event loops - I believe that the programming language should provide the basic infrastructure and should let me concentrate on the problem I'm trying to solve and not on getting the right parts of structures filled out, getting pointers to point to the right place and so on. In particular, I gave up using C a number of years ago and have never looked back. I consider Java to be a much superior language (and I'm glad I leapfrogged having to deal with C++!) and also give high marks to various declarative programming languages such as Prolog, Mercury, Haskell, etc. and to scripting languages such as Python, Ruby, Lua, etc.
Another advantage of programming at a higher level and not directly touching the Pilot APIs is portability - a number of the tools and languages described below allow software to run unchanged on both Pilot and WinCE devices. One language (Waba) also allows software developed to run under the standard Java runtime environment - you can run the same program on your Pilot and (as a preview perhaps?) on a webpage as an applet; this is really cool!
By using high level languages (higher than C at any rate) it can become possible to guarantee that programs don't crash the machine (for example by accessing random parts of memory). Debugging also becomes easier.
Finally, a big argument in favour of higher level languages and APIs is productivity:
We are very excited about Satellite Forms and view it as comparable to Visual Basic on Windows. If you can afford it, you should use it. Even if your final shipping application is based in C, this environment is great for rapid prototyping. It allows quick development of applications without forcing you to get involved in the low-level nuts and bolts of creating an application from scratch.
Let's put it this way--if we (veteran C/C++ programmers) were writing any application for the Palm OS, we'd first look to see whether we could use Satellite Forms. We give this strong a recommendation because of the experience we had with porting the sample application in this book to Satellite Forms. Don't be fooled by the simplicity of the environment. You can create quite sophisticated applications very quickly with little or no custom code. For example, consider the Sales application that we are developing in this book. Using C, this application has more than 2,000 lines of code and took weeks to write. Using Satellite forms, we created an application with similar functionality in about three hours--this includes the time it took to learn how to use Satellite Forms.
(Palm Programming: The Developer's Guide, towards the end of section 2.4)
DISCLAIMER: This page reflects my opinion and assessment. It is intended to provide primarily facts and links, not opinions. How much I write about a product has no correlation with whether I consider the product to be good or not.
If you would like to suggest some tool I don't know about, correct me on some point, or give me any other feedback, please feel free to send me an email.
13th December 2005: Updated URL for Pocket VisualForms
24th November 2005: Update HSPascal (now non-commercial, thanks to John for updating me). Also fixed URL for PocketStudio.
1st September 2005: Fixed link to ppforth and updated Satellite Forms. (Thanks Andy!)
23rd June 2005: Removed some dead links and updated comment about Quartus being one of two platforms able to generate native code (which was true when I wrote it, but subsequently other platforms with this facility have appeared).
16th May 2005: Quartus update: new version.
2nd February 2005:
Updated Dragon Forth (now GPL)
Also minor updates to Quartus and PP.
28th October 2004: Updated OnboardC listing.
4th September 2004: Added Palmphi.
14th August 2004: Added benchmarks for LaFac and iziBasic.
11th August 2004:
(yikes, almost a year since the last update!)
Added LaFac and iziBasic
7th September 2003:
Added PP benchmark.
16th July 2003: Added SHARK
8 April 2003: Added nano-false
9 March 2003:
13 January 2003: (Happy new year!)
16 December 2002: New version of OrbForms Designer.
23 November 2002:
9 November 2002: Added benchmark for NS Basic 2.1 and 3.0,
updated file for Metrowerks benchmark, and fixed typo in table.
28 October 2002:
27 September 2002:
New version of OrbForms Designer.
23 August 2002:
8 July 2002: New version and price for CASL
14 June 2002: Minor clarification to benchmark table
13 June 2002:
11 May 2002:
12 April 2002:
12 March 2002:
7 March 2002:
12 February 2002:
4 January 2002:
17 December 2001:
10 November 2001:
15 August 2001:
14 June 2001:
21 May 2001:
11 May 2001:
10 May 2001:
13 April 2001:
29 March 2001: Fixed description
of High Speed Pascal
22 March 2001:
21 March 2001:
4 March 2001:
27 February 2001: Added Pippy (Python for the Palm Pilot)
6 December 2000: Added AppForge
29 Sept 2000: Added benchmarking for HotPaw Basic
and updated benchmark for version 3.8 of PocketC.
27 Sept 2000: Added link to NS Basic review.
24 Sept 2000: Restructured the page:
23 Sept 2000: New SDKs/products:
Added HB++ (and benchmark)
Added cbasPad 5 and benchmark
results (thanks to Ron Nicholson)
Added Pocket VisualForms
Added note about the Metrowerks CodeWarrior
benchmark.
Added link to Bench2 - a better benchmark by
Laurent Duveau.
Added PP (onboard pascal compiler).
Added link to TinyLogo.
Added C++ frameworks (brief)
Added Pendragon (thanks to
Luu Duong)
New benchmark: C (Metrowerks CodeWarrior 8.3,
courtesy of Scott Elliott)
Added Rexx
Updated Onboard C (now open-source)
Updated Plua (new version)
Updated Dragon Forth (now has web page)
Updated PocketStudio (version 1.1,
added price information)
Added benchmark for Pocket Studio (courtesy of Scott Elliott - Thanks!)
Updated High Speed Pascal (now released)
Added picoBASIC
Added more benchmarks.
Added OrbForms Designer
Updated description of superwaba under Waba.
Added Palm TCL.
New version of HotPaw; also updated benchmark (thanks
Ron!)
New version of LispMe.
Added www.pdatnutsandbolts.com to pdatoolbox.
Updated AppForge benchmark and URL
for AppForge synopsis.
Fixed link to ppforth.
Added NS Basic Benchmark
Updated versions of PocketC and of LispMe.
Fixed SmallBASIC link.
Added Karel
Added mobileStudio C++
Added Kinectivity Studio
Added Lyme
Added additional benchmarks to the benchmark table.
Added Plua and benchmark.
Added ppforth.
Added New CASL benchmark courtesy of Frank O'Brien.
Added Poplet and updated Action Pad.
Added Poplet benchmark.
Added PalmLog and PalmTao.
Updated DB2 Everyplace description.
Added Dragon Forth
Added High Speed Pascal
Added PocketStudio
Added Kada VM
Added AppForge benchmark
Added PDA Toolbox
Added SmallBASIC
Added ScriptEase:Integration SDK
Fixed link to Scheme (under LispMe)
Added
CASL
vs NSBasic and AppForge to CASL.
Added links to
WabaJump and
SuperWaba to Waba.
The List of Software Development Kits (SDKs)
(Note that all prices are in US dollars) Quick Reference
Palm Hosted
PC Hosted
PC Hosted: GUI Builders
PC Hosted: Java
PC Hosted: Other
C Frameworks
Palmphi is a free
windows-based integrated
development environment that provides a graphical GUI builder, class browser and
other assistance with programming. The language used is C.
(thanks to Bill Cianfrani for pointing it out)
The following use C++, but are alternatives to Palm's standard APIs. (thanks to Scott Elliott for pointing them out)
I've had a quick look through the documentation. CASL
seems to be strongly oriented to IS vertical applications
(surveys, forms, data collection, inventory). CASL
provideds an IDE which runs on the PC and includes a drag
'n drop GUI builder. Functionality is specified using a
scripting language.
Size: 41K
Version examined: 2.5
Cost: $64.95
Current version (24 sept 2000): 3.0
CASL and Satellite Forms are quite similar. The differences between them that are apparent include:
Frank O'Brien has an independant CASL page with examples of source code, tips, programs, tools and other stuff. Frank's CASL page also has a comparison between CASL, NSBasic and AppForge.
Update email from Mark, a CASL user:
I just have a few updates about CASL (since I've been using it for about 2 years).There is a "Pro" version (+$40) that compiles directly to C which improves the speed. You can link in C code libraries. Current version is now 3.0
The PC development environment is great since it includes an emulator and debugger (breakpoints, monitor variables, etc) that has saved me from myself many times.
This product is currently in beta and should be shipping in June.
Versions exists for all three major platforms (PalmOS (PalmPilot),
Windows CE, and EPOC (Psion)).
Note name change from Everywhere to Everyplace.
According to John Kovar DB2 now comes with Personal Application Builder - a GUI form design interface which compiles using the GNU compiler.
For rapid application development, DB2 Everywhere will be available
with rapid application development tools. Available with DB2 Everywhere
is the DB2 Application Developer, a visual construction tool for Palm Computing
Platform applications. Soon to be available with DB2 Everywhere support
is Satellite Forms Enterprise Edition from Puma Technology. Satellite Forms
is the leading visual development tool for devices based on the Palm Computing
Platform including 3Com connected organizers, Symbol(R) Technologies' SPT
family of devices, the IBM WorkPad PC Companion, and the IBM WorkPad c3.
With Satellite Forms and DB2 Everywhere, developers can quickly create
sophisticated handheld applications that seamlessly integrate with enterprise
data from the DB2 family of databases and Lotus Notes.
Application developers who choose not to use Satellite Forms or the
DB2 Everywhere Personal Application Builder will find it easy to develop
applications for DB2 Everywhere. DB2 Everywhere's programming interface
supports three industry-standard interfaces. DB2 Everywhere supports a
subset of the DB2 Call Level Interface (CLI), a subset of the Open Database
Connectivity (ODBC) interface, and a subset of the Java Database Connectivity(JDBC)
interface(for EPOC only).""DB2 Everywhere works in concert with IBM Mobile Connect,
a pervasive computing technology that provides direct access to corporate
networks from handheld devices. IBM Mobile Connect manages the automatic
exchange of data between mobile devices and corporate networks. In addition
to synchronizing DB2 applications and data, IBM Mobile Connect synchronizes
email with Lotus Notes, Microsoft Exchange, and personal information management
applications such as calendars and address books. IBM Mobile Connect also
synchronizes applications and software to the mobile device, providing
a complete, integrated solution for the mobile worker.
... It is fast 32bit FORTH system having the following features:This system is ready for 100% palm development process, you can write your programs anywhere only with help of your palm device.Now you can think only about your task, we are making all the rest.
- Full ANS 94 compatibility
- Fast 32bit and 64bit arithmetic
- Multitasking kernel (!)
- Supporting PalmOS from 2.0 to 4.0
- Fast creating of prc and fast cloning the forth system
- Supporting all of 1052 api functions of PalmOS 3.5 with color support
- Automatic and efficient type cast for api calls (!)
- Built in IEEE-754 Float package
- Native interface to well-known library MathLib
- Built in 500 PalmOS error messages
- Clear using of callback functions
- Compatibility with SP-FORTH 3.x/4.x, DS-FORTH 2.x
- Ability to develop and compile your programs on PC
High Speed Pascal costs US$75 or 75 euros
(except for EEC companies outside of Denmark that have an EEC VAT
number; they pay $60)
Update (24 November 2005): HSPascal is now non-commercial (by
donation).
High speed Pascal shares its name (but not much code!) with an earlier commercial product which was available for Amiga and Atari machines in the 90s.
// KarelExample include "karel" main() { turnOn(); setPause(370); loadWorld("karel1world"); while (!blocked()) { move(); if (beeper()) pickup(); } turnLeft(); move(); while (wallLeft()) move(); turnLeft(); move(); while (holdingBeeper()) { drop(); move(); } turnRight(); move(); move(); waitp(); }
The online documentation gives a good feel for using Lyme and the list of functions gives a feel for its capabilities.
Lyme is free and requires PalmOS 3.1 (or better?) and at least a megabyte of free memory.
Update (28 October 2004): OnboardC now includes an integrated document editor
called SrcEdit.
Update (22 August 02):
OnboardC is now available for free from a Yahoo group.
Also, development of it is continuing (as open-source) on
SourceForge.
Update (8 February 2005):
There is a framework called Rapid
Palm GUI by Juergen Bermann which assists with developing GUIs with
OnboardC.
Current version (24 sept 2000): 1.004
Cost: free (used to be $15)
Version 1.0 was released 25 April 2002, followed by 1.0.1 on the 8th of May (2002). OrbForms is shareware with the restriction that applications built with the non-registered version will only run on the Palm emulator. OrbForms costs $95.
27 September: version 1.2.0 released. New features (from the email from Jeremy) include:
NEW Version 2.0.1 released 12th December. New features include code-completion and calltip (displays information on functions and their arguments as you type). Also, the price has been reduced to $85 and there is a personal license for $55 (for non-commercial use and freeware).
Palm Tcl is a open source programming language and development environment for
creating applications for handheld devices running the Palm OS operating
system. Its primary goal is to simplify and accelerate the process of
application development for Palm OS. Palm Tcl allows programmers to write
applications without requiring them to know the intricacies of the Palm OS
runtime environment. Programs written in Palm Tcl are generally an order of
magnitude shorter than their C equivalents and can be written in a fraction of
the time.
(From http://palm-tcl.sourceforge.net/introduction.html)
Jared Norton runs www.pdatnutsandbolts.com: the support site for PDA Toolbox.
This implementation by Willow Fung is written in Java and can be run on Palm
Pilots as well as on certain models of Mobile Phones!
Download
nano.zip
The language is fairly weak - it doesn't have facilities for dynamic memory allocation (actually it does now - see below); but it has quite a rich set of functions for accessing Palm system functionality (graphics, text I/O, timers, pen input and events, memo pad and database access). Although it doesn't have GUI elements, there is a toolkit available which implements them. PocketC allows recursion.
PocketC seems fairly reliable although it does crash sometimes. The developers are aware of this and I'd expect this problem to be fixed soon.
A new version of PocketC (for Palm) has been released.
New goodies include a pointer data type,
memory allocation routines, and the
ability to capture the hardware buttons and the menu
button. Execution speed hasn't changed significantly as
far as I can tell.
Size: 47K (this is the full development environment, runtime only is smaller)
Versions examined: 2.1, 3.7
Current version (17 December 2001): 4.1.1
Cost: $18.50
"PP is a freeware standard Pascal compiler for PalmOS. PP generates true native 68000 executable code (.PRC) from standard Pascal source code. You can use your favorite Palm DOC editor to write your code, and either run PP from the VFSdos console or PP Shell to compile and run your program."
Update (2/2/2005): New website, and there is a resource editor called Bird
The new version (2.0) is based on Squeak and
runs on a number of platforms.
It also targets a number of platforms.
Size: 44K (pocket smalltalk generates a single PRC, the size is 44K plus
the user's code)
Version examined: 1.5 beta
Current version (24 sept 2000): 2.0 alpha
Cost: free
REXX is a programming language designed by Michael Cowlishaw of IBM UK Laboratories. Rexx is an acronym which stands for "Restructured Extended Executor Language". In Mike's own words: "REXX is a procedural language that allows programs and algorithms to be written in a clear and structured way."
...
What makes REXX different from most other languages is that it is also designed to be used as a macro language by arbitrary application programs. The idea is that application developers don't have to design their own macro languages and interpreters. Instead they use REXX as the macro language and support the REXX programming interface.
What is Rexx? from the Rexx FAQ.
update: (1 September 2005) it appears that Satellite forms has moved to http://www.satelliteforms.net/ and that Puma are no longer involved?
Spotless differs from waba in that it supports
the full Java language including threads (!) and exceptions.
On the other hand waba provides a richer and more comprehensive
library for user interface development and for accessing palm pilot
functionality such as databases, graphics, serial IO etc. Spotlet
only provides basic graphics and events (keys and pen up/down/move).
Finally, waba is significantly faster.
Size: 43K
Cost: free
"TinyLogo is a programming language and program execution environment
for the Palm handheld computer. It is especially friendly to beginning programmers
or people who just want to get a simple idea of what programming is all about.
Once TinyLogo is installed, programs can be written and run entirely on the
Palm computer. Also, since TinyLogo programs can be saved and loaded from memos,
they can be exchanged with anyone else running TinyLogo. TinyLogo has over 75
built-in procedures and most importantly, allows you to extend the
language by writing your own procedures.
Within a very short time, new programmers can write their own
procedures to create computer graphics, play music, manipulate words and sentences,
and calculate numbers."
Unfortunately, the standard library which Waba
provides is fairly limited - it has graphics, but no text
output (as in a scrolling console;
however, see my tty library for waba), there are no GUI
elements (although code implementing buttons is given in
the example programs), and there is no way to access
memos.
Version originally examined: 1.0 beta 3
Size: 39K
Current version (24 sept 2000): 1.0
Cost: free (open source)
"WabaJump is a Java API to allow programs written for the Waba or SuperWaba VMs to be compiled to PalmOS PRC files, removing the need for a VM to be installed. This also allows people who currently write Jump programs to use an easy API, while keeping the power and speed of Jump."
What more can be said ... except that the announcement was posted on the 1st of April.
In order to get a feel for how easy it is to use the various languages I decided to write a very simple program under each SDK. An obvious program to try was the following simple benchmark:
x=1000; y=0; while (x>0) {x=x-1; y=y+2;}
Below I give comments on my experience with each of the SDKs used and then give the resulting numbers. The usual caveats for benchmarks apply and then some additional caveats: this is a trivial benchmark and only gives a very very very rough idea of the expected performance.
NEW: A better benchmark has been developed by Laurent Duveau.Click on the name of the SDK to view the relevant source code.
Waba version 1.0 beta 4 has been released and it indeed offers a significant performance improvement: the benchmark went from 12 seconds to slightly more than one second. Waba version 1.0 beta 6 offers further performance improvements.
Thanks to Ron Nicholson for running the benchmark.
Platform | Time | Time bar (shorter is better) |
---|---|---|
Metrowerks CodeWarrior 8.3 | see above | |
HB++ | 0.00295 | |
PP | 0.00331 | |
High Speed Pascal | 0.0054 | |
OnboardC | 0.0065 | |
PocketStudio 1.1 | 0.00743 | |
Quartus | 0.0175 | |
CASLPro | 0.18 | |
OrbForms | 0.50 | |
LispMe 3.11 April 2002 | 0.79 | |
PLua 1.0b12 | approx. 0.8 | |
LaFac: HELP | 1.04 | |
iziBasic | 1.17 | |
PDE Standalone | 1.28 | |
SmallBasic | 1.41 | |
PDE PRC only | 1.45 | |
HotPaw Basic 1.2.2b1 | 1.59 | |
LaFac: Micro-Basic | 1.70 | |
PocketC 4.3 | 1.85 | |
CASL | 1.92 | |
NS Basic 3.0 | 2-3 | |
LaFac: Micro-C and Micro-Pascal | 2.85 | |
NS Basic 2.1 | 5-6 |
Platform | Iterations | Approximate Run Time in Seconds |
Runtime (shorter is better) |
---|---|---|---|
OnboardC (normalised palm m515) | 100000 | 1.21 | |
PocketStudio 1.1 (normalised palm m515) | 1,000,000 | 13.8 | |
OnboardC (original palm III benchmark) | 100000 | 1.61 | |
Quartus | 32000 | 1 | |
Quartus 1.2.1U (99.03.06) | 32000 | 1.04 | |
Action Pad | 100000 | 4.42 | |
The Poplet kit | 100000 | 4.53 | |
Waba (beta 6) | 32000 | 5 | |
AppForge 2.1 | 10000 | 1.62 | |
CASLPro | 1000 10000 |
0.33 3.64 |
|
Spotless | 1000 4000 |
~0.5 1.6 |
|
CASLPro (Frank O'Brien, Palm V) | 1000 10000 100000 |
0.44 4.69 45.37 |
|
CASLPro (me, Palm IIIxe) | 10000 | 4.8 | |
AppForge (Rene van der Meer, IIIc) | 1000 | 0.8 | |
OrbForms (beta) | 1000 | 0.93 | |
Pocket Smalltalk | 1000 | 1 | |
Waba (beta 4) | 1000 | 1 | |
LispMe 3.11 (April 2002) | 1000 | 1.47 | |
PLua 1.0b12 | 10000 | approx 14.8 | |
Hotpaw Basic 1.3.2 (Ron, 1.43s on Vx) |
1000 | 1.9 | |
LispMe | 1000 | 2 | |
cbasPad | 1000 | 2 | |
PDE (Standalone) | 1000 | 2.38 | |
PocketC 3.8 | 1000 | 2.47 | |
PocketC 3.8 (me, IIIxe) | 1000 | 2.54 | |
PocketC 3.7 (Albert J. Franklin, IIIx) | 10000 | 26 | |
SmallBasic 0.8.2 | 1000 | 2.62 | |
PDE PRC only | 1000 | 2.69 | |
Plua | 10000 | 28 | |
HotPaw Basic 1.2.2b1 | 1000 | 2.95 | |
Satellite Forms | 1000 | 3 | |
Hotpaw Basic | 1000 | 3.34 | |
Hotpaw Basic (Rene van der Meer, IIIc) | 1000 | 3.37 | |
PocketC 4.3 | 1000 | 3.43 | |
CASL | 1000 10000 |
3.56 35.81 |
|
PocketC | 1000 | 4 | |
CASL (Frank O'Brien, Palm V) | 1000 10000 100000 |
4.39 43.96 465.52 |
|
CASL (me, IIIxe) | 1000 | 4.44 | |
CASL (Rene van der Meer, IIIc) | 1000 | 4.84 | |
CASL | 1000 | 5 | |
NS Basic 1.06 (Albert J. Franklin, IIIx) | 10000 | 80.17 |
J. Chris Tyburski, from AppForge Inc., has run the benchmark on a Palm III getting a runtime of 1.62 seconds with 10,000 iterations using AppForge 2.1.
The times for Palm OS Emulator 3.0a6 on a Pentium III-500 desktop and Pentium 166 notebook, and on the Palm IIIx OS V3.3, of PocketC and NS Basic 1.06 for 10,000 iterations is (in seconds):PocketC 3.7 Seconds
Pentium III 500 ...... 8
Pentium 166 .......... 28
Palm IIIx ............... 24NSBasic 1.06
Pentium III 500 ..... 25
Pentium 166 .......... 82
Palm IIIx ............... 74Hope this helps. Where NS Basic shines is in the ease of programming, and the quick graphics display/response.
John Hansen ran this benchmark on a Palm m105 using NS Basic version 2,05a. Time taken: 8 seconds (for 1000 iterations). Since I'm not certain how fast an m105 is (compared to a Palm III) I can't normalise. However, clearly, NS Basic performance hasn't seen huge changes from version 1 to version 2 (1.06 to 2.05a to be precise).