
       Actor column for JOOP
       Column 4 (Jan. / Feb. 1990)
       Zack Urlocker


       Breaking Technical Barriers in the 1990s

       "Never make predictions, especially about the future."
       --Samual Goldwyn
       
       Despite Samual Goldwyn's words of wisdom, the role object-
       oriented programming will play in the 1990s is interesting to
       ponder.  Significant trends in the areas of hardware evolution,
       graphical environments and the adoption of OOP can give us
       insight into what object-oriented programming will be like in the
       future.  In this column, I'll examine these trends and provide an
       overview of some of The Whitewater Group's plans for OOP in 1990
       and beyond.  In future columns, I'll provide a more detailed look
       at the technologies that will bring object-oriented programming
       to a new level of maturity.
       
       Setting the Stage
       
       As we enter the 1990s, it's worth examining some of the general
       trends in computing as related to object-oriented programming.
       
       Ever-improving hardware
       
       Hardware continues to increase in performance and memory capacity
       every year.  The newly shipping 80486-based microcomputers are
       outperforming last year's 80386 machines.  As the clock speed of
       the 80486 increases, we're likely to see performance rise to 20
       million instructions per second (MIPS).  To put that in
       perspective, the IBM AT performs at about 1 MIPS.  RISC-based
       chips such as Motorola's 88000 and Sun's SPARC chip are also
       pushing the envelope in terms of both performance and
       price/performance.  Since these processors have built-in support
       for floating point operations and memory cache control, they are
       likely to be more cost effective than similarly configured 80386
       or 68030 machines.
       
       These developments have significant ramifications for software
       developers.  Much like the way work can expand to take up all
       free time, there seems to be a law of software entropy that says
       software expands to use all available hardware.  It is the
       improvements in hardware that permit us to create better, more
       sophisticated software.  As an example, many believe that
       Microsoft's OS/2 operating system will achieve widespread
       acceptance only when there is a version that takes full advantage
       of the thirty-two bit capabilities of the 80386 and 80486.
       

       The increase in hardware and operating system capacities means
       we're likely to see a comparable increase in the complexity and
       scope of the software applications we create.  If debugging in C
       seems difficult now, imagine what it will be like if the program
       is not 640K in size, but 6.4 megabytes.
       
       Since object-oriented languages are more effective in reducing
       complexity than procedural languages, we're likely to see greater
       usage as hardware capacity expands.
       
       Increasing acceptance of GUIs
       
       Although graphical user interfaces (GUIs) have been around for
       quite some time, there has been a tremendous growth in the past
       year.  For example, Microsoft reports retail sales of its Windows
       product to be around 70,000 units a month.  Some of the growth in
       GUIs is certainly due to improved performance on faster hardware.
       As the number of applications for a particular environment
       increases, so does interest among end-users.  As the installed
       base grows, so does the attractiveness of the environment for
       applications developers.
       
       Although there is a certain circular logic to the growth of a
       graphical environment, both Microsoft Windows and the Macintosh
       have been successful because of it.  Other environments, such as
       Digital Research's GEM and the Amiga's Intuition, which may have
       been arguably better, have been unable to break through this
       "chicken and egg" situation.  And of course, the verdict is still
       out on OS/2 Presentation Manager, the NeXT machine and the Unix
       environments, Open Look and Motif.
       
       The significance for application developers is that non-standard
       user-interfaces, no matter how good they might be, will not
       obtain market acceptance.  And certainly the days of treating the
       user-interface as a last-minute detail are gone forever.
       
       Since programming for a graphical environment with a procedural
       language is so complex, its not surprising that we've seen the
       adoption of object-oriented languages for these environments.
       There's Actor for Windows, Object-Pascal for the Macintosh, and
       more recently Objective-C for the NeXT machine and Smalltalk/V
       for Presentation Manager.  Object-oriented programming may be the
       only feasible way for most programmers to develop for graphical
       environments.
       
       OOP is entering the mainstream
       
       With all of the conferences, magazine cover stories and publicity
       surrounding object-oriented programming in the past year, it is
       apparant that OOP is entering the mainstream.  Object-oriented
       programming has emerged from the labs and is now being used for
       real-world applications.
       

       As a result, some of the criteria used to evaluate object-
       oriented programming is changing.  Production users are less
       interested in the theoretical purity of object-oriented concepts
       and more interested in their practical application.  The need for
       object-oriented programming to fit in with existing, as well as
       new, standards will also increase in importance.
       
       Applications developers using object-oriented languages need
       access to existing code libraries, compatibility with standard
       operating systems and environments, and fast performance.  They
       won't sacrifice any of these capabilities no matter how they
       might compromise the object-oriented model.
       
       Actor 2.0
       
       The Whitewater Group has taken these trends into account in our
       plans for Actor 2.0 and beyond.  Use of memory, compatibility
       with C, language features and class libraries have been improved
       in Actor 2.0 without sacrificing compatibility with previous
       versions.
       
       Although it took some pretty amazing heroics on the part of Chuck
       Duff to shoehorn Actor into a 640K IBM XT running Windows 1.0
       back in 1986, we've been bumping into MS-DOS's 640K barrier ever
       since.  Actor and Windows have improved their memory efficiency
       with every release.  Actor 2.0 represents our most significant
       memory improvement by using an automatic memory swapping kernel.
       
       The kernel is able to swap unused portions of code and static
       objects out to disk effectively breaking the 640K barrier of MS-
       DOS.  The swapping kernel uses a deterministic least recently
       used (LRU) algorithm to provide swapping on an object-by-object
       basis.  This results in better performance than a page-swapping
       system because object-oriented languages don't exhibit the same
       locality of reference typical of procedural languages.  Large
       Actor applications can typically run in one-fourth of the static
       memory as previous versions of Actor with little effect on
       performance.  By freeing up static memory, Actor applications are
       better able to make use of the increased memory of high-end
       machines.
       
       Actor has always provided support for dynamic linking to programs
       written in C and other procedural languages.  We've taken this
       even further in Actor 2.0 by providing additional support for C
       structures, callback functions and user-defined primitives.
       
       The CStruct class enables a program to pass C-like data
       structures directly when calling external routines.  The CStruct
       class supports nested structures as well as user-defined C types,
       making it easier use existing libraries.  CStruct objects contain
       binary data and a dictionary of fields and field information.  A
       dictionary class, CTypes, is used to keep track of user defined
       types as well as input and output conversion routines.  This


       makes it easy to define the C types and have conversion take
       place automatically whenever the CStruct object is referenced.
       
       Many of our users have requested ways of extending Actor's
       primitive methods.  Users can now write their own primitives, in
       C or assembler, to access special hardware features or to
       optimize critical portions of their code.
       
       CStructs and user-defined primitives may cause object-oriented
       purists to shudder, but we recognize that it was necessary to
       provide professional programmers with an escape mechanism they
       could use for compatibility or performance reasons.
       
       Although I chose Actor to demonstrate how industry trends have
       affected software development, the same holds true for other
       object-oriented languages as OOP heads into the 1990s.
       
       Portability Across Environments
       
       We purposefully designed Actor to hide many of the details of
       programming for Windows.  This has become an important part of
       our strategy to support other graphical environments also.  Our
       goal is to provide an Actor development environment that provides
       complete portability of Actor applications across all standard
       GUIs.
       
       Work is underway to support future versions of Windows as well as
       OS/2 Presentation Manager.  Future versions of Actor will be
       based on a common kernel that will allow more objects through the
       use of thirty-two bit pointers.  Since the kernel itself will be
       portable, we will be able to port Actor to other popular
       windowing environments also.
       
       Of course, the kernel is only part of the job in providing
       portability across environments.  Windows, Presentation Manager
       and other graphical environments all have different models of the
       graphical environment, not to mention completely different
       application programming interfaces.  To overcome these
       differences, we've created a library of portable graphics
       extensions.  You can think of these extensions as a MacDraw-like
       toolkit for programmers.  In effect, you have graphical objects
       for dealing with coordinate systems, fonts, text, shapes, pens,
       brushes, bitmaps and so on.  This allows you to create
       applications that take advantage of the richness of the
       environment without having to write direct calls to the graphics
       engine.
       
       There are three types of graphical objects that we've defined:
       rendering tools, platform encapsulators, and drawables.
       Rendering tools are objects such as brushes, pens, textpens and
       graph spaces which control the appearance of graphical objects.
       Platform encapsulators are used to factor out all of the
       environment-specific details.  These include objects for dealing
       with colors and physical ports.  Drawables consist of graphical


       objects that can be rendered onto ports such as labels, icons,
       shapes, bitmaps, regions, curves, polylines and so on.
       
       Since the platform encapsulators are the only classes that are
       environment specific, they area all that is need be rewritten to
       port the graphics extensions to a new platform.  The platform
       encapsulators make extensive use of the underlying graphics
       engine for speed, and, where necessary, include additional code
       to make up for deficiencies in the environment.  Through the
       judicious use of early-binding and assembly language primitives,
       we've been able to achieve high-level portable graphics without
       any significant performance degradation.
       
       One of the applications that we've developed to test the graphics
       extensions is a drawing program similar to MacDraw.  The
       application took only 500 lines of Actor code, or about 1/10th of
       what it would have been in C.  Running on Microsoft Windows,
       performance is comparable to commercial drawing programs.
       
       Although the graphics extensions have been initially implemented
       for use in Actor, they could also be applicable to other object-
       oriented languages.
       
       Beyond 1990
       
       A portable thirty-two bit kernel and graphics extensions are
       important strategic developments for Actor in the early 1990s.
       There will also be additional language improvements and class
       libraries aimed at reducing application development time and
       fitting in with emerging standards.  We're actively engaged in
       research in language areas including abstract protocols, typing
       of late-bound messages, privacy, as well other areas.  Many of
       these projects will result in direct improvements in future
       versions of Actor.  The Whitewater Group has joined AT&T,
       Borland,  Hewlett-Packard, Data General and other members of the
       Object Management Group to help create object management
       standards.
       
       We expect that richer graphical environments and operating system
       support for objects will broaden the scope of object-oriented
       software development.  Hewlett-Packard's NewWave environment
       gives us a glimpse of what operating environments will be like in
       the future.  Once object management becomes an operating system
       service, languages will no longer have to duplicate these
       facilities.  This will make inter-language sharing of objects
       feasible.
       
       When programmers are able to make use of objects from Actor, C++
       and Smalltalk, as appropriate, we will see a rapid surge in the
       number and quality of class libraries available.  At that point
       the economics of software development will change dramatically.
       Software development costs will be considered as capital
       expenditures subject to classic "make or buy" decision criteria.
       

       I'm certainly not predicting that programming will disappear.
       However, we're likely to see two distinct types of programmers:
       builders and reusers.  The first group will concentrate on
       creating generic reusable components; the second group will
       customize those components and create applications.  Because of
       the greater cost of creating generic reusable components, I
       suspect that much of this development will be done outside of
       today's MIS departments by new entrepreneurial companies.
       
       Beginning in the early 1990s desktop multimedia machines that
       incorporate high resolution graphics, interactive video and sound
       will become available.  Initially, applications for these
       environments may be written in C, but again, the economics of
       object-oriented programming will result in the ability to create
       richer applications in a shorter period of time.  More
       importantly, however, object-oriented programmers will be
       building up toolkits of objects that casual programmers will be
       able to piece together.
       
       As object-oriented environments take off for end-users, they will
       also be used by software developers.  Admittedly, we're often
       like cobblers whose children go barefoot, so there will probably
       be a time lag here.  I think we'll see an order of magnitude
       change so that programming environments of the mid-1990s will
       resemble end-user applications more than they will even today's
       most sophisticated development environments.  Programming
       languages will become a less significant portion of the overall
       software development lifecycle.  CASE tools and visual
       representations of programs are likely to become more important
       in the future, particularly as we deal with richer class
       libraries.  I doubt that visual programming will bear much
       resemblance to today's programming languages, but for at least a
       decade or more, the two technologies will coexist.
       
       When predicting the future, it's always easiest to speak in
       generalities as I've done here.  In future columns I will expand
       on some of the technologies I've mentioned and examine their
       importance in taking object-oriented programming forward into the
       1990s.
       
       
       About the author
       
       Zack Urlocker is manager of developer relations at The Whitewater
       Group, the creators of Actor, an object-oriented language for
       Microsoft Windows.  Mr. Urlocker has taught object-oriented
       programming to hundreds of professionals and has written articles
       for several computer magazines and journals.









    Breaking Technical Barriers in the 1990s    page 6
        