OOP concept: Abstract describes something
that is declared but not fully defined. For example, an abstract
method is a method that is declared as a part of a class, but has no
implementation. It cannot be called, it is only meant to be
inherited by derived classes.
SIDL keyword: Abstract is an optional modifier for both
classes and methods. An abstract method is a method
that has no implementation, it’s a way of declaring a method that
every subclass must implement for itself. An abstract class has one
or more abstract methods, and therefore cannot be instantiated.
Datastructure: An array is a fixed size, numerically indexed, set of variables. Arrays have in language support in almost all modern programming languages.
Babel: Babel has built in support for arrays of every data type, including objects. Babel allows these arrays such that they may be shared by differing languages.
Basic Linear Algebra Subprograms. BLAS is a famous library for doing matrix and vector algebra. More information may be found at: http://www.netlib.org/blas/
A Babel Object Server (BOS) is a network server process or thread that provides babel objects via Remote Method Invocation (RMI). Normally a BOS is run as a background thread on a normal Babel process to allow the process to publish objects for access by RMI enabled clients. There is not a single protocol that a BOS must use to communicate over Babel RMI, but clients and BOSs must use the same protocol if they are expected to communicate.
BackusNaur Form. BNF is a formal way to describe computer languages and other formal languages.
Definition: bool is a short form of the word boolean. A boolean is a logical data type that holds 1 bit of data, i. e. it is either true or false. It is used for Boolean Algebra.
SIDL keyword: bool is a data type built into SIDL, an instance of which is either true or false. For efficiency sake, the underlying storage of bool is not 1 bit.
Babel: A borrowed array is a SIDL array that does not manage its own data. The data is provided by some third party, who is also in charge of deallocating the data. It is useful for sending data through Babel, but the developer must beware in case the third party deallocates the array data before the program has finished with it.
Common Component Architecture http://www.ccaforum.org/
Definition: char is a short form of the word character. A character is a letter, number, puctuation mark, or other such symbol use in writing. In programming, a character is often defined by the 8 bit ASCII encoding.
SIDL keyword: char is a data type built into SIDL. It stores 1 byte of data, or enough for 1 ASCII character.
OOP concept: A class is a definition for a particular kind of object. It may define the data and methods that will be included in an actual instance of the object.
SIDL keyword: class is a SIDL keyword. In SIDL a class definition only defines methods. Methods may be static or instance methods. (They are instance methods by default.) If any instance method in a class is declared abstract, the class cannot be instantiated as an object, and is called an abstract class. Otherwise, it can be instantiated and is called a concrete class.
OOP concept: A concrete class is a class where all the class’s instance methods have implementations. (ie. there are no abstract methods) A concrete class may be instantiated as an object.
Common Object Model http://www.microsoft.com/ Microsoft’s IDL based language interoperability suite.
OOP concept: Components are “plug-and-play” software libraries designed with standard, clearly defined interfaces. They are the epitome of modular design. Because components communicate only through well-defined interfaces, when an application needs to be modified, a single component can be modified (or exchanged for a similar component), without fear of disrupting the other components making up the application.
OOP concept: A component architecture defines the specifics of setting up a system for programming with components in that architecture. For example, how components are imported and how they communicate are some of the questions that must be answered in a component architecture design.
SIDL keyword: copy is a SIDL keyword. It is planned that in future version of babel it will be used as a parameter modifier for parameters passed to RMI functions, currently however, this feature is unimplemented.
Common Object Request Broker Architecture http://www.omg.org CORBA allows different programs by different vendors to communicate though an IDL interface specification. In CORBA this glue code is called the “Broker.”
Definition: The sum of a real number and an imaginary number is called a complex number. Babel supports complex numbers as a basic type via the basic types “fcomplex” and “dcomplex.”
SIDL keyword: dcomplex is a data type built into SIDL. The name is short for “double complex.” It stores a complex number via 2 64-bit floating point variables, one for the real part, and one for the imaginary part.
Definition: A dense array is an array where all the dimensions are “densely packed,” or, in terms of memory addressing, there are no “spaces” between array elements. For example, if a one-dimensional SIDL array of 10 elements is created, it will be densely packed. However, if a slice of the array is taken with a stride of 2, the resulting array will use the same data as the original array. However, the new array will be only five elements long, and will only consist of the even elements of the original array. This is not densely packed. Example:
Array 1: 0 1 2 3 4 5 6 7 8 9
Array 2: 0 – 2 – 4 – 6 – 8 –
Babel: There are two anticipated user types for Babel, both are kinds of programmers. The person referred to as the “developer” is the person developing a Babelized library. The “user” is the person who writes a program using a Babelized library.
Definition: Dynamically Linked Library. A type of library that can be linked to dynamically at runtime by passing its name as a string to the dlopen() function.
Definition: A double is a 64-bit floating point number.
SIDL keyword: SIDL support double as a basic type.
Document Type Definition. Defines the grammar of the XML files. http://www.w3.org/2002/xmlspec/
Definition: The action of dynamically linking to DLLs at runtime.
Definition: Enum is a shortend form of the word enumeration. An enumeration is used to assign numbers to a set of variable names, that is, enumerate the set of variable names.
SIDL keyword: enum is a reserved word in SIDL. It is used for defining enumerations. In Babel, enumerations are a way of binding integer constants to names.
In Babel, enumerations are a way of binding integer constants to names. See subsection 6.3.
Definition: The idea of an exception is that if a method encounters a problem it cannot handle, it interrupts its execution and “throws” and exception. Hopefully some function up the call stack will “catch” the exception and know what to do about the problem. It is a useful form of error handing that SIDL supports. Exception is not a reserved word in SIDL (but throw is).
OOP concept: See inheritance.
SIDL keyword: extends is a SIDL reserved word. It is used to declare “like-type” inheritance. For example, a class may extend another class, or an interface may extend multiple interfaces, but a class cannot extend an interface, nor can an interface extend a class.
When building a Babelized library, its also important to note if your code has dependencies to other Babel types not in your library. These types often appear as base classes, argument types, or even exception types. Your library will need stubs corresponding to all these types, so it is best to put these in your library as well. We call these external stubs. See subsection 19.2.3
External Types are variable or object types that are not defined in the current class. In a class foo.Bar, sidl.Integer, or sidl.BaseClass would be external types.
fcomplex is a data type built into SIDL. The name is short for “float complex.” It stores a complex number via 2 32-bit floating point variables, one for the real part, and one for the imaginary part.
final is a SIDL reserved word. It is a method modifier. A final method is inherited by subclasses, but its implementation can never be overwritten. It is the “final” version of the implementation.
float is a data type built into SIDL. It is a 32-bit floating point number. float is short for floating point.
Overloaded Babelized methods called from non-object oriented languages, such as C and fortran 77, have 2 method names. The full name consists of the concatenation of the package name, class name, method name and type extension. The short name is missing the type extension. See subsection 6.7.
Fundamental types are the basic types that SIDL supports natively. bool, int, char, long, float, double, fcomplex, dcomplex, opaque, and string.
Most of the code that Babel generates is “glue” code. “Glue” code sits between the caller and the implementation to allow communication between them. We use the term glue to refer to the stub, IOR, and skel files.
Hypertext Markup Language http://www.w3.org/MarkUp/
In Babel, the implementation is the code placed in the server side Impl files. It is the code that Babel used glue code to allow you to call to.
implements is a SIDL reserved word. It is used when a class inherits from one or more interfaces. However, in this case the word “to implement” is not quite taken seriously. If a class implements an interface it inherits its methods, and may be cast to that interface, but if the programmer actually wished to implement any of the interface methods, he must redeclare them in the SIDL class. Any un-redeclared method is assumed abstract and will not appear in the Impl files. If there are any abstract methods in a class, that class is automatically abstract.
implements-all is a SIDL reserved word. It takes the place of “implements.” It is used when a class inherits from one or more interfaces, and the programmer definitely wants to write implementation code for each method in the named interfaces. If the programmer uses “implements-all” he does not have to redeclare the interface methods. See Section 6.7.
import is a SIDL reserved word. It is used to bring other packages into scope. Packages may be accompanied by a version number.
in is a SIDL reserved word. Each parameter passed though Babel must be declared as in, out, or inout. Each of these modes has certain rules and implication associated with it. In means “pass this variable by value to the implementation.” See Section 6.2.
Independent arrays are arrays that manage their own data. When all the references to an independent are deleted, the array data is garbage collected. The other kind of array is a borrowed array.
In normal object-oriented programming, inheritance is the ability of a “super” or “parent” class or interface to pass its characteristics (methods and instance variables) on to its subclasses, allowing subclasses to reuse these characteristics.
Of course, in SIDL we cannot define instance variables, so in SIDL inheritance only refers to method inheritance. In SIDL inheritance is is declared with the reserved words extends and implements.
inout is a SIDL reserved word. Each parameter passed though Babel must be declared as in, out, or inout. Each of these modes has certain rules and implication associated with it. Inout means “pass this variable by reference to the implementation. The implementation may do whatever it wants with the reference, but it should return something. Possibly a new variable.” See Section 6.2.
An instance method is a method that must be associated with an object instance. These methods probably rely on some state in the instance, so they cannot be divorced from it. In Object Oriented languages, you call these methods on an instance, in Babelized non-OO languages like C, you pass an instance in as the first argument to one of these methods.
int is a data type built into SIDL. It is a 32-bit integer variable int is short for integer.
The ANSI C standard way of declaring an integer that is definitely 32 or 64 bits.
An interface is a declaration of a set of methods with no information given about their implementation. All interface methods are abstract. An interface cannot be instantiated. However, a class may inherit from multiple interfaces. The purpose of interfaces is to give objects that are conceptually similar but internally different a common interface so that code may treat them the same, or seamlessly exchange them.
Interprocess means “between processes.” It is normally used to refer to “interprocess communication,” where two or more processes find some way to communicate. Interprocess communication is one of the goals of babel with RMI.
Intermediate Object Representation. IOR code is where Babel does all its work maintaining arrays, Babel objects, reference counting, etc.
Java Native Interface. The JNI is what allows Java to call to C and C++. It is referred to as calling native code because while Java runs in a virtual machine, but C and C++ run on the real machine, or run “natively.”
Language interoperability is Babel’s main purpose. Language interoperability technology allows different computer languages to call each other methods and communicate despite problems with calling conventions and differing variable types.
A method (or other identifier) is considered local if it is defined or declared in the current class or method. Sometimes a more specific term like, “local to the method” or “local to the class” is used. There is also a SIDL keyword local that modifies methods. If a method is local is can only be called in-process, and cannot be exported over RMI.
long is a data type built into SIDL. It is a 64-bit integer variable long is short for long integer. Note: Python sometimes has trouble with longs, see Section ?? for more details.
Method is the word commonly used in Java for what is called, in some other languages, a function, subroutine, or procedure. Methods are a piece a code that is called by a name. Instance methods depend on an object instance, and are allowed to read and manipulate that objects data. A static method does not depend on an instance, and therefore can only access class data and what data is passed in to the method.
A namespace is a way of logically divvying up globally accessible names. This helps in avoiding conflicts between globally accessible methods, classes, data, etc. They are mainly a feature of C++.
nonblocking is a SIDL method attribute. A nonblocking method is split into two parts. The invocation, method_send(), makes the call and immediately returns a sidl.rmi.Ticket. Later, the Ticket can be used to check if the method has returned, and retrieve the out arguments if it has with method_recv(). Nonblocking methods are really only useful with RMI where it allows the client to mix computation and communication more freely.
A non-strided array is a dense array. See the glossary entry for dense.
The Object Model is the of rules that regulates the definition, creation, and use of classes and objects in a language. To read about the SIDL object model see Section 6.7.
Object Management Group http://www.omg.org/
oneway is a SIDL method attribute. A oneway method is guaranteed to have no out arguments at all, it cannot even throw exceptions. This is so it can be invoked by a oneway message on RMI. oneway is really only useful with RMI.
opaque ia a data type build into SIDL. The word opaque is an adjective meaning “not transparent.” In SIDL, an opaque is a 64-bit variable that cannot be touched or modified by the holder. It is normally used to hold pointers that cannot be understood by the current language or in the current context.
out is a SIDL reserved word. Each parameter passed though Babel must be declared as in, out, or out. Each of these modes has certain rules and implication associated with it. Out means “pass this (null) variable by reference to the implementation. The implementation is expected to fill the reference with a new variable to be passed back to the client.” See Section 6.2.
A package is a container and namespace for conceptually linked classes and interfaces. Generally it is good practice to have one package per SIDL file.
Pass-by-copy referes to one of the two major ways arguments are passed to methods (the other is pass-by-reference). In a pass-by-copy scheme, arguments are always copied when they are passed, so that changeing the value of argument in the callee does not effect the value of the caller’s variable. This is particularly important to Babel RMI, where object can be passed either by copy or reference.
Pass-by-reference referes to one of the two major ways arguments are passed to methods (the other is pass-by-copy). In a pass-by-reference scheme, arguments remain in their original memory localtion and a pointer to them is passed to the callee method. This means that if the callee changes the value of an argument, the value of the caller’s variable changes as well. This is particularly important to Babel RMI, where object can be passed either by copy or reference.
See pass-by-copy
Position Independent Code is for making dynamically loadable libraries. PIC contains and extra level of indirection to allow the correct methods to be found dynamically at runtime.
Code preprocessing is a step, prior to compilation, where various simple, automatic code modifications are made. For example, int C, #include files are included, and #define macros are textually duplicated throughout the code. In some cases, such as Babel Fortran 90/95, method names are “mangled” to reduce their size under the method name character limit.
Private data is data that is only accessible locally, inside an object. In Babel, all Babel object data is private and cannot be accessed by other SIDL objects.
A process is a running program that exists in its own memory space and can therefore run in parallel with other processes.
A protocol is formal description of message formats and the rules that two computers must follow in order to exchange messages.
Babel RMI may use any protocol that implements the Babel RMI API. This API is defined in sidl.io.Serializer and sidl.io.Deserializer.
Reference counting is the form of garbage collection used in Babel. Each object keeps a “reference count.” When that count reaches zero, the object is destroyed and the memory reclaimed. In some languages teh counting is handled automatically, in some, like C, the developer must explicitly add and subtract from the reference count. (Using the functions addRef and deleteRef.) The internal implementation of deleteRef literally has an if statement that says “If the count is 0, free this memory,” so if the reference count of an object goes below one, all references to the object are immediately invalid.
Remote Method Invocation (RMI) is Object Oriented Remote Procedure Call (RPC). Where RPC allows a user to call procedures on remote machines, RMI allows the user to call methods on objects that may or may not exist on a remote machine. This has the advantage of being more natural and makes local and remote object interchangeable.
Reverse Engineering is the practice of inspecting the behavior of an existing program to understand more about how it works. Babel does not support this, or any forms of inspecting or modifying compiled code.
See Remote Method Invocation
See Remote Method Invocation
Serialization is a process to encode a data structure as a sequence of bytes. This is the method used by most object oriented system to save objects to files or pass objects over a network connection. Babel RMI uses serialization to pass objects by copy over the network.
A shared library is a set of methods that may be used by multiple different programs without recompilation of the library.
Overloaded Babelized methods called from non-object oriented languages, such as C and fortran 77, have 2 method names. The full name consists of the concatenation of the package name, class name, method name and type extension. The short name is missing the type extension. See subsection 6.7.
Scientific Interface Definition Language. The language used by Babel to describe how Babel glue code should be generated. See Chapter 6.
A single process program is a program that only uses one process to complete its work. One of the features of Babel is that it is able to facilitate language interoperability in a single process, which saves the extra overhead of interprocess communication.
The Babel skeleton code is the opposite of the Babel stub code. The Stub code facilitates the method call from client to IOR, and the skeleton code facilitates the method call from IOR to implementation.
Shared Object. A Unix catch all term for shared and dynamically loadable libraries.
Single Program Multiple Data. The term used to describe parallel programs that use multiple processes running the same code working on different data to solve a problem.
Object state refers to the data that an object holds. For example, if an object holds one integer, that integer holds the objects state. It is assumed that instance methods modify or use an object’s state in some way. If a method does not use the object state in any way, it should probably be a static method.
A static method is a method that does not depend on an object instance to run. It should have no need of any data of any particular object, it should only depend on the data that is passed into it. As such, unlike instance methods, it does not need to run on an instance of the class it is associated with. In Babelized C, this means the first argument to the function is not an object instance. In Java, this means the function not called on an object, but referenced by the class name.
Static linking refers to the practice of linking code at compile time, rather than dynamically at runtime. It has a speed advantage over dynamically linked code, but lack flexibility.
string is a data type built into SIDL. It stores a set of characters. It has no predefined length.
The Babel stub code is the opposite of the Babel skeleton code. The Stub code facilitates the method call from client to IOR, and the skeleton code facilitates the method call from IOR to implementation.
Simplified Wrapper and Interface Generator http://www.swig.org/ SWIG is a language interoperability tool that is not IDL based, but has certain other drawbacks.
Tarball is a common way to refer to a set of directories and files organized into a single file using the Unix tar command. It is often gzipped.
throws is a SIDL reserved word. It is used the tell SIDL that a method may throw the named SIDL exception, and code should be generated to pass it to the client.
A type describes what sort of information a variable stores, and usually how much space that information takes up. Classes and interfaces are user defined types, there are also fundamental types like int and bool.
Uniform Resource Locater. Often thought of as a pointer to a web resource.
There are two anticipated user types for Babel, both are kinds of programmers. The person referred to as the “developer” is the person developing a Babelized library. The “user” is the person who writes a program using a Babelized library.
version is a reserved word in Babel that is used to declare a version for a given package, or to declare what version of a given package should be used.
Virtual is the opposite of final. All SIDL methods are virtual by default. A virtual method is a method that may be overridden in subclasses.
Virtual Machine
a reserved word in Babel, used to state that a function has no return type.
If you want to build software in a separate directory from where the tarball was untarred, this is called a “VPATH build”. VPATH builds are useful if you want to build Babel multiple times with various compilers, flags, or you have a shared file system across multiple platforms. It separates the code you generate from things that you were given.
Extensible Markup Language. http://www.w3.org/XML/ A standardized data exchange format.