The Name
The Li of Liana stands for Language interpreter and liana is one of the first words in the dictionary that begins with li. It is a term applied to the larger climbing and twining plants in tropical forests. That seemed quite appropriate for a Windows programming tool!
Origins
Several years ago I was considering the development of a sophisticated CAD package for Windows. A big concern was that the other developers who would be on the project did not share my level of experience with Windows programming. So given the slow learning curve and low productivity for Windows programming, I began considering tools other than C and the Windows Software Development Kit (SDK.)There was one C++ compiler and class library, several non-traditional programming languages, a portability library, and numerous so-called CASE utilities (screen-layout designers.) I hoped that one or more of these tools would do the trick. But I had no such luck. Although each tool had significant advantages, overall they came up far short of my expectations.
As the CAD project fizzled due to lack of funding I considered my next project. I settled on developing a better Windows programming tool since my background was in compilers, software tools, graphics, and Windows.
I was convinced that object-oriented programming (OOP) was the way to go due to the complexity of Windows. The non-traditional languages did not really seem appropriate due to the size of their environments and significant differences from C and C++. So I decided that a class library for C++ would be the way to go. The existing C++ class library seemed too low-level and did not give the programmer enough intellectual leverage on Windows programming.
As I got deeper into the design of my class library, I realized that I could not achieve the desired level of flexibility and productivity. My C++ class library would have been better but not good enough. After suffering a lot of anguish, I finally concluded that I needed a better language to build my class library. I also felt that C++ was not well-suited for efficient development of user interfaces. Even with OOP, C++ did not provide the desired level of productivity.
I had also considered developing a specialized user-interface language, but concluded that the benefits were not substantially greater than a flexible, general-purpose OOP language with a high-level class library. With only minimal benefit, it did not seem desirable to inflict programmers with yet another language. Although there is some merit to the concept of separating a user interface from the underlying application logic, I did not believe that such a paradigm should be forced on the programmer.
Influences
The conciseness of C has great appeal. Although other languages have their advantages, I decided that my language would look very much like C. Its familiarity to a large number of serious programmers offers a distinct advantage. Since I wanted to support OOP, it seemed natural to go with the C++ extensions for OOP. But the optimized nature of C++ OOP prevented it from having the flexibility that I needed to build my class library. I much preferred the flexibility of Smalltalk, no matter how foreign its syntax. I combined the two and came up with a syntax that looks very much like C++, but with semantics similar to Smalltalk.Another appealing feature of C is that it comes with a comprehensive, easy-to-use runtime library. Liana is also designed to provide most of the support needed by the programmer in one, well-integrated package.
User interfaces use lots of strings, but string manipulation is cumbersome in C. There is also a need to continually allocate and free blocks of memory, which is also tedious and error-prone, especially under Windows. My previous experience using the SNOBOL language had convinced me of the power of built-in string operations and automatic memory management. But probably the most significant influence was the concept of a variable being merely a container which could hold any type of data value. Although this has performance penalties, it definitely provides more flexibility and simplifies the job of the programmer.
My experience with BASIC, especially on the Apple II, convinced me of the need to be able to do dramatic operations with minimal code. This goal is consistent with the goal of being able to make changes very rapidly.
Philosophy
The goal of Liana is to dramatically simplify the process of developing Windows applications. Programmers should not have to resort to complex tool environments for simple tasks. Programmers should have a simple language and easy to use runtime library which gives them the power they need. The documentation should be brief and to the point, but with many example programs. Programming by example is better than complex tools.Although the internal design of Liana is quite complex, very little of that complexity is visible to the programmer. This is somewhat counter to the philosophy of C (being close to the machine with very little intervening magic), but necessary given the complexity of Windows.