From 13e6356c08831e3e63d8d0fe437e3167db72bab2 Mon Sep 17 00:00:00 2001 From: Thomas Walker Lynch Date: Sun, 23 Mar 2025 13:05:33 +0000 Subject: [PATCH] yet another TM refactoring next .. --- "developer/cc\360\237\226\211/TM.lib.c" | 439 ++++++------- .../generalizing_type.org" | 109 ---- "document\360\237\226\211/#Model.org#" | 216 +++++++ .../Abstracting_Type_in_C.org" | 564 +++++++++++++++++ .../Abstracting_Type_in_C.pdf" | Bin 0 -> 211829 bytes .../Abstracting_Type_in_C.tex" | 596 ++++++++++++++++++ "document\360\237\226\211/emacs_keys.el" | 84 +++ 7 files changed, 1655 insertions(+), 353 deletions(-) delete mode 100644 "developer/document\360\237\226\211/generalizing_type.org" create mode 100644 "document\360\237\226\211/#Model.org#" create mode 100644 "document\360\237\226\211/Abstracting_Type_in_C.org" create mode 100644 "document\360\237\226\211/Abstracting_Type_in_C.pdf" create mode 100644 "document\360\237\226\211/Abstracting_Type_in_C.tex" create mode 100644 "document\360\237\226\211/emacs_keys.el" diff --git "a/developer/cc\360\237\226\211/TM.lib.c" "b/developer/cc\360\237\226\211/TM.lib.c" index 4580104..35a9ded 100644 --- "a/developer/cc\360\237\226\211/TM.lib.c" +++ "b/developer/cc\360\237\226\211/TM.lib.c" @@ -13,7 +13,18 @@ An Area with zero elements has 'length == 0' or is 'empty'. In contrast ,and area located (position specified) with a null pointer is said not to exist. - Template variable: CVT + ---- + + CVT is a template variable that affects type names that show on the interface. + They affect all implementations in the same way. + + There are multiple implementations, such as Array. Each has its own FG + table instance. For example Array·fg. Also each has its own Tableau type, for + example, `typedef struct { ... } Ξ(TM·Array ,CVT)` is the Tableau type for + the array implementation. + + This implementation uses pointer pairs to stand for 'TM type' that are + passed around. */ @@ -47,80 +58,97 @@ #ifndef CVT typedef enum{ TM·Tape·Topo·mu = 0 - ,TM·Tape·Topo·nonexistent = 1 - ,TM·Tape·Topo·empty = 1 << 1 - ,TM·Tape·Topo·singleton = 1 << 2 - ,TM·Tape·Topo·segment = 1 << 3 - ,TM·Tape·Topo·circle = 1 << 4 - ,TM·Tape·Topo·tail_cyclic = 1 << 5 - ,TM·Tape·Topo·infinite = 1 << 6 + ,TM·Tape·Topo·empty = 1 + ,TM·Tape·Topo·singleton = 1 << 1 + ,TM·Tape·Topo·segment = 1 << 2 + ,TM·Tape·Topo·circle = 1 << 3 + ,TM·Tape·Topo·tail_cyclic = 1 << 4 + ,TM·Tape·Topo·infinite = 1 << 5 }TM·Tape·Topo; - const TM·Tape·Topo TM·Tape·Topo·finite_nz = - TM·Tape·Topo·singleton | TM·Tape·Topo·segment + const TM·Tape·Topo TM·Tape·Topo·bounded = + TM·Tape·Topo·singleton + | TM·Tape·Topo·segment ; // If tape machine does not support step left ,then Status·leftmost // will be reported as Status·interim. typedef enum{ TM·Head·Status·mu = 0 - ,TM·Head·Status·not_on_tape = 1 - ,TM·Head·Status·origin = 1 << 1 - ,TM·Head·Status·interim = 1 << 2 - ,TM·Head·Status·rightmost = 1 << 3 + ,TM·Head·Status·dismounted = 1 + ,TM·Head·Status·out_of_area = 1 << 1 + ,TM·Head·Status·leftmost = 1 << 2 + ,TM·Head·Status·interim = 1 << 3 + ,TM·Head·Status·rightmost = 1 << 4 } TM·Head·Status; const TM·Head·Status TM·Head·Status·on_tape = - TM·Head·Status·origin + TM·Head·Status·leftmost | TM·Head·Status·interim | TM·Head·Status·rightmost ; - typedef struct TM; + #endif // #ifndef CVT + + #ifdef CVT + + typedef Ξ(extent_t ,CVT) size_t; + + // instance struct with vtable pointer as first entry // tape and area are included with Tape Machine to facilitate abstract interfaces. typedef struct{ - Core·Status (*topo) (TM *tm ,TM·Tape·Topo *result); + TM·Tape·Topo (*Tape·topo)(TM *tm); + bool (*Tape·bounded)(TM *tm); + + TM·Head·Status (*Head·status)(TM *tm ,TM·Head·Status *status); + bool (*Head·on_tape)(TM *tm); + bool (*Head·on_leftmost) (TM *tm); + bool (*Head·on_rightmost)(TM *tm); // tape machine functions Core·Status (*mount) (TM *tm); Core·Status (*dismount)(TM *tm); - TM·Head·Status (*status) (TM *tm ,TM·Head·Status *status); - Core·Status (*head_on_format)(TM *tm ,bool *flag); - - bool (*can_read) (TM *tm); - bool (*on_leftmost) (TM *tm); - bool (*on_rightmost)(TM *tm); - void (*step) (TM *tm); void (*step_left) (TM *tm); - void (*step_right)(TM *tm); // Synonym for step void (*rewind) (TM *tm); - } TM·FG; - - #endif // #ifndef CVT + TM·FG TM·fg; // points to TM·FG instance + Ξ(extent_t ,CVT) (*extent)(TM *tm); + CVT (*read) (TM *tm); + void (*write)(TM *tm ,CVT *remote_pt); - #ifdef CVT + } Ξ(TM ,CVT)·FG; - typedef Ξ(extent_t ,CVT) size_t; + // array FG instance + + typedef struct Ξ(TM ,CVT)·Tableau; + typedef struct Ξ(TM·Array ,CVT)·Tableau; - // instance struct with vtable pointer as first entry + // `init` puts type consistent values in this struct typedef struct{ - Ξ(extent_t ,CVT) (*extent)(TM *tm); - CVT (*read) (TM *tm); - void (*write)(TM *tm ,CVT *remote_pt); + Ξ(TM ,CVT)·FG *fg; + Ξ(TM ,CVT)·Tableau *t; } Ξ(TM ,CVT); - // Array Initializers - typedef struct{ - TM *(*mount_pe)( Ξ(TM·Array ,CVT) *tm ,CVT position[] ,Ξ(extent_t ,CVT) extent ); - TM *(*mount_pp)( Ξ(TM·Array ,CVT) *tm ,CVT *position_left ,CVT *position_right ); - } Ξ(TM·Array ,CVT)·FG; + #define FG·call(tm, fn, ...) \ + ((tm)->fg->fn)((tm)->t, ##__VA_ARGS__) Ξ(TM ,CVT)·FG Ξ(TM·Array ,CVT)·fg; + + Ξ(TM ,CVT) Ξ(TM·Array ,CVT)·init_pe( + Ξ(TM·Array ,CVT)·Tableau t + ,CVT position[] + ,Ξ(extent_t ,CVT) extent + ); + + Ξ(TM ,CVT) Ξ(TM·Array ,CVT)·init_pp( + Ξ(TM·Array ,CVT)·Tableau t + ,CVT *position_left + ,CVT *position_right + ); #endif // #ifdef CVT @@ -157,185 +185,153 @@ "Null position.This is only possible when the tape machine has not been initialized."; const char *TM·Msg·flag="given NULL flag pointer"; const char *TM·Msg·result="given NULL result pointer"; + const char *TM·Msg·head="head not on tape"; - //----------------------------------- - // generic instance type, with vtable pointer at top + //---------------------------------------- + // TM Tableau, not CVT differentiated struct{ - TM·FG *fg; - } TM; + void *hd; + void *position; + }TM·Tableau; + + + //---------------------------------------- + // TM Array implementation, not CVT differentiated + + TM·Tape·Topo TM·Array·Tape·topo(TM·Tableau *t){ + if(!t || !t->position) return T·Tape·Topo·mu; + if(t->extent == 0) TM·Tape·Topo·singleton; + return TM·Tape·Topo·segment; + } + Local TM·Tape·Topo TM·Tape·bounded(TM·Tableau *t){ + return TM·tape_top(t) & TM·Tape·Topo·bounded; + } + + TM·Tape·Topo TM·Array·Tape·mount(TM·Tableau *t){ + if(!t || !t->position) return T·Tape·Topo·mu; + if(t->extent == 0) TM·Tape·Topo·singleton; + return TM·Tape·Topo·segment; + } + //----------------------------------- // generic call wrappers - Core·Status TM·topo(TM *tm ,TM·Tape·Topo *result){ - #ifdef TM·DEBUG - Core·Guard·init_count(chk); - Core·Guard·fg.check(&chk ,1 ,tm ,TM·Msg·tm); - Core·Guard·fg.check(&chk ,1 ,result ,TM·Msg·result); - Core·Guard·if_return(chk); - #endif - return tm->fg.topo(tm ,result); + Local TM·Tape·Topo TM·Tape·topo(TM *tm){ + return tm->fg.Tape·topo(tm); } - - // mount dismount - #define Core·Status_tm(name) \ - Local Core·Status TM##name##(TM *tm) { \ - #ifdef TM·DEBUG \ - Core·Guard·init_count(chk); \ - Core·Guard·fg.check(&chk, 1, tm, TM·Msg·tm); \ - Core·Guard·if_return(chk); \ - #endif \ - return tm->fg.##name##(tm); \ + Local TM·Tape·Topo TM·Tape·bounded(TM *tm){ + return TM·tape_top(tm) & TM·Tape·Topo·bounded); } - Core·Status_tm(mount); - Core·Status_tm(dismount); - - Local TM·Head·Status TM·status(TM *tm ,TM·Head·Status *result){ - #ifdef TM·DEBUG - Core·Guard·init_count(chk); - Core·Guard·fg.check(&chk ,1 ,tm ,TM·Msg·tm); - Core·Guard·fg.check(&chk ,1 ,result ,TM·Msg·result); - Core·Guard·if_return(chk); - #endif + Local TM·Head·Status TM·head_status(TM *tm){ return tm->fg.status(tm ,result); } - - // Stronger than `can_read`. Used mostly for debugging. - // as it checks for a legal head position. - Local Core·Status TM·head_on_format(TM *tm ,bool *flag){ - #ifdef TM·DEBUG - Core·Guard·init_count(chk); - Core·Guard·fg.check(&chk ,1 ,tm ,TM·Msg·tm); - Core·Guard·fg.check(&chk ,1 ,flag ,TM·Msg·flag); - Core·Guard·if_return(chk); - #endif - return tm->fg.head_on_format(tm ,flag); + Local TM·Head·Status TM·head_on_tape(TM *tm){ + return TM·status(tm) & TM·Head·Status·on_tape; } - bool bool_fn_tm(TM *tm){ - #ifdef TM·DEBUG - Core·Guard·init_count(chk); - Core·Guard·fg.check(&chk ,1 ,tm ,TM·Msg·tm); - Core·Guard·if_return(chk); - #endif - return tm->fg.read(tm); + // does nothing if the head is already mounted + Local Core·Status TM·mount(TM *tm){ + #ifdef TM·DEBUG + Core·Guard·init_count(chk); + Core·Guard·fg.check(&chk, 1, tm, TM·Msg·tm); + Core·Guard·if_return(chk); + #endif + if( !TM·head_on_tape(tm) ) return Core·Status·on_track; + return tm->fg.mount(tm); } - bool TM·on_leftmost(TM *tm){ - #ifdef TM·DEBUG - Core·Guard·init_count(chk); - Core·Guard·fg.check(&chk ,1 ,tm ,TM·Msg·tm); - Core·Guard·if_return(chk); + // does nothing if the head is already dismounted + Local Core·Status TM·dismount(TM *tm){ + #ifdef TM·DEBUG + Core·Guard·init_count(chk); + Core·Guard·fg.check(&chk, 1, tm, TM·Msg·tm); + Core·Guard·if_return(chk); #endif - return tm->fg.on_leftmost(tm); + if( TM·head_status(TM *tm) & TM·Head·Status·dismounted) ) return Core·Status·on_track; + return tm->fg.dismount(tm); } + + #define TM·macro·bool_tm(name) + Local bool name(TM *tm){ \ + #ifdef TM·DEBUG \ + Core·Guard·init_count(chk); \ + Core·Guard·fg.check( &chk ,1 ,TM·head_on_tape(tm) ,TM·Msg·head); \ + Core·Guard·assert(chk); \ + #endif \ + return tm->fg.name(tm); \ + } - bool TM·on_rigthmost(TM *tm){ - #ifdef TM·DEBUG - Core·Guard·init_count(chk); - Core·Guard·fg.check(&chk ,1 ,tm ,TM·Msg·tm); - Core·Guard·if_return(chk); - #endif - return tm->fg.on_rigthmost(tm); - } + Local bool TM·macro·bool_tm(on_leftmost); + Local bool TM·macro·bool_tm(on_rightmost); + Local bool TM·macro·bool_tm(step); + Local bool TM·macro·bool_tm(step_left); + Local bool TM·macro·bool_tm(rewind); + //---------------------------------------- + // Initialization for TM·fg + Local TM·FG TM·fg = { + .Tape·topo = TM·Tape·topo + ,.Tape·bounded = TM·Tape·bounded + ,.Head·status = TM·Head·status + ,.Head·on_tape = TM·Head·on_tape - Local bool TM·Given1(can_read); - Local bool TM·Given1(on_leftmost); - Local bool TM·Given1(on_rightmost); - Local bool TM·Given1(step); - Local bool TM·Given1(step_left); - Local bool TM·Given1(rewind); + ,.Head·on_leftmost = TM·Head·on_leftmost + ,.Head·on_rightmost = TM·Head·on_rightmost - // tm_can_read must be true for both machines. - void TM·copy_datum(TM *tm_read ,TM *tm_write){ - #ifdef TM·DEBUG - Core·Guard·init_count(chk); - bool flag = true ,s; - s = TM·head_on_format(tm_read ,flag) == Control·Status·on_track; - Core·Guard·fg.check(&chk ,1 ,s && flag ,"tm_read head off track"); - s = TM·head_on_format(tm_write ,flag) == Control·Status·on_track; - Core·Guard·fg.check(&chk ,1 ,s && flag ,"tm_write head off track"); - Core·Guard·assert(chk); - #endif + ,.mount = TM·mount + ,.dismount = TM·dismount - *(tm_write->hd) = *(tm_read->hd); - return Core·Status·on_track; - } + ,.step = TM·step + ,.step_left = TM·step_left + ,.step_right = TM·step // Synonym + ,.rewind = TM·rewind + + }; + + #endif // ifndef CVT + + //----------------------------------- + // CVT dependent functions - void TM·read(TM *tm ,CVT *read_pt){ + #ifdef CVT + + Local Ξ(extent_t ,CVT) Ξ(TM ,CVT)·extent(TM *tm){ #ifdef TM·DEBUG Core·Guard·init_count(chk); - bool flag = true ,s; - s = TM·head_on_format(tm ,flag) == Core·Status·on_track; - Core·Guard·fg.check(&chk ,1 ,s && flag ,"head off format"); + Core·Guard·fg.check(&chk ,1 ,TM·Tape·bounded(tm) ,"Tape is not bounded."); Core·Guard·assert(chk); #endif - - *read_pt = *(tm->hd); + return tm->fg.extent(tm); } - void TM·write(TM *tm ,CVT *write_pt){ + Local CVT TM·read(TM *tm){ #ifdef TM·DEBUG Core·Guard·init_count(chk); - bool flag = true ,s; - s = TM·head_on_format(tm ,flag) == Core·Status·on_track; - Core·Guard·fg.check(&chk ,1 ,s && flag ,"head off format"); + Core·Guard·fg.check( &chk ,1 ,TM·head_on_tape(tm) ,TM·Msg·head); Core·Guard·assert(chk); #endif - - *(tm->hd) = *write_pt; + return tm->fg.read(tm); } - // step_right is a synonym for step - - // check the topo to make sure tape has extent before calling this - // `extent·CVT` returns the index to the rightmost cell in the array. - Local Ξ(extent_t ,CVT) TM·extent(TM *tm){ + Local void TM·write(TM *tm ,CVT *write_pt){ #ifdef TM·DEBUG - Core·Guard·init_count(chk); - Core·Guard·fg.check(&chk ,1 ,tm ,TM·Msg·tm); + Core·Guard·init_count(chk); + Core·Guard·fg.check( &chk ,1 ,TM·head_on_tape(tm) ,TM·Msg·head); + Core·Guard·fg.check( &chk ,1 ,write_pt ,"Given NULL write_pt"); Core·Guard·assert(chk); #endif - return tm->fg.extent(tm); + return tm->fg.write(tm ,write_pt); } - - - //---------------------------------------- - // Initialization for TM·fg - - Local TM·FG TM·fg = { - .tape = { - .topo = TM·topo - .extent = TM·extent - } - - ,.area = { - .mount_pe = TM·mount_pe - ,.mount_pp = TM·mount_pp - } - - ,.mount = TM·mount - ,.dismount = TM·dismount - - ,.status = TM·status - ,.head_on_format = TM·head_on_format - - ,.can_read = TM·can_read - ,.on_origin = TM·on_origin - ,.on_rightmost = TM·on_rightmost - - ,.step = TM·step - ,.step_left = TM·step_left - ,.step_right = TM·step_right // Synonym for step - ,.rewind = TM·rewind - - ,.read = TM·read - ,.write = TM·write + Local Ξ(TM ,CVT)·FG Ξ(TM ,CVT)·fg = { + .parent = TM·fg + ,.extent = Ξ(TM ,CVT)·extent + ,.read = Ξ(TM ,CVT)·read + ,.write = Ξ(TM ,CVT)·write }; #endif // ifdef CVT @@ -371,8 +367,8 @@ const char *TM·Array·Msg·tm="given NULL tm"; const char *TM·Array·Msg·flag="given NULL flag pointer"; const char *TM·Array·Msg·result="given NULL result pointer"; - const char *TM·Array·Msg·position= - "Null position.This is only possible when the tape machine has not been initialized."; + const char *TM·Array·Msg·status="bad head status"; + #endif // #ifndef CVT @@ -387,37 +383,24 @@ //----------------------------------- // TM·Array.tape implementation - /* - For an Array Tape Machine ,a bound tape will be singleton or segment. - An initialized Array Tape Machine always has a bound tape. - */ - Core·Status Ξ(TM·Array ,CVT)·topo(Ξ(TM·Array ,CVT) *tm ,TM·Tape·Topo *result){ - #ifdef TM·DEBUG - Core·Guard·init_count(chk); - Core·Guard·fg.check(&chk ,1 ,tm ,TM·Array·Msg·tm); - if(tm) Core·Guard·fg.check(&chk ,1 ,tm->position ,TM·Array·Msg·position); - Core·Guard·fg.check(&chk ,1 ,result ,TM·Array·Msg·result); - Core·Guard·if_return(chk); - #endif - if(tm->extent == 0){ - *result = TM·Tape·Topo·singleton; - }else{ - *result = TM·Tape·Topo·segment; - } - return Core·Status·on_track; + // For an Array Tape Machine ,a bound tape will be singleton or segment. + TM·Tape·Topo Ξ(TM·Array ,CVT)·Tape·topo(Ξ(TM·Array ,CVT) *tm){ + if(!tm || !tm->position) return TM·Tape·Topo·mu; + if(tm->extent == 0) TM·Tape·Topo·singleton; + return TM·Tape·Topo·segment; } - // check the topo to make sure tape has extent before calling this + // check the Tape·topo to make sure tape has extent before calling this // `extent·CVT` returns the index to the rightmost cell in the array. Local Ξ(extent_t ,CVT) Ξ(TM·Array ,CVT)·extent(Ξ(TM·Array ,CVT) *tm){ #ifdef TM·DEBUG Core·Guard·init_count(chk); - Core·Tape·Topo topo = Core·Tape·Topo·mu; - Core·Status status = Ξ(TM·Array ,CVT)·topo(tm ,&topo); - bool good_topo = - (status == Core·Status·on_track) && (topo & Core·Tape·Topo·finite_nz) + Core·Tape·Topo Tape·topo = Core·Tape·Topo·mu; + Core·Status status = Ξ(TM·Array ,CVT)·Tape·topo(tm ,&Tape·topo); + bool good_Tape·topo = + (status == Core·Status·on_track) && (Tape·topo & Core·Tape·Topo·finite_nz) ; - Core·Guard·fg.check(&chk ,1 ,good_topo ,"Tape does not have an extent."); + Core·Guard·fg.check(&chk ,1 ,good_Tape·topo ,"Tape does not have an extent."); Core·Guard·assert(chk); #endif @@ -490,49 +473,17 @@ return Core·Status·on_track; } - Local TM·Head·Status Ξ(TM·Array ,CVT)·status( - Ξ(TM·Array ,CVT) *tm ,TM·Head·Status *status - ){ - #ifdef TM·DEBUG - Core·Guard·init_count(chk); - Core·Guard·fg.check(&chk ,1 ,tm ,TM·Array·Msg·tm); - Core·Guard·fg.check(&chk ,1 ,status ,"given NULL status pointer"); - Core·Guard·if_return(chk); - #endif - - if(tm->hd == NULL){ - *status = TM·Head·Status·not_on_tape; - }else if(tm->hd == tm->position){ - *status = TM·Head·Status·origin; - }else if(tm->hd == tm->position + tm->extent){ - *status = TM·Head·Status·rightmost; - }else{ - *status = TM·Head·Status·interim; - } - - return Core·Status·on_track; - } + Local TM·Head·Status Ξ(TM·Array ,CVT)·head_status(TM *tm){ + if(!tm || !tm->position) return TM·Head·Status·mu; + if(!tm->hd) return TM·Head·Status·dismounted; + if(tm->hd == tm->position) return TM·Head·Status·leftmost; - // Stronger than `can_read`. Used mostly for debugging. - // as it checks for a legal head position. - Local Core·Status Ξ(TM·Array ,CVT)·head_on_format( - Ξ(TM·Array ,CVT) *tm ,bool *flag - ){ - #ifdef TM·DEBUG - Core·Guard·init_count(chk); - Core·Guard·fg.check(&chk ,1 ,tm ,TM·Array·Msg·tm); - if(tm) Core·Guard·fg.check(&chk ,1 ,tm->position ,TM·Array·Msg·position); - Core·Guard·fg.check(&chk ,1 ,flag ,TM·Array·Msg·flag); - Core·Guard·if_return(chk); - #endif + CVT *rightmost_pt = tm->position + tm->extent; + if(tm->hd == rightmost_pt) TM·Head·Status·rightmost; + if(tm->hd < tm->position || tm->hd > rightmost_pt) + return TM·Head·Status·out_of_area; - *flag = - tm->hd - && tm->hd >= tm->position - && tm->hd - tm->position <= tm->extent - && ( (AU *)tm->hd - (AU *)tm->position ) % sizeof(CVT) == 0 // '%' expensive - ; - return Core·Status·on_track; + return TM·Head·Status·interim; } bool Ξ(TM·Array ,CVT)·can_read(Ξ(TM·Array ,CVT) *tm){ @@ -633,7 +584,7 @@ Local Ξ(TM·Array ,CVT)·FG Ξ(TM·Array ,CVT)·fg = { .tape = { - .topo = Ξ(TM·Array ,CVT)·topo + .Tape·topo = Ξ(TM·Array ,CVT)·Tape·topo .extent = Ξ(TM·Array ,CVT)·extent } diff --git "a/developer/document\360\237\226\211/generalizing_type.org" "b/developer/document\360\237\226\211/generalizing_type.org" deleted file mode 100644 index 73bba86..0000000 --- "a/developer/document\360\237\226\211/generalizing_type.org" +++ /dev/null @@ -1,109 +0,0 @@ -* Generalizing type - -** Passing an TM FG table instance - -1. Suppose we have a generic TM FG table with the declared functions constituting the architecture (user's view, interface) of a tape machine. - -2. Instances of this TM FG table to represent different implementations of the architecture. Say TM·Array·fg for a TM implemented as an array, and TM·Function·fg for a function implementation (for example the Natural_Number in the Java implementation). - -3. Now suppose we have a function `map` that is given a TM_read, a TM_write, and a function. - The map does not care how the TM is implemented. - - If these first two arguments are declared as TM FG type, then they can accept any fg table whether it be an Array implementation, a Function implementation, etc. The map can then pick the functions it needs, such as step, and rightmost, from the - table, and thus get tape behavior. - - This achieves what we wanted, a map function that can use a tape machine and does not care what the implementation of that tape machine is. - - However, the TM functions that map calls require to be given a first argument of that holds the TM instance data. Without this it can not know which machine is being operated on. - Furthermore, the instance data type must match the TM fg table type. - - Given steps 1 through 3 we never passed in instance data to map, only a TM FG table insance. So map has a type, but not the data. - - -** Passing TM instance data, compile in the fg table. - -1. As noted, `map` is given a TM_read, a TM_write, and a function. For these first two - arguments, suppose we pass in the instance data, i.e. struct pointers. - -2. The TM·Array struct will hold a base pointer to the array, and the head location. The TM·Function struct would hold a handle recognized by the functions, or some state used by them. - -3. Then we have a map function for each architecture type, and we compile into each of these a call to the correct default TM·fg table. The map·Array will have compiled into it, TM·Array·fg, and the map·Function will have compiled into it TM·Function·fg etc. - -4. This approach works, but we duplicate the map code many times just to get the types to match the calls. - - -** Passing in both, the TM instance data, and corresponding TM FG tables instances. - -1. Say we have one generic `map` that given 5 arguments: TM_read (an instance), TM_read_fg, a TM_write (an instance), and TM_write_fg. - -2. The instance parameters must be declared `void *` to prevent argument checking on them, otherwise it will be necessary to implement many map functions for each instance type combination. - -3. This works, though we have no way to know if the correct type of instance data, that matches the fg table, was actually passed in. - -4. We could create many wrapper functions to accomplish the instance data type check, then to call a central map function with `void *` instance data pointers. With any luck the optimizer would make this extra layer go away, so it will be efficient. Still map now has 5 arguments instead the three that are natural for the problem. - - -** Using a "vtable" - -1. All TM instance types are structs with a first field that points to the fg table, - no matter the implementation type. This is not a serious requirement because - each implementation type already has an struct for its implementation data. However it does make an instance bigger, and it is not clear that the optimizer will be able to - discombobulation it all. - -2. Then a generic fg table is created, where the functions have the signatures as specified - in the FG table. However, each of these functions follows the fg table pointer in the - the instance data given to it as a first argument, and then calls that function. - -3. It works, and it is a tried and true method. - -** Using a pointer pair .. - -1. Instead of the instance data being called the 'TM type', a pair is the 'TM type', - the first member of the pair points to an instance, the second to a corresponding - fg table. - -2. Again there are some generic TM functions, each accepts a pair as a first argument, and then calls the corresponding fg table function while giving it the instance pointer - from the pair as the first argument. - -3. This approach packs the same information as the vtable approach. If there is a - one to one correspondence between instances and pairs, then it is larger by one pointer. - -4. This is a type of 'link' from our continuations, but the tableau pointer is gone due - to using a stack frame, and the continuation table pointer is gone due to flow through sequencing. Thus it is two pointers instead of 4. - -5. Hopefully the optimizer would recognize that the pair pointers are redundant. They are only needed to ensure that the instance and fg table go together. - -** Instance curried dispatch function - -1. In this case a pointer to a function is the 'TM type'. There is an enum that gives numeric tags to each of the functions in the FG struct instance. - -2. The tag for the desired fg function to be called is passed as the first argument to the dispatch function, and the remaining arguments are for the fg function. - -3. The dispatch function has the instance data and fg table pointer curried into it, so it then calls the correct fg function while handing it the correct instance data. - -4. In C it is not immediately obvious how to create a function on the fly each time an - instance is created, to curry the instance data into it, and then later how to call - the newly created function. - -** Self-typed Instance and dispatch function - -1. With this method, an extra field is added to the instance data that identifies its type. Then a globally available TM specific dispatch function is called to run the desired fg function on the data. It is similar to the dispatch function from above, but the instance data is an additional argument. - -2. The dispatch function uses the type information to know which fg table to call. This type information could be a pointer to the appropriate fg table. - -3. This approach differs from the vtable method in that all the arguments are given to the one TM dispatch function, and it figures out how to do the dispatch. There is not a wrapper-per-function. - -** Which approach? - -We want to be able to declare an instance as a local variable, where it will end up being on the stack frame. We want to avoid heap allocation for performance reasons, but not exclude use of heap memory. - -Dynamically created functions are out of the question. Dispatch approaches require the enum table so as to have tags. This is not show stopper. However, having one dispatch function means the argument types are not checked. That is a problem. - -Doubled up argument, one for the instance, the other for the table, either require wrappers, or not checking that an instance really goes with the data. Besides it is a lot of typing. - -The pointer pair approach requires the separate maintenance of the pair. When these are local variables, then the pair has to be tied to the instance. This would require the user to be aware of the existence of both the instance data and the pair, so as to pass them to an initializer. This could be avoided if the pair would combined with the instance, but that -is identical to the vtable approach (the instance pointer no longer being needed). - -So we are lead to the vtable. Though we are still hoping for the curried dispatch function - lol. - - diff --git "a/document\360\237\226\211/#Model.org#" "b/document\360\237\226\211/#Model.org#" new file mode 100644 index 0000000..83b69b5 --- /dev/null +++ "b/document\360\237\226\211/#Model.org#" @@ -0,0 +1,216 @@ +#+TITLE: Model +#+AUTHOR: Thomas +#+STARTUP: content + +* Tableau + +A Tableau is a type definition for a work area, typically implemented as a typedef struct in C. + +An instance of a Tableau is a tableau. There can be many instances of a given Tableau. + +There are multiple kinds of Tableau: + +- interface (also called a Face) +- state + +* ActionTable + + +An action is a function that operates on a tableau. + +Each action is an instance of an Action. An Action is a typedef for a function pointer. + +An ActionTable is a typedef of a struct, and instance of is said to be an action_table. +A given ActionTable can + +An instance of an ActionTable is an action_table. There can be many isntances of a given ActionTable. + +Each function in an action_table is an action. + + +* Model + +A Model is a TableauFace, a TableauState, and an ActionTable. + +An instance of a Model is a model. + + +* Status bits or continuations? + +The problem I found with continuations is that when the library is +limited to a single status function for a model, there will necessarily +be many continuations from the status function, one for each shade of meaning that it can discern. To endow it with fewer would limit its usefulness for some scenario, perhaps rare, but still supported. + +In addition, not all status's are independent. Thus there must be a priority scheme and then a choice of continuation, but the status function might not know the caller's +priorities. An alternative would be to take both continuations and break into multithreaded execuation. However, many programs are designed to be single threaded. + +When status is used as an argument guard this often comes down to, "Is the passed in +status baring model operable or not?" Thus the tableau for the many-continuations status function will have many duplicate next pointers. + +If rather than returning continuations, a highly discerning status function were to return status bits, The caller could mask the bits and then chose among continuations. In the cause of an argument guard, choosing among two paths. + +It is also a little funny when using a status function as an argument guard that the guard continues into the very function it is guarding. The tableau facilitates this +design pattern in that the input operands need not be written again. Though this +requires managing the tableau for the model who's status is being checked. + +An alternative to using status bits is to have more than one status function. One implementation is to embed the many-continuations status function inside the few-continuations status function, to perform the mask, and then pick the continuation. This might be convenient function to have, but where a second status function really makes sense is where it reduces the amount of computation that need be done. + +* A Single Tableau per Model + +Inputs for actions are written to a tableau. A link currently holds an actions table pointer, and a tableau pointer, hence there is one tableau that holds both action inputs and model state variables. + +If this tableau is declared as part of the FACE then the user can access the model state variables. This would follow a philosophy of, "if they are useful, then so bit it"; however exposing state variables limits both the number of models that can be made that provide the user with the same interface, and limits what can be done with maintenance edits without risking breaking the user's code. Recall that Model is an abstract type, and there can be many implementations for said type, i.e. many models for a given Model. + +C does not allow for public and private sections of a struct, or we could make the state variables private. + +However, we can accomplish the same thing as public and private, perhaps in even a better way, by including the interface tableau in the full tableau, and have the code know it was given the full tableau: + +#+BEGIN_SRC c +typedef struct{ + ... +}X·TableaFace; + +// in the implementation + +typedef struct{ + X·TableaFace face; + ... +}X·Tablea; + +#+END_SRC + +The details of the TableauFace type are shown to the user. The actions are +declared to be given a TableauFace, so any directly calls will work. Inside each action the tableau is converted from TableauFace to Tableau. + +=> Core uses separate Face and State tableaux + +** Tableau structure + +The TableauFace has: +- all possible inputs +- results +- continuations + +Then the Tableau extension + +- state variables + + +* Continuation Link + +There are two dimensions of variation. 1) Multiple action_tables from a given ActionTable, and 2) multiple tableau from a given Tableau. + +Each action_table instance of a given ActionTable can have very different function implementations, as only the function type signatures are specified in the ActionTable definition. + +The interface tableau, TableauFace, is designed against the ActionTable. Both deal with the user's view of the Model. In contrast each state tableau, TableauState is designed against a specific action_table. + +Hence, for each ActionTable declaration there will be corresponding to a TableauFace declaration, unless by coincidence, an existing one can be recycled, though even then programmers would appreciate having matching names. This begs the question if the two structures can be combined into one. So doing would constrain our ability to make instances from them independently. + +A given action table can be used with multiple state tableaux. In other words, there can be multiple instances of the same type. + +Conversely a given tableau can be used with multiple action tables. This happens in +polymorphism, where a child tableau can be passed to a parent action. The child +parts are in an extended portion of the tableau, and thus not seen by the parent +action. + +In the one Tableau per model approach, each tableau instance is both state and inputs, hence each instance will have its own inputs. We would lose the ability to make independent state and interface instances. The interface tableau is playing the role +that is typically played by the stack frame. Hence there is a copy per call, now this the one tableau per model, there would be a copy per instance. If left independent, there would be as many or few copies as the user determines is necessary, with the network of interface tableaux being connected by pointers tending to look like a circuit. + +**proposal 1 + +Place an action_table pointer in each single tableau per model tableau, then there would be many copies of the action_table pointer, one per tableau. This is the virtual table pointer approach from C++ or the delegate pointer from JavaScript. + +With this approach the action table can be reached through the tableau, so only the tableau, or references to it, need to be passed around as an instance of the model. This is appealing. + +However, such a link to such a tableau is not sufficient for knowing which action on the action table should be called. Hence a link to such an overloaded tableau can not function as a continuation link. + +Suppose if instead of an action_table link, a function link were embedded in the tableau, perhaps as a first member. Then the first member could be called and given the tableau as its only argument. This could function as a link, but then the state of the model is owned by a single function call. This looks problematic. + +**proposal 2 + +A link is a two pointer bundle. The first pointer to an action table, the second to single tableau. Then there is a macro called `call` that is used for calling functions in the action table. ``call(extent ,&tape_tableau)` + +The problem here is that such a link can not appear as a continuation because the link itself does not say which action is being invoked. That information is in the call. + +Attempts to save this proposal by including a 'field pointer' in the link, that would be applied to the action table are rather awkward in C, though it can be done by creating an enumeration of the struct offsets, and using those tags. + +**proposal 3 + +A three pointer bundle, the first pointer to the function being called, the second pointer to an interface tableau, the third pointer to the state tableau shared by the functions in the action_table the function comes from. + +In this approach there is not action_table pointer, though that is not a problem because if that information is needed it can be curried into the called function when it is written, though chances are if a given action needs to call another action function in the table, it will do so through a function pointer. The purposes of the action_table struct is then to document which actions share the corresponding tableau state, and to provide a namespace to put the actions in, which makes it conceptually nicer for the programmer. It would be even nicer if C supported Pascal's 'with' statement. + +Such a link could be reduced to two pointers if the single tableau variation is used. + +==> Core uses proposal 3 + + +* Mixing continuations with fall through execution. + +#+BEGIN_SRC c + Local void call(Core·Link *lnk){ + while(lnk) lnk = lnk->act(lnk); + } +#+END_SRC + +This implementation of call falls through when a null `lnk` pointer is returned. However the caller can not know anything about the status of the call. + +**proposal 1 + +Each continuation function that can return a NULL link, where the caller wants to know the status, also sets a `status` value at the top of the base tableau, that all FACE tableau's extend from. + +Disadvantage, all code must set status, so why have continuations? The optimizer will drop unused status setting code, so perhaps this is not serious. Though, on the other hand, for Local functions would the optimizer skip the status return and condition testing, and put the continuation in - thus making status setting the way to go as it must be coded anyway? + + +**proposal 2 + +Have actions that set status, link to them when status is desired. + +Actually we need default continuations anyway. In many cases these could +be generic. Argument guard continuations could be 'good' or 'bad'. + +=> Core uses option 2 + +* Continuations and linking + +**proposal 1 + +Put continuations on the interface tableau. The reasoning is that the programmer will want to set them, but actually this is not a general programming task. Rather it occurs up front as part of a 'wiring' phase, and is then typically it is not done again. + +Consider this example. + +#+BEGIN_SRC c + typedef struct{ + Core·Tape·Tableau·Face tape_tableau; + Core·Area *area; + void *position_left; + void *position_right; + AU *pt0; + AU *pt1 + Core·Area *a; + Core·Area *b; + bool q; // predicate -> q + Core·Link next; + }Core·Area·Tableau·Face; +#+END_SRC + +The idea is that there is one interface tableau used for all of the Area·Tableau actions, but it has a link field. Normally while the linked together functions are running, they can not set the 'next' link, as that information comes from a higher level. For example, after `encloses_pt_q` runs, it has no idea as to where the programmer wants control to flow next. + +**proposal 2 + +Add a fourth pointer to a link. This points to the continuations block. + +#+BEGIN_SRC c + typedef struct{ + Core·Tableau *face; + Core·Tableau *state; + Core·ActionTable *action; + Core·NextTable *next_table; + }Core·Link; +#+END_SRC + +We may then describe the program flow network as a series of next_tables, and then view the program as traversing a graph. + +In database representation a set of nodes, and the dual graph is specified as a bridge table. It is more efficient when traversing a graph, to keep make the neighbor list a property of the node. Thus, "Link" can be seen as a node with a neighbor list. + +=> Core uses option 2 diff --git "a/document\360\237\226\211/Abstracting_Type_in_C.org" "b/document\360\237\226\211/Abstracting_Type_in_C.org" new file mode 100644 index 0000000..9a50785 --- /dev/null +++ "b/document\360\237\226\211/Abstracting_Type_in_C.org" @@ -0,0 +1,564 @@ +#+TITLE: Abstracting Type in C +#+AUTHOR: Thomas + +* Introduction + +Type abstraction is a fundamental challenge in C programming. Unlike object-oriented languages that provide built-in mechanisms for polymorphism, C requires explicit design patterns to achieve similar flexibility. This document explores various approaches to implementing type abstraction in C, using a tape machine (TM) as a concrete example. + +The core problem we're addressing is how to write generic code that can operate on different implementations of the same abstract interface. Specifically, we want to create functions that can work with any tape machine implementation without knowing the implementation details. This separation of interface from implementation facilitates creating modular, maintainable code in C. + +* Namespaces in C + +C does not have built-in namespace support like C++ or other modern languages. However, we can simulate namespaces using naming conventions. We use the middle dot character (·) as a namespace separator to organize identifiers into logical groups. + +** The middle dot convention + +The middle dot (·) in identifiers like `TM·Array` or `TM·Function·fg` is not a special operator in C. It is literally part of the identifier name. This convention creates a visual hierarchy that mimics namespaces while remaining valid C code. + +Example: +#+BEGIN_SRC c +TM·x // variable x +TM·Array·i // variable i +#+END_SRC +In the first example `x` is a variable in the TM namespace. TM stands for Tape Machine. In the second example, `Array` is a namespace inside of the `TM` namespace, and `i` is a variable in the `Array` namespace. + +In general, in our shop, types and namespaces are written in PascalCase. Variable and function names are written in snake_case. When proper nouns, types, or namespacess, are represented in variable or function names, they maintain their capitalization, though appear with underscores. + +#+BEGIN_SRC c +char *person_Thomas = "Thomas"; +#+END_SRC + +** Comparison with C++ Namespaces + +Unlike C++ namespaces, our convention: +1. Does not provide actual scope isolation +2. Cannot be opened with `using` directives +3. Is purely a naming convention, not a language feature + +Despite these limitations, this convention provides many of the organizational benefits of true namespaces while remaining compatible with standard C. + +* Implementing Templates in C + +C lacks built-in support for templates or generics, unlike C++ or modern languages like Java or Rust. However, we can implement template-like functionality using the C preprocessor. This section explains the template system used throughout this document. + +** The Xi (Ξ) Macro System + +The cpp macro `Ξ` is used for putting identifiers into a namespace. Consider these variables within a namespace. + +#+BEGIN_SRC c +TM·x // variable x in namespace TM +TM·Array·i // variable i in namespace TM·Array +#+END_SRC + + +,#+BEGIN_SRC c +Ξ(TM ,x) // variable x in namespace TM +Ξ(TM·Array ,i) // variable i in namespace TM·Array +#+END_SRC + +The reason the macro is needed is that cpp will not replace a macro that is embedded in an identifier. With this macro we can do the following: + +#+BEGIN_SRC c + #define CVT uint32_t + CVT i; // -> uint32_t i + typedef struct Ξ(TM ,CVT) // -> typedef struct TM·uint32_t + #undef CVT + #define CVT string + typedef string char *; + CVT ch; // -> string ch; + typedef struct Ξ(TM ,CVT) // -> typedef struct TM·string +#+END_SRC + +This allows us to create type and function names that are specialized for specific types, while maintaining a consistent naming convention. + +*** Implementation Details + +The Ξ macro was initially defined for two operands, as shown below, though now it will take between zero and ten operands. With zero operands it expands to nothing, with one it echos the operand with no center dots, with more than that the operands are appended with a prior center dot. + +#+BEGIN_SRC c +#define _Ξ2(a, b) a##·##b +#define Ξ2(a, b) _Ξ2(a, b) +#+END_SRC + +** CVT: Cell Value Type + +Throughout our tape machine implementation, we use CVT (Cell Value Type) as a template parameter. This represents the type of data stored in each cell of the tape. + +The implementation uses conditional compilation to handle different CVT values: + +#+BEGIN_SRC c +#ifndef CVT + // Code for generic, non-specialized case +#endif + +#ifdef CVT + // Code specialized for a specific CVT +#endif +#+END_SRC + +When using the library, you include it multiple times with different CVT definitions: + +#+BEGIN_SRC c +// First include with CVT undefined for base definitions +#include "TM.lib.c" + +// Then include with CVT defined for each type specialization +#define CVT int +#include "TM.lib.c" +#undef CVT + +#define CVT float +#include "TM.lib.c" +#undef CVT +#+END_SRC + +* Tableau and FG Tables + +Two key concepts in our type abstraction approach are the "Tableau" and "Function Given (FG) Table." + +** Tableau + +A "Tableau" is our term for a data structure that holds the state of a particular instance. In the context of our tape machine example: + +1. **Definition**: A tableau is a struct that contains all the state variables needed for a specific implementation of an abstract interface. + +2. **Purpose**: The tableau serves as a shared workspace where functions can read and write state information. Think of it as a blackboard where functions can leave "notes" for each other. + +3. **Implementation-specific**: Each implementation of an abstract interface will have its own tableau structure with different fields appropriate to that implementation. + +For example, the tableau for an array-based tape machine might look like: + +#+BEGIN_SRC c +struct { + CVT *hd; // Current head position + CVT *position; // Base position for the tape (leftmost cell) + Ξ(extent_t, CVT) extent; // Largest index that can be used for accessing the tape +} Ξ(TM·Array, CVT); +#+END_SRC + +Notice this struct is templated on `CVT`. Suppose it were in the file `tape.lib.c`, then: + +#+BEGIN_SRC c +#define CVT uint8_t +#include `tape.lib.c` +typedef stirng char *; +#udef CVT +#define CVT string +#include `tape.lib.c` +#+END_SRC + +This will create two versions of said `struct` tableau with two different CVT types. + +** Function Given (FG) Tables + +The "Function Given" (FG) table is a collection of function pointers that implement operations on a specific tableau type. + +1. **Definition**: An FG table is a struct containing function pointers that all take a tableau as an argument (hence "Function Given"). + +2. **Purpose**: FG tables allow for polymorphic behavior in C by providing different implementations of the same interface. + +3. **Structure**: Each function in the FG table takes a pointer to a tableau as an argument, allowing it to access and modify the state. + +A simplified example of an FG table for our tape machine might look like: + +#+BEGIN_SRC c +typedef struct { + TM·Tape·Topo (*Tape·topo)(TM *tm); + bool (*Tape·bounded)(TM *tm); + TM·Head·Status (*Head·status)(TM *tm); + Core·Status (*mount)(TM *tm); + void (*step)(TM *tm); + void (*rewind)(TM *tm); + // ... other functions +} TM·FG; +#+END_SRC + +When specialized for a specific cell value type (CVT), we might then have: + +#+BEGIN_SRC c +typedef struct { + TM·FG *fg; // Base function table + Ξ(extent_t, CVT) (*extent)(TM *tm); + CVT (*read)(TM *tm); + void (*write)(TM *tm, CVT *remote_pt); +} Ξ(TM, CVT)·FG; +#+END_SRC + +** The Relationship Between Tableaux and FG Tables + +The tableau and FG table work together to implement polymorphism: + +1. Each implementation provides its own tableau type and instance of an FG table. +2. The first field of a tableau is typically a pointer to its corresponding FG table. (When following the 'vtable' method.) +3. Functions in the FG table operate on the tableau, reading and writing its state. +4. Client code can work with any implementation by using the functions in the FG table without knowing the details of the tableau structure. + +This pattern allows us to achieve polymorphic behavior in C while maintaining type safety and avoiding the overhead of dynamic dispatch mechanisms like those used in object-oriented languages. + +** Template-Based Type Generation + +The template system generates several types of identifiers: + +1. **Type names**: `Ξ(TM, CVT)` becomes `TM·int` when CVT is defined as `int` +2. **Function names**: `Ξ(TM·Array, CVT)·init_pe` can become `TM·Array·int·init_pe` +3. **Variable names**: `Ξ(extent_t, CVT)` can become `extent_t·int` + +** Function Given (FG) Tables + +A key part of our implementation is the Function Given (FG) table pattern. Each implementation of the tape machine provides an FG table containing function pointers for its operations. + +The FG tables are specialized based on the CVT: + +#+BEGIN_SRC c +typedef struct { + TM·FG *fg; // Base function table + Ξ(extent_t, CVT) (*extent)(TM *tm); + CVT (*read)(TM *tm); + void (*write)(TM *tm, CVT *remote_pt); +} Ξ(TM, CVT)·FG; +#+END_SRC + +This allows for type-safe operations while maintaining a consistent interface. + +** Benefits of This Approach + +1. **Type safety**: The compiler checks that the correct types are used with each specialized function +2. **Code reuse**: Common functionality is defined once and specialized for different types +3. **Consistent naming**: The Ξ macro ensures a consistent naming convention +4. **Modularity**: Different implementations can share the same interface + +** Limitations + +1. **Verbosity**: More verbose than native templates in C++ +2. **Complexity**: Requires understanding of preprocessor macros and conditional compilation +3. **Debugging**: Preprocessor-generated code can be harder to debug +4. **Limited IDE support**: Most IDEs don't understand this template system for code completion + +Despite these limitations, this approach provides a powerful way to implement generic, type-safe code in C without resorting to void pointers or code duplication. + +* Proposed approaches for generalizing type in C + +These are some of the approaches what were considered, or in some cases tried. + +** Using an TM FG table instance as an instance of 'TM type' + +1. Suppose we have a generic TM FG table with the declared functions constituting the architecture (user's view, interface) of a tape machine. + +2. Instances of this TM FG table represent different implementations of the architecture. For example, TM·Array·fg for a TM implemented as an array, and TM·Function·fg for a function implementation (similar to the Natural_Number in the Java implementation). + +3. Suppose we use an instance of a FG table to be the type for a tape machine. + +4. Now suppose we have a function called `map` that is given two Tape Machine arguments, say TM_read, and TM_write, as well as a function to map. + + The `map` only refers to the interfaces for the tape machines, and is agnostic as to how they are implemented. Hence, it works out fine that it is given two instances of the FG type. It uses the dot access on these the two given fg tables to find by name the tape machine functions it wants to call. While doing so it calls whichever function that happens to be implemented on the given fg table. The declared type signature match, so it has no problem to call them. + + This achieves what we wanted: a map function that can use a tape machine and does not care what the implementation of that tape machine is. + + However, the TM functions that map calls require having the shared tableau as one of their arguments. Without this, the called function cannot know which machine is being operated on. + Furthermore, the tableau type must match the TM fg table type. + + So giving a function, such as `map`, an FG table instance alone is not sufficient. It must + also have the tableau that does with the FG instance. But where to put it? There can be many tableau for a given FG table, each representing an instance of a tape machine, so we can not attach the tableau to the FG table. + + In conclusion this method does not work. + + +** The TM tableau instance as an instance of 'TM type' + +1. As noted in the prior section, our example `map` function is given three arguments, namely, TM_read, a TM_write, and a function. For these first two + arguments it was found not to be sufficient to pass the instance fg tables. Suppose that instead we make TM_read and TM_write the relative tableau. + +2. Now we have the opposite problem from before. We have the tableau for the function tables, but we do not have the function tables that are to be used with them. If we make the function tables global, then `map` will have to decide somehow which one to call, and make this decision at run time, as it can process instances of many types. In C this can not + be done from the type signature of the instance, because it is not available at run time. + +3. One solution is to keep the specific type on the tableau, and then have multiple `match functions` one per implementation (and per CVT template value), and then call the map function that goes with the tableau. The programmer picks the matching one, and the compiler verifies the types match at compile time. + +4. This approach works, but we duplicate the map code many times just to get the function type signatures to match the tableau type with the fg table used. + +** Using both the TM tableau instance, and the corresponding TM FG table instance + +1. Say we have one generic `map` that takes 5 arguments: TM_read (an tape machine tableau), TM_read_fg, a TM_write (a tape machine tableau), and TM_write_fg, and of course, all the a pointer to the function that map is to apply. + +2. The instance parameters must be declared `void *` to prevent argument checking on them; otherwise, it will be necessary to implement many map functions for each instance type combination. + +3. This works, though we have no way to know if the type of the given tableau goes with the type of the fg table, for each of the read tape machine and write tape machine. + +4. We could create many wrapper functions to accomplish the argument type checks, then call a central map function with `void *` instance data pointers, and with any luck, the optimizer would make this extra layer go away, so it would not be a run time performance drag. Still, by this method map has 5 arguments instead of the three that are natural for the problem. + +5. So this approach, with the delegation wrappers, does everything we want, but it feels unsatisfactory due to having to provide arguments in pairs. + +** Tableau instances carries pointer to the matching FG table instance + +1. Each fg table is full of functions that are given a tableau of a specific type. Hence, it is practical to add a field to the tableau such that when an instance is made of the tableau, that this field is initialized with a pointer to its matching fg table. + +2. In practice then, the function that allocates a tape machine will actually be allocating a tableau of the correct type. This tableau would then be allocated on a stack frame or in a heap block. Following the allocation a type specific init function is called, and this function sets the fg pointer table, along with other variable initialization. + +3. Then a call to a function on the fg table looks like this: + + #+BEGIN_SRC c + + typedef struct{ + TM·FG fg; + } TM; + + typedef struct{ + TM tm; + uint8_t *hd; + uint8_t *position; + extent_t extent; + } TM·Array; + + ... + + TM *init(TM·Array *tm ,position ,extent); + + ... + + TM *tm_read; + TM·Array *tma; + + tm_read = *init(tma ,position ,extent); + + ... + + void map(TM *tm_read ...){ + ... + tm_read->fg->step(tm_read); + } + #+END_SRC + + Here `tma` has been allocated. `tm` is has not been allocated, but rather is a generic stand in for any tape machine tableau. + + `map` is given `TM *` type, so said tape machine could be of any implementation. All that matters is that the `TM` interface has been implemented. + +4. It works, and it is a tried and true method. It is a little funny that the programmer uses `tm_read` twice in the call, but at least the tm_read argument will be type checked. + +** Using a pointer pair as the `TM type'. + +1. Instead of the instance data being called the 'TM type', a pair is the 'TM type'. + The first member of the pair points to a tableau instance, the second to a matching FG + table instance. + +2. With this approach, generic TM functions each accept a pair as a TM argument. + +3. This approach encapsulates the same information as the vtable approach but keeps the relationship explicit. Note, if there is a one-to-one correspondence between tableaux and pairs, then the memory footprint is larger by one pointer per instance. + +4. An example + + #+BEGIN_SRC c + // Define the pair structure + typedef struct { + TM·Tableau *t; // Points to the implementation-specific tableau + TM·FG *fg; // Points to the corresponding FG table + } TM; + + // Implementation-specific tableau + typedef struct { + uint8_t *hd; + uint8_t *position; + extent_t extent; + } TM·Tableau·Array; + + // Function to initialize a pair + TM init_pair(TM·Tableau·Array *tma, uint8_t *position, extent_t extent) { + TM pair; + // Initialize the tableau + tma->hd = position; + tma->position = position; + tma->extent = extent; + + // Set up the pair + pair.t = (TM·Tableau *)tma; + pair.fg = &TM·Array·fg; + + return pair; + } + + // Using the pair in a function + void map(TM tm_read, ...) { + ... + + // Call functions through the pair + tm_read.fg->rewind(tm_read.t); + ... + + } + #+END_SRC + +5. Note that when using a pointer pair, the `init` function will be given the same arguments as for the vtable approach, but it will return the pair instead of a more generic pointer to the tableau. + +6. With this approach a pair of pointers is passed around instead of a single pointer. Though it might be more optimizer friendly, as it is easier to drop structures, such as the pair, than it is to rearrange structures as would have to be done to unpack the vtable pointer from the tableau structure. + +** Using a dispatch function as the `TM type'. + +1. In this case, a pointer to a function is the 'TM type'. There is an enum that gives numeric tags to each of the functions in the FG struct instance. + +2. The tag for the desired fg function to be called is passed as the first argument to the dispatch function, and the remaining arguments are for the fg function. + +3. The dispatch function has the instance data and fg table pointer curried into it, so it then calls the correct fg function while providing it with the correct instance data. + +4. In C, it is not immediately obvious how to create a function on the fly each time an + instance is created to curry the instance data into it, and then later how to call + the newly created function. + +** Dispatch function and Self-identified Tableau type. + +1. With this method, an extra field is added to each tableau instance to identify its type. Then a globally available TM-specific dispatch function is called to run the desired fg function on the data. It is similar to the dispatch function from above, but the instance data is an additional argument. + +2. The dispatch function uses the type information to know which fg table to call. This type information could be a pointer to the appropriate fg table. + +3. This approach differs from the vtable method in that all the arguments are given to the one TM dispatch function, and it figures out how to do the dispatch. There is not a wrapper-per-function. + +** Which approach? + +We want to be able to declare an instance as a local variable, where it will end up being on the stack frame. We want to avoid heap allocation for performance reasons, but not exclude the use of heap memory. + +Dynamically created functions are out of the question. Dispatch approaches require the enum table to have tags. This is not a show-stopper. However, having one dispatch function means the argument types are not checked. That is a problem. + +Doubled-up arguments (one for the instance, the other for the table) either require wrappers or do not check that an instance really goes with the data. Besides, this approach requires a lot of typing. + +The pointer pair approach becomes a maintenance problem, unless it is passed by value. When passed by value. When passed by value it is two pointers being copied instead of one. There is no corresponding savings on fewer levels of indirection on lookup. It does achieve separation of concerns, and would facilitate using the same instance with multiple fg tables, i.e. multiple 'views', that that is not a feature that is driving the decision process. + +So their are two practical approaches, the vtable, and the pointer pair. + +* Terminology + +** Model + +A 'model' consists of a Tableau definition, FG table definitions, and all of the type definitions that occur on the function signatures of those functions, all instances of the FG table, all while including the variations due to the template variables. This includes the function implementations, but does not include the values assigned to the tableaux. + +Going by this definition, it can be said that in the file TM.lib.c provides a Tape Machine model. + +** Architecture + +Architecture is the users view of the model. In the case of a software library, the user will be an application programmer. + +An architecture can also be a specification for which the model is an implementation. In which case, it says "The user must see this when using the model that is to be written." + +** FG table instances + +An FG table with template variabes, will expand out to one or more FG tables (without template variables), when those variables are bound to values. + +There can be multiple instances of an FG table. Each instance will consists of pointers to functions that have the type signature specified in the FG table. However, though all instances of the FG table share the same interface, their implementations can be completely different. + +Each template variable binding, and each FG table instance can have a different Tableau type as the given argument. For the Tape Machine, we give each tableau struct the name Ξ(TM·, CVT), where is the FG instance table type. For example, Ξ(TM·Array, CVT) is a struct of state variables for an Array implementation of the TM. + +------------------------------------------------------------------- + +* Hierarchy + +The TM model has functions that are independent of the CVT parameter. + + +** One for all FG table + +The "TM.lib.c" file defines an FG type called Ξ(TM, CVT)·FG. Note that CVT is a template +parameter. Hence, giving different CVT bindings, there will be different FG tables. + +For each Ξ(TM, CVT)·FG, there can be a number of Ξ(TM·, CVT)·fg instances. For +example, Ξ(TM·Array, CVT)·fg. Each of these is a parameterized table. + +A user has an fg table to call functions from. This is either passed in or, more +likely, found at global scope after including "TM.lib.c", and then including it again for +each value of the CVT variable to be used. + +For each implementation type, there is a struct defined called Ξ(TM·, CVT), +note the lack of further suffix. Instances of this type are said to be instances of the tape +machine. `FG` stands for `function given`, and what each said function is given is one or more arguments of the Ξ(TM·, CVT) type. + +When a user wants a tape machine, the user makes an instance of a Ξ(TM·, CVT). +This is then handed to a function called Ξ(TM·, CVT)·init(). The init function is given whatever parameters are needed for initializing the instance, and it returns a more generalized pointer of type `Ξ(TM, CVT) *`. + +After initialization, the Ξ(TM·, CVT) instance will have a first field value that points to the Ξ(TM·, CVT)·fg table. However, the pointer to this instance will be of the type returned by init, which is `Ξ(TM, CVT) *` (notice it lost the implementation). This more generic pointer can now be used with the generic instance of the +Ξ(TM, CVT)·FG table, Ξ(TM, CVT)·fg, which holds wrapper functions that make use of the +first field value to find the real fg table and to call those functions. + +Hence, after the user calls the correct init for the specific instance made, the resulting pointer points to the same type object independent of the implementation of the functions. Thus, code written to manipulate TMs can be written in a manner that is agnostic to the implementation of those TMs. + +When a function is called, say Ξ(TM, CVT)·fg.step(tm), it is passed the generic type `Ξ(TM, CVT) *`, tm. This will call the step wrapper function, which will in turn pass the same arguments (in this case, only `tm`) to the step function found in the fg table pointed to by the first member of the tm struct. + +** Separate FG tables + +In the flat fg table approach described in the prior section, each wrapper function table of the form Ξ(TM, CVT)·fg, obtained by setting the CVT template to a type value, will have a full set of wrapper function pointers. When a wrapper function is the same independent of the CVT variable, it still has a pointer copied into each fg table. Thus, there will be a lot of redundancy in the tables if many functions are not CVT-specific. + +For the layered fg table, there are separate wrapper function tables for the wrappers that are independent of CVT and those that are CVT-differentiated. The user then calls functions from the CVT-independent table when invoking those functions and from the CVT-differentiated functions table when calling those. So, for example, the user would call TM·fg.step(tm) to do a step, as that is CVT-independent, but call Ξ(TM, CVT)·fg.read(tm) to do a read, as the read value is CVT-differentiated. + +** Direct access through instance field (Orrin suggestion) + +Instead of calling fg functions through a globally visible table such as: + +#+BEGIN_SRC c +fg->step(tm); // Wrapper style +#+END_SRC + +where fg is of type Ξ(TM, CVT)·FG and calls to it require globally accessible wrapper functions, + +we can use the instance's first field directly: + +#+BEGIN_SRC c +tm->fg->step(tm); +#+END_SRC + +Here, tm is a Ξ(TM, CVT) * — the generic type returned by init — and fg is the first field of the instance pointing to the correct FG table. + +This style removes the need for wrapper functions entirely. Each TM implementation embeds its corresponding FG table pointer directly in the instance. Thus, no global wrapper needs to be referenced, and function type-checking is preserved at compile time. + +If there are CVT-independent functions, we can use a layered FG table. Each CVT-specific FG table includes a pointer to a base table: + +#+BEGIN_SRC c +tm->fg->base->step(tm); // Access shared, CVT-independent function +tm->fg->read(tm); // Access CVT-specific function +#+END_SRC + +This structure mimics prototype delegation in JavaScript, except we resolve the chain explicitly with types, not dynamic name resolution. + +The benefit of this approach is that the user only needs to have the instance in scope — no global FG table declarations. All function dispatch is local and type-safe. + +The only remaining user burden is knowing whether a function is CVT-specific or not. This is made obvious by whether the function appears in the base or CVT-differentiated FG struct, and the compiler will catch mismatches. + +(Contribution by Orrin — co-author) + +* Observations + +C does not have automatic conversion of a child type to its parent; instead, it will give a type mismatch error. + +The vtable pattern with separate tables will have a CVT-differentiated fg table pointer on the tableau. Without the function wrappers, a call can occur like this: + +#+BEGIN_SRC c +tm->fg->step(tm) +#+END_SRC + +Or even with the wrappers and a globally available fg table: + +#+BEGIN_SRC c +fg->step(tm) +#+END_SRC + +In both of these, `step` will be the CVT-differentiated version of step, so types will match, and these calls work. + +However, things change when we want to call the non-CVT-differentiated shared table: + +#+BEGIN_SRC c +tm->TM·fg->mount(tm) +#+END_SRC + +Due to `mount` being in the shared fg table that has type `TM·fg` where it expects to be given arguments of type `TM *`, and having type `TM·`, there will be a type mismatch +error on the call. The programmer will be compelled to fix this with a cast: + +#+BEGIN_SRC c +tm->TM·fg->mount((TM *)tm) +#+END_SRC + +Requiring the programmer to defeat the type system by habit is not a good approach. + +So the one solution that does work is the one big table per type. All functions will then have correct signatures in the FG declaration. In the implementation, the more generic functions can be cast when assigned directly to the fg table function pointers, or wrappers that delegate can be written and assigned to the fg table function pointers. + +* Conclusion + +After examining various approaches to type abstraction in C, the vtable pattern emerges as the most practical solution for our tape machine implementation. While it has some overhead in terms of memory usage, it provides the best balance of type safety, ease of use, and performance. + +The direct access through instance field approach suggested by Orrin offers an elegant alternative that eliminates the need for wrapper functions while maintaining type safety. This approach is particularly appealing for its simplicity and the fact that it keeps all the necessary information localized to the instance. + +For projects where performance is critical, the "one big table per type" approach may be the most efficient, as it avoids the need for type casting while still providing a clean interface. + +Ultimately, the choice of approach depends on the specific requirements of the project, but the vtable pattern and its variations provide a solid foundation for type abstraction in C programming. diff --git "a/document\360\237\226\211/Abstracting_Type_in_C.pdf" "b/document\360\237\226\211/Abstracting_Type_in_C.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..ce5ac69d7dc026f3c646ca842baa531d1443c97a GIT binary patch literal 211829 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 z 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 TM·CVT +Ξ(TM·Array, CVT)·init -> TM·Array·CVT·init +``` + +This allows us to create type and function names that are specialized for specific types, while maintaining a consistent naming convention. + +\subsubsection{Implementation Details} +\label{sec:org08d9fe2} + +The Ξ macro system is implemented using variadic macros and the C preprocessor's token concatenation operator (\#\#): + +```c +\#define \_Ξ2(a, b) a\#\#·\#\#b +\#define Ξ2(a, b) \_Ξ2(a, b) +``` + +The system includes macros for different numbers of arguments (Ξ0 through Ξ10) and uses argument counting to automatically select the appropriate macro: + +```c +\#define Ξ(\ldots{}) Ξ\textsubscript{EXPAND}(COUNT\textsubscript{ARGS}(\uline{\uline{VA\textsubscript{ARGS}}}), \uline{\uline{VA\textsubscript{ARGS}}}) +``` + +This allows for flexible usage with different numbers of template parameters. + +\subsection{CVT: Cell Value Type} +\label{sec:org8359158} + +Throughout our tape machine implementation, we use CVT (Cell Value Type) as a template parameter. This represents the type of data stored in each cell of the tape. + +The implementation uses conditional compilation to handle different CVT values: + +```c +\#ifndef CVT + // Code for generic, non-specialized case +\#endif + +\#ifdef CVT + // Code specialized for a specific CVT +\#endif +``` + +When using the library, you include it multiple times with different CVT definitions: + +```c +// First include with CVT undefined for base definitions +\#include "TM.lib.c" + +// Then include with CVT defined for each type specialization +\#define CVT int +\#include "TM.lib.c" +\#undef CVT + +\#define CVT float +\#include "TM.lib.c" +\#undef CVT +``` + +\subsection{Template-Based Type Generation} +\label{sec:orgcde6c14} + +The template system generates several types of identifiers: + +\begin{enumerate} +\item \textbf{\textbf{Type names}}: `Ξ(TM, CVT)` becomes `TM·int` when CVT is defined as `int` +\item \textbf{\textbf{Function names}}: `Ξ(TM·Array, CVT)·init\textsubscript{pe}` becomes `TM·Array·int·init\textsubscript{pe}` +\item \textbf{\textbf{Variable names}}: `Ξ(extent\textsubscript{t}, CVT)` becomes `extent\textsubscript{t}·int` +\end{enumerate} + +\subsection{Function Given (FG) Tables} +\label{sec:org691e6ba} + +A key part of our implementation is the Function Given (FG) table pattern. Each implementation of the tape machine provides an FG table containing function pointers for its operations. + +The FG tables are specialized based on the CVT: + +```c +typedef struct \{ + TM·FG *fg; // Base function table + Ξ(extent\textsubscript{t}, CVT) (*extent)(TM *tm); + CVT (*read)(TM *tm); + void (*write)(TM *tm, CVT *remote\textsubscript{pt}); +\} Ξ(TM, CVT)·FG; +``` + +This allows for type-safe operations while maintaining a consistent interface. + +\subsection{Benefits of This Approach} +\label{sec:org5338608} + +\begin{enumerate} +\item \textbf{\textbf{Type safety}}: The compiler checks that the correct types are used with each specialized function +\item \textbf{\textbf{Code reuse}}: Common functionality is defined once and specialized for different types +\item \textbf{\textbf{Consistent naming}}: The Ξ macro ensures a consistent naming convention +\item \textbf{\textbf{Modularity}}: Different implementations can share the same interface +\end{enumerate} + +\subsection{Limitations} +\label{sec:org70b9fc6} + +\begin{enumerate} +\item \textbf{\textbf{Verbosity}}: More verbose than native templates in C++ +\item \textbf{\textbf{Complexity}}: Requires understanding of preprocessor macros and conditional compilation +\item \textbf{\textbf{Debugging}}: Preprocessor-generated code can be harder to debug +\item \textbf{\textbf{Limited IDE support}}: Most IDEs don't understand this template system for code completion +\end{enumerate} + +Despite these limitations, this approach provides a powerful way to implement generic, type-safe code in C without resorting to void pointers or code duplication. + +\section{Generalizing type} +\label{sec:orgbc78d46} + +\subsection{Passing a TM FG table instance} +\label{sec:org326c1a7} + +\begin{enumerate} +\item Suppose we have a generic TM FG table with the declared functions constituting the architecture (user's view, interface) of a tape machine. + +\item Instances of this TM FG table represent different implementations of the architecture. For example, TM·Array·fg for a TM implemented as an array, and TM·Function·fg for a function implementation (similar to the Natural\textsubscript{Number} in the Java implementation). + +\item Now suppose we have a function `map` that is given a TM\textsubscript{read}, a TM\textsubscript{write}, and a function. +The map does not care how the TM is implemented. + +If these first two arguments are declared as TM FG type, then they can accept any fg table whether it be an Array implementation, a Function implementation, etc. The map can then pick the functions it needs, such as step and rightmost, from the +table, and thus get tape behavior. + +This achieves what we wanted: a map function that can use a tape machine and does not care what the implementation of that tape machine is. + +However, the TM functions that map calls require a first argument that holds the TM instance data. Without this, it cannot know which machine is being operated on. +Furthermore, the instance data type must match the TM fg table type. + +Given steps 1 through 3, we never passed in instance data to map, only a TM FG table instance. So map has a type, but not the data. +\end{enumerate} + + +\subsection{Passing TM instance data, compile in the fg table} +\label{sec:orged57256} + +\begin{enumerate} +\item As noted, `map` is given a TM\textsubscript{read}, a TM\textsubscript{write}, and a function. For these first two +arguments, suppose we pass in the instance data, i.e., struct pointers. + +\item The TM·Array struct will hold a base pointer to the array and the head location. The TM·Function struct would hold a handle recognized by the functions or some state used by them. + +\item Then we have a map function for each architecture type, and we compile into each of these a call to the correct default TM·fg table. The map·Array will have TM·Array·fg compiled into it, and the map·Function will have TM·Function·fg compiled into it, etc. + +\item This approach works, but we duplicate the map code many times just to get the types to match the calls. +\end{enumerate} + + +\subsection{Passing in both the TM instance data and corresponding TM FG tables instances} +\label{sec:orgf9f5316} + +\begin{enumerate} +\item Say we have one generic `map` that takes 5 arguments: TM\textsubscript{read} (an instance), TM\textsubscript{read}\textsubscript{fg}, a TM\textsubscript{write} (an instance), and TM\textsubscript{write}\textsubscript{fg}, plus the function to apply. + +\item The instance parameters must be declared `void *` to prevent argument checking on them; otherwise, it will be necessary to implement many map functions for each instance type combination. + +\item This works, though we have no way to know if the correct type of instance data that matches the fg table was actually passed in. + +\item We could create many wrapper functions to accomplish the instance data type check, then call a central map function with `void *` instance data pointers. With any luck, the optimizer would make this extra layer go away, so it will be efficient. Still, map now has 5 arguments instead of the three that are natural for the problem. +\end{enumerate} + + +\subsection{Using a "vtable"} +\label{sec:orga3c331a} + +\begin{enumerate} +\item All TM instance types are structs with a first field that points to the fg table, +regardless of the implementation type. This is not a serious requirement because +each implementation type already has a struct for its implementation data. However, it does make an instance bigger, and it is not clear that the optimizer will be able to +optimize it effectively. + +\item Then a generic fg table is created, where the functions have the signatures as specified +in the FG table. However, each of these functions follows the fg table pointer in the +instance data given to it as a first argument, and then calls that function. + +\item It works, and it is a tried and true method. +\end{enumerate} + +\subsection{Using a pointer pair} +\label{sec:orgc9d996e} + +\begin{enumerate} +\item Instead of the instance data being called the 'TM type', a pair is the 'TM type'. +The first member of the pair points to an instance, the second to a corresponding +fg table. + +\item Again there are some generic TM functions, each accepts a pair as a first argument, and then calls the corresponding fg table function while giving it the instance pointer +from the pair as the first argument. + +\item This approach packs the same information as the vtable approach. If there is a +one-to-one correspondence between instances and pairs, then it is larger by one pointer. + +\item This is a type of 'link' from our continuations, but the tableau pointer is gone due +to using a stack frame, and the continuation table pointer is gone due to flow-through sequencing. Thus it is two pointers instead of 4. + +\item Hopefully, the optimizer would recognize that the pair pointers are redundant. They are only needed to ensure that the instance and fg table go together. +\end{enumerate} + +\subsection{Instance curried dispatch function} +\label{sec:orga7d5cdc} + +\begin{enumerate} +\item In this case, a pointer to a function is the 'TM type'. There is an enum that gives numeric tags to each of the functions in the FG struct instance. + +\item The tag for the desired fg function to be called is passed as the first argument to the dispatch function, and the remaining arguments are for the fg function. + +\item The dispatch function has the instance data and fg table pointer curried into it, so it then calls the correct fg function while providing it with the correct instance data. + +\item In C, it is not immediately obvious how to create a function on the fly each time an +instance is created to curry the instance data into it, and then later how to call +the newly created function. +\end{enumerate} + +\subsection{Self-typed Instance and dispatch function} +\label{sec:orge6b7e0a} + +\begin{enumerate} +\item With this method, an extra field is added to the instance data that identifies its type. Then a globally available TM-specific dispatch function is called to run the desired fg function on the data. It is similar to the dispatch function from above, but the instance data is an additional argument. + +\item The dispatch function uses the type information to know which fg table to call. This type information could be a pointer to the appropriate fg table. + +\item This approach differs from the vtable method in that all the arguments are given to the one TM dispatch function, and it figures out how to do the dispatch. There is not a wrapper-per-function. +\end{enumerate} + +\subsection{Which approach?} +\label{sec:org6c9a58c} + +We want to be able to declare an instance as a local variable, where it will end up being on the stack frame. We want to avoid heap allocation for performance reasons, but not exclude the use of heap memory. + +Dynamically created functions are out of the question. Dispatch approaches require the enum table to have tags. This is not a show-stopper. However, having one dispatch function means the argument types are not checked. That is a problem. + +Doubled-up arguments (one for the instance, the other for the table) either require wrappers or do not check that an instance really goes with the data. Besides, it requires a lot of typing. + +The pointer pair approach requires the separate maintenance of the pair. When these are local variables, the pair has to be tied to the instance. This would require the user to be aware of the existence of both the instance data and the pair, to pass them to an initializer. This could be avoided if the pair were combined with the instance, but that +is identical to the vtable approach (the instance pointer no longer being needed). + +So we are led to the vtable approach, though we are still hoping for the curried dispatch function - lol. + +\section{Implementation Details} +\label{sec:org009bd61} + +\subsection{Main objects} +\label{sec:org4c8ad02} + +\begin{enumerate} +\item Ξ(TM, CVT)·FG table (CVT is a template for the tape cell value type). +\item Ξ(TM, CVT) instance, typically declared as a local variable. +\item FG Ξ(TM·Array, CVT)·fg, which is a Ξ(TM, CVT)·FG type, provides pointers to function +wrappers that are given a Ξ(TM, CVT) instance. Each wrapper then calls the function found in the +instance's vtable. +\end{enumerate} + +\subsection{Declaration} +\label{sec:org2d5c70b} + +\begin{enumerate} +\item With CVT not defined, \#include "TM.lib.c" in FACE section. +\item With each different CVT value defined, \#include "TM.lib.c" in FACE section again. +\item Do the same in the IMPLEMENTATION section. +\end{enumerate} + +\subsection{Instantiation} +\label{sec:orgf6668e0} + +\begin{enumerate} +\item Define a local variable, or get from malloc, a Ξ(TM, CVT) type, say `tm`. +\item Call init(tm). +\end{enumerate} + +\subsection{Use} +\label{sec:orgcb2825f} + +\begin{enumerate} +\item Call, for example, Ξ(TM·Array, CVT)·fg.step(tm), where tm is a Ξ(TM, CVT) type. +\end{enumerate} + +\subsection{FG table instances} +\label{sec:org4267ad9} + +There can be multiple instances of an FG table, each with functions that are implemented differently, though they share the same FG table type. + +Each CVT and FG table instance type will have a different tableau struct. Each tableau struct will have the type Ξ(TM·, CVT), where is the FG instance table type. For example, Ξ(TM·Array, CVT) is a struct of state variables for an Array implementation of the TM. + +\subsection{One for all FG table} +\label{sec:orga349d27} + +The "TM.lib.c" file defines an FG type called Ξ(TM, CVT)·FG. Note that CVT is a template +parameter. Hence, giving different CVT bindings, there will be different FG tables. + +For each Ξ(TM, CVT)·FG, there can be a number of Ξ(TM·, CVT)·fg instances. For +example, Ξ(TM·Array, CVT)·fg. Each of these is a parameterized table. + +A user has an fg table to call functions from. This is either passed in or, more +likely, found at global scope after including "TM.lib.c", and then including it again for +each value of the CVT variable to be used. + +For each implementation type, there is a struct defined called Ξ(TM·, CVT), +note the lack of further suffix. Instances of this type are said to be instances of the tape +machine. `FG` stands for `function given`, and what each said function is given is one or more arguments of the Ξ(TM·, CVT) type. + +When a user wants a tape machine, the user makes an instance of a Ξ(TM·, CVT). +This is then handed to a function called Ξ(TM·, CVT)·init(). The init function is given whatever parameters are needed for initializing the instance, and it returns a more generalized pointer of type `Ξ(TM, CVT) *`. + +After initialization, the Ξ(TM·, CVT) instance will have a first field value that points to the Ξ(TM·, CVT)·fg table. However, the pointer to this instance will be of the type returned by init, which is `Ξ(TM, CVT) *` (notice it lost the implementation). This more generic pointer can now be used with the generic instance of the +Ξ(TM, CVT)·FG table, Ξ(TM, CVT)·fg, which holds wrapper functions that make use of the +first field value to find the real fg table and to call those functions. + +Hence, after the user calls the correct init for the specific instance made, the resulting pointer points to the same type object independent of the implementation of the functions. Thus, code written to manipulate TMs can be written in a manner that is agnostic to the implementation of those TMs. + +When a function is called, say Ξ(TM, CVT)·fg.step(tm), it is passed the generic type `Ξ(TM, CVT) *`, tm. This will call the step wrapper function, which will in turn pass the same arguments (in this case, only `tm`) to the step function found in the fg table pointed to by the first member of the tm struct. + +\subsection{Separate FG tables} +\label{sec:orgafbf17c} + +In the flat fg table approach described in the prior section, each wrapper function table of the form Ξ(TM, CVT)·fg, obtained by setting the CVT template to a type value, will have a full set of wrapper function pointers. When a wrapper function is the same independent of the CVT variable, it still has a pointer copied into each fg table. Thus, there will be a lot of redundancy in the tables if many functions are not CVT-specific. + +For the layered fg table, there are separate wrapper function tables for the wrappers that are independent of CVT and those that are CVT-differentiated. The user then calls functions from the CVT-independent table when invoking those functions and from the CVT-differentiated functions table when calling those. So, for example, the user would call TM·fg.step(tm) to do a step, as that is CVT-independent, but call Ξ(TM, CVT)·fg.read(tm) to do a read, as the read value is CVT-differentiated. + +\subsection{Direct access through instance field (Orrin suggestion)} +\label{sec:orgfe58dd7} + +Instead of calling fg functions through a globally visible table such as: + +```c +fg->step(tm); // Wrapper style +``` + +where fg is of type Ξ(TM, CVT)·FG and calls to it require globally accessible wrapper functions, + +we can use the instance's first field directly: + +```c +tm->fg->step(tm); +``` + +Here, tm is a Ξ(TM, CVT) * — the generic type returned by init — and fg is the first field of the instance pointing to the correct FG table. + +This style removes the need for wrapper functions entirely. Each TM implementation embeds its corresponding FG table pointer directly in the instance. Thus, no global wrapper needs to be referenced, and function type-checking is preserved at compile time. + +If there are CVT-independent functions, we can use a layered FG table. Each CVT-specific FG table includes a pointer to a base table: + +```c +tm->fg->base->step(tm); \emph{/ Access shared, CVT-independent function +tm->fg->read(tm); /} Access CVT-specific function +``` + +This structure mimics prototype delegation in JavaScript, except we resolve the chain explicitly with types, not dynamic name resolution. + +The benefit of this approach is that the user only needs to have the instance in scope — no global FG table declarations. All function dispatch is local and type-safe. + +The only remaining user burden is knowing whether a function is CVT-specific or not. This is made obvious by whether the function appears in the base or CVT-differentiated FG struct, and the compiler will catch mismatches. + +(Contribution by Orrin — co-author) + +\section{Observations} +\label{sec:org46e6336} + +C does not have automatic conversion of a child type to its parent; instead, it will give a type mismatch error. + +The vtable pattern with separate tables will have a CVT-differentiated fg table pointer on the tableau. Without the function wrappers, a call can occur like this: + +```c +tm->fg->step(tm) +``` + +Or even with the wrappers and a globally available fg table: + +```c +fg->step(tm) +``` + +In both of these, `step` will be the CVT-differentiated version of step, so types will match, and these calls work. + +However, things change when we want to call the non-CVT-differentiated shared table: + +```c +tm->TM·fg->mount(tm) +``` + +Due to `mount` being in the shared fg table that has type `TM·fg` where it expects to be given arguments of type `TM *`, and having type `TM·`, there will be a type mismatch +error on the call. The programmer will be compelled to fix this with a cast: + +```c +tm->TM·fg->mount((TM *)tm) +``` + +Requiring the programmer to defeat the type system by habit is not a good approach. + +So the one solution that does work is the one big table per type. All functions will then have correct signatures in the FG declaration. In the implementation, the more generic functions can be cast when assigned directly to the fg table function pointers, or wrappers that delegate can be written and assigned to the fg table function pointers. + +\section{Conclusion} +\label{sec:org1380bd0} + +After examining various approaches to type abstraction in C, the vtable pattern emerges as the most practical solution for our tape machine implementation. While it has some overhead in terms of memory usage, it provides the best balance of type safety, ease of use, and performance. + +The direct access through instance field approach suggested by Orrin offers an elegant alternative that eliminates the need for wrapper functions while maintaining type safety. This approach is particularly appealing for its simplicity and the fact that it keeps all the necessary information localized to the instance. + +For projects where performance is critical, the "one big table per type" approach may be the most efficient, as it avoids the need for type casting while still providing a clean interface. + +Ultimately, the choice of approach depends on the specific requirements of the project, but the vtable pattern and its variations provide a solid foundation for type abstraction in C programming. +\end{document} diff --git "a/document\360\237\226\211/emacs_keys.el" "b/document\360\237\226\211/emacs_keys.el" new file mode 100644 index 0000000..566c808 --- /dev/null +++ "b/document\360\237\226\211/emacs_keys.el" @@ -0,0 +1,84 @@ +;; the sake of sanity... +;; +(global-set-key (kbd "C-z") nil) ;; turn off the poison C-z key. Use C-x C-z or the command suspend-emacs +(global-set-key (kbd "C-v") nil) ;; tempting to put paste (yank) for a common typo, but at least lets not jump down the page +;; would be nice to clear C-c but minor modes redefine it + + +;;-------------------------------------------------------------------------------- +;; extended character set for programming examples in the TTCA book +;; +;; preferable to use an Xcompose file definition when available +;; +(when t + + (global-set-key [f1] 'help-command) + (global-set-key "\C-h" 'nil) + (define-key key-translation-map (kbd "M-S") (kbd "§")) + + (global-set-key (kbd "C-x g copyright SPC") [?©]) + + (global-set-key (kbd "C-x g phi SPC") [?φ]) ; phi for phase + (global-set-key (kbd "C-x g Phi SPC") [?Φ]) + + (global-set-key (kbd "C-x g d SPC") [?δ]) + (global-set-key (kbd "C-x g D SPC") [?Δ]) ; this is 'delta' is not 'increment'! + (global-set-key (kbd "C-x g delta SPC") [?δ]) + (global-set-key (kbd "C-x g Delta SPC") [?Δ]) ; this is 'delta' is not 'increment'! + + (global-set-key (kbd "C-x g g SPC") [?γ]) + (global-set-key (kbd "C-x g G SPC") [?Γ]) + (global-set-key (kbd "C-x g gamma SPC") [?γ]) + (global-set-key (kbd "C-x g Gamma SPC") [?Γ]) + + (global-set-key (kbd "C-x g l SPC") [?λ]) + (global-set-key (kbd "C-x g L SPC") [?Λ]) + (global-set-key (kbd "C-x g lambda SPC") [?λ]) + (global-set-key (kbd "C-x g Lambda SPC") [?Λ]) + + (global-set-key (kbd "C-x g m SPC") [?μ]) + (global-set-key (kbd "C-x g M SPC") [?Μ]) + (global-set-key (kbd "C-x g mu SPC") [?μ]) + (global-set-key (kbd "C-x g Mu SPC") [?Μ]) + + (global-set-key (kbd "C-x g p SPC") [?π]) + (global-set-key (kbd "C-x g P SPC") [?Π]) + (global-set-key (kbd "C-x g pi SPC") [?π]) + (global-set-key (kbd "C-x g Pi SPC") [?Π]) + + (global-set-key (kbd "C-x g x SPC") [?ξ]) + (global-set-key (kbd "C-x g X SPC") [?Ξ]) + (global-set-key (kbd "C-x g xi SPC") [?ξ]) + (global-set-key (kbd "C-x g Xi SPC") [?Ξ]) + + (global-set-key (kbd "C-x g > = SPC") [?≥]) + (global-set-key (kbd "C-x g < = SPC") [?≤]) + (global-set-key (kbd "C-x g ! = SPC") [?≠]) + (global-set-key (kbd "C-x g neq SPC") [?≠]) + + (global-set-key (kbd "C-x g nil SPC") [?∅]) + + (global-set-key (kbd "C-x g not SPC") [?¬]) + + (global-set-key (kbd "C-x g and SPC") [?∧]) + (global-set-key (kbd "C-x g or SPC") [?∨]) + + (global-set-key (kbd "C-x g exists SPC") [?∃]) + (global-set-key (kbd "C-x g all SPC") [?∀]) + + (global-set-key (kbd "C-x g do SPC") [?⟳]) ; do + (global-set-key (kbd "C-x g rb SPC") [?◨]) + (global-set-key (kbd "C-x g lb SPC") [?◧]) + + (global-set-key (kbd "C-x g cont SPC") [?➜]) ; continue + (global-set-key (kbd "C-x g thread SPC") [?☥]) ; thread + + (global-set-key (kbd "C-x g in SPC") [?∈]) ; set membership + + (global-set-key (kbd "C-x g times SPC") [?×]) ; set membership + + (global-set-key (kbd "C-x g cdot SPC") [?·]) ; scoping sepearator for gcc C + + (global-set-key (kbd "C-x g pencil SPC") [?🖉]) ; scoping sepearator for gcc C + +) -- 2.20.1