Characteristics of Web Programming Languages
This document surveys current and planned languages and interfaces fordeveloping World Wide Web based applications prefaced by a discussion ofthe characteristics of such languages. The principal goal of creating thisdocument was to identify the various languages currently in use and toprovide some insight into the context in which each language is used. Secondarily,the authors sought some insight into the directions that Web programmingwas going, especially in the context of the intense publicity surroundingSun's Java.
This document does not attempt to provide in-depth tutorials on theselanguages and systems. It attempts to be complete in its listing of alternatives.References are provided to more information about each. Our intent is tokeep this document current if it proves useful.
General purpose programming languages (e.g. C, C++, Objective-C, Pascal,COBOL, FORTRAN) have not been included in this survey unless there arespecific uses of those languages for web programming other than conventionaldevelopment of clients and servers. In most cases, only variants of suchlanguages specialized for web programming are included here, and, in suchcases, are generally listed by the variants' names.
Almost as soon as this effort was started, other similar efforts wereencountered. The list that follows is a partial listing of the effortsencountered and used to compile this document.
Issues in theDevelopment of Distributed Hypermedia Applications
Joint W3C/OMGWorkshop on Distributed Objects and Mobile Code/
Just as there is a diversity of programming languages available andsuitable for conventional programming tasks, there is a diversity of languagesavailable and suitable for Web programming. There is no reason to believethat any one language will completely monopolize the Web programming scene,although the varying availability and suitability of the current offeringsis likely to favor some over others. Java is both available and generallysuitable, but not all application developers are likely to prefer it overlanguages more similar to what they currently use, or, in the case of non-programmers,over higher level languages and tools. This is OK because there is no realreason why we must converge on a single programming language for the Webany more than we must converge on a single programming language in anyother domain.
The Web does, however, place some specific constraints on our choices:the ability to deal with a variety of protocols and formats (e.g. graphics)and programming tasks; performance (both speed and size); safety; platformindependence; protection of intellectual property; and the basic abilityto deal with other Web tools and languages. These issues are not independentof one another. A choice which seemingly is optimal in one dimension maybe sub-optimal or worse in another.
Formats and protocols. The wide variety of computing, display,and software platforms found among clients necessitates a strategy in whichthe client plays a major role in the decision about how to process and/ordisplay retrieved information, or in which servers must be capable of drivingthese activities on all potential clients. Since the latter is not practical,a suite of Web protocols covering addressing conventions, presentationformats, and handling of foreign formats has been created to allow interoperability[Berners-Lee, CACM, Aug. 1994].
HTML (HyperText Markup Language)is the basic language understood by all WWW (World Wide Web) clients. UnmodifiedHTML can execute on a PC under Windows or OS/2, on a Mac, or on a Unixworkstation. HTML is simple enough that nearly anyone can write an HTMLdocument, and it seems almost everyone is doing so.
HTML was developed as part of the WWW at CERN by Tim Berners-Lee, whois now Director of the World Wide Web Consortium (W3C) at MIT's Laboratoryfor Computer Science. Refinement of HTML continues at W3C, with standardizationvia the Internet Engineering Task Force (IETF) of the Internet Society.HTML descended fromSGML (StandardGeneralized Markup Language), the ISO standard language for text. SGMLis in widespread use by the US Government and the publishing industry forrepresenting documents. HTML applies SGML principles to the WWW. As such,it implements a semantic subset of SGML with similar syntax.
HTML is a markup language rather than a complete programming language.An HTML document (program) is ASCII text with embedded instructions (markups)which affect the way the text is displayed. The basic model for HTML executionis to fetch a document by its name (e.g. URL), interpret the HTML and displaythe document, possibly fetching additional HTML documents in the process,and possibly leaving hot areas in the displayed document that, if selectedby the user, can accept user input and/or cause additional HTML documentsto be fetched by URL. HTML applications, or what we might consider theHTML equivalent of an application, consist of a collection of related webpages managed by a single HTTP (HTTP is the tcp/ip protocol that definesthe interaction of WWW clients and servers) server. This is an oversimplification,but the model is simple, and the language is simple, and that is one ofits strengths.
As HTML moves through the standardization process, and is extended byvarious vendors, it loses some of its simplicity, but it remains a usefullanguage. The Web programmer generally finds HTML lacking in only two areas:its performance in certain types of applications, and the ability to programcertain common tasks.
The remainder of the paper: (a) discusses the issues involved in meetingthe performance and expressibility goals while still providing safety,platform independence, and the ability to interact with a variety of formats,protocols, tools, and languages; (b) identifies design alternatives addressingthese issues; and (c) discusses a variety of Web programming languagesin this context.
Power.HTML is limited in its computational power. This is intentionalin its design, as it prevents the execution of dangerous programs on theclient machine. However, Web programmers, as they have become more sophisticatedin their applications, have increasingly been hamstrung by these limits.Tasks unable to be coded in HTML must either be executed on the serverin some other language, or on the client in a program in some other languagedownloaded from a server. Both solutions are awkward for the programmer,often produce a sub-optimal segmentation of a application across programmodules, both client and server, and reintroduce safety considerations.
Performance.Because of an HTML program's limited functionality,and the resulting shift of computational load to the server, certain typesof applications perform poorly, especially in the context of clients connectedto the Internet with rather low bandwidth dialup communications (<=28.8Kbps).The performance problems arise from two sources: (a) an application whichis highly interactive requires frequently hitting the server across thislow bandwidth line which can dramatically and, at times, unacceptably slowobserved performance ; and (b) requiring all computation to be done onthe server increases the load on the server thereby reducing the observedperformance of its clients..
Today, most users have pretty competent client machines which are capableof accepting a larger share of the computational load than HTML allows.For example, an Internet-based interactive game or simulation can be afrustrating experience for users with low speed connections, and can overwhelmthe server that hosts it. If you were the developer of such a game, you'dbe inclined to push more of the functionality to the client, but, sinceHTML limits the possibilities, another route to supporting computationon the client must be found. The developer might make an executable clientprogram available to users, which would be invoked via the HTML browser,but users might only be willing to accept such programs if they trust thesource (e.g. a major vendor), as such programs are a potential safety concern.Also, users don't want to be continuously downloading client programs tobe able to access web pages, so this solution has real practical limitationsconsidering the size and dynamism of the Web. If safe powerful high performanceprograms could be automatically downloaded to client platforms, in muchthe same way as HTMLpages, the problem would be solved.
When code is to be executed on a client, there are two main considerations:what gets shipped and what gets executed. There are three main alternativesfor each of these: source code, a partially compiled intermediate format(e.g. byte code), and binary code. Because compilation can take place onthe client, what is shipped is not necessarily what is executed.
Byte code, according to measurements presented at theJavaOneconference can be 2-3x smaller than comparable binary code, so its transfercan be considerably faster; especially noticeable over low speed lines.Since transfer time is significant in the Web, this is a major advantage.Source code is also compact. Execution performance clearly favors binarycode over byte code, and byte code over source code. In general, binarycode executes 10 - 100 times faster than byte code. Most Java VM developersare developing JIT (Just In Time) compilers to get the benefits of bytecodesize and binary speed. Java bytecodes are downloaded over the net and compiledto native binary on the local platform. The binary is then executed, and,possibly, cached for later executions.
It should be clear that any combination of these strategies could beused in the implementation of any particular Web programming language,and there is in fact wide variation among the systems actually surveyed.
Platform IndependenceGiven the diversity of operating systemsand hardware platforms currently in use on the Web, a great efficiencyresults from only dealing with a single form of an application. The successof HTML has proven this, and Java has seconded it. The ability to delivera platform-independent applicationis of great appeal to developers, whospend a large portion of their resources developing and maintaining versionsof their products for the different hardware/software platform combinations.With Java, one set of sources and one byte compiled executable, can bemaintained for all hw/sw platforms.
While platform independence has long been a goal of language developers,the need to squeeze every last ounce of performance from software has oftenmade this impractical to maintain, at least at the level of executablecode. However, in the Web this concern becomes less important because transfertime is now a significant component of performance and can dominate executiontime.
Platform independence can be achieved by shipping either byte code orsource code. One advantage of shipping byte code over source code is thata plethora of source languages would require the client machines to maintainmany compilers and/or interpreters for the source languages, while fewerbytecode formats would require fewer virtual machines.
Preserving intellectual property. Although not currently discussedmuch as an issue, the ability to download safe, portable applets in someform less than source code is an additional advantage to developers whowish to protect their intellectual property. Looking at someone else'sscript or source to see how they do something and just tweaking it a littleor copying a piece of it to do the same thing in one's own program doesn'tfeel like stealing. But if one has to go to the effort of reverse engineeringbyte or binary code, it becomes more obvious that this code is someoneelse's intellectual property. For the vast majority of honest people onthe Web, this subtle reminder may be enough. For some of the minority,the effort involved in reverse engineering may serve as a sufficient deterrent.
Safety. Viruses have proven that executing binary code acquiredfrom an untrusted, or even moderately trusted, source is dangerous. Codethat is downloaded or uploaded from random sites on the web should notbe allowed to damage the user's local environment. Downloading binary codecompiled from conventional languages is clearly unsafe, due to the powerof the languages. Even if such languages were constrained to some ostensiblysafe subset, there is no way to verify that only the safe subset was usedor that the compiler used was trustworthy (after all, it is under someoneelse's control).
HTML proved that downloading source code in a safe language and executingit with a trusted interpreter was safe. You can't infect a client witha virus by fetching and displaying an HTML document (although you certainlycan fetch a file with a virus in it, which could then be activated by executingthe file, something which is not supported directly by HTML, although somebrowsers allow it). HTML is not sufficiently powerful. A middle groundis being sought in which the downloaded program is less limited in itscapabilities than HTML and more limited than a conventional language. Eventhough HTML has limited power, the general idea behind HTML, that of asomewhat limited language interpreted by a trusted client-side interpreter,has been widely adopted with more powerful languages and interpreters.
Some languages achieve relative safety by executing byte-code compiledprograms in a relatively safe runtime environment (a virtual machine).Yet other languages are fully interpreted on the client by an interpreterprovided by the language developer. In either case relative safety canbe achieved because the interpreter or virtual machine can make safetychecks that are impossible to make statically at compile-time. Note thatsafety can only be provided by the interpreter or virtual machine, notby the language or the language's compiler.
Building a secure virtual machine is a non-trivial task. (SeeJavaSecurity: From HotJava to Netscape and Beyond for a detailed analysisof how safe Java and the Java virtual machine really are). Not many virtualmachines are needed since a single virtual machine can be the target ofmany languages.
This is not to say that lack of safety or platform-independence disqualifya language for a role in web application development, but for dynamic applicationslikely to be downloaded from untrusted sources with current browsers andexecuted locally on mainstream platforms, a safe and platform independentexecutable is highly desirable. At the other extreme, the interpretersand runtimes that execute such programs are likely to be developed usingunsafe languages and platform dependent executables will be distributedby their developers. For programs intended for execution on servers, thereis some value to safety and platform independence, but not to the samedegree as on clients.
Conclusions.HTML is proving insufficient by itself to developthe myriad Web-based applications envisioned. As extended by server andclient programs, the task is feasible, yet awkward and sub-optimal in termsof performance and safety. The ability to easily develop sophisticatedWeb-based applications optimally segmented between client and server inthe context of the heterogeneous and dynamic environment of the Web whilenot compromising safety, performance, nor intellectual property, is thegoal of current efforts. The first significant result of those effortsis Java, a C++-derived language with capabilities specialized for Web-basedapplication development. Java is compiled by the developer to a platform-independentbytecode format, with bytecodes downloadable via HTML browsers to the client,and interpreted by a virtual machine which can guarantee its safety. Sunis working to improve the safety, performance, comprehensiveness, and ubiquityof Java, and the industry appears to be accepting their approach. Others,especially other language developers. vendors and users, are taking similarapproaches to developing Web-based applications is their languages, bysupporting safe client-side execution in some manner, including targettingthe Java Virtual Machine.
While Java certainly has the edge at the moment, a belief which wasreinforced by the 5000+ attendance figure at the JavaOne conference inMay 1996, we believe there is room for more than one winner, and that anend result somewhat broader than just Java would be in the best interestof developers and users alike.
Safety is the biggest issue. The safety of a program is a function ofthe safety of the environment in which it executes, which is just anotherprogram. At some level, the user must acquire a potentially unsafe programfrom a trusted source. At present, we acquire Netscape, Java, and Windowsfrom trusted (relatively) sources. Because there must be a trusted environmentin which to execute safe, platform-independent programs and because usersare only likely to trust a limited number of big name sources for thattrusted environment, there has been speculation that diversity, includingdiversity in Web programming language choices, would be reduced. Whilethis could become true, it now appears unlikely because language developersare proving that they can retarget their programming language to someoneelse's execution environment. A more reasonable view of the future is afull diversity of programming languages supported by a few trusted executionengines. At present, most efforts are targeting Java's Virtual Machine(VM),mainly because it is widely distributed with Netscape and is being licensedby other browser vendors. Its possible that the Java VM ends up being theonetrusted execution environment, but it will probably be one of severalgeneral purpose execution environments, that together with many specialpurpose environments, will be distributed by trusted sources. An idealoutcome might be industry-wide standardization on a trusted virtual machinespecification and validation of implementations by an industry group suchas X/Open. Regardless of how it occurs, we do not think diversity of programminglanguage alternatives will be reduced in the long term. However, it islikely that we will see some narrowing of our choices in the short termas language developers adapt their existing offerings to this new areaand develop new ones.
The rest of this document surveys languages and interfaces being usedfor Web programming, attempting to provide a snapshot view of the directionthat language is going to meet the needs of Web programmers, and its status.
The languages and interfaces surveyed below represent various attemptsto create the "ideal" Web programming language, usually by extendingand restricting existing languages. Web programming languages have a varietyof ancestors: scripting languages, shell languages, mark-up languages andconventional programming languages. The resultant Web programming languagesshow their ancestry in their syntax, computational and data model, andimplementation style (subject to the design constraints discussed in theprevious section), and as a result, there are a fair number of distinctapproaches taken. However, it is instructive to note that the originallanguage categories tend to blur as development progresses.
The surveyed languages are listed in alphabetical order. If you intendto read the entire survey section, you should first read aboutJava,Tcl,Python, andPerl,as many of the other languages are compared to them.
Not all relevant languages are discussed. Some entries consist onlyof a link. They are languages we've seen mentioned as applicable to webprogramming in some way, but haven't investigated further. We hope to doso in the future.
Ada95 is the latest version of the Ada programming language, which nowsupports object-oriented programming. Ada is used widely in governmentand industry.Adaand the WWW/Java compares Ada95 to C++ and Java, and discusses itssuitability for Internet programming.Programmingthe Internet in Ada 95 describes efforts by Intermetrics, the principleAda compiler vendor, to retarget its compiler to generate Java byte-code,in the interest of making the vast body of Ada software suitable for theweb.Ada forthe Web describes ACM SIGAda's efforts to promote Ada95 for Internetprogramming. Check outTwelvereasons to use Ada 95 for Java applet development.
AppleScript is Apple's object-oriented English-like scripting languageand development environment for the Macintosh. It is bundled with MacOS,and is used widely for all variety of scripting tasks on the Mac. Recently,it has been applied to web programming tasks.WebRunnerenables the execution of AppleScript scripts embedded in HTML files tobe executed on a client running Netscape. The most widely used HTTP serversfor the Macintosh,MacHTTP,a shareware product, andWebStar,its commercial sibling, both use AppleScript for recording and CGI scripting.Check outMacintosh World Wide WebFrequently Asked Questions for more info on web programming on theMac andScriptWeb for info on scriptingon the Mac.
BEF is an object-oriented PASCAL-like scripting language for describingbehavior in VRML.
NCSA Mosaic CCI (Common Client Interface) is an interface specification(protocol & API) that enables client-side applications to communicatewithNCSA Mosaic,the original web browser, to control Mosaic or to obtain information offthe web via Mosaic. Note that this is not for invoking client-side applications(applets) from Mosaic, but for controlling Mosaic from the application.Invocation of client-side applications from a browser is currently specificto the browser, but most support NCSA helpers. Once the application isrunning, it can communicate with the browser with CCI. CCI is not the onlyinterface currently defined for this purpose, but it seems to be meetingwith some acceptance, as Tcl and Perl now support it.
A Web daemonexecutes a CGI program on the server and returnsthe results to the client (e.g. a query against a database server), ratherthan simply returning a copy of the referenced file, as it does with anHTML reference. Parameters are passed from the server to the CGI programas environment variables. The program is sometimes written in C, C++, orsome other compiled programming language, but more often it is writtenin a scripting language (e.g. Perl, Tcl, sh). To prevent damage to theserver, CGI programs generally are stored in a protected directory underthe exclusive control of the webmaster.
Cmm, now renamed ScriptEase: WebServer Edition, is a streamlined versionof the C computer programming language. C and Cmm differ in one major area:memory management. With Cmm all memory management is handled automatically,so there is no need to create buffers, declare variables, or cast datatypes.
With this major exception, Cmm and C are virtually identical. Cmm supportsall of the standard C functions and operators (including structures andarrays), and they are used in the same way as in C. For use with CGI programming,Cmm provides specialized functions to easily get data from forms and tocreate HTML pages on the fly.
Dylan is a dynamic object-oriented programming language with a pascal-ishsyntax, and a lisp-ish semantics. It was designed at Apple's Cambridgelab in cooperation with Carnegie-Mellon University and Harlequin, Inc.,and reviewed by its potential user community, mostly former Common Lispprogrammers disenchanted with C++. The goal of the designers was to createa language with syntax, performance, and executable footprint acceptableto mainstream programmers (i.e. C/C++), but with many of the characteristicsLisp programmers value in Lisp (e.g. evolutionary development, optionaltype declarations, runtime safety, automatic storage management, and easeof maintenance). In late 1995, Apple released itsDylanimplementation for the Macintosh as an unsupported $40 "TechnologyRelease", and then, for the most part, shut down the Dylan project,although an effort to port Dylan to MacOS on the Power PC appears to havesurvived.CMU hasdeveloped a byte-code compiled version of Dylan called Mindy that runson several Unix platforms and on Windows NT, and it continues developmentof a native Unix compiler.Harlequinplans the release of its native compiler and development environment forWindows NT and Windows 95 in mid-1996. SeeTheDylan Languagefor a comparison of Common Lisp, Dylan, C++, and Java.Scott Fahlman states that Dylan is better suited to complex programmingtasks than Java, and "can also be a good language for building safe,Web-mobile code", although I have not seen any effort to apply Dylanto the latter task. Also, check outPCAI'sDylan page.
Guile is GNU'sextension language library. It includes a virtualmachine, a run-time system, and front ends for multiple languages (e.g.Scheme, Ctax (scheme with C syntax, Emacs Lisp (future)). Guile interactsat several levels with Tcl/Tk. The VM can call Tcl programs, and, therefore,the front end languages can call Tcl programs. The Tk library is also accessiblein this way. Tcl programs can call Guile programs written in any of theextension languages, like Scheme. The Guile Virtual Machine is similarto Java's. A byte-code interpreter is being developed. Guile is implementedin a mix of Scheme and C, and C and Scheme libraries are available to programmersusing the extension langauges. TkWWW, GNU's Web Browser, written in Tcl,is being adapted to work with Guile.
HyperTalk is the English-like scripting language for Apple'sHyperCard.It's described by its fans as similar to AppleScript, but simpler and moreforgiving. Given the large number of HyperTalk-literate programmers inthe Mac world, HyperTalk might very well be preferred by many over AppleScriptand UserTalk for many web scripting tasks on the Mac.
Icon is a full-featured programming language developed at the Universityof Arizona with a C-ish syntax and a SNOBOL heritage, making it particularlysuitable for string processing, and, therefore, similar in this way toother languages being used for Internet programming. I've seen Icon mentionedin this context, but haven't come across any active efforts towards thatend.
Java is the leading contender for a full feature programming languagetargetted at Internet applications. It advantages are: familiarity (derivedfrom C++), platform independence (will run on any platform which implementsthe Java Virtual Machine), performance (byte-code compiled faster thanfully interpreted), and safety (downloaded applets are checked for integrity,and only interpreted by trusted Virtual Machine). Java is being aggressivelydistributed and promoted by Sun Microsystems, which developed it, and,evidently, sees it as a way to loosen Microsoft's and Intel's grip on thecomputer platform. Netscape, the leading web browser, now includes theJava VM, and Java applets are appearing on web sites everywhere. Even Microsoft,which is promoting Visual Basic Script for this purpose, has licensed Javafrom Sun and will be supporting it in its browsers. The list of Java licenseesis long, and includes other major players, like DEC and IBM. Sun is distributinga Java developers kit free of charge as of this writing, in the interestof promoting Java's widespread use. It recently announced the developmentof microprocessors optimized for Java for different markets (from cellularphones to high performance 3D "Network Appliances". If theirstrategy is successful, the application platform is raised, and Java displacesWindows or other OS's as the target platform of application developers,then the whole ballgame changes, and the impact is potentially across theentire computer industry, not just the Internet. The ability to delivera platform-independent application, or, more correctly, an OS-independentapplication, is of great appeal to developers, who spend a large portionof their resources developing and maintaining versions off their productsfor the different hardware/software platform combinations. With Java, oneset of sources, and, even more important, one byte compiled executable,can be delivered for all hw/sw platforms. While interpretation of byte-compiledprogram is slower than execution of a native executable, the claim is madethat, once interpreted, the resulting executable is of comparable performance,which means Java apps could be interpreted once and the result cached locally,and thereafter executed optimally. This is great news for Unix, OS/2, andMacintosh vendors and users, who often suffer from limited or delayed availabilityof software and high prices due to limited demand, and, likewise, for non-Intelchip and computer vendors. Its potentially disastrous news for Microsoftand Intel, who, arguably, often sell their products solely on the basisof their market position, rather than their technical merit. Hopefully,the result will be a more level playing field for vendors and more choicefor consumers, and not just the replacement of Microsoft and Intel withSun and Netscape.
That said, not everyone agrees that Java is the answer. The most commoncomplaint in that Java is not simple; its basically a slimmed down, cleanedup C++, with a big GUI library. C++ programming is not described by mostas "simple", and Java programming is not much simpler, especiallywhen compared to HTML, or some other languages put forward as its competition.Java is the market leader at the moment, so it is the obvious target. Eachof the competitors is described below in more detail. The following compareJava to specific other languages:
Cmm and Java Comparedcompares Java with Cmm, another C-derived language targeting the WWW.
DifferencesBetween Phantom and Javacompares Java and Phantom, a language based on Modula-3 which targetsthe Internet.
Java isDeadcomparesJava to pgpsafeperl, as the name implies, a safe derivative of perl, apopular language among Unix sysadmins.
Java Über Alles?compares Java and Perl, addressing the complexity of Java programming.
A surveyof distributed languagescompares Java to Phantom and Python, an interpreted, interactive, object-orientedprogramming language.
Sun is working to integrate Java into its OMG CORBA-compliant ORB, NEO,withJoe.
HORB is a freewareimplementation of a superset of Java.
Jylu adds supportfor Java clients and servers to Xerox'sILU,a sourceware ORB that supports interoperability between programs writtenin Python, Common Lisp, C, C++, and Modula-3 .
JavaScript (nee LiveScript) is Netscape's scripting language for integratingHTML, Netscape plug-ins, and Java applets. It is based on Java, and ismostly syntactically compatible, but differs from Java in that it is interpreted,rather than compiled, only supports built certain built-in objects anduser-defined functions, rather than full support for user-defined classeswith inheritence and methods, is integrated with HTML, rather than invokedfrom HTML files, weakly typed, and dynamically bound. JavaScript is meantto extend HTML to be more of a full programming language, but retainingHTML's ease of use. The principal criticism of Java programming is thatitmuchmore complex than HTML programming, more like C++ programming,and therefore is not as accessible to users as HTML. This is an issue thatJavaScript attempts to address.
KQML is a language for describing the exchange of information amongagents. Agents are one of the paradigms for how knowledge is accumulatedand processed in a distributed heterogeneous environment like the WorldWide Web. Telescript uses the agent paradigm. Standards for the interoperabilityof such agents are crucial to their use on the web, and KQML and its siblingsprovide such a standard.
WWWinda:An Orchestration Service for WWW Browsers and Accessories describesan extensible web browser architecture that uses Linda as the extensionlanguage.
Lingo is the object-based scripting language for Macromedia'sDirectormultimedia authoring system created by John Thompson. It is often comparedto ScriptX, Telescript, Java, Tcl, and HyperTalk, resembles the lattermost, but it is more special purpose than any of those. It is specificto Director, which is used extensively for authoring CD-ROM titles, andis not available separately, which limits its applicability to other purposes.With the release ofShockWave,a free Netscape plug-in, software developed with Director can be displayedin Netscape, and soon other browsers.
Lisp is a lisp processing language created for artificial intelligenceresearch by John McCarthy at MIT in the late fifties.
CommonLisp is the dialect of Lisp with the most widespread current use, especiallyfor large complex systems (esp. artificial intelligence) in industry, government,and academia. It was designed in the early eighties with some DARPA sponsorshipby representatives of the several lisp dialects in use at that time asa way to converge on a common dialect. There is some use of Common Lispfor web-based server applications.CWESTis a tool to convert CLIM GUIs to HTML and GIFs for display with a client'sbrowser.CL-HTTPis an HTTP server implemented in Common Lisp and targeting the intersectionof the interactive hypermedia and artificial intelligence research domains.Harlequin, the vendor of a commercial Common Lisp, offersWebMaker,which enables conversion of Framemaker documents to HTML.
Scheme isa statically scoped dialect of Lisp in widespread use, primarily in academiafor research and educational purposes.Scheme48is an implementation of Scheme that compiles to a byte-code representationthat is then executable by a Virtual Machine, much like Java does.TheScheme Underground is an MIT project aimed at developing a substantialbody of Scheme48 software, including software appropriate to the Internet(e.g. TeX->HTML, Web agents, tk).Scheme48for collaborative Engineering? is an interesting review by Dan Connollyof the W3C on Scheme48's suitability for Internet programming and the suitabilityof the Scheme48 Virtual Machine as the common vm for a myriad of Internetprogramming languages (e.g. Python, Perl, Icon, Tcl, Smalltalk).
Emacs-Lisp(Elisp for short) is the dialect of Lisp used to implement and extend theEmacs text editor, which was developed at MIT in the sixties. It is similarto Common Lisp, but smaller and free, and is in very large distribution,as it is comes with Emacs. A browser,GNUscapeNavigator, has been implemented in, and is extensible with, Elisp.Due to its widespread use as a scripting language, its small size, andthe long-term Internet-awareness of its large user base, I would have expectedto see some effort to apply Elisp to client-side applet execution, butI see no evidence of such an effort.
WINTERPis a GUI development environment comparable to Tcl/Tk and Python, but basedonXLISP-PLUS, asmall object-oriented lisp implementation, and including interfaces tothe X Windows and Motif libraries. WINTERP runs on a variety of Unix platforms(XLISP runs on a variety of platforms), but has not been ported elsewhere.While WINTERP seems as suitable for adaptation to Internet programmingas Tcl/Tk and Python, I see no effort to move it in that direction.
TheFuture of Lisp is an interesting comparison of Lisp, Dylan, C++ andJava by some of their creators.
Idea: A Java-VM ImplementationBased on the Modula-3 Runtime explores the idea of basing an implementationof the Java Virtual Machine on the Modula-3 runtime.
ModernWeb Programming describes Obliq, another Modula-3 derived distributedobject-oriented language.
Perl is described as a compiled scripting language. It combines elementsof C with some Unix scripting and text manipulation languages (e.g. sh,awk, sed) into a more complete language that subsumes the functionalityof all into one consistent whole, and is compilable, and, therefore fasterthan its forebears. Perl's advocates tout its ease of use when comparingit to Java, especially. One of the motivations in developing Perl was toprovide an alternative to C for tasks that were a little too hairy foran existing Unix tool, or where performance was an issue. C was seen asunnecessarily low level, and C development too time consuming. Perl triesto delay the need to program at a a lower level. Its been very successful,especially among system administrators. Since CGI scripts are often builtby systems folks, Perl is widely used for this, too.
Perl versus ....lists several comparisons between Perl and other languages, including tcl,python, java and csh.
The major difference pointed out between perl and tcl is that perl issomewhat faster because it is partially compiled and optimized, which dramaticallyreduces the parsing and reparsing required in tcl. There is also a heavybias in tcl, and in other shell languages, towards string manipulation,which gets in the way when using tcl for programming types other than strings.On the other hand, tcl is simpler, and more useful as a meta-language,in developing special purpose languages, as it does with tk.
Perl's roots in the world of Unix system administration (e.g. C, awk,sed, sh), and its much larger user base, are the primary differentiatorsbetween Perl and Python.
Perl advocates eschew Java's greater complexity, and incredible hype.On no subject do emotions run hotter. Perl predates Java, better suitsinternet programming than Java, they say. A common comment is that Perlhas proven to be a good language for this purpose, but there are othergood languages. There are some reasons to believe Java might also be good,although there is couter evidence also, but, overall, there is no evidencethat Java should be the one and only client extension language for theInternet, but it is being promoted as such by Sun and Netscape, and thatinfuriates users of other languages.
Perl, as a programming language, doesn't offer the graphics and securitydesired for Internet programming. Not to worry; those features are nowavailable.Perl/Tkextends Perl with access to the Tk GUI library (from tcl/tk).Penguinis a Perl module that enables perl code to be sent encrypted and digitallysigned to a remote machine over the Internet, and executes such code ina secure, limited environment. Pgpsafeperl and LPSP (limited pgpsafeperl)are, I believe, names for Penguin precursors. The two together are equivalent(to some, superior) to Java.PerlCCIenables NCSA Mosaic CCI programs to be written in Perl.Safecgiperlexecutes CGI programs written in Perl in a safe environment on a WWW server.
Phantom is an interpreted language targeting large-scale, interactive,distributed applications such as distributed conferencing systems, multi-layergames, and collaborative work tools. Phantom combines the distributed lexicalscoping semantics of Obliq with a safe, extended subset of Modula-3. Objects,static-typing, threads, exceptions, garbage collection, and an interfaceto the Tk GUI toolkit, are included.DifferencesBetween Phantom and Java compares Java and Phantom.
Python is an interpreted, object-oriented language developed as a full-featured,but easy to use, scripting language, by Guido van Rossum at CWI in theNetherlands. Initially developed in a Unix environment, Python is now availableon PCs and Macs, and applications are portable across platforms. Pythonhas developed a substantial, although still modest, following, as a scriptinglanguage, an application development language, and an embedded extensionlanguage. Python's design was most influenced byABC,a little known language also developed at CWI. Python's syntax evokes Cand C++, but doesn't stick too closely to those languages. Python fanstout its clear, intuitive syntax in comparison to C, C++, Java, Perl, shelllanguages, and most other interpreted languages, the completeness of itstype system and its suitability for significant application developmentin comparison to Tcl , and its extensibility with Python and C/C++ libraries.Like Java, Perl and Tcl, Python offers a portable GUI library, severalreally. Perl advocates complain about the lack of regular expression matchingand output formatting natively in Python. Perl is a little more of a sysadmin'sshell language than Python, and Tcl is a little simpler and less capable.Python is more of a regular programming language, but simpler and easierto program than Java. But, all are suited to Internet programming. SeePython Comparedto Other Languages for a list of comparisons between Python and a varietyof other languages.Safe-Pythonis a design for changes to add safety to Python.Grailis an web browser which supports the download and execution of Python appletsin a safeRestrictedExecution Mode. Grail uses the Tk GUI library.
REXX is IBM's dynamic scripting and extension language, developed byMike Cowlishaw at IBM's UK Labs in 1979. It is descended from EXEC, thecommand language for IBM's CMS operating system, and influenced by PL/I.REXX is used extensively on IBM platforms, especially OS/2, and is nowavailable for other platforms (e.g. DOS, Windows, UNIX). REXX is like Tclin that it is simple and the string is its only data type. REXX is easilyinterpretable, and many is often implemented only as an interpreter, althoughcompilers are available.ObjectREXX extends REXX with object-oriented semantics, by adding objects,classes, and methods to REXX's strings and functions. It also adds a numberof predefined classes. Object REXX programs can interact with Smalltalk,C, or C++, programs via SOM (or DSOM, IBM's OMG CORBA-compatible extensionto SOM, for distributed interaction). IBM is also developing a VisualAge-basedGUI builder and visual application development environment for Object REXX.Object REXX is being used byNIIIP,a US-government sponsored consortium aimed at facilitating electronic commerceon the Internet.NetRexxis REXX's response to Java, a REXX to Java translator that permits REXXprograms to be delivered as Java bytecodes, and executed on client platformswith the Java Virtual Machine, combining the ease and efficiency of REXXprogramming with the performance and wide availability of the Java VM.
ScriptX, a multimedia object-oriented programming language, was theprincipal technology produced by Kaleida Labs, a joint venture of IBM andApple started along with Taligent and PowerPC. Kaleida Labs was shut downlate in 1995, with ScriptX considered two years behind schedule and havinglost a significant portion of its potential market to MacroMedia's Lingo.Release 1.5 of ScriptX and the associated Media Player (required to viewScriptX scripts) was announced in January, as control was passed to Apple.
ScriptX proponents tout its platform independent persistent object store,and rich multimedia class library. One use of the former is as a localcache for applets retrieved over the Internet.
Authoringand Delivering Networked Multimedia: Integrating ScriptX with the Webprovides an interesting analysis of ScriptX's potential on the Internet.
Re:Python - ScriptX similarities... compares Python and ScriptX.
ftp://ftp.mv.com/pub/ddj/1994/1994.11/scrptx.zipis an sample ScriptX program from Dr. Dobb's Journal. It looks similarto Python and Dylan.
Spyglass SDI (Software Development Interface) is the main competitorto NCSA Mosaic CCI (Common Client Interface). The expectation is that SDIand CCI will eventually converge into a common specification. In additionto what CCI offers, SDI also provides a protocol for initiating messagesfrom the browser to the client application. This protocol causes the applicationto be informed when the certain events occur on the browser or actuallydiverts handling of those events to the application. This addition makesSDI an appropriate protocol for invoking a new client application froma browser. The Netscape Navigator web browser supports SDI under Windowsand MacOS.
In Unix-speak, a shell is the user's command-level interface to theoperating system. The Bourne shell (i.e. sh) was the initial Unix shell,and still is the most widely used, but, over the years, other shells weredeveloped, differing primarily in the syntax and semantics of the commandlanguages they implemented. Other Unix shell languages are csh (C shell),ksh (Korn shell), bash (Bourne again shell), tcsh (Tenex C shell), rc,and zsh (Z shell). I won't go into the differences here. SeeShellsand Shell Programming for a comprehensive comparison. My point hereis that these shells are essentially interpreters for scripting languages,and are commonly used on Unix platforms for a variety of programming tasks,especially by system administrators, including web site maintenance choreslike CGI scripting. Newer languages used in this context, like Perl andTcl, were heavily influenced by the shell language forebears, and weregenerally developed to deal with the ever increasing complexity of scriptingtasks, and the desire to apply such high-level languages to somewhat differenttasks. Perl is a case of the former, Tcl a case of the latter, with thenew task being quick development of GUI interfaces.
Smalltalk is a dynamic, object-oriented programming language with anintegrated GUI development environment and execution environment. It hasa considerable following. It was developed by Alan Kay and others at XeroxPARC in the early seventies. Smalltalk is the central language of the object-orientedprogramming community. The fully integrated nature of Smalltalk has beenboth a strength and a weakness. It provides a very consistent conceptualmodel and look and feel across all components of the system, but this alsoserves to accentuate the disconnect between it and more conventional languages.This has also been observed of Lisp and APL. It has kept the Smalltalkworld somewhat isolated from the rest of the application development world,although the rise of the object-oriented analysis and design, the successof C++, and the adoption of the object-oriented model as a standard forinteroperability in many domains has brought Smalltalk into the mainstreamin the last several years. Smalltalk's dynamic nature, and extensive GUIorientation, make it a natural for Internet programming, but the Smalltalkcommunity has been slow to capitalize on this.
ParcPlace-Digitalk recently introducedVisualWave,which facilitates the use of Smalltalk in Web-based applications, by generatingthe CGI between the HTTP server and a Smalltalk application, and by generatingthe HTML necessary to provide a GUI for the application in conjunctionwith a web browser. VisualWave does not appear to include the ability tosafely deliver and execute Smalltalk applets on the client platform, althoughthe source is evidently portable, and connectivity with OLE, CORBA andJava is planned. The former is likely to result from their recent licensingof HP'sDistributedSmalltalk , which adds CORBA compatibility to ParcPlace's Smalltalk.Whether the latter means the generation of Java bytecode applets from Smalltalkis not known.
IBM has announcedWWWParts for Visual Age for Smalltalk. The latter combines a visual applicationbuilder with IBM Smalltalk and SOM (and DSOM, IBM's OMG CORBA-compatibleextension to SOM), to enable applications built graphically in Smalltalkto use components separately developed in other language. WWW Parts seemscomparable to ParcPlace's VisualWave, described above.
IfGNUSmalltalk is going to be an extension language for Guile, I haven'theard about it.
Tcl (tool command language) is a widely used scripting language generallyused in conjunction with the Tk GUI library for building quick and easyX windows GUIs on Unix platforms, but also valued for the ease by whichC libraries can be imported and referenced from Tcl. Tcl/Tk was developedby John Ousterhout while at UC Berkeley. Development continues at Sun Labsunder his leadership. It's interesting to see this going on at Sun, alsoJava's home. Java is probably Tcl's principle competitor. John Ousterhoutaddresses this inTheRelationship Between Tcl/Tk and Java. His point is that its true thatboth languages are appropriate to Internet programming, but they are different,have different strengths, and are likely to complement each other. Tclis higher level, quicker to program, and slower to execute; Java is lowerlevel, harder to program, quicker to execute. Tcl is mainly used to tietogether other programs, generally written in C or C++. John expects Javato replace C++ in this role for Internet applications. This role puts Tclin competition with Javascript.
A couple of years ago, Tcl was receiving the kind of attention thatJava is receiving today, lots of it, with some of it overhyping Tcl's benefits,and some of it defensively attacking Tcl's weaknesses. The downside ofsuccess.Comparisons ofTcl with other systems is a comprehensive list of comparisons betweenTcl and other languages.TheTcl War archives a thread started by Richard Stallman's negative commentsabout Tcl in 1994.ftp://ftp.perl.com/pub/perl/versus/tcl-discussionandftp://ftp.perl.com/pub/perl/versus/tcl-complaintscompare Tcl to Perl. In the interest of hugely oversimplifying the arguments,let me summarize by saying that Tcl critics think Tcl is incomplete, inelegant,and inefficient. Its proponents say it is quick and easy to program forwhat it was intended.
There's quite a bit of activity at Sun, and elsewhere, that extendsTcl/Tk towards being more appropriate for Internet programming. Ports areunderway (some are already available) to MS Windows et al and MacIntosh,so that scripts will run on any platform. A Tcl/Tk GUI builder and an on-the-flyTcl compiler are being developed.Safe-Tcladds security to Tcl. Sun is integrating Safe-Tcl into their release.ccitclintegrates Tcl/Tk, Safe-Tcl, and NCSA Mosaic CCI into a solution for client-sidescripting for the WWW.Expectextends Tcl for interacting with other interactive programs or users.TclDiiprovides a Tcl interface to the OMG CORBA Dynamic Invocation Interface(i.e. Iona's Orbix), enabling Tcl scripts to interact with CORBA services.
Check outTCL WWW Info,news:comp.lang.tcl, and theTclFAQ, for more info on Tcl.
Telescript is General Magic's interpreted, object-oriented languagewith for remote programming. It uses an active agents paradigm. Agent programsare sent to places where they execute, possibly in conjunction with otheragents. Agents can move themselves to new places to execute, taking theirstate with them. Places are subprocesses associated with a Telescript Engine,which is a server program which may be integrated with an HTTP server (withCGI) to produce what they describe as an active web server. This is similararchitecturally to ParcPlace's VisualWave and IBM's WWWParts, both forSmalltalk. Agents are mobile in that their site of computation can movefrom one place to another, but they can only execute in the context ofa Telescript engine, so agent programs should not be considered clientprograms, as Telescript provides no runtime support on the www client sideto execute agents. This separates them from Java applets, for instance,which move computation from web servers to clients. Telescript moves computationin a different direction, from one web server to other web servers. TheTelescript language itself is similar to C++, but is specialized to supportthe agent paradigm with built-in support for moving agents and interactingwith other agents, and supports advanced memory management, including thepersistence of all objects. Like Java, Telescript is safe and platform-independent.
Seehttp://www.sunlabs.com/people/john.ousterhout/agent.pptfor a comparison of Tcl, Telescript, Visual Basic, and Java by John Ousterhout,Tcl's creator.
http://www.genmagic.com/About/Releases/prrel960129.htmlexplains the difference between Telescript and Java.
Frontier is anotherpopular script development environment for the Macintosh, which comes withits own scripting language, UserTalk. It was developed by Dave Winer ofUserLand Software. Frontier is used to develop scripts in UserTalk, orAppleScript, or any other scripting language conforming to Apple's OpenScripting Architecture (OSA). For the same reason, UserTalk scripts canbe developed with AppleScript tools, and CGI scripts, and other web-relatedscripting applications, can be written in UserTalk, and/or developed inFrontier. For instance, CGI scripts for WebStar can be developed in UserTalkwith Frontier.
VBScript is Microsoft's planned candidate for an Internet scriptinglanguage. It is expected in mid-1996. It is a subset of Visual Basic, Microsoft'spopular visual programming language, with no GUI building capability, withunsafe operations removed, and with access to other applications via OLE.VBScript source code is embedded in HTML, and downloaded to the clientin the HTML file, where it is compiled and executed in association withits runtime libraries. Microsoft envisions an OLE Scripting Manager onthe client-side with which browsers interact with a specified interface.The Scripting Manager would manage compilation and invocation of downloadedscripts in Visual Basic Script or any other scripting language. Microsoftalso intends to support Visual Basic and Java in this way. The idea isto make multiple language runtimes pluggable into browsers. Microsoft intendsto elicit the cooperation of various consortia and vendors in definingand standardizing this interface. Microsoft intends to support VBScripton its various Windows platforms and on the Macintosh and will licensethe technology to UNIX vendors.
VRML is a specialized language for describing 3D worlds and movementthrough them. VRML is the standard language in describing such scenes inthe context of the Internet and the World Wide Web. As more and more sitesinclude 3D simulations, VRML will become more omnipresent. VRML, like HTML,is downloaded from a server and executed using an interpreter on the client,just as a Java applet might be downloaded and executed. Netscape now supportssuch a interpreter, and there are many others.
WebScript is the object-oriented scripting language for NeXT Software'sWebObjects development environmentfor web-based applications. WebScript is an interpreted subset of Objective-C,in much the same way that JavaScript is a subset of C++. WebScript, however,is used in WebObjects primarily for web server scripting, where CGI andPerl might be more commonly used, rather than for client-side applets.WebObjects is expected to support Java and JavaScript on the client side,and JavaScript on the server side, in addition to WebScript, which mayrelegate WebScript to the scripting language of choice only for Objective-Cusers.
There was also another WebScript, from WebLogic, Inc., which has sincebeen renamedhtmlKona. It is a Java package for generating HTML pages.