toplogo
Sign In

A Taxonomy of Objects for the EO Programming Language: Principles and Design


Core Concepts
This paper introduces a taxonomy of objects for the EO programming language, designed with principles of non-redundancy, simplicity, and ease of use in mind. The taxonomy serves as a navigation map for EO programmers and can also guide the design of objects in other object-oriented languages or libraries.
Abstract
The paper presents a taxonomy of objects for the EO programming language, a strictly formal object-oriented programming language with a reduced feature set. The taxonomy groups objects into the following categories: Primitives: Bytes, Integers, Booleans, Floats, and Strings Tuple: An immutable sequence of objects Error Handling: Objects for handling errors and exceptions Flow Control: Objects for controlling the dataization flow, such as sequence, branching, iteration, and jumping Digits: Objects representing numbers with smaller or larger bit-width than the default 64-bits Memory: Objects for managing read-write memory Math: Objects representing mathematical functions and algorithms Strings: Objects for string manipulations Structs: Objects for lists, maps, and sets I/O Streams: Objects for input and output streams File System: Objects for file and directory manipulations Sockets: Objects for TCP socket programming HTTP: Objects for parsing and printing HTTP requests and responses Synchronization: Objects for explicit synchronization between threads The paper outlines the principles followed in the design of this taxonomy, such as minimizing the global scope, implementing objects in EO instead of atoms, and avoiding redundant functionality. It also provides examples of how to use the various objects in the taxonomy.
Stats
"Each object-oriented programming language offers its own set of objects, classes, types, functions, constants, traits, templates, and so on, which programmers can use off-the-shelf to model their specific use cases." "For example, to get an absolute value of a numeric object x in Java, one has to call a static method of another class Math.abs(x), while in Ruby it would be a property of the same object x.abs." "For example, in Java, an attempt to get a value from a hash map by a key will produce null in case of its absence, while in C++ it will return an empty iterator." "The ★as-int attribute expects the size of the sequence to be eight bytes. The attribute ★as-bool expects exactly one byte in the sequence and is FALSE only if the byte equals to zero. The attribute ★as-float expects exactly eight bytes." "The ★try object enables catching of ★error objects and extracting exceptions from them." "The ★switch object is an abstraction of a multi-case branching that encapsulates (𝑘, 𝑣) pairs and the dataization result is equal to 𝑣of the first pair where 𝑘is TRUE, while the last pair is the one to be used if no other pairs match." "The ★memory object is an abstraction of a read-write memory capable of storing one of five primitive data objects mentioned in Section 4." "The ★cage object is similar to the ★memory, but it stores an object, not the result of its dataization." "The ★bytes-as-input is an "input" made from bytes, and the ★memory-as-output is an "output" directed towards a copy of memory." "The ★socket object is an abstraction of a TCP socket. The ★connect attribute establishes a connection and makes a copy of the socket object. Then, its ★as-input and ★as-output attributes may be used for reading from the socket and for writing to it."
Quotes
"Each object-oriented programming language offers its own set of objects, classes, types, functions, constants, traits, templates, and so on, which programmers can use off-the-shelf to model their specific use cases." "For example, to get an absolute value of a numeric object x in Java, one has to call a static method of another class Math.abs(x), while in Ruby it would be a property of the same object x.abs." "For example, in Java, an attempt to get a value from a hash map by a key will produce null in case of its absence, while in C++ it will return an empty iterator." "The ★try object enables catching of ★error objects and extracting exceptions from them." "The ★switch object is an abstraction of a multi-case branching that encapsulates (𝑘, 𝑣) pairs and the dataization result is equal to 𝑣of the first pair where 𝑘is TRUE, while the last pair is the one to be used if no other pairs match."

Key Insights Distilled From

by Yegor Bugaye... at arxiv.org 04-11-2024

https://arxiv.org/pdf/2206.02585.pdf
On the Origins of Objects by Means of Careful Selection

Deeper Inquiries

What are the potential benefits and drawbacks of the EO programming language's object taxonomy compared to the standard libraries of other popular object-oriented languages?

The EO programming language's object taxonomy offers several benefits compared to standard libraries of other object-oriented languages. One key advantage is the emphasis on non-redundancy, simplicity, and a reduced feature set. This can lead to cleaner and more maintainable code, as developers are guided towards using a concise set of objects without unnecessary duplication or complexity. Additionally, the taxonomy serves as a navigation map for EO programmers, aiding in code readability and understanding. However, there are also potential drawbacks to consider. The intentional reduction in features may limit the flexibility and extensibility of the language, especially when compared to more comprehensive standard libraries in other languages. Developers accustomed to a wider range of built-in objects and functionalities may find the EO object taxonomy restrictive in certain scenarios. Furthermore, the lack of common ground between standard libraries of different languages could pose challenges for developers transitioning between ecosystems.

How could the principles and design choices behind the EO object taxonomy be applied to improve the object-oriented features and standard libraries of other programming languages?

The principles and design choices behind the EO object taxonomy can serve as valuable guidelines for enhancing the object-oriented features and standard libraries of other programming languages. By prioritizing non-redundancy, simplicity, and minimal global scope, language designers can create more streamlined and intuitive libraries for developers. Emphasizing the implementation of objects in the language itself, rather than relying on external interfaces, can lead to more cohesive and consistent libraries. To apply these principles to other languages, designers can conduct a thorough review of existing standard libraries to identify areas of redundancy or unnecessary complexity. By streamlining object hierarchies, eliminating duplicate functionalities, and ensuring clear and English-readable object names, libraries can become more user-friendly and efficient. Additionally, enforcing guidelines for object naming conventions and avoiding abbreviations can enhance code readability and maintainability across different projects.

What are some potential use cases or application domains where the EO object taxonomy could provide significant advantages over the standard libraries of other object-oriented languages?

The EO object taxonomy could offer significant advantages in domains where simplicity, clarity, and precision are paramount. For example, in educational settings or introductory programming courses, the streamlined and non-redundant nature of the EO objects could facilitate a smoother learning curve for beginners. The English-readable object names and minimal global scope could help students grasp object-oriented concepts more easily. In projects that prioritize performance and efficiency, such as embedded systems programming or real-time applications, the intentional reduction in features and emphasis on object composition in EO could lead to optimized code execution. By minimizing unnecessary overhead and focusing on essential functionalities, developers in these domains could benefit from the precise and concise nature of the EO object taxonomy. Overall, any application that values clean, maintainable code, and a clear hierarchy of objects could leverage the advantages of the EO object taxonomy. By promoting best practices in object-oriented design and encouraging a thoughtful approach to object composition, EO could find particular success in projects where code readability and efficiency are critical.
0