< language > A C -like, interpretive, object-oriented programming language, class library, and integrated development environment designed specifically for development of application programs for Microsoft Windows and Windows NT . Designed by Jack Krupansky Jack@BaseTechnology.com of Base Technology , Liana was first released as a commercial product in August 1991. The language is designed to be as easy to use as BASIC , as concise as C , and as flexible as Smalltalk .
The OOP syntax of C++ was chosen over the less familiar syntax of Smalltalk and Objective-C to appeal to C programmers and in recognition of C++ being the leading OOP language. The syntax is a simplified subset of C/C++ . The semantics are also a simplified subset of C/C++, but extended to achieve the flexibility of Smalltalk.
Liana is a typeless language (like Lisp , Snobol and Smalltalk ), which means that the datatypes of variables, function parameters, and function return values are not needed since values carry the type information. Hence, variables are simply containers for values and function parameters are simply pipes through which any type of value can flow. Single inheritance , but not multiple inheritance , is supported. Memory management is automatic using reference counting .
The library includes over 150 classes , for dynamic arrays , associative lookup tables, windows, menus, dialogs, controls, bitmaps, cursors, icons, mouse movement, keyboard input, fonts, text and graphics display, DDE , and MDI .
Liana provides flexible OOP support for Windows programming. For example, a list box automatically fills itself from an associated object . That object is not some sort of special object, but is merely any object that "behaves like" an array (i.e., has a "size" member function that returns the number of elements, a "get" function that returns the ith element, and the text for each element is returned by calling the "text" member function for the element).
A related product, C-odeScript, is an embeddable application scripting language. It is an implementation of Liana which can be called from C/C++ applications to dynamically evaluate expressions and statement sequences. This can be used to offer the end-user a macro/scripting capability or to allow the C/C++ application to be customized without changing the C/C++ source code.
Here's a complete Liana program which illustrates the flexibility of the language semantics and the power of the class library:
main // Use "+" operator to concatenate strings. Memory // management for string temporaries is automatic. The // "message" function displays a Windows message box. message ("You entered: " + x);
// Now x will take on a different type. The "ask_number" // function will return a "real" if the user's input // contains a decimal point or an "int" if no decimal // point. x = ask_number ("Enter a Number");
// The "+" operator with a string operand will // automatically convert the other operand to a string.
message ("You entered: " + x);
// Prompt user for a Liana expression. Store it in a // local variable (the type, string, is merely for // documentation.) string expr = ask ("Enter an Expression");
// Evaluate the expression. The return value of "eval" // could be any type. The "source_format" member function // converts any value to its source format (e.g., add // quotes for a string.) The "class_name" member function // return the name of the class of an object/value. // Empty parens can be left off for member function calls. x = eval (expr); message ("The value of " + expr + " is " + x.source_format + " its type is " + x.class_name); "> // Prompt user for a string. // No declaration needed for "x" (becomes a global variable.) x = ask ("Enter a String");
// Use "+" operator to concatenate strings. Memory // management for string temporaries is automatic. The // "message" function displays a Windows message box. message ("You entered: " + x);
// Now x will take on a different type. The "ask_number" // function will return a "real" if the user's input // contains a decimal point or an "int" if no decimal // point. x = ask_number ("Enter a Number");
// The "+" operator with a string operand will // automatically convert the other operand to a string.
message ("You entered: " + x);
// Prompt user for a Liana expression. Store it in a // local variable (the type, string, is merely for // documentation.) string expr = ask ("Enter an Expression");
// Evaluate the expression. The return value of "eval" // could be any type. The "source_format" member function // converts any value to its source format (e.g., add // quotes for a string.) The "class_name" member function // return the name of the class of an object/value. // Empty parens can be left off for member function calls. x = eval (expr); message ("The value of " + expr + " is " + x.source_format + " its type is " + x.class_name);
The author explained that the "Li" of Liana stands for "Language interpreter" and liana are vines that grow up trees in tropical forests, which seemed quite appropriate for a tool to deal with the complexity of MS Windows! It is also a woman's name.
["Liana for Windows", Aitken, P., PC TECHNIQUES, Dec/Jan 1993].
["Liana: A Language For Writing Windows Programs", Burk, R., Tech Specialist (R&D Publications), Sep 1991].
["Liana v. 1.0." Hildebrand, J.D., Computer Language, Dec 1992].
["Liana: A Windows Programming Language Based on C and C++", Krupansky, J., The C Users Journal, Jul 1992].
["Writing a Multimedia App in Liana", Krupansky, J., Dr. Dobb's Journal, Winter Multimedia Sourcebook 1994].
["The Liana Programming Language", R. Valdes, Dr Dobbs J Oct 1993, pp.50-52].
(1999-06-29)