Fuzion Features
In Fuzion, the main element to structure a program is a feature. A feature combines data and executable code into one single and powerful concept.
A feature takes the role of a class, method, function, routine, field, interface, trait, package, module, procedure, variable, (formal) argument, member, etc. in other languages. We need to find a good term for this in fuzion. I will use feature for now, which is used in Eiffel. Alternative names might be atom, unit, part, item, detail, class, element, component, bit, piece, thing, entity, grain, cell, body, frame, form, section, sphere, entity, ensemble, act, actor, art, craft, skill, member, deed, feat, etc.
Features containing data
Regarding the data, a fuzion feature can be regarded as a concept similar to a struct in C/C++, or like a class in Java, but without the additional overhead that typically is required for a class.
As an example, look at the following Fuzion code
point(x, y int) is
Features are types. Variables can be declared and initialized with a given feature type, e.g.,
p := point 3 4
This is similar to the declaration of a C struct
struct point { int x, y; }
and the creation of a C variable of this type
struct point p = { 3, 4 };
If we look at features as a container of data of different types, features provide product types.
Features containing code
A feature that contains code might look like this
i32 add(i32 a, b) { result = a + b; }
which corresponds to a C function
int add(int a, b) { return a + b; }