manpagez: man pages & more
info gawk
Home | html | info | man

File: gawk.info,  Node: Extension Other Design Decisions,  Next: Extension Future Growth,  Prev: Extension New Mechanism Goals,  Up: Extension Design

C.5.3 Other Design Decisions
----------------------------

As an arbitrary design decision, extensions can read the values of
predefined variables and arrays (such as 'ARGV' and 'FS'), but cannot
change them, with the exception of 'PROCINFO'.

   The reason for this is to prevent an extension function from
affecting the flow of an 'awk' program outside its control.  While a
real 'awk' function can do what it likes, that is at the discretion of
the programmer.  An extension function should provide a service or make
a C API available for use within 'awk', and not mess with 'FS' or 'ARGC'
and 'ARGV'.

   In addition, it becomes easy to start down a slippery slope.  How
much access to 'gawk' facilities do extensions need?  Do they need
'getline'?  What about calling 'gsub()' or compiling regular
expressions?  What about calling into 'awk' functions?  (_That_ would be
messy.)

   In order to avoid these issues, the 'gawk' developers chose to start
with the simplest, most basic features that are still truly useful.

   Another decision is that although 'gawk' provides nice things like
MPFR, and arrays indexed internally by integers, these features are not
being brought out to the API in order to keep things simple and close to
traditional 'awk' semantics.  (In fact, arrays indexed internally by
integers are so transparent that they aren't even documented!)

   Additionally, all functions in the API check that their pointer input
parameters are not 'NULL'.  If they are, they return an error.  (It is a
good idea for extension code to verify that pointers received from
'gawk' are not 'NULL'.  Such a thing should not happen, but the 'gawk'
developers are only human, and they have been known to occasionally make
mistakes.)

   With time, the API will undoubtedly evolve; the 'gawk' developers
expect this to be driven by user needs.  For now, the current API seems
to provide a minimal yet powerful set of features for creating
extensions.

© manpagez.com 2000-2025
Individual documents may contain additional copyright information.