Difference between revisions of "Library design"

From Liberty Eiffel Wiki
Jump to navigation Jump to search
m (9 revisions: initial import from SamrtEiffel Wiki - The Grand SmartEiffel Book)
m (spelling)
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[[Category:Book]]
+
[[Category: Library]]
  +
== Library Design ==
 
== Design ==
 
   
 
The design depends on the library. (TODO: add a section for each library).
 
The design depends on the library. (TODO: add a section for each library).
Line 21: Line 20:
 
=== Plugins ===
 
=== Plugins ===
   
The master word is: no magic. The code should be crystal clear. All that can be written in Eiffel is, and when low-level is need that should be clearly written in the code.
+
The master word is: no magic. The code should be crystal clear. All that can be written in Eiffel is, and when low-level is needed that should be clearly written in the code.
   
 
In other words, the library basic bricks rely on externals. There are two kinds of externals used in the library: ''built_in'' and ''plug_in''.
 
In other words, the library basic bricks rely on externals. There are two kinds of externals used in the library: ''built_in'' and ''plug_in''.

Latest revision as of 22:27, 21 December 2021

Library Design

The design depends on the library. (TODO: add a section for each library).

Implementation

The library is developed using a few principles.

Memory conservation

If a user does not use the GC, then they should be able to keep the memory footprint under control.

Of course, if one uses the GC, the library should not keep too many objects around just for reuse.

The general solutions are:

  • use WEAK_REFERENCE
  • if a library function returns a STRING, always return the same -- and/or provide a function that appends into a user-supplied STRING (kinda append_in)

Plugins

The master word is: no magic. The code should be crystal clear. All that can be written in Eiffel is, and when low-level is needed that should be clearly written in the code.

In other words, the library basic bricks rely on externals. There are two kinds of externals used in the library: built_in and plug_in.

external "built_in"

Those are rare. They involve compiler-specific code.

external "plug_in"

Those are the most frequent and are less compiler-involved. They use the general-purpose plugins mechanism.