Tag (programming)
This article needs additional citations for verification. (November 2016) |
In programming, a tag is an argument to a subroutine that determines other arguments passed to it, which is used as a way to pass indefinite number of tagged parameters to the subroutine; notably, tags are used for a number of system calls in AmigaOS v2.0 and onwards.
In AmigaOS
In earlier versions of AmigaOS, if a system call required setting a large number of parameters, instead of passing them as function arguments, the function would require a pointer to a structure that holds the arguments (for example, intuition.library's OpenWindow() required struct NewWindow with 17 different parameters). Tags were introduced in AmigaOS 2.0 because they "make it possible to add new parameters to system functions without interfering with the original parameters. They also make specifying parameter lists much clearer and easier."[1]
A number of third-party software libraries for AmigaOS also use tags extensively.
Example
| AmigaOS 1.3 | AmigaOS 2.0+ |
|---|---|
struct Window *wnd;
struct NewWindow nw = {
10, 10,
100, 100,
0, 1,
IDCMP_CLOSEWINDOW,
WFLG_SIZEGADGET |
WFLG_DRAGBAR |
WFLG_DEPTHGADGET |
WFLG_CLOSEGADGET |
WFLG_ACTIVATE,
NULL, NULL,
"WikiWindow",
NULL, NULL,
0, 0,
640, 400,
WBENCHSCREEN
};
wnd = OpenWindow(&nw);
|
struct Window *wnd;
wnd = OpenWindowTags(NULL,
WA_Left, 10, WA_Top, 10,
WA_Width, 100, WA_Height, 100,
WA_IDCMP, IDCMP_CLOSEWINDOW,
WA_Flags,
WFLG_SIZEGADGET |
WFLG_DRAGBAR |
WFLG_DEPTHGADGET |
WFLG_CLOSEGADGET |
WFLG_ACTIVATE,
WA_Title, "WikiWindow",
WA_PubScreenName, "Workbench",
TAG_DONE );
|
The code without tags is obscure (for example, 0, 1 define window colors) while the code with tags is self-documenting. Fewer parameters have to be defined with tags than are in the structure, as OpenWindowTags will fall back to default parameters.
Implementation
AmigaOS provides functions for tag handling in its utility.library. Especially Amiga E provides mechanisms for dynamic tag handling, allowing programs to manipulate structures where tags are not known until runtime. This is achieved through various dynamic data structures and associated functions.
In general
An advantage of tags is that they ease the work with default arguments since the programmer doesn't have to specify them or their substitutes. From this follows another advantage, ease of achieving of both forward and backward compatibility with external libraries: a program written for an older version of the library will work with a newer one, since the newer library will simply set all the parameters not provided by the program to their default values; and a program written for a newer version of the library will still work with the older version, since the older library will simply pay no attention to the newly introduced tags.
A disadvantage of tags is that their processing is slower than simply reading data from a structure or the stack. Additionally, compile time type checking is lost.
See also
References
- ^ Amiga ROM Kernal Reference Manual: Libraries (3rd ed.). p. 867. ISBN 0-201-56774-1.
External links
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.