bill@cwi.UUCP (Mr. Bill ) (02/22/90)
The following is a description of an integrated programming language/ command language system with a variety of interesting properties. We would like to solicit general reactions to this description to determine whether there would be any interest in this as a product or otherwise. The programming language provides the usual features of a general-purpose, block-structured programming language, but also provides a number of higher-level features. It is intended to be suitable for the kinds of programming chores to which the UNIX shells and languages like Perl are suited to, but has adequate capabilities and performance for a variety of uses. The following is a summary of the major features of the language: * Combines several features common to interpreted languages (e.g. flexibility, portability, dynamic linkage, etc.) with those common to compiled languages (e.g. strict type checking, run-time efficiency). * Supports modular and functional decomposition and information hiding. * Provides a large set of predefined data types including integers, floating-point numbers, booleans, date/time values, variable-length strings, arrays, and associative look-up tables. * Provides parameterized array and table types (e.g. the user can define arrays of other types, or tables keyed by one type and storing values of another type). * Provides a ``generic'' data type for flexibility, which can hold values of any other data type. The type of data stored in a generic variable may be determined at run-time. * Supports user-defined types including enumerations and composite structures. * Supports some aspects of object-oriented programming (e.g. composite ``objects'' that contain ``methods'', and limited inheritance of methods). * Automates data storage management (i.e. no explicit allocation or de-allocation needed) for all varible-size data types. * Supports a full set of arithmetic, relational, logical, bit, string, array, and table operations; and type conversion operators. * Provides a large set of methods for built-in types, so that types such as array and table can also behave as a variety of other data types (e.g. stacks, queues, ...). * Provides direct access to foreign (e.g. C) language (and library) functions, and a means for the user to extend the set of available foreign functions. * Provides direct access to host O/S functions and applications (i.e. general operation of child processes). * Supports ``call-by-value'' and ``call-by-reference'' function argument types. * Provides a general mechanism for inter-process communication, by allowing any normal function call to cross process, machine and even architectural boundaries. These "remote function calls" can also broadcast to multiple, logically addressed recipients. * Supports a machine-independent representation of all data and data types, and provides functions to convert between internal and external representations. (This can be used, for example, for storage and retrieval of arbitrary data structures in files.) The command language is primarily a tool with which to create custom command sets. Its basic capability is that of parsing and executing user defined commands. The following is a summary of the basic features of the command language: * Completely user extensible. The user may define new commands, and implement the commands using the previously described language. * Individual users may define there own command sets. * The command parser supports alias expansion similar to that of csh. * Supports variable definition and expansion within commands. * Supports subcommand execution and expansion (like `...` in csh). * Supports redirection and piping of command output. Any and all responses would be appreciated, via e-mail or posted replies. uunet!cwi!bill bill@cwi.com