Edit this page

Wheat's Major Components

This is a short description of the major components of Wheat. For a more detailed list of topics, see the DiscussionRoadmap.

If you want to know whether Wheat is for you, see the IsWheatForMe page.

At present, most of these descriptions are really just first stabs at requirements. Please question these choices, propose others, and provide comments.


The Wheat language is an object oriented language. Everything in Wheat is an object, from numbers to the largest databases. Objects accept messages with arguments (positional, keyword, and optional), and compute responses via methods (code). Classes are descriptions of objects and specify both content and behavior. Classes form an inheritance tree (directed acyclic graph to be more accurate), supporting single inheritance.

The object model has some distinct features:

The syntax is designed to be easy to read. Wheat believes that the code itself is its best documentation. Wheat code is easy to type, and easy to read. This involves striking a balance between syntactic sugar, multiple ways of doing things, and legibility. The syntax supports in-line objects and groups and code objects (blocks).



The standard library provides support for all the basic data types in a Wheat program, such as numbers, strings, and collection classes. The library philosophy is to design a small number of versatile classes, rather than a large taxonomy. For example, there is only one number class - there is no distinction in Wheat between integers, floats and bignums. There are only two collection classes: Group is a collection of objects that can be indexed by number, via relative relationships, or via content. Map is a relationship between one set of objects (the keys) and another (the values).

XML manipulation is also part of the basic library. Managing XML structures, mapping to and from Wheat object structures, and parsing and generating XML streams are all standard.

The HTTP/XHTML library provides support for generating XHTML via nested templates (which are themselves pure XHTML and editable with any modern graphical XHTML editor), and support for managing the HTTP request cycle (sessions, cookies, HTTP methods, GET and POST arguments, etc...). The library supports the clean separation between content and presentation. The template system supports nested sub-templates so that presentation can benefit from object reuse: For example, where ever an object is used inside another object, its templates can appear inside the containing object's templates.



The Wheat virtual machine is a multi-protocol server. It processes requests and returns results. This is sort of the read-eval-print loop for the internet age. The primary protocols supported are HTTP and WebDAV (and SOAP?). Deploying an Wheat application means loading it into a running Wheat server. The virtual machine then serves the live web site to the net.

One of the main applications that can be loaded into a Wheat server is the development environment. This is an HTTP/XHTML based environment that allows programmers to create objects, write code and test applications. It also includes sub-systems to handle version control and project management (extreme programming style).

There is no comment on this page. [Display comments/form]