This is the summary page for the XXICC (21st Century Co-design) project. XXICC was previously hosted at Google Code, which no longer accepts new projects or edits to existing projects. xxicc.org now links to this page.
The latest XXICC release is XXICC (21st Century Co-design) release 0.1a
XXICC (21st Century Co-design) is a not-for-profit research project which attempts to bring digital hardware/software co-design into the 21st Century using an improved programming language and a Reduced Software Complexity philosophy. Its goal is to make it easier and more enjoyable to write and maintain digital hardware and software. XXICC is pronounced “Chicken Coop”, so-called because it has so many layers.
XXICC’s GalaxC programming language narrows the gap between problem domain and language by allowing programmers to extend GalaxC by adding problem domain notations. Instead of adapting the task to the language, they adapt GalaxC to the task. The key extension mechanism in GalaxC is separation of syntax from semantics, a simple yet powerful way to add new notations. This is directly adapted from the Galaxy programming language developed in the late 1980s.
GalaxC programs may consist of ordinary ASCII characters and white space, like C. However, GalaxC programs may also have executable tables, schematic diagrams, comment blocks containing formatted text and figures (not yet implemented), variable names in different fonts, special symbols, string literals containing formatting, and WYSIWYG dialog boxes. This eliminates the need for separate documentation files (which are very hard to keep synchronized with a program) as well as a separate “resource editor”.
These are all edited using the XXICC Object Editor, a unified program and document editor which combines the features of a document editor, spreadsheet program, figure/schematic editor, dialog box editor, and more into a small, easy-to-use program with a consistent user interface. The XXICC Object Editor is written entirely in GalaxC and is used for editing all XXICC software and documentation. XXICC believes in the “take your own medicine” approach to software engineering.
Why GalaxC?
I created GalaxC to address my dissatisfaction with available programming languages. I found that I spent a great deal of time “encrypting” ideas into restrictive programming languages, and felt it might be more efficient (and certainly more fun) to have a language that can be taught new notations so that the resulting code would be easier to write, understand, and debug. GalaxC is an attempt to make this possible, or at least blaze a path in the right direction.
If you are perfectly happy with the programming language(s) you are using then you probably shouldn’t waste time learning about GalaxC, except perhaps out of morbid curiosity. While it is possible that GalaxC’s ideas will revolutionize computer programming and you’ll need to know it to be competitive, it’s unlikely to happen any time soon with the present experimental versions of GalaxC. OTOH, if you’re adventurous and dissatisfied with current language offerings, read on.
Getting Started
As with any new project, RTFM. I try to write good documentation and keep it reasonably up to date. For an overview of GalaxC, read Chapter 1 (Introduction) of Programming in the GalaxC Language rev 0.1. GalaxC and XXICC try to follow the Reduced Software Complexity philosophy described in Chapter 1 of The XXICC Anthology rev 0.1a. You might find this interesting.
Programming in the GalaxC Language rev 0.1 is primarily the reference for the GalaxC language, but tries to provide enough tutorial examples so you can get started. But it also provides considerable detail of how GalaxC’s compiler is implemented. This is often TMI on a first reading and can be skimmed. You’ll probably find Chapters 2 and 3 (Tokens and Expressions) to be pretty much the same as C and will go quickly. Chapter 4 (Types and Variables) diverges quickly from C and gets into how GalaxC’s type inheritance mechanism implements many program features such as variables. Some parts are TMI on first reading, but are there for the curious.
Chapter 5 (Functions and Macros) is a lot of fun since GalaxC allows them to have any legal syntax. Here you will really see the power of the language. Chapter 6 (The Postfix Stack Interpreter, PSI) describes the intermediate interpretive code which GalaxC executes. What’s remarkable here is how much of GalaxC is implemented using macros and inline functions instead of building these features into the compiler.
Chapter 7 (Control Statements) looks a lot like C, though more like Pascal. It’s interesting to see how GalaxC implements looping constructs as macros. Chapter 8 (Programmer-Defined Types) is primarily concerned with data structures, arrays, and pointers. These mechanisms are similar to C.
Chapters 9 (Generic Macros and Inline Functions) and 10 (Introduction to Special Functions) go deep into how GalaxC is implemented and are TMI for most users. However, if you are curious as to how GalaxC is constructed, check out Section 10.1 (A Brief Tour of the GalaxC Compiler).
To compile and/or install XXICC on your computer, look at Installing and Running XXICC rev 0.1. Then look at http://www.element14.com/community/docs/DOC-68346/l/compiling-and-running-galaxc-programs-rev-00k to learn how to compile and run GalaxC programs.
When you’re ready to try some user interface programming, look at Chapters 3 and 4 of The XXICC Anthology rev 0.1a. They describe the GalaxC Simplified Window Manager (G-SWIM), an easy way to create portable GUI applications.
We have included some sample programs in GalaxC sample/demo programs rev 0.0r. These include many of the sample programs in The XXICC Anthology rev 0.1a.
Help!
For help with XXICC and GalaxC, please ask in the comments section. This is much better than sending e-mail to the author as he may be too busy to get back to you quickly and others may be able to help you sooner. Plus, by writing comments you’ll help future users with similar questions.
XXICC is a not-for-profit research project. If you find XXICC useful or potentially useful, we can use help.
Reproducible Bugs
The single most useful thing we need is ways to reproduce bugs. There are some known bugs that are maddening difficult to reproduce, so if you are able to reproduce strange behavior we’d really like to learn how so we can fix the bug. My motto is “a reproducible bug is half fixed”, because once it is reproducible you can instrument the code and quickly figure out where and why.
For now, describe issues in the comments. If there's anough activity I’ll make a separate issues list.
I’d also like to know about typos and other problems with the documents.
Regression Testing
This is a nasty problem with all software projects: you make a change and suddenly something that used to work is now broken. There’s even a song about this:
99 little bugs in the code,
99 bugs in the code...
take one out, compile again,
100 little bugs in the code.
[Repeat until bug count goes to zero.]
The reason GNU/Linux is so stable is that there are so many people all over the world testing all sorts of versions on all sorts of platforms. We’ll take all the help we can get for XXICC.
Funding
Currently XXICC does not have a mechanism for accepting donations. We suggest instead supporting not-for-profit organizations that help Free Software and the free exchange of ideas such as the Free Software Foundation, Electronic Frontier Foundation, Wikimedia Foundation, and Software Freedom Law Center.
Acknowledgements
The author would like to renew thanks to the talented individuals who helped make the original version of Galaxy circa 1988. Foremost he wishes to thank Anne Beetem for her ideas, inspiration, support, and scholarly collaborations. He would also like to thank Jong-Min Park and Jim Rose for their contributions to the original implementation of the Galaxy compiler and its environment, and Monty Denneau for asking The Question which led to the original conception of Galaxy.
The author would also like to thank his family and friends for their support and encouragement over the years which led to GalaxC and XXICC reaching this point. He would also like to acknowledge the literary inspirations of Miguel de Cervantes and Edmond Rostand towards putting Quixotic idealism ahead of practicality, Kurt Vonnegut for Cat’s Cradle, and Jan Potocki’s The Saragossa Manuscript which celebrates performing vast projects by oneself.
This text is 2011 John F. Beetem and licensed under the Creative Commons Attribution-!ShareAlike 3.0 Unported License (CC BY-SA 3.0). To view a copy of this license, visit creativecommons.org/licenses/by-sa/3.0/. No warranty is expressed or implied.
Top Comments