The C Programming Language And Its History

Introduction

In this Assignment, I shall be going through the stages and milestones, which lead to the development of two successful programming languages, C++ and Java. The programming language C influenced greatly C++, and therefore I felt it was necessary to delve deeply in this programming language as well. This assignment also includes the decisions taken by their respective creators and the reasoning behind them.

The C Programming Language

Between 1969 and 1973, the programming language C was under development at Bell Labs, by Dennis Ritchie. [1] During the same period, the operating system UNIX was under development as well.[1] In this section, I make most of my references to texts written by Dennis Ritchie himself in the book “History of Programming Languages”.[2]

Prehistory

Before C, during the late 60s, Bell Labs were passing through difficult times, mainly due to the fact that the development of the Multics project was halted because the beneficial use of the GE-645 Multics machine would not be available on time and would be too costly.[4] However, during and after the disposal of the machine, an “informal team”, lead by Ken Thompson, began to research and develop other alternatives.[4]

Ken Thompson aimed in constructing a comfortable work environment by using any resources available to him.[4] His design involved implementing some similar ideas of Multics, such as “an explicit notion of a process as a locus of control, a tree-structured file system, a command interpreter as a user-level program, simple representation of text files, and generalized access to devices.”[4] However, Ken Thompson also excluded other certain aspects, including “unified access to memory and to files”.[4] Furthermore, instead of using PL/I which was the implementation language of Multics, Thompson and his team used another programming language known as BCPL.[4] Just like PL/I, BCPL was also a high-level language; a great advantage which Thompson did not want to let go due to its clarity and simplicity, unlike assembly language.[4]

The B Programming Language

In 1968, Ken Thompson was faced with a problem with the PDP-7, a machine for which he had no compatible software available.[4] Ken Thompson then created his own PDP-7 assembler, but it was in 1969, that Doug Mcllroy created the first high-level language for the system.[4] This language was an adaptation of the programming language known as TMG, which was created for the PDP-7 by R. M. McClure.[4] Dennis Ritchie describes TMG as “a language for writing compilers (more generally, TransMoGrifiers) in a top-down, recursive-descent style that combines context-free syntax notation with procedural elements”.[4] TMG had been used to create the compiler of PLI for Multics.[4] Ken Thompson then felt it was necessary for UNIX to have it’s own system programming language.[4] After a reluctant effort to use FORTRAN, Thompson later designed a new programming language named B.[4] The B programming language was developed mainly based on BCPL.[4] Moreover, Dennis Ritchie describes B as “BCPL squeezed into 8K bytes of memory and filtered through Thompson’s brain”.[4] He then mentions that most probably, its name came about by representing a “contraction” of BCPL.[4] However, he might have chosen it as a dedication to his wife Bonnie.[4]

Development was first completed by creating a TMG version of B, where Thompson then rewrote B in itself.[6] Dennis Ritchie recalls that during this stage of development, Ken Thompson found the memory limitation to be a great challenge, as “each language addition inflated the compiler to barely fit”.[6] However, each re-write, due to the beneficial feature, “reduced its size”.[6] Dennis Ritchie continues by mentioning an example.[6] He stated that, originally coming from ALGOL 60, B generalized assignment operators such that x =+ y was used to add x to y.[6] The operator was then corrected to spell x += y back in 1976.[6] Thompson was more innovative as he created new operators such as ++ and – – to increment and decrement.[6] The position of these operators, written as postfix or prefix, would determine whether the change in value would “occur before or after noting the value of the operand”.[6]

Instead of producing machine code, the PDP-7’s B compiler generated “threaded code”, in which the compiler’s output was made up “of a sequence of addresses of code fragments that perform the elementary operations”.[6] In the case for B, these operations worked on a straightforward stack.[6]

However, due to the fact the PDP-7 machine was too small and slow, not much was written using B, “except for B itself”.[6] It only served them for experimental use. Re-writing UNIX on this machine proved to be too much of an expensive step.[6] Furthermore, Dennis Ritchie reports that at a stage, Ken Thompson expressed the “address space crunch by offering a ‘virtual B’” which made it possible for the interpreted program to take up more than 8k bytes.[6] This was done by “paging the code and data within the interpreter”.[6] However, it was then concluded that it would not be feasible enough and would result in being too slow “for the common utilities”.[6] Despite all this, some utilities were still written in B, such as an early version of the variable precision calculator known as dc.[6]

Around this time, Dennis Ritchie also recalls working on an “ambitious” project, which mainly involved creating a genuine cross-compiler capable translating B to GE-635 machine instruction instead of thread code.[6] Dennis Ritchie then comments that this task was only possible due to the practicality and ease of the B language.[6]

The Unix project had proven itself so well, that they managed to get a PDP-11 at Bell Labs.[6] By using the “the threaded technique” in order to run programs written in B on this machine, it was only necessary to write “the code fragments for the operators, and a simple assembler” in which the latter, Dennis Ritchie created himself.[6] The “first interesting program” to be tested on the PDP-11, before any operating system software, was dc.[6] Furthermore, around the same time, Ken Thompson managed to record the “UNIX kernel”, along with some simple commands written in PDP-11 assembly language.[6]

Later in his paper, Dennis Ritchie mentions that apart from B’s advantage regarding its simplicity, it also had its problems mainly related to the PDP-11.[7] He states that the machines, on which Bell Labs initially used BCPL and also B, were “word-addressed”.[7] Furthermore, he continues by stating that these languages only handled one single data type, known as the “cell”, which would simply be “equated with the hardware machine word”.[7] However, with the introduction of the PDP-11, a manifold of “inadequacies of B’s semantic model” were clearly visible, one of which was that its character-handling mechanisms tracking back to few changes from BCPL, were incompetent.[7] For instance, Dennis Ritchie mentions that “using library procedures to spread packed strings into individual cells and then repack, or to access and replace individual characters” did feel strange and at times “even silly”, on a machine based on bytes.[7]

Despite that the first model of the PDP-11 was not capable of calculating floating-point arithmetic, the producer did affirm that this feature would be available shortly.[7] By defining special operators, floating-point operators were added to BCPL in their Multics and GCOS compilers.[7] However, these operators were only possible on certain machines where “a single word was large enough to contain a floating-point number” and therefore could not be used on the 16-it PDP-11.[7] Another inadequacy was that B and BCPL suffered from overhead due to pointers.[7] This was because the languages’ basis, “by defining a pointer as an index in an array of words”, restricted pointers to be represented as “word indices”.[7] For each pointer reference, it generated “a run-time scale conversion” from the pointer to the corresponding byte address intended by the hardware.[7]

Due to all of these reasons, Dennis Ritchie realised that it was necessary to develop a “typing scheme” to be able to handle characters and byte addressing, and also be prepared to work with the “coming floating-point hardware”.[7] At first, type safety and interface checking was not considered to be vital and therefore were introduced at a later date.[7] Besides the issues with the B language, B compiler’s threaded-code technique made programs run slower than the same programs written in assembly language.[7]

NB and C

In 1971, Dennis Ritchie started to expand the B language and called “the slightly extended language NB, for ‘new B’”.[7] Dennis Ritchie also states that since NB was used for a very short period, no documentation was done.[8] He continues by mentioning that he added a character type and also developed its compiler to produce PDP-11 machine code instructions.[8] Therefore, the compiler was capable of converting programs fast and small enough to contest with assembly language.[8] All in all, NB offered the simple types ‘int’ and ‘char’, arrays of them, and also pointers to them.[8] The semantics of arrays found in B and BCPL stayed the same.[8] Furthermore, inside procedures, the language interpreted pointers and array variables to be identical.[8] Ritchie explains that “a pointer declaration created a cell differing from an array declaration only in that the programmer was expected to assign a referent, instead of letting the compiler allocate the space and initialise the cell”.[8] The values that were held in cells, linked by “array and pointer names”, were bytes of machine addresses relating to their respective memory location.[8] This was beneficial, as an “indirection” through a pointer required no “run-time overhead” to form the pointer from a word to “byte offset”.[8] However, the machine code for “array subscripting” and “pointer arithmetic” was dependant on the actual type of the array or pointer.[8] Dennis Ritchie states that although these semantics made it very easy to transition from B, problems eventually began cropping up mainly when he tried to “extend the type notation”.[8] He continues by explaining his difficulty in implementing “structured (record) types”.[8] At first, it seemed structures should link correspondingly onto memory in the machine.[8] However, the major issue was that for a structure containing an array, there was no ideal location to store the pointer containing the base of the array, or a practical way to initialise it. [8]

Read also  Vodafone group: An analysis

The goal of Dennis Ritchie was that a structure would not just “characterise” an abstract object but also “describe a collection of bits that might be read from a directory”.[8] He describes the solution in achieving this goal as “the crucial jump in the evolutionary chain between type-less BCPL and typed C”.[8] Rather then having a “materialization of the pointer” located in memory, the pointer would be created only when the array name is refereed to in an expression.[8] Moreover, values of type array, once mentioned in an expression, would change its values to pointers to direct to the objects making up the array.[8] Despite the fact that the semantics of this new language had shiftily changed, most code written in B could still be used. Furthermore, this language also differed from its predecessors as it offered a “comprehensive type structure” and “expression in the syntax of declaration”.[8]

After creating the “type system, the associated syntax, and the compiler”, Dennis Ritchie believed that this language deserved its own name, as when compared to NB, they were very distinctive.[8] Therefore, he called the programming Language C, “ leaving open the question whether the name represented a progression through the alphabet or through the letters in BCPL”.[8]

UNIX benefited greatly due to C. It made improving and maintaining UNIX very easy for any programmer who had an understanding of C. [1] Furthermore, it also made UNIX easily portable for newly developed computers. [1] This is mainly because it was unnecessary to convert the operating system to assemble language manually, but only required a C assembly compiler for that particular machine. [1] This compiler translates the code into machine code that the device understands. [1] C has gained a huge amount of success over the years and is still presently used in development. It is mainly known for its fast speed. [1]

The C++ Programming Language

The book “History of Programming Languages” also contains a paper written by Bjarne Stroustrup, the creator of C++.[9] In this paper, he narrates the history of the C++ programming language, focusing more on the ideas, limitation and “people that shaped the language”.[9]

Prehistory

More or less, Stroustrup begins his paper by stating that C++ was based on an “earlier version” of a programming language known as C with Classes.[10] However, before going into further detail, he begins discussing the prehistory of all this.[10] At Cambridge University, whilst working on his Ph.D that dealt with the study of different methods regarding the organization of software for a distributed system, Stroustrup focused on developing software “out of well-delimited modules” and also created experimental simulator “tool” in order to simulate “software running on a distributed system”.[10] This first version of the simulator was developed in Simula and ran on the University’s IBM 360/165 mainframe.[10]

It was very beneficial for Bjarne Stroustrup to use Simula, stating that: “the features of Simula were almost ideal for the purpose and I was particularly impressed by the way the concepts of the language helped me think about the problems in my application”.[10] Particularly, the behaviour of classes allowed Stroustrup to link directly the application of his ideas to the language constructs easily, especially due to the fact that classes in Simula are able to behave as co-routines.[10] He states that the use of class hierarchies enabled him to declare “variants of application level concepts”.[10] He continues by explaining further, through an example, that different types could be described as classes deriving from other classes.[10] The following are his exact words: “For example, different types of computers could be expressed as classes derived from class computer and different types of intermodule communication mechanisms could be expressed as classes derived from class IPC”.[10]

Other benefits of Simula were its type scheme and the ability to detect type errors through its compiler.[10] The detection of a type error was either caused by some “silly” mistake, or due to some “conceptual flaw” in the design, in which both cases, especially the latter, helped Stroustrup greatly.[10] He had not experienced such beneficial use with other “more primitive ‘strong’ type systems”.[10] Furthermore, referring to his simulator, when the program increased in size, due to Simula’s class, co-routine and precise type checking mechanisms, flaws and errors would not grow alongside.[10] On the other hand, the implementation of Simula did not “scale in the same way” and nearly resulted in creating a disastrous program.[10] Stroustrup concluded that Simula was ideal for writing small programs but suffered “inherently” for larger ones due to its poor run-time performance characteristics.[10]

Today, Simula implementations have improved greatly, but at that time, in order to avoid terminating the project, Stroustrup rewrote the simulator in BCPL.[10] He found programming in BCPL a very “horrible” experience, mainly due to its lack of type checking and run-time help.[10] However, once the simulator was developed, the program ran competitively fast.[10]

Once he graduated from Cambridge, Bjarne Stroustrup promised himself that he would never attempt to solve a problem with those impractical tools as he had “suffered while designing and implementing the simulator”.[10] However he did define what is a “suitable tool” for writing system programs, which was highly significant when he was developing C++. [10]

In Stroustrup’s eyes, a “suitable tool” involved the following characteristics.[10] Firstly, it would have Simula’s support for program organisation and thus include classes, the ability to form class hierarchies, concurrency mechanisms, and a good type-checking scheme relating to classes.[10] Secondly, it must also be capable of producing programs possessing similar speed as to BCPL programs, and also allow the combination of independently compiled units into a program.[10] Lastly, it must allow the ability to create highly portable implementations.[10]

C with Classes

The undertaking, which eventually lead to developing C++, began in 1979, when Bjarne Stroustrup tried to understand the UNIX kernel, in order to find out the limit that could be distributed over a network of computer via a local area network (LAN).[11] This work took place in the Computer Science Research Center of Bell Laboratories.[11] With little time, Stroustrup faced two sub-problems, namely, “how to analyse the network traffic that would result from the kernel distribution and how to modularize the kernel”.[11] They both required a way to describe the model structure of a complicated system and the communication trends of the modules, issues extremely similar to the kind that Stroustrup was eager to never have to face again without the suitable tools.[11] Therefore, by referring to the criteria he had stated upon leaving Cambridge, Bjarne Stroustrup began to develop his own suitable tool.[11] By October of 1979, he had a preprocessor called Cpre. [11]

Cpre was able to add “Simula-like classes to C”, and in March of 1980 this processor had been upgraded to actually support one “real project and several experiments”.[11] Later that year, between April and October, Stroustrup mentions that he let go of the ideal of “thinking about a ‘tool’” but rather began “thinking about a ‘language’”, to develop what is known as C with Classes.[11] However, initially, he did not consider C with Classes to be an independent language but just an expansion to C for “expressing modularity and concurrency”.[11] C with classes did not support primitives for expression.[11] Instead it included a mix of inheritance and offered a way to define class member functions with “special meanings” understood by the preprocessor, which was used to develop the library that handled the required “styles” of concurrency. Stroustrup emphasises on the word “styles” and that it is written in plural.[11] He found it vital that numerous notations of concurrency are able to be expressed in the language.[11] Backed by colleagues, other C++ users and the C++ standards committee, to this day he still believes that this was the right decision.[11] He then continues on this topic by stating that there in “no one dominant model for concurrency support”, and making use of a library or a special purpose extension for support on a particular form of concurrency would not limit others in using different forms.[11] Therefore, “the language provided general mechanisms for organising programs rather than support for specific application areas”.[11]

It was not only in this instance that Bjarne Stroustrup did not force programmers to use a particular style.[11] C is capable of computing numerous low-level operations, such as bit manipulation and choosing between different sizes of integers.[11] Furthermore, although C++ systematically eliminates the need to use such low-level operators due to safety, they are still available for programmers to use, as Bjarne Stroustrup did not wish to restrict them in any way.[11] In fact, quoting his exact words, he states “I strongly felt then, as I still do, that there is no one right way of writing every program, and a language designer has no business trying to force programmers to use a particular style.[11] The language designer does, on the other hand, have an obligation to encourage and support a variety of styles and practices that have proven effective and to provide language features and tools to help programmers avoid the well known traps and pitfalls”.[11]

Read also  Timed Efficient Stream Loss-Tolerant Authentication (TESLA)

Bjarne Stroustrup continues his paper by explaining further the features available to C with class, a language considered to be a stepping stone in creating C++.[11] C with Classes does not differ greatly compared to C.[11] Due to the fact that a preprocessor was used to implement C with Classes, the language differs only in the newly added features.[11] He lists these features which are shown as below. Note that the last three features were implemented in 1981, whilst the others were implemented one year earlier.[11]

“classes”[11]

“derived classes”[11]

“public/private access control”[11]

“constructors and destructors”[11]

“call and Return functions”[11]

“friend Classes”[11]

“type Checking and Conversion of Function arguments”[11]

“inline functions”[11]

“default arguments”[11]

“overloading of the assignment operator”[11]

One of the major features offered by C with Classes was the idea of classes.[12] Stroustrup describes a class as a “user-defined data type”, meaning that it is a custom data type created by the programmer.[12] He continues by stating that “a class specifies the type of the class members that define the representation of a variable of the type, specifies the set of operations that manipulate such objects and specifies the access users have to these members”.[12] In other words, it simply defines the attributes and methods of a data type, including their access rights.[12]

At that time, Simula did not support local or global variables of class types, and therefore objects of classes had to be “allocated on the free store using the new operator”.[12] After developing his simulator earlier in Cambridge, he considered Simula’s lack of support on variables of class types as a “major source of inefficiency” at run-time.[12] Moreover, after some time, Karel Babcisky, who worked at the Norwegian Computer Centre, published information on “Simula run-time performance” that backed Stroustrup’s thinking. For this reason, Stroustrup wanted to support local and global variables of class types.[12]

The first version of C with Classes did not support “Inline Functions”, and therefore was not initially advantageous of the language’s representation. Stroustrup, in his book, “The C++ Programming Language”, describes an inline specifier on a function as a “hint” to the compiler that it should try to create code for a call.[5] He introduced inline functions to avoid programmers “crossing a protection barrier” that otherwise would result in not allowing the classes to be used hide representation.[12]

Another concept, which Stroustrup thought about deeply, was the linkage model. Stroustrup starts explaining this by stating that to a certain extent, the way compiled programs might link to one another, “determines the features the language can provide”.[12] At the time of implementing C with Classes and C++, he had taken certain decisions regarding this issue. Firstly, that “separate compilation should be possible with traditional C/FORTRAN UNIX/DOS style linkers”.[12] Secondly, type safety should be checked on linkages.[12] Thirdly, it is not necessary for a linkage to need some sort of database, but a database could be beneficial in order to straighten the intended implementation.[12] Lastly, “linkage to program fragments written in other languages such as C, assembler and FORTRAN should be easy and efficient”.[12]

Bjarne Stroustrup also added static types to his language implementation.[12] By his experience with Simula and ALGOL 68, he considered this to be essential in supporting static types.[12] The only difficulty for him was how to implement it.[12] In order not to break C code, Stroustrup decided that he would allow the “call of an undeclared function” and not test type safety on such “undeclared functions”.[12] However, this was a gaping hole in the type system and a great effort was made to lessen the problems relating to this issue.[12] C with Classes had lost the capability to detect run-time errors caused by “simple type errors”.[12] Due to the fact that most programmers that worked with C were reliable on type checks available, finding simple errors was tedious when programming in C with Classes.[12] Thus, a great demand arose to strengthen C with Class’s type system.[12] Eventually, in C++ the issue had been solved by “making a call of an undeclared function illegal”.[12]

Derived classes were also another concept which Stroustrup implemented.[14] However, the C with Classes language did not support Simula’s concept of virtual function until later with the introduction of C++.[14] Similar to Simula’s prefix class notion and Smalltalk’s subclass concept, C++ also supported derived classes.[14] However, Stroustrup gave the names “derived class” and “base class”, mainly due to the fact that he, along with others, had difficulty in recalling what was “sub” and what was “super”.[14] Furthermore, a number of people believed it to be “counterintuitive” as a subclass usually “has more inform than its superclass”.[14] Although there was no support of virtual functions within C with Classes, derived classes were beneficial for creating new data structures based on older ones and linking operations with the resulting types.[14] However, programmers could have simply used an object of a derived class and consider its base class as “implementation details”.[14]

Towards the middle of his paper, Stroustrup mentions the reasons why he chose the programming language C to extend on, rather than Pascal.[13] Although he points out that C is not the “cleanest language ever designed nor the easiest to use”, he selected C due to its flexibility, efficiency, availability and portability.[13]

C++

Between 1982 and 1984, Stroustrup developed the popular programming language C++. Initially known as C84, it was later changed to C++ because C84 was described by Stroustrup as “ugly” and “institutional”.

Compared to C with Classes, C++ includes major upgrades and new features. Listed by Stroustrup, these major additions include:

“Virtual functions”[15]

“Function name and operator overloading”[15]

“References”[15]

“Constants (const)”[15]

“User-controlled free-store memory control”[15]

“Improved type checking”[15]

The ability to overload an operator was in demand by many.[16] Stroustrup too liked the concept, and to him, “Operator overloading ‘looked neat’.[16] Although, through his experience of ALGOL 68, he had an idea on how overloading “could be made to work”, at first he was “reluctant”, to add it to C++.[16] The reason for this was that Overloading was known to be hard to implement and therefore resulted in compilers increasing in size.[16] It was also known to be “inherently inefficient” and made code “incomprehensible”.[16] However, if this reputation proved to be incorrect, Bjarne Stroustrup, at that time, admitted that overloading would solve a lot of C++ user problems.[16] He was convinced that overloading would not result in inherent inefficiency.[16] Furthermore, he mentions that “overloading makes code obscure” and it would make their code appear “cleaner”.[16] He also observed the way Overloading would work with classes, and he prepared manual papers to show that the added complexity would not pose any problems.[16] Due to all these reasons, in addition to two hours of work in implementing overloading in C front for demonstrations, Stroustrup had convinced himself to include overloading to C ++.[16]

Among other features, the concept of referencing was added to C++.[16] References were initially added to support overloading.[16] C passed arguments by value.[16] If passing an object by value would result in inefficiency, the programmer is able to pass a pointer.[16] However, overloading operators did not permit this strategy.[16] Therefore, due to the fact that C ++ supports both pointers and references, it does not need means for “distinguishing operations on the reference itself from operations on the object referred to”.[16]

From the initial version of C ++ to the C++ currently available today, a lot of updates and versions were released.[17] Version 2.0 was a great improvement.[17] Amongst other features, it mainly introduced abstract classes and multiple inheritance.[17] Multiple inheritance allows users to have more than one direct base class.[17] However, Stroustrup did admit that adding multiple inheritance in version 2.0 was a mistake, as he felt that this concept was less important than adding “parametrized types”.[17] Parametrized types were later added in version 3.0.[17]

The Java Programming Language

The Java Programming Language was developed by a team Sun Microsystems engineers, led by James Gosling[3]. The project started in 1991 and was released in 1995.[3]

Prehistory

Back in the late 1970s, Bill Joy, the man who many still believe was the first to come up with the “idea of a programming language that later became Java”, wanted to create a language that would consist of the best features of MESA and C.[3] Having attempted to re-write UNIX in 1980, he realised that C++ was “inadequate” to accomplish this task.[3] He wanted a much more powerful tool that is able to write short and effective programs. [3]This longing started to become a reality in 1991, when Sun Microsystems began to develop a language induced by Joy’s idea.[3] The Sun’s project was initially known as the “Stealth Project” named by Scott McNealy.[3] It was during January of that year, when James Gosling, Mike Sheradin, Patrick Naughton and Bill Joy, along with others, organized a meeting in Aspen Colorado, to discuss their ideas for this project.[3] The main aim of the Stealth Project was to conduct research in the area of computers’ use in the “consumer electronics market.[3] The major objective was to create a “smart” consumer electronic device that would accept instructions from a “handheld-romote-control-like device”.[3] In Gosling’s words, he states that “the goal was … to build a system that would let us do a large, distributed, heterogeneous network of consumer electronic devices all talking to each-other”.[3]

Read also  Critical Analysis of Academic Papers

The Stealth Project later came to be known as the Green Project.[3] The work that was done by the team was divided as follows: Mike Sheradin worked on business development, Patrick Naughton focused mainly on the graphics system, whilst James Gosling took the task of finding the proper language to use for the project. [3]Before joining Sun in 1984, James Gosling created “the commercially unsuccessful NeWs windowing system as well as GOSMACS”.[3] As described by the site, GOSMACS was “a C language implementation of GNU EMACS.[3]

Oak Programming Language

The language James Gosling initially had chosen to use for Green Project was C++.[3] However, after some time working on it, he found it inadequate for the required task.[3] Therefore, he began adding extensions and changes to C++, which were described as the first building blocks in developing an independent language that would fit ideally to achieve the project’s objectives.[3] Gosling named the language “Oak”, while he was staring at an oak tree though his office window.[3] However, some time after, the name was abolished mainly due to the fact that the name had already been in use for another programming language.[3] In fact Gosling stated that “the Java development team discovered that Oak was the name of a programming language that predated Sun’s language, so another name had to be chosen”.[3]

It was later called Java. Gosling recounted that “it’s surprisingly difficult to find a good name for a programming language, as the team discovered after many hours of brainstorming.[3] Finally, inspiration struck one day during a trip to the local coffee shop”.[3] Some believe that the name was formed by several members that dealt with the project, namely, James Gosling, Arthur Van Hoff, and Andy Bechtolsheim.[3]

Oak was an ideal language for Green Project as it satisfied all requirements in order to work on the project.[3] Due to the fact that there was a number of different manufactures, programs written in Oak required that they are able to run on different machines (platform dependant), regardless of what type of CPU is installed in the device.[3] Thus, Oak was implemented as an interpreted language as “it would be practically impossible for a compiled version to run on all available platforms.[3] In order to do this, Oak was to be first processed to an intermediate “byte-code”, which then was to be transferred “across the network, and executed/interpreted dynamically”.[3]

Reliability was of paramount importance, as an electronics device that would require to “reboot” consistently had to be avoided.[3] Oak was also designed to minimise the amount of errors caused by the user.[3] Since the Oak Language was influenced by modifying C++, this was achieved by removing concepts of multiple-inheritance and operator overloading, as they were considered as a source of potential errors.[3] Moreover, unlike C++, Oak also consisted of “implicit garbage collection” which resulted in more efficient memory usage and greater reliability. Lastly, Oak tried to eliminate all unsafe constructs available in C and C++ by restricting the programmer to use data structures within objects only.[3]

Due to the fact that “Oak-based devices” required that it connected to a network, and share code and information, security was also a concern when designing Oak.[3] Therefore, pointers were eliminated in Oak as this would highly reduce the risk of malicious software entering addresses located in memory.[3] In addition, Oak was a relatively small and simple language which could have been quickly learnt.[3] Some believe that “Oak/Java is C++ done right, but the jury is still out on that…”[3]

The team working on the Green Project added another member in April of 1991.[3] This member was Ed Frank, “a SPARCstation 10 architect”.[3] He was responsible for the project’s hardware, and, two months later,they managed to develop the first hardware prototype called “star-seven (*7)”.[3] *7 was the button combination to press on any telephone connected on their network to answer any other ringing telephone.[3] Meanwhile, it was during this time that James Gosling began to work on the Oak interpreter.[3] In August of 1991, a functioning prototype of the “user interface and graphical system” was shown to Scott McNealy and Bill Joy, the co-founders of Sun.[3] The Green Project continued development also during the Summer of 1992.[3] The complete *7 prototype was then also shown to McNealy and Joy in September of 1992.[3] Gosling described the prototype as a “handheld remote control”.[3] Furthermore, Patrick Naughton stated that “in 18 months, we did the equivalent of what 75-people organisations at Sun took three years to do – an operating system, a language, a toolkit, an interface, a new hardware platform, …”.[3]

Although this technology was striking, the market was not thriving.[3] In fact, Apple’s Newton PDA had suffered the same fate later on.[3] Team members Mike Sheradin, who undertook a business planner role, and Ed Fran, who was responsible for designing the hardware, sought a technology that would become de facto for electronic products, similar to that of Dolly Labs.[3]

Due to the fact that Java was unsuccessful in the consumers’ electronics market, Sun’s motives were unclear.[3] However, the company began brainstorming for its next move.[3] In November of 1992, “Green Project is incorporated under the name FirstPerson”.[3] In the begging of 1993, a Request For Proposal (RFP), for a “set-top box operating system and interactive video-on-demand technology”, was published by Time-Warner.[3] This was seen as an opportunity by FirstPerson and it put its effort in taking initiative.[3] However, Time-Warner offered a contract to SGI, instead of FirstPerson.[3] Sun later attempted to strike a deal with 3DO offering a “Java-based OS for their set-top box”.[3] Yet again Sun failed in securing a deal, and were left abandoned with no business opportunities to consider.[3] They also tried to commercialise their interactive TV technology but in February of 1994, their products were dismissed.[3]

Alternatively, Sun changed its direction again in an attempt to develop on-line and CD-ROM applications written in Oak.[3] However, the idea was not approved by Sun and lead to FirstPerson to end.[3]

In the middle of 1994, Bill Joy initialised a new project know as “LiveOak”.[3] Its main objective was to create a “big small operating” system.[3] Whilst working on a web browser over the weekend, Naughton innovatively thought of making “Liveoak” work on the Internet.[3] Many believe that this was the turning point of Java.[3] Due to the fact that reliability, security, and platform in-dependency were all major concerns of the worldwide web, Java was the ideal programming language to be used.[3] “A perfect match had been found”.[3] In September of 1994, Naughton and a Sun engineer named Jonathan Oayne began writing a web browser in Java.[3] This web browser was initially called “WebRunner” but was later changed to “HotJava”.[3] A month later, HotJava was completed, and thus showed Java’s great potential.[3] Although at first Java was designed for a different objective, it found its place in the Worldwide web.[3] The “introduction of Java marked a new era in the history of the web”. [3]

Announcement of Java

It was at SunWorld ’95 that Sun publicly announced Java and HotJava.[3] Shortly after, Netscape and Internet Explorer added Java support to their popular web browsers.[3] This strengthened Java’s use in the worldwide web.[3]

Conclusion

C ++, along with C, and Java have been a major breakthrough as regards to programming languages. These languages are extremely popular and are widely used. During their development, all of the respective creators had to take certain decisions which lead to their success. More importantly, in my opinion, is that these languages were created because of a specific need which before could not be satisfied efficiently. Through their experiences, I have realised that should one wish to write a particular program but not have the appropriate tools available, one should take the initiative and do one’s utmost to create the required tools. Creating or extending a programming language seems to be the best option as one would be creating a tool specifically for the job intended. This requires great perseverance, determination, and innovative ideas, as these creators have all shown us by their work and attitude.

I can sincerely conclude that by compiling this assignment I have benefited immensely, as I had the opportunity to follow closely the creators’ various difficulties encountered, and also the decisions they had to undertake. I learned with great interest the major steps taken that lead to the creation of highly successful programming languages.

Order Now

Order Now

Type of Paper
Subject
Deadline
Number of Pages
(275 words)