SS Programming Language
What I'm Doing Now
- Adjusting the SS language to fit requirements and clarify the design.
- Working on a syntax rules definition and a preliminary first phase of a compiler.
Why am I creating a new programming language?
I was involved in Fortran as a compiler developer, working on and managing implementibg several compilers. I published a paper on local optimization ("Local Optimizations"), managed a compiler development group,
and I participated in the ANSI standardization of Fortran 77.
My specialty was machine code generation by the compiler.
I've been retired now for a few years, and I am no longer working in compiler language development - so why design a new language?
I have been keeping up with ideas in programming languages ever since I began in this field back in the early 1960s.
I learned and worked with a succession of my own languages, each trying to "fix" some issue in programming.
Languages have come and gone in popularity because new ideas happened.
I have used extensively PHP, the latest version 7, with OOP features.
I have createdd several "play" languages. One, in 2003, was "CodeBol" where BOL meant "Bagwell's Own Language".
The result is my work toward definition since 2009 of SS. Extensive reworking began in the second half of 2018, into 2019.
Goals in the design of SS
- Object oriented, with single inheritance and multiple interface implementation.
- SS is a pure object-oriented language, because all values are objects. Strings, variables, constants, expressions and arrays all look like objects.
- Parameterized procedures in interfaces and objects. They apply to multiple types.
- Reduced punctuation and less words.
- Concise syntax.
- Symmetry. Enhance readability and ease of editing.
- Support read-only and write-only properties.
- Definition of expression operators and type casts and array storage and indexing.
- No typeless or "mixed" type variables or arrays.
- Type safety. It is possible to keep inches separate from centimeters.
- Avoid problems in the use of an ENUM feature in C. ENUMs are simply defined names for integers, not typed, in some languages.
- No explicit memory allocation or pointer manipulation.
- Avoid the mistakes caused by assuming a, arithmetic value is a Boolean (true/false).
- String output formatting better controlled, not in the style of Fortran.
- Capable of compilation to efficient machine code for multiple computer types.
- Check more at compile time.
- No support for events and threads. These can be added as procedures.
- Support identifiers using non-English western European alphabets.
- Support for Perl-compatible regular expressions.
- Names can use a set of additional European characters and accented letters as letters.
- Support for Unicode characters.
- The mode feature encourages an unusual style which avoids errors. A mode is like a function based on a defined object type that implicitly returns a reference to its base object or a new object. It normally just sets an indicator or is part of the settings of an object.
- An array can have string indexes rather than integer indexes. Variable length and fixed-length arrays are supported. Arrays of arrays are possible. No two-dimensional arrays are allowed. Unlike PHP, arrays and their indexes are typed.
- A number of array procedures and statements are provided. Array expressions and assignments.
- Indexing can be defined to make a list or tree or hash table operate like an array.
- Pointers are not used. Explicit memory allocation and deallocation is not provided.
- Some operators are different. Equality is "=?" rather than "==". This helps avoid some errors.
- Assignment operators do not produce a result, again to avoid errors.
- Operators and type casts and array indexing can be defined on objects.
- A function or mode or method invocation with no arguments does not use a pair of parentheses.
- A generator function enables abstraction when obtaining a sequence of values, also simpler scan of arrays or strings or lists.
- Variant procedures provide an alternative to abstract procedures in an object type. The syntax and usage is cleaner than PHP 'trait'.
- SS has a parameterized interface and procedure type capability. One object definition can support multiple types.
- An enhanced object type can keep units apart, like Fahrenheit versus Celsius, or Centimeters versus Inches.
- The model for file manipulation is different. Files are typed to keep text separate from data blocks.
- Formatting for output is designed to be less error-prone, and is not patterned after Fortran.
- Regular expression patterns have an optimization capability.
- A useful left-side property feature helps with information hiding and protection.
- Complex type is supported through a definition file, allowing easy modifications.
E-mail me at: john (at) IdahoBagwells (dot) NET.