COS 333: Chapter 2, Part 2

Willem van Heerden
19 Aug 202061:11

Summary

TLDRThis lecture continues the exploration of high-level programming languages, covering Algol 60, COBOL, BASIC, PL1, APL, and SNOBOL. Algol 60 was influential but not widely adopted due to its complexity and lack of input/output support. COBOL was designed for business applications and emphasized English-like syntax. BASIC aimed to be easy for non-science students, leveraging time-sharing systems. PL1 sought to unify scientific and business computing. APL introduced powerful array operations but suffered from readability issues. SNOBOL focused on string manipulation and text processing. The lecture emphasizes the historical context and unique features of each language.

Takeaways

  • ๐Ÿ“š The script discusses the evolution and development of major high-level programming languages, focusing on their historical context and design goals.
  • ๐Ÿ” It provides an overview of Algol 60, highlighting its influence on subsequent languages and its goal of being a universal, machine-independent language, despite its limited adoption due to lack of I/O operations and string handling.
  • ๐Ÿ’ผ COBOL is presented as the first widely adopted language for business applications, designed to be English-like and easy to use, with a focus on a detailed data division but a less powerful procedure division.
  • ๐Ÿ‘ถ BASIC (Beginner's All-Purpose Symbolic Instruction Code) was created with novice programmers in mind, emphasizing ease of learning, use, and a friendly approach for non-science students.
  • ๐Ÿ”ข PL/1 (Programming Language 1) aimed to be a universal language applicable to both scientific and business computing, introducing features like concurrency, exception handling, and pointer data types, but was criticized for its complexity.
  • ๐Ÿ“Š APL (A Programming Language), also known as 'Apple', is noted for its expressive and powerful operators, especially for array operations, but is often considered hard to read due to its unique symbols and compact syntax.
  • โ„๏ธ Snowball is recognized as a dynamic language designed for text processing, featuring custom notation for string pattern matching, though its use is now limited compared to other languages.
  • ๐Ÿ”‘ The script emphasizes the importance of understanding the environment and needs that led to the development of each language, such as FORTRAN for scientific computing and COBOL for business applications.
  • ๐Ÿ› ๏ธ The design goals of each language are highlighted, showing how they were tailored to the specific requirements and limitations of their time, such as Algol 60's focus on algorithm description and machine independence.
  • ๐Ÿ“ˆ The script also discusses the challenges faced by some languages, such as Algol 60's lack of widespread adoption due to its initial design oversights and the competition with established languages like FORTRAN.
  • ๐Ÿ”ฌ The development of programming languages is portrayed as an iterative process, with later languages building upon the innovations and addressing the shortcomings of their predecessors.

Q & A

  • What was the significance of ALGOL 60 in the history of programming languages?

    -ALGOL 60 was significant because it was an influential programming language that affected the development of most other high-level programming languages that followed it. It was designed to be machine-independent, aiming to be a universal programming language, and introduced many revolutionary concepts such as block structures with local scope for variables and sophisticated parameter passing mechanisms.

  • Why was COBOL designed and what were some of its unique features?

    -COBOL was designed as the first programming language intended for business applications. It was meant to be easy to use and understand, even for those without a strong technical background. Unique features included support for hierarchical data structures, long names with hyphens for better readability, and a separation of data and code with a detailed data division and a procedure division.

  • What was the purpose behind the creation of BASIC and how did it differ from other programming languages at the time?

    -BASIC, which stands for Beginner's All-Purpose Symbolic Instruction Code, was created to be an easy-to-learn and user-friendly language for non-science students. It differed from other languages by focusing on fast turnaround for homework assignments, being free and not vendor-specific, and treating user time as more important than computer time.

  • How did time-sharing systems influence the development and use of BASIC?

    -Time-sharing systems allowed multiple users to interact with a single powerful computer and its resources simultaneously. This enabled BASIC users to get real-time feedback on errors in their programs, promoting an iterative and interactive programming experience that was not possible with batch processing systems.

  • What was the goal of PL/1 and how did it attempt to achieve universality in programming?

    -PL/1 aimed to be a universal programming language applicable to different programming domains, particularly scientific computing and business computing. It attempted to achieve universality by incorporating features from both domains and by being designed to work with the IBM System/360 line of computers, which were intended for both scientific and business applications.

  • What are some of the major contributions of PL/1 to programming language design?

    -PL/1 introduced several major contributions, including the first unit-level concurrency, the first exception handling mechanism, the first pointer data type, and support for array cross-sections. These features influenced the design of subsequent programming languages.

  • Why was APL considered a very expressive programming language despite its complexity?

    -APL was considered very expressive because it had a large set of powerful operators that worked for both scalar and array values, allowing for the compact representation of complex operations such as matrix inversion and transposition. However, this also made APL programs difficult to read due to the large number of non-standard operators.

  • What is the primary focus of the Snowball programming language and how does it differ from other languages in string manipulation?

    -Snowball is primarily a string manipulation language designed for text processing. It differs from other languages by using its own custom notation for string pattern matching instead of regular expressions, which was a revolutionary idea at the time of its creation.

  • What were some of the challenges faced by the designers of ALGOL 60 in terms of implementation and adoption?

    -Some challenges faced by the designers of ALGOL 60 included the lack of input/output operations and string handling in the language specification, which limited its portability andๅฎž็”จๆ€ง. Additionally, the formal syntax description in Backus-Naur Form (BNF) was considered confusing at the time, which may have hindered adoption.

  • How did the design goals of FORTRAN and COBOL differ, and what impact did these differences have on their respective uses?

    -FORTRAN was designed with a focus on scientific computing and efficient compiler performance, making it suitable for technical users. In contrast, COBOL was designed to be more English-like and easy to use for business applications, even at the cost of being less powerful. These differences led to FORTRAN being widely used in scientific fields and COBOL becoming the dominant language for business applications.

Outlines

00:00

๐Ÿ“š Evolution of High-Level Programming Languages

This lecture continues the discussion on the evolution and development of high-level programming languages. It reviews Plan Calcul, pseudo codes, FORTRAN (the first high-level language for scientific computing), and LISP (the first functional programming language). The focus then shifts to ALGOL 60, COBOL, BASIC, PL/I, APL, and SNOBOL. The significance and impact of these languages on subsequent developments in programming are emphasized.

05:01

๐ŸŒ ALGOL 60: Bridging International Gaps

ALGOL 60's development aimed to create a machine-independent programming language. It was a collaboration between European and American institutions. ALGOL 60 introduced several groundbreaking features, including a more sophisticated type system, flexible naming conventions, and compound statements. Despite its innovations, ALGOL 60 lacked input/output operations and string handling, which limited its adoption.

10:02

๐Ÿ–ฅ๏ธ ALGOL 58: A Foundation for ALGOL 60

ALGOL 58, the precursor to ALGOL 60, introduced key concepts like type declarations and flexible array handling. It supported compound statements and the colon equals assignment operator, which influenced later languages. However, ALGOL 58 did not include I/O operations, highlighting the tension between machine independence and practical implementation.

15:03

๐Ÿ’ผ COBOL: Business Programming Revolution

COBOL was designed for business applications with a focus on readability and ease of use. It featured hierarchical data structures, nested selection statements, and long, descriptive names. While COBOL's data division was highly detailed, its procedure division was less powerful, leading to verbose code. The language's adoption was significantly driven by the U.S. Department of Defense.

20:04

๐ŸŽ“ BASIC: Democratizing Programming Education

BASIC was created to teach programming to non-scientific users at Dartmouth College. It emphasized ease of learning, user-friendliness, and quick feedback through time-sharing systems. BASIC's design goals focused on simplicity, making it distinct from earlier scientific languages. Visual Basic and VB.NET are its modern descendants.

25:07

๐Ÿ–ฅ๏ธ PL/I: Universal Programming for All Domains

PL/I aimed to unify scientific and business computing under one language. Developed by IBM and SHARE, it introduced concurrency, exception handling, and pointer data types. Despite its innovations, PL/I's complexity made it difficult to learn and use. Its design philosophy of including every possible feature resulted in a large and unwieldy language.

30:08

๐Ÿ”  APL: Expressive Yet Challenging

APL, designed by Ken Iverson at IBM, was noted for its powerful and expressive operators for scalar and array values. While APL programs could be written compactly, they were often difficult to read and debug. The language used a unique set of symbols, requiring special keyboards or overlays.

35:09

๐Ÿ“ SNOBOL: String Manipulation Pioneer

SNOBOL, developed at Bell Labs, specialized in string manipulation and pattern matching. Though revolutionary at its inception, SNOBOL was slower compared to other languages, limiting its widespread adoption. It is still used today for specific text processing tasks but remains less prominent.

40:12

๐Ÿ” Recap and Future Lectures

The lecture series continues to explore the history and development of programming languages, highlighting key features and impacts. Future lectures will cover additional languages, offering a comprehensive overview of the field's evolution.

Mindmap

Keywords

๐Ÿ’กHigh-level programming languages

High-level programming languages are designed to be easy for humans to read and write, using syntax that is more abstracted from the machine code. In the video, languages like FORTRAN, COBOL, and ALGOL 60 are discussed as examples, highlighting their evolution and impact on programming.

๐Ÿ’กALGOL 60

ALGOL 60, or Algorithmic Language 1960, was a highly influential programming language that introduced concepts such as block structure and scope. Despite its influence on future languages, it was not widely adopted itself. The video explains its development and its role in shaping modern programming languages.

๐Ÿ’กFORTRAN

FORTRAN, or Formula Translation, was the first high-level programming language and was designed for scientific computing. It is discussed in the video as a pioneering language that set the stage for subsequent developments in programming.

๐Ÿ’กCOBOL

COBOL, or Common Business Oriented Language, was designed for business applications. The video highlights its focus on readability and its widespread use in business environments, emphasizing its long-lasting impact.

๐Ÿ’กLISP

LISP, or LISt Processing, is the first functional programming language, known for its use in artificial intelligence research. The video discusses its innovative approach to handling data structures like linked lists.

๐Ÿ’กTime-sharing

Time-sharing is a computing technique that allows multiple users to share the same computer resources simultaneously, which was crucial for the development of languages like BASIC. The video explains how this concept enabled real-time feedback and accessibility in programming education.

๐Ÿ’กDynamic typing

Dynamic typing is a feature where the type of a variable is determined at runtime, not in advance. The video mentions this in the context of APL and SNOBOL, which are known for their dynamic features and flexibility.

๐Ÿ’กRecursion

Recursion is a programming technique where a function calls itself to solve a problem. The video notes ALGOL 60 as the first imperative language to introduce sub-program recursion, marking a significant advancement in programming methodology.

๐Ÿ’กBlock structure

Block structure is a programming concept that involves grouping statements together, usually within 'begin' and 'end' blocks. This was introduced by ALGOL 60 and is fundamental in modern programming languages for defining scopes and managing variables.

๐Ÿ’กBNF (Backus-Naur Form)

BNF, or Backus-Naur Form, is a notation technique for defining the syntax of programming languages. ALGOL 60 was the first to use BNF, which helped standardize the way languages were described and specified, as highlighted in the video.

Highlights

Introduction of ALGOL 60 as an influential yet not widely adopted programming language that impacted the development of subsequent high-level languages.

COBOL's distinction as the first programming language designed for business applications, highlighting its importance in the early days of business computing.

The significance of BASIC as an educational programming language aimed at teaching programming concepts to a broader audience.

PL/1's attempt as a general-purpose programming language capable of handling both scientific computations and business application development.

APL's innovative approach as an early dynamic language with a powerful set of operators for mathematical functions, despite its complexity and limited adoption.

Snowball's niche as a text processing language with custom notation for string pattern matching, illustrating the evolution of specialized programming languages.

The importance of understanding the environment in which programming languages like FORTRAN and LISP were developed to appreciate their design and functionality.

ALGOL 60's development as a machine-independent, universal programming language, marking a shift towards more portable code across different hardware platforms.

The unique design goals of COBOL, emphasizing English-like syntax and readability to cater to non-technical business users.

BASIC's design for ease of learning and use, reflecting its role in education and its impact on novice programmers.

PL/1's introduction of unit-level concurrency, exception handling, and pointer data type, showcasing its forward-thinking features in programming language design.

APL's use of a large set of operators for scalar and array values, demonstrating its expressive power despite readability challenges.

Snowball's specialized string manipulation capabilities, underscoring the development of programming languages for specific tasks like text processing.

The impact of time-sharing systems on the development of programming languages like BASIC, enabling faster turnaround times and private access for users.

The role of the US Department of Defense in mandating COBOL, illustrating the influence of military support on the adoption and development of programming languages.

The IBM System/360 project's requirement for a universal programming language like PL/1, reflecting the industry's shift towards more versatile computing solutions.

Transcripts

play00:00

this is the second part of our

play00:03

discussion

play00:03

on chapter two where we will continue

play00:06

looking

play00:06

at the evolution and development of some

play00:10

of the major

play00:11

high-level programming languages

play00:14

in the previous lecture we looked at

play00:16

plan calcul

play00:18

a prototype high-level programming

play00:20

language that was never actually

play00:21

properly implemented we also looked at

play00:24

pseudo codes

play00:25

languages intended for hardware

play00:28

programming

play00:28

that were not quite low-level machine

play00:31

languages but

play00:32

also not fully fledged high-level

play00:35

programming languages

play00:37

we then looked at the first two of our

play00:40

proper high-level programming languages

play00:42

fortran first of all which was the first

play00:45

high-level programming language

play00:46

and intended for scientific computing

play00:49

and then we looked at

play00:51

lisp which was the first functional

play00:54

programming language

play00:55

in this lecture we'll move on with

play00:58

another five high-level programming

play00:59

languages

play01:00

we'll first look at algol 60 which was

play01:04

a very influential programming language

play01:06

and affected the development

play01:08

of most other high-level programming

play01:10

languages following

play01:12

it but unfortunately wasn't very widely

play01:14

adopted

play01:15

itself we'll then look at cobol

play01:18

which was the first programming language

play01:21

intended for business applications

play01:24

then we'll move on to basic which was a

play01:27

programming language intended

play01:29

for educational purposes to teach

play01:32

programming we'll then look at pl1

play01:36

which was the first attempt at a general

play01:39

purpose

play01:40

programming language that could do both

play01:42

scientific

play01:43

computations as well as business

play01:47

application development and then we will

play01:50

finish off our discussion

play01:52

with a brief look at two early dynamic

play01:54

languages

play01:56

firstly apl or apple as some people call

play01:59

it

play02:00

and then snowball which was intended for

play02:03

text processing

play02:05

here we have the same diagram that i

play02:09

introduced in the previous lecture which

play02:12

illustrates

play02:13

the evolutionary process of different

play02:15

programming languages

play02:16

and which languages influence the design

play02:19

of other languages

play02:21

so in the previous lecture we looked at

play02:23

fortran over here and all of the various

play02:26

versions of fortran all the way

play02:27

to the most recent one and we also then

play02:31

looked at the lisp programming language

play02:34

over here which was the

play02:36

first functional programming language

play02:38

and affected the development

play02:39

of subsequent functional programming

play02:43

languages

play02:44

the languages that we will be looking at

play02:46

in this lecture

play02:47

are underlined in red so we can see them

play02:51

over here

play02:52

you can see that they are all fairly

play02:54

early programming languages still at

play02:56

this stage

play02:58

ranging from the 1950s into the 1960s

play03:04

the first high-level programming

play03:05

language we will consider in this

play03:07

lecture

play03:08

is algol 60. now when we were discussing

play03:12

fortran

play03:12

and lisp we saw that it was very

play03:16

important for us to understand the

play03:18

environments within which those

play03:19

programming languages were developed

play03:21

in order for us to understand the nature

play03:24

of those programming languages

play03:26

and the same is true for algol 60.

play03:29

so the environment within which algol 60

play03:32

was developed

play03:33

was that fortran had been released but

play03:36

it was still

play03:36

a very new programming language and as

play03:39

you should recall it was developed

play03:41

specifically for the ibm

play03:43

704 computer as well as subsequent

play03:46

computers in the same line

play03:49

now there were a number of other

play03:51

high-level programming languages that

play03:53

were being developed at the same time

play03:55

and all of these languages much as was

play03:58

the case with fortran

play03:59

were designed for specific computers

play04:03

now this meant that there was a little

play04:06

bit of a problem potentially brewing

play04:09

firstly none of these programming

play04:12

languages were portable because they

play04:14

were all designed for very specific

play04:16

hardware

play04:17

so this meant if you wrote a program on

play04:19

one platform in one programming language

play04:22

it was impossible to port that program

play04:24

across to another programming language

play04:27

and another hardware platform

play04:29

so this meant if you wanted to port your

play04:31

program to another platform you'd

play04:33

essentially have to redevelop it from

play04:35

the ground up

play04:37

which was of course a huge waste of time

play04:40

and effort additionally there was

play04:43

potentially a communication

play04:45

problem arising so programmers who were

play04:48

used to working on one platform

play04:50

with the programming language that was

play04:52

specific to that platform

play04:54

would not be able to very easily

play04:56

understand programs written

play04:58

in other languages for other hardware

play05:01

platforms

play05:02

and the reason for this is that as we

play05:05

saw during our discussion on fortran

play05:08

these programming languages were still

play05:10

very much based

play05:11

on the underlying hardware that they

play05:13

were meant to

play05:14

work with and so therefore the

play05:17

control structures and the features

play05:19

provided by the programming languages

play05:21

were very much dictated by the hardware

play05:24

and therefore

play05:25

the features and structures within the

play05:27

languages were vastly different from one

play05:30

language

play05:30

to the next so put another way there was

play05:34

no programming language that could be

play05:36

used universally as a means for

play05:38

communicating

play05:39

algorithms between programmers

play05:43

so algo 60 then was developed from algol

play05:46

58

play05:47

and we'll talk about alcohol 58 in a

play05:50

moment

play05:50

um alcohol 58 was never intended to

play05:53

actually be implemented

play05:55

but algol 60 was meant to be implemented

play05:58

as a fully featured programming language

play06:01

and algol 58 and algol 60

play06:04

were essentially then an effort to

play06:07

design

play06:07

a universal programming language now

play06:10

universal in this context

play06:12

means machine independence so in other

play06:16

words a programming language that can

play06:18

could work on any particular hardware

play06:21

platform regardless of who the

play06:22

manufacturer was

play06:25

algol 60 was not a universal programming

play06:28

language

play06:28

in the sense that it had multiple

play06:30

application areas it was still

play06:32

a scientific language in the same way

play06:35

that fortran

play06:36

was because at this point the

play06:38

application areas for all programming

play06:40

languages were

play06:41

essentially limited to scientific work

play06:46

the design process for what would

play06:49

eventually become the algol 58 language

play06:51

specification

play06:53

began in europe and was headed by

play06:56

a german organization the society for

play06:59

applied mathematics

play07:01

and mechanics they later sent an

play07:04

invitation to the acm

play07:06

the association for computing machinery

play07:09

which is based in the united states so

play07:12

we can see that the design

play07:14

effort of algol 58 which then eventually

play07:17

led to algol 60 was the

play07:21

first international attempt at least in

play07:24

the sense of a collaboration between

play07:25

europe and the united states

play07:28

for the design of a programming language

play07:31

the design process took place

play07:34

within a meeting that ran over four days

play07:38

so we can see that the design process

play07:41

was fairly quick and that ran from the

play07:44

27th of may to the 1st

play07:46

of june in 1958

play07:49

the programming language was first

play07:51

called the

play07:52

international algorithmic language or

play07:55

ial

play07:57

so you can see there once again the name

play08:00

of the language focuses

play08:01

on the fact that it was an international

play08:03

collaboration

play08:04

between europe and the united states

play08:08

but fairly shortly after that the

play08:10

language was renamed to the algorithmic

play08:12

language

play08:13

which was then shortened to algol

play08:17

now the language design had three

play08:20

main goals the first goal was that it

play08:22

had to be close

play08:23

to a mathematical notation the second

play08:26

goal was that it had to be good for

play08:28

describing algorithms

play08:30

and the third goal was that it must be

play08:32

possible to

play08:33

translate the language down into machine

play08:37

code now the first goal is

play08:40

fairly obvious um once again as was the

play08:43

case with fortran

play08:45

this language was intended for

play08:46

scientific applications therefore

play08:49

it made sense that its notation had to

play08:52

be close to a standard mathematical

play08:54

notation

play08:55

the third goal is also an obvious goal

play08:58

because of course a high level

play09:00

programming language must be

play09:02

translatable down into machine code

play09:05

so the first and third goals they're not

play09:07

very interesting but the second goal

play09:09

was quite unique and very important at

play09:12

the time

play09:13

so the language had to be good for

play09:15

describing algorithms

play09:17

which of course meant that the language

play09:19

then had to be

play09:20

more writable it had to be easier to

play09:23

understand

play09:24

and it also had to be machine

play09:26

independent because it was intended for

play09:29

describing

play09:29

algorithms rather than the functioning

play09:32

of a specific

play09:34

computing platform the algol 58 language

play09:39

specification

play09:40

introduced quite a number of concepts

play09:42

that were very revolutionary for the

play09:44

time

play09:45

now as we look at the language features

play09:47

bear in mind that

play09:49

the version of fortran that was

play09:50

available at the time

play09:52

was fortran one so first of all

play09:55

algol 58 formalized the concept of type

play09:58

and it introduced the notion of a type

play10:01

declaration

play10:03

recall that types were handled in

play10:06

fortran

play10:07

but there was a fairly simple type

play10:09

system

play10:10

and it was a fairly rudimentary

play10:12

mechanism that was used to specify the

play10:14

type

play10:15

so fortran 1 did not use type

play10:17

declarations

play10:18

instead it used the first character of a

play10:21

variable's name

play10:22

to indicate the type of that variable so

play10:25

a much more sophisticated much more

play10:27

readable mechanism

play10:29

used in algol 58 compared to fortran 1.

play10:33

also names within algol 58 could be any

play10:36

length

play10:37

recall that in fortran 1 names were

play10:39

limited

play10:40

to 6 characters so much more flexible

play10:43

approach in algol 58

play10:45

and a much more readable approach as

play10:47

well because

play10:48

you could now use descriptive names for

play10:51

your variables

play10:52

and your sub programs arrays in algol 58

play10:56

could also have any number of subscripts

play10:58

in

play10:59

fortran 1 arrays were limited to 3

play11:01

subscripts

play11:02

so once again a much more flexible

play11:05

approach in algol 58.

play11:07

parameters for subprograms in algol 58

play11:11

were separated by mode namely in mode

play11:15

and out mode parameters now we'll get

play11:18

two parameter modes a little bit later

play11:20

on in this course

play11:22

but essentially in-mode parameters are

play11:24

used to send data to a sub-program

play11:27

whereas outmode parameters are used to

play11:29

get results from

play11:30

a sub program so you can think of out

play11:33

mode parameters

play11:34

as reference parameters or possibly

play11:37

pointer parameters as they are used in c

play11:40

plus algal 58 also

play11:43

used brackets notation for its

play11:45

subscripts which

play11:46

is used in a lot of

play11:50

modern high-level programming languages

play11:52

still and this

play11:53

is particularly the case in c based

play11:55

programming languages like c

play11:57

plus java and c sharp also

play12:00

interestingly algol 58 allowed the

play12:03

programmer to specify the lower bounds

play12:05

for their subscripts so you could decide

play12:08

for example

play12:09

if you wanted your arrays to start at

play12:11

subscript 0 or

play12:12

subscript 1. in 4chan 1 all arrays

play12:15

started at subscript 1.

play12:17

so again a much more flexible approach

play12:19

in algol 58.

play12:21

algol 58 also supported compound

play12:24

statements and it used

play12:25

special words begin and end to indicate

play12:28

the beginning and the end of these

play12:30

compound statements

play12:31

it also used a semicolon as a statement

play12:35

separator

play12:36

and this convention is still used today

play12:38

in a lot of high-level programming

play12:39

languages

play12:40

once again in particular the c-based

play12:43

programming languages

play12:45

the assignment operator was the colon

play12:48

equals operator as we can see over here

play12:51

and the evolution of this operator

play12:53

notation is quite

play12:54

interesting so recall in plan calcul

play12:58

that assignments took place from left

play13:01

to right in other words the destination

play13:03

that you were assigning to

play13:05

appeared on the right hand side of the

play13:07

assignment operator

play13:09

it used an arrow notation so essentially

play13:11

an arrow pointing from

play13:13

left to right which was represented as

play13:16

an equal symbol followed by

play13:18

a greater than symbol now algol 58

play13:21

used the assignment order convention

play13:25

that fortran used so in other words an

play13:27

assignment from

play13:29

right to left with the destination

play13:31

variable on the left hand side

play13:33

of the assignment operator but it also

play13:36

then

play13:36

attempted to use the arrow notation that

play13:39

was used in plan calcul

play13:41

so that would have then been represented

play13:43

as a less than symbol

play13:45

followed by an equals symbol

play13:48

however because punch card systems were

play13:50

being used at the time

play13:51

and the character sets for the punch

play13:54

card systems were fairly often limited

play13:56

at the time and the less than symbol

play13:59

was often not included in the supported

play14:02

character set

play14:03

so therefore the less than symbol was

play14:06

replaced with a colon

play14:08

and that's how the eventual assignment

play14:10

operates a notation that was used

play14:13

was arrived at this colon equals

play14:16

notation

play14:16

is still used in some high-level

play14:18

programming languages today

play14:21

algol 58 also supported if statements

play14:24

with an

play14:24

else if clause so this allowed if

play14:27

statements to be nested inside one

play14:29

another

play14:29

and this kind of nesting was not allowed

play14:32

in fortran 1.

play14:34

now the last point is quite interesting

play14:37

the language specification for algol 58

play14:40

did not

play14:41

include any io operations

play14:44

and this was done because the designers

play14:46

of the language felt that it would make

play14:48

the language machine dependent now

play14:52

you should immediately be thinking that

play14:55

this

play14:55

is a little bit of a strange oversight

play14:57

because the

play14:58

emission of io operations from the

play15:01

language specification

play15:02

would mean that each implementation of

play15:06

the algol 58 language for a particular

play15:08

hardware platform

play15:10

would require a different io

play15:12

implementation

play15:13

and this would by definition then make

play15:16

the language implementations

play15:18

not cross-compatible and would therefore

play15:21

eliminate the possibility of

play15:23

porting program code from one hardware

play15:26

platform to another

play15:27

so this essentially undermined then one

play15:30

of the core

play15:30

ideas underlying algol 58 that the

play15:34

language should be

play15:35

machine independent and universal

play15:39

now algol 58 was never meant to be

play15:42

implemented as a concrete programming

play15:45

language

play15:46

the specification was intended for

play15:49

discussion which would later lead to

play15:51

a formalized specification that would

play15:54

then actually be

play15:55

implemented despite this though some

play15:58

variations of the language specification

play16:01

were actually implemented

play16:03

and two examples of this are mad and

play16:06

jovial ibm was initially pretty

play16:09

enthusiastic about

play16:10

algol 58 but by the middle of 1959

play16:15

they had dropped all support for the

play16:17

language and the reason for this

play16:19

was that they were focusing on fortran

play16:22

so ibm had basically realized that

play16:25

specifying

play16:26

a high-level programming language

play16:28

developing a

play16:29

compiler that was efficient

play16:33

and effective and then also convincing

play16:36

users to use the language and the

play16:38

compiler

play16:39

took a great deal of effort and they

play16:41

just weren't prepared to support

play16:43

a second programming language so they

play16:45

decided to refocus all of their efforts

play16:48

on

play16:48

fortran and its continued development

play16:52

the algol 58 language specification was

play16:56

extended into the algol 60 language

play16:58

specification

play16:59

which was then eventually implemented

play17:02

now this extension of alcohol 58 took

play17:05

place

play17:06

over a six-day design meeting which was

play17:09

hosted in paris

play17:11

so the design process took two days

play17:14

longer than the four-day design process

play17:16

of algol 58

play17:18

but still an incredibly short design

play17:20

process

play17:21

for a full programming language

play17:24

as with algol 58 algos 60 introduced a

play17:27

number of new features

play17:29

and a lot of them were also very

play17:31

revolutionary for the time

play17:34

so the compound statements that were

play17:36

included in algal 58

play17:38

were extended into block structures and

play17:41

these structures had

play17:42

local scope for variables this

play17:45

was a very revolutionary concept for the

play17:48

time and it was only

play17:49

finally introduced in fortran in the

play17:52

2008 release of that language

play17:55

algol 60 also had very sophisticated

play17:58

parameter passing mechanisms

play18:00

so it supported pass by value which you

play18:02

will be familiar with

play18:04

but it also supported pass by name which

play18:06

you will not have encountered yet

play18:09

pass by name is a very flexible approach

play18:12

to parameter passing

play18:14

however it can be fairly difficult to

play18:16

understand

play18:17

and we'll look at all of the parameter

play18:19

passing techniques

play18:20

later on in this course algol 60 also

play18:24

introduced sub-program recursion

play18:26

and it was in fact the very first

play18:28

imperative programming language to

play18:30

introduce

play18:31

this concept algol 60 also supported

play18:35

stack dynamic arrays

play18:37

so these are arrays that allow the

play18:40

size to be declared at run time

play18:44

which means that these arrays are much

play18:46

more flexible

play18:47

in terms of how they can be used and how

play18:50

their space can be allocated

play18:52

again this feature was only introduced

play18:54

much later within fortran

play18:57

however the alcohol 60 language

play18:59

specifications still didn't include

play19:01

any i o operations at all and it also

play19:05

didn't include

play19:06

any string handling mechanisms so these

play19:08

two emissions were major oversights

play19:11

within the language specification

play19:13

and major contributors to the fact that

play19:16

algol 60 was not a very widely used

play19:20

language

play19:21

after it was released

play19:25

so if we look at the overall evaluation

play19:28

for algol 60

play19:30

we see that it is a language that had a

play19:32

lot of successes

play19:33

in terms of features that it introduced

play19:36

and

play19:36

influences that it had on subsequent

play19:39

programming languages

play19:40

however unfortunately the programming

play19:44

language overall was a failure

play19:46

particularly in terms of its use

play19:49

as a practical programming language so

play19:52

if we look at the successes of algol 60

play19:55

well it definitely succeeded in terms of

play19:57

being

play19:58

a communication system for algorithms

play20:01

it was the standard way of publishing

play20:04

algorithms

play20:05

in journals for over 20 years

play20:09

it was also the basis for all subsequent

play20:11

imperative

play20:12

programming languages a very very

play20:15

influential language

play20:17

you should have been able to tell from

play20:18

the previous discussions

play20:20

on the language features that most of

play20:23

those features

play20:24

are still present in modern programming

play20:27

languages in one form

play20:28

or another it was also the very first

play20:31

machine independence programming

play20:33

language

play20:34

machine independence is a major focus of

play20:37

modern programming languages

play20:40

and then interestingly in terms of the

play20:42

formal specification of the language

play20:45

it was the very first high-level

play20:46

programming language whose syntax was

play20:49

formally defined and this syntax

play20:52

specification

play20:53

was in bnf the bacchus noir form

play20:56

which is a very standard mechanism still

play21:00

used today

play21:01

for specifying the syntax

play21:04

of programming languages despite

play21:07

these successes algol 60 unfortunately

play21:11

wasn't a very widely used programming

play21:13

language and in that sense

play21:15

was a bit of a failure it wasn't very

play21:17

widely used particularly in the united

play21:20

states

play21:21

and even in europe where it was more

play21:23

widely used it didn't become

play21:25

a very dominant programming language now

play21:28

there are a number of reasons for this

play21:30

firstly

play21:31

as i've previously suggested the

play21:34

lack of input and output operation

play21:38

support in the specification as well as

play21:41

the lack for

play21:42

string handling limited the portability

play21:45

of the programming language and this of

play21:47

course was one of the major goals behind

play21:50

the design of

play21:51

algol 60. in a lot of senses algol 60

play21:55

was also a little bit

play21:56

too flexible particularly for

play21:59

programmers of the day

play22:01

it was a bit hard to understand and the

play22:04

compilers were a bit difficult to

play22:07

implement

play22:07

at the time particularly concepts like

play22:10

the pass by name parameter handling

play22:13

mechanism

play22:14

were fairly difficult for programmers of

play22:16

the day to wrap their heads around

play22:19

also the formal syntax description in

play22:22

bnf

play22:23

was considered to be fairly confusing at

play22:25

the time

play22:26

now this of course has turned out in

play22:29

retrospect

play22:30

to not have been that much of an issue

play22:32

bnf is very widely used today

play22:35

to specify syntax however at the time it

play22:39

was considered

play22:40

confusing and this scared a lot of

play22:42

people off

play22:43

from the adoption of the programming

play22:45

language

play22:47

um also there was the entrenchment of

play22:49

fortrans

play22:50

so as i've previously mentioned ibm

play22:53

focused all of their resources

play22:54

on the development and promotion of

play22:57

fortran

play22:58

as a high-level scientific programming

play23:00

language

play23:01

and really at the stage that algol 60

play23:04

became available

play23:05

fortran was so widely used that algol 60

play23:08

really couldn't make

play23:09

a dent in that at all

play23:12

ibm also dropped all of their support

play23:15

for algol 60

play23:17

so this meant essentially that the

play23:19

european organizations

play23:21

were attempting to promote the language

play23:24

on their own

play23:25

and this of course limited the success

play23:28

of their efforts

play23:30

the next high-level programming language

play23:33

we'll consider

play23:34

was the very first widely adopted

play23:36

programming language

play23:37

intended exclusively for the development

play23:40

of business applications namely cobol

play23:44

early on in the design process for cobol

play23:48

the language was called the common

play23:50

business language or cbl

play23:52

but later on it was renamed to the

play23:55

common business oriented language

play23:57

from which cobol was derived now once

play24:00

again we need to consider

play24:02

the environment within which cobol was

play24:04

developed

play24:05

and what we see is that the majority of

play24:08

high-level programming languages at the

play24:10

time

play24:10

were intended for scientific

play24:12

applications

play24:14

there were not many programming

play24:16

languages that

play24:18

were intended for more business-like

play24:20

application areas

play24:22

and the languages that did exist were

play24:24

relatively rudimentary

play24:26

and not very widely used there were also

play24:29

proprietary languages so they were

play24:31

developed by one

play24:32

specific vendor for their specific

play24:35

hardware platforms

play24:37

so what we see at the time is that

play24:39

univac was beginning to use

play24:41

a language called phlomatic the united

play24:44

states

play24:45

air force had started using a language

play24:47

called imaco

play24:49

and ibm had begun development on a

play24:52

language called

play24:52

comtran but they hadn't yet implemented

play24:55

it

play24:56

so the closest to a fully featured

play24:59

business oriented programming language

play25:01

was flomatic at the time

play25:03

and in fact cobol took a lot of ideas

play25:06

from flomatic

play25:08

and then developed those into a fully

play25:10

featured

play25:11

business oriented programming language

play25:14

because cobol was based on flomatic

play25:17

we need to first of all consider some of

play25:20

the major features

play25:21

of the phlomatic programming language so

play25:24

what we see

play25:25

is that phlomatic was designed with

play25:28

business users in mind

play25:30

in other words not scientifically

play25:32

oriented users

play25:34

and definitely not technically oriented

play25:36

users

play25:37

what this means is that the language set

play25:39

out to be

play25:40

more english-like in its structure

play25:43

rather than

play25:44

more mathematical so that it would be

play25:46

easier

play25:47

for these non-technical non-scientific

play25:50

users

play25:51

to write programs so we see that names

play25:54

in phlomatic were allowed to be up to 12

play25:56

characters long

play25:57

so in other words generally much more

play26:01

readable and much more descriptive than

play26:03

one would see in a language like

play26:05

fortran they also allowed embedded

play26:08

hyphens within the names

play26:10

which meant that you could separate

play26:12

individual words from one another

play26:15

interestingly no arithmetic operators

play26:18

were supported so english names were

play26:21

used for all of the arithmetic

play26:23

operations in other words you would use

play26:25

the word add rather than

play26:27

a plus symbol so this meant that there

play26:30

were no

play26:30

arithmetic expressions and the intention

play26:33

behind this

play26:34

was that the mathematics of programs

play26:37

written in phlematic

play26:38

would be more readable to the lay person

play26:43

rather than only understandable by

play26:45

people with a mathematical background

play26:48

the first word of every statement was

play26:50

also a verb so again a much more

play26:53

english-like syntax

play26:55

and then very importantly the data that

play26:58

the program would work on

play26:59

and the code that would do the

play27:01

processing were completely separate

play27:04

from one another and this is an idea

play27:06

that was carried

play27:08

across into cobol which we'll talk about

play27:11

in a moment

play27:13

interestingly the early design process

play27:16

of cobol

play27:16

had quite a lot of military involvement

play27:20

and this was because the united states

play27:22

military required a business programming

play27:24

language

play27:25

in order to implement their

play27:26

administrative systems

play27:29

the first design meeting in fact took

play27:30

place at the pentagon

play27:32

and this was in may of 1959

play27:36

so there were four major design goals

play27:38

set out for the language

play27:40

the language had to look like simple

play27:42

english

play27:43

the general belief at the time was that

play27:45

business programmers were not

play27:47

comfortable

play27:48

with mathematical notation and the

play27:51

language also had to be easy to use

play27:53

even if it meant that the language was

play27:56

less powerful because of this

play27:58

so you can see much more of a focus on

play28:00

the readability

play28:02

and the understanding of programs

play28:05

written

play28:05

in the language less emphasis

play28:09

on the power and the efficiency of the

play28:12

compilers as we saw was the case in

play28:16

fortran the language also had to broaden

play28:19

the base

play28:20

of computer users so that was then

play28:23

beyond

play28:23

the realm of very technical and

play28:26

scientifically oriented programmers

play28:29

and the language also had to not be

play28:32

biased by

play28:33

current compiler problems of the day

play28:36

so the design committee members then

play28:39

were from

play28:40

the various department of defense

play28:43

branches within

play28:44

the united states military but also

play28:46

there were representatives from all of

play28:48

the various computer manufacturers

play28:50

of the day and so there were lots of

play28:53

then different

play28:54

parties involved in the design process

play28:56

each with their own particular

play28:58

agendas so this then led to a fairly

play29:01

difficult design

play29:02

process with a lot of fights among the

play29:04

various manufacturers

play29:06

a lot of questions were raised such as

play29:08

should arithmetic expressions be

play29:10

supported or should they not

play29:13

should only english-like words be used

play29:15

for

play29:16

the components of arithmetic expressions

play29:19

should subscripts be supported

play29:21

for arrays or should they not be

play29:23

supported

play29:24

and so all of these issues were hotly

play29:27

debated

play29:28

until eventually a complete design for

play29:31

the language was

play29:32

arrived at let's now look

play29:35

at an overall evaluation of the cobalt

play29:37

programming language

play29:39

so we see a number of features

play29:41

introduced by

play29:42

cobol most of these features are not

play29:45

very groundbreaking however

play29:47

but there were a few contributions made

play29:49

so

play29:50

cobol introduced the very first support

play29:53

in a high-level programming language for

play29:55

macros

play29:56

which we still see today in high-level

play29:59

programming languages

play30:00

but probably the most important

play30:02

contribution

play30:03

that cobol made to high-level

play30:06

programming languages was support

play30:08

for hierarchical data structures which

play30:10

today we would call records

play30:12

or structs it also supported nested

play30:15

selection statements

play30:17

which as you will recall were not

play30:19

supported in early versions of

play30:21

fortran names were also relatively long

play30:25

so you could have names up to 30

play30:27

characters long including hyphens

play30:29

so again contrast that to the very

play30:32

limited

play30:33

naming conventions allowed within the

play30:36

early versions of

play30:37

fortran now typically cobalt programs

play30:41

are constructed out of

play30:42

two main parts this first of all the

play30:45

data division that specifies the

play30:48

structure of the data that the program

play30:49

will operate on

play30:51

and then there's a procedure division

play30:53

that includes the actual program

play30:55

code that will do the processing of the

play30:57

data

play30:58

so cobol is notable because the data

play31:01

division

play31:01

is incredibly detailed

play31:04

it's separated from the rest of the

play31:07

program so you can immediately see

play31:09

all of the relevant pieces of data

play31:12

you also have these hierarchical

play31:16

nested data structures as i previously

play31:19

mentioned which would be included

play31:21

in the data division so for example you

play31:24

might have

play31:25

a structure that contains information

play31:27

related

play31:28

to the name of an individual including

play31:30

the first middle and last name

play31:33

and that could then be embedded in

play31:35

another structure

play31:36

that contains other information related

play31:39

to the individual

play31:41

so a very detailed data division however

play31:44

the major drawback associated with cobol

play31:47

is that the procedure division that

play31:49

actually specifies

play31:50

the computations is relatively

play31:53

weak so as i mentioned before

play31:57

there's a major reliance on english-like

play31:59

structures

play32:01

using words rather than operator symbols

play32:03

and this makes the code very verbose

play32:06

and there's also not support for a rich

play32:09

set

play32:10

of very powerful operations within the

play32:13

procedure division

play32:15

for example there was in the initial

play32:18

specification of the cobalt programming

play32:20

language

play32:21

no support for sub-programs that

play32:23

included parameters

play32:25

so a major focus on the description of

play32:29

data but less of a focus on

play32:30

sophisticated processing

play32:32

of that data so what i'd like you to do

play32:34

at this point is pause the video

play32:37

and consider why it was important for

play32:40

kobold to have support for such a

play32:42

detailed data division

play32:44

but why it wasn't that important for the

play32:46

procedure division

play32:48

to be as powerful

play32:52

now as i previously mentioned the us

play32:54

military had a lot of involvement

play32:56

in the early development of cobalt

play32:59

through the u.s

play33:00

department of defense or dod and in fact

play33:03

kobold was the very first programming

play33:05

language whose use was mandated by the

play33:08

department of defense

play33:10

and in fact cobalt probably would have

play33:12

failed as a

play33:13

programming language were it not for

play33:16

this military support

play33:18

the reason for this is that the first

play33:20

cobol compilers

play33:22

had very poor performance and this

play33:25

increased

play33:26

their cost of usage substantially

play33:29

however because the programming language

play33:30

was mandated by the department of

play33:32

defense

play33:33

this ensured that it had a user base and

play33:36

so slowly over time better and better

play33:38

compilers were developed

play33:40

and eventually when the department of

play33:42

defense dropped the mandate that ensured

play33:44

the usage of

play33:45

cobalt then the compilers were

play33:48

sufficiently good

play33:49

for the language to be more widely

play33:51

adopted

play33:53

today cobol is still probably the most

play33:55

widely used business application

play33:57

language according to some people this

play34:01

is a testament to

play34:02

how well designed the language is

play34:05

according to

play34:06

other people cobol is a relic of the

play34:08

past

play34:09

and is best forgotten i'll allow you to

play34:12

draw your own conclusions on this

play34:14

however

play34:17

the next high-level programming language

play34:19

that we'll very briefly consider

play34:21

is basic which stands for the beginner's

play34:24

all-purpose symbolic instruction code

play34:27

so we can immediately tell just by

play34:29

looking at the name of the programming

play34:31

language

play34:31

that it was intended for novice

play34:34

programmers

play34:35

basic was designed by kemeny and kurtz

play34:38

at

play34:38

dartmouth college which is now dartmouth

play34:40

university

play34:41

and dartmouth is a liberal arts campus

play34:44

meaning that it doesn't focus on the

play34:47

sciences

play34:48

or on engineering this means that the

play34:51

intended users of basic are very

play34:54

different

play34:55

to the users that previous programming

play34:58

languages were developed for

play35:00

and this meant that basic had a set of

play35:03

fairly unique design goals

play35:05

so firstly basic had to be easy to learn

play35:09

and use for non-science students and it

play35:12

also had to be

play35:13

pleasant and friendly to use

play35:16

so these two requirements indicate that

play35:18

the language could not be very technical

play35:21

it had to be fairly high level it had to

play35:23

be fairly user friendly

play35:25

the language had to be relatively

play35:27

stripped down and not

play35:28

very complex and it also

play35:32

then had to be usable by people without

play35:35

a very strong science

play35:37

or mathematical background basic

play35:40

also had to offer very fast turnaround

play35:43

for homework

play35:44

and this is a very important requirement

play35:46

which we'll get back to in a moment

play35:48

it also had to be free so in other words

play35:51

not

play35:52

tied to a particular vendor

play35:55

such as fortran was tied to ibm for

play35:59

example

play36:00

and it also had to offer private access

play36:02

so this meant

play36:04

that individual students had to be able

play36:06

to work on their homework work

play36:08

assignments

play36:08

on their own and they had to be able to

play36:12

do that without

play36:14

taking up resources from other students

play36:18

also then finally basic had to

play36:22

treat user time as much more important

play36:24

than computer time

play36:26

so this is in direct opposition to the

play36:28

design

play36:29

goals of fortran where the performance

play36:32

of the compiler

play36:34

was the most important thing

play36:37

so we can see then a very different

play36:40

focus area for basic compared

play36:42

to the scientific programming languages

play36:44

that had come before

play36:46

and to understand the development of

play36:49

basic and nature of basic we also then

play36:52

need to consider time

play36:53

sharing because time sharing and basic

play36:56

go

play36:56

hand in hand both were developed at the

play36:59

same time

play37:00

so this also then relates to the

play37:02

requirement for

play37:03

fast turnaround time and also private

play37:07

access so what we see is prior to time

play37:10

sharing usually the computers that we

play37:13

used were very powerful computers

play37:15

and they performed batch processing so

play37:18

this means that a programmer would write

play37:20

up their program they'd code their

play37:22

program onto typically punch cards

play37:25

which would then be loaded into the

play37:27

computer by an operator

play37:29

in a designated time slot and the

play37:31

program

play37:32

would then execute now this of course

play37:34

does not facilitate

play37:36

fast turnaround for homework and it also

play37:39

doesn't facilitate

play37:40

private access because of course as one

play37:43

user

play37:43

is running their program that prevents

play37:46

other users

play37:46

from running their programs

play37:50

so time sharing then addressed this

play37:53

problem

play37:53

by introducing the notion of a single

play37:57

powerful computer and then a number of

play38:00

terminals connected to that computer

play38:02

the terminals do not perform any major

play38:05

processing on their own they are

play38:06

essentially

play38:07

only input terminals so

play38:10

what this then means is that the central

play38:13

computer can then

play38:14

rotate through the users and allocate

play38:17

each user

play38:18

a small time block and this then gives

play38:21

the illusion to the user that they are

play38:23

interacting with the system in real time

play38:26

when in fact what they are doing is

play38:27

working in parallel with other users and

play38:30

everybody

play38:30

is sharing the central computers

play38:33

resources

play38:35

now what this then meant for basic was

play38:37

that users

play38:38

could use the time sharing system in

play38:42

parallel

play38:43

but also more importantly they could get

play38:46

real-time feedback

play38:47

on errors within their programs so no

play38:50

longer did you write this batch program

play38:52

wait for it to finish

play38:53

executing and then see that there were

play38:55

errors which you'd have to fix

play38:57

you could make a small change to your

play38:59

program re-run it

play39:01

look at further errors that had occurred

play39:03

correct those errors and continue that

play39:05

way in an iterative

play39:07

fashion so this was a very important and

play39:09

very powerful concept

play39:11

and this changed how high-level

play39:13

programming languages

play39:14

were used from this point on now basic

play39:18

in its original form is not really used

play39:20

today however there are some dialects of

play39:23

basic

play39:24

that do still exist and are fairly

play39:26

widely used today and the two most

play39:28

important of those are visual basic

play39:31

and vb.net which is part of the.net

play39:34

framework

play39:35

we won't be looking at basic in any

play39:38

further detail within this course

play39:40

and the language is more interesting in

play39:42

terms of the context that was developed

play39:45

in

play39:45

the kinds of programmers that it was

play39:47

developed for

play39:49

and its reliance on

play39:52

time sharing systems

play39:55

next we'll look at a programming

play39:57

language called pl1

play39:59

which is a shortening of the name

play40:02

programming language one

play40:04

now what we saw earlier on in this

play40:06

lecture is that algol 60

play40:09

was designed to be a programming

play40:11

language

play40:12

that was universal in the sense

play40:16

that it was a hardware independent

play40:18

programming language

play40:20

so in other words programs written in

play40:22

algol 60

play40:23

could be ported to other hardware

play40:25

platforms without

play40:26

too much trouble however at its core

play40:29

algol 60 was still a scientific

play40:32

programming language

play40:33

now pl1 also set out to be a universal

play40:37

programming language

play40:38

however it was intended to be universal

play40:42

in the sense that it could be applied to

play40:45

different programming domains and not

play40:48

just

play40:48

scientific computing so at the time

play40:52

the two main programming domains that

play40:55

were

play40:55

possible were scientific computing and

play40:58

business computing

play41:00

and pl one set out to be equally

play41:02

applicable

play41:03

in both of those programming domains

play41:07

so pl one then was developed at ibm it

play41:10

also

play41:10

involved share which was a user group

play41:14

for

play41:14

scientific computing at ibm and the user

play41:18

group

play41:18

essentially is a group of individuals

play41:22

who are all working within the same

play41:24

domain

play41:26

they would maintain discussion forums

play41:28

and mailing lists and so on

play41:30

in order to communicate with one another

play41:33

and help each

play41:34

other out with problems that they

play41:35

encountered

play41:37

so in the early 1960s then from ibm's

play41:41

perspective

play41:42

there were two main programming domains

play41:45

firstly scientific

play41:46

computing as i mentioned and business

play41:49

computing

play41:50

and what we see within those domains is

play41:52

that each of the domains had their own

play41:55

particular hardware platforms in terms

play41:57

of computers

play41:58

that they were using so in the case of

play42:01

scientific computing it was the ibm

play42:03

1620 computer and the 7090 computer

play42:08

in the case of business computing it was

play42:11

the ibm

play42:12

1401 computer and the 7080

play42:16

computer we also see then that each

play42:19

domain

play42:20

had its own particular programming

play42:22

language in the case of scientific

play42:24

computing it was fortran

play42:26

and cobol in the case of business

play42:28

computation

play42:30

and then finally each domain had its own

play42:33

particular user group which was

play42:35

share in the case of scientific

play42:36

computing and guide

play42:38

when it came to business computing so

play42:41

what we see essentially is that

play42:43

there was a separation that had

play42:46

developed between scientific computing

play42:48

and business computing

play42:49

both domains required very different

play42:53

tools and strategies they had their own

play42:56

particular hardware platforms their own

play42:58

programming languages

play43:00

and the kinds of users in these domains

play43:04

were very different and did not really

play43:06

talk with one another

play43:09

however in 1963 we begin

play43:12

seeing new demands arriving from

play43:16

both the field of scientific computing

play43:18

and

play43:19

business computing so scientific

play43:22

programmers

play43:22

were beginning to demand better input

play43:25

output support

play43:26

as was provided by the cobol programming

play43:29

language

play43:30

and business users were beginning to

play43:33

develop

play43:33

management information systems which

play43:36

then required more sophisticated

play43:38

computations and therefore support for

play43:41

floating point numbers and arrays which

play43:44

were provided by

play43:45

fortran so we sort of see a kind of a

play43:49

merging of the requirements of these two

play43:52

fields however there was then of course

play43:55

a problem that was developing within

play43:56

organizations so basically

play43:59

if you were in either one of these two

play44:02

domains and you needed to then

play44:04

support these additional requirements

play44:06

that were developing it meant that an

play44:08

organization would have to maintain

play44:10

two different sets of computers as well

play44:13

as two different sets of programming

play44:15

languages

play44:16

and then two separate sets of support

play44:18

staff

play44:19

and this was obviously turning out to be

play44:22

very expensive

play44:23

and in general it was becoming too

play44:25

expensive for most

play44:27

companies and organizations to handle

play44:30

so the obvious solution to this at least

play44:32

from ibm's perspective

play44:33

was to build a new computer that was

play44:36

applicable

play44:37

to both the domains of scientific

play44:40

computation

play44:40

and business computation and this was

play44:43

the ibm

play44:44

system 360 line of computers

play44:48

then of course they needed a new

play44:50

programming language that was applicable

play44:52

to

play44:53

both application areas both scientific

play44:55

and business

play44:56

computing but in addition then just to

play44:59

cover all of their bases they decided to

play45:01

throw in

play45:02

systems programming as well so

play45:04

essentially systems programming involves

play45:07

the development

play45:08

of operating systems

play45:11

which we spoke about in the first

play45:13

chapter

play45:14

and then they also decided to

play45:16

incorporate list processing which you

play45:19

would typically see

play45:20

in artificial intelligence applications

play45:23

of the day

play45:25

the design process for pl one ran over

play45:29

five months still a fairly short design

play45:32

timeline however we can see that

play45:35

the programming language designers had

play45:38

realized

play45:38

that the specification of a programming

play45:41

language

play45:42

should take longer than around six days

play45:45

which was

play45:46

the case for algol 60. so the design was

play45:50

conducted by what was called the three

play45:52

by three committee and this was because

play45:55

three of the members of the committee

play45:57

came from ibm

play45:58

and three of the members came from the

play46:01

share user group so you can see

play46:03

involvement of the people who were

play46:06

actually going to be using

play46:08

the programming language the initial

play46:10

concept behind pl1 was that it would be

play46:13

an extension

play46:14

of fortran four which would be called

play46:16

fortran six

play46:17

but they fairly quickly realized that

play46:20

this was

play46:20

a fairly large and complex task

play46:24

and therefore they fairly

play46:28

shortly after this initial idea

play46:30

refocused their efforts into developing

play46:32

an entirely

play46:33

new programming language the language

play46:36

was initially named

play46:37

npl the very creatively named new

play46:40

programming language

play46:42

however fairly shortly after that the

play46:44

name was changed to

play46:46

pl1 and this happened in 1965.

play46:51

now if we evaluate the pl1 programming

play46:54

language

play46:55

what we see is that it introduced a

play46:58

number

play46:58

of very important very revolutionary

play47:00

features

play47:02

which are still used today in modern

play47:05

high-level programming languages

play47:07

we also see that the programming

play47:09

language was reasonably widely used at

play47:12

least

play47:12

initially however from a programming

play47:15

language design perspective

play47:17

the language was a bit of a failure

play47:20

so if we look first at all at pl1's

play47:22

major contributions

play47:24

we see that the language introduced the

play47:27

very first unit level concurrency

play47:30

so essentially allowing different

play47:32

portions of the program to execute

play47:34

concurrently and then from a user's

play47:37

perspective

play47:38

it would appear as if these units were

play47:41

executing at the same time of course

play47:43

what was actually happening behind the

play47:44

scenes

play47:45

was that the computer's processor was

play47:47

switching back and forth between the

play47:49

tasks that were running concurrently

play47:52

pl1 also introduced the very first

play47:54

exception handling

play47:56

mechanism for recovering from errors

play47:59

and we see that this idea has been

play48:01

developed further in modern programming

play48:03

languages like java

play48:04

and c-sharp and we also see that pl one

play48:08

introduced the very first pointer data

play48:11

type

play48:11

also very important contribution now

play48:14

with these three contributions

play48:16

concurrency support for exception

play48:18

handling and the pointed data type

play48:21

while these ideas were very important

play48:23

and influenced

play48:24

subsequent programming languages these

play48:27

three features were not

play48:28

implemented very well their design

play48:31

lacked

play48:32

somewhat and they weren't very usable

play48:35

however very

play48:36

important ideas that were introduced pl1

play48:39

also supported the very first array

play48:42

cross

play48:43

sections now we'll talk about array

play48:45

cross sections later on in the course

play48:48

in the context of array slicing but

play48:51

essentially what cross sections allow

play48:53

you to do is to retrieve

play48:55

a portion of an array or a portion of a

play48:58

multi-dimensional

play48:59

array structure which means that that

play49:02

portion is then more manageable to work

play49:04

with from a programmer's perspective

play49:07

also very interestingly pl one supported

play49:10

recursion

play49:11

but recursion was switch selectable

play49:14

so what this meant was you could choose

play49:16

to disable recursion

play49:18

and in that case you would then have

play49:20

less flexibility

play49:22

because you wouldn't be able to write

play49:24

recursive sub

play49:25

programs however when your program was

play49:28

compiled to an executable

play49:31

then this executable would be much more

play49:33

efficient in terms of execution time

play49:36

so essentially this allowed the

play49:38

programmer to decide whether they wanted

play49:40

more flexibility at the expense of

play49:43

performance

play49:44

or vice versa and in this respect the

play49:47

pl1 programming language

play49:49

was very flexible from a programmer's

play49:52

perspective

play49:53

however there were two major concerns

play49:56

when it came to the language design

play49:58

of pl1 so firstly as we've just

play50:01

seen a number of the features introduced

play50:03

in the programming language were poorly

play50:05

designed and very difficult

play50:07

to use but most importantly

play50:10

the programming language was very large

play50:13

and very complex

play50:15

and this was because the design

play50:17

philosophy of pl1

play50:19

was to incorporate every possible

play50:22

structure

play50:22

from the domain of scientific computing

play50:26

as well as the domain of business

play50:27

computing

play50:29

and any feature that was potentially

play50:31

useful

play50:32

was crammed into the programming

play50:34

language so essentially the strategy was

play50:37

to include

play50:38

everything and the kitchen sink and then

play50:41

also

play50:42

a number of new features were introduced

play50:45

by the programming language

play50:46

so what this meant then was a very

play50:48

complex programming language

play50:50

it was virtually impossible for

play50:52

programmers of the day

play50:53

to fully understand all of the features

play50:56

provided by

play50:57

the programming language and we'll get

play51:00

to how this approach was then handled in

play51:04

a different way in algol

play51:07

68 which made algol 68 a much more

play51:10

manageable

play51:11

programming language the last

play51:15

two programming languages that we will

play51:16

consider in this lecture

play51:18

are the apl or apple programming

play51:21

language

play51:22

and the snowball programming language

play51:24

note that the name

play51:26

of the second programming language is

play51:28

pronounced snowball

play51:30

not snowball so both of these languages

play51:33

they're not characterized as dynamic

play51:35

languages

play51:36

and as we'll see later on in this course

play51:39

dynamic

play51:39

languages or languages that incorporate

play51:42

features

play51:43

that execute at run time

play51:46

so both of these languages are

play51:48

considered dynamic because they both

play51:50

provide dynamic typing and dynamic

play51:53

storage allocation

play51:55

and essentially what this means then is

play51:58

that both

play51:58

the type of a variable as well as the

play52:01

storage allocation in memory

play52:03

for that variable are decided at

play52:06

runtime only when a value is assigned

play52:10

to that variable so this is a very

play52:13

flexible feature within a high-level

play52:15

programming language it's also

play52:17

potentially a fairly dangerous feature

play52:19

and we see dynamic type binding and

play52:22

dynamic storage

play52:23

allocation is supported in quite

play52:26

a number of modern high-level

play52:29

scripting languages dynamic storage

play52:31

allocation

play52:32

is also supported in languages that

play52:35

don't support

play52:36

dynamic typing for example we see its

play52:39

support

play52:40

in languages like c plus as well as java

play52:44

and c but we'll speak about these

play52:46

concepts in more detail

play52:48

later on in the course let's first of

play52:52

all

play52:52

look at the apl or apple programming

play52:55

language in some more detail

play52:57

the name of the language is an

play52:59

abbreviation of a programming language

play53:01

so again you can see a very creative

play53:04

title for this

play53:05

programming language and a programming

play53:07

language was actually the name

play53:09

of the book in which the language was

play53:12

specified and described

play53:14

the language was designed at ibm by ken

play53:18

iverson

play53:18

around 1960 and it was originally

play53:21

intended to be

play53:22

a hardware description language however

play53:24

its use

play53:25

fairly quickly expanded beyond that

play53:28

domain

play53:29

now it's generally considered to be a

play53:31

very expressive programming language

play53:33

and the reason for this is it has a very

play53:36

large set

play53:36

of very powerful operators and these

play53:39

operators

play53:40

work for scalar values as well as array

play53:43

values

play53:44

with various dimensions

play53:47

and so to give you an idea there is for

play53:50

example

play53:51

a single operator that can perform a

play53:53

matrix inversion there's also an

play53:55

operator

play53:56

to transpose a matrix and there's

play53:59

an operator for performing a product

play54:02

between matrices so a very powerful set

play54:06

of operators

play54:07

very useful operators and therefore you

play54:10

can write

play54:11

fairly complex programs relatively

play54:14

compactly

play54:17

however and of course opinion differs on

play54:19

this between programmers but in general

play54:22

most programmers would say that an apl

play54:25

or apple program is fairly difficult to

play54:28

read and again this is because

play54:29

of the large set of operators that one

play54:32

has to keep track of

play54:34

there are in fact so many operators in

play54:36

apl

play54:37

that there are not sufficient symbols

play54:41

on a standard keyboard to support all of

play54:43

those operators

play54:45

and in the next two slides i'll show you

play54:47

some examples of the operators as well

play54:49

as

play54:50

programs written in the apl or apple

play54:53

programming language

play54:55

the language is still used today it's by

play54:57

no means a very widely used language

play55:01

but it hasn't been changed much from its

play55:04

original

play55:04

specification

play55:08

so over here we have some additional

play55:10

material that i dug

play55:11

up just to illustrate the nature of the

play55:14

apl

play55:15

or apple programming language on the top

play55:18

left we have

play55:19

a picture of an ibm's electric

play55:21

typewriter which was a very popular

play55:24

electric typewriter in the 1960s

play55:28

next to that there is a print ball so

play55:31

printables were basically elements

play55:35

that contained a character set

play55:38

and you could purchase different

play55:39

printables for different application

play55:42

areas you'd actually have to then

play55:44

purchase a print ball specifically

play55:46

designed

play55:48

for the operator symbols that were used

play55:51

by the

play55:52

apl programming language

play55:55

on the far right we have the ibm 2741

play55:59

computer terminal and this was

play56:01

essentially

play56:02

a computer terminal with an ibm's

play56:05

electric

play56:06

typewriter attached to it

play56:09

and this would have been the terminal

play56:11

that was initially

play56:13

used when one was programming in the apl

play56:17

language at the bottom we have an

play56:20

example

play56:20

of a keyboard overlay

play56:23

for the programming language and this is

play56:27

what one would need to use

play56:28

on a modern computer so you can see

play56:31

we've got

play56:32

a variety of non-standard symbols for

play56:34

example

play56:35

we have triangles over there

play56:38

we have a square element we have arrows

play56:42

and we even have some greek characters

play56:45

over there so these are all character

play56:48

symbols that would be used for

play56:50

operators within the apl programming

play56:53

language

play56:54

and today one would have to purchase a

play56:57

keyboard overlay

play56:59

to label the keys appropriately so that

play57:01

you can actually write programs

play57:03

in the language so this gives you an

play57:06

idea of the kinds of symbols that one

play57:08

would have within

play57:10

an apl program and on the next slide

play57:13

i'll show

play57:13

some examples of programs written using

play57:17

these symbols

play57:20

so over here i have found three examples

play57:23

of simple programs written in the apl

play57:26

or apple programming language the first

play57:29

program

play57:30

sorts a list of words according to word

play57:33

length

play57:34

the second program is somewhat more

play57:37

complicated

play57:38

and so it generates six non-repeating

play57:41

pseudo-random integer values

play57:43

between 1 and 40 and then it prints

play57:45

these random values out

play57:47

in ascending order and you can see that

play57:50

this program is actually shorter than

play57:54

the previous program the last program

play57:58

finds all of the prime numbers from 1

play58:02

to r so what we can see then

play58:05

is that the programs are incredibly

play58:08

short they consist of very few

play58:11

characters and you can actually

play58:13

construct

play58:14

fairly complex programs that would be

play58:17

much longer in a fully featured

play58:20

traditional high-level programming

play58:22

language

play58:24

so this means in general that apl or

play58:26

apple programs are considered to be very

play58:29

writable

play58:30

simply because you have fewer characters

play58:32

that you need

play58:33

to construct a fairly complex program

play58:37

however in general and again opinion

play58:39

does differ on this but

play58:41

in general the apl or apple programming

play58:44

language is considered to have

play58:46

very poor readability and the reason

play58:49

again for this

play58:50

is that the programs are so incredibly

play58:53

compact

play58:54

and therefore fairly difficult to

play58:56

decipher

play58:57

so in general apl or apple programs

play59:00

are usually considered to be right once

play59:03

and forget

play59:04

programs it's very difficult to debug

play59:06

them so typically a programmer will just

play59:08

throw one together for a specific task

play59:11

and if that task needs to be adapted

play59:13

then usually the program would be

play59:15

rewritten from scratch again

play59:18

the second dynamic language that we'll

play59:21

consider and also the last programming

play59:23

language that we'll talk about in this

play59:25

lecture

play59:26

is snowball so snowball is a bit less

play59:29

interesting than the apl or apple

play59:32

programming language

play59:34

and it was designed at bell labs by

play59:36

faber

play59:37

griswold and polinski also in the early

play59:40

1960s

play59:41

specifically 1964. so snowball

play59:45

is a string manipulation language it's

play59:47

intended for

play59:48

text processing and it has a number of

play59:52

fairly powerful operators

play59:53

for string pattern matching now this was

play59:57

a reasonably revolutionary idea at the

play60:00

time

play60:01

these days most programming languages

play60:03

for string pattern matching

play60:05

will use the regular expression standard

play60:09

now snowball didn't use regular

play60:11

expressions it used its own

play60:14

custom notation for string pattern

play60:16

matching

play60:18

initially it was intended for use for

play60:20

writing text editors and its strength is

play60:23

still in text manipulation string

play60:27

pattern matching

play60:28

and that sort of thing however it's much

play60:30

slower than

play60:32

other languages in the sense and

play60:34

therefore it isn't very

play60:36

widely used for this purpose anymore it

play60:39

is however still used today

play60:41

for certain text processing tasks but

play60:44

its use is

play60:45

fairly limited all right so

play60:48

that then concludes um the second

play60:51

lecture on chapter two

play60:52

we will be moving on then in the third

play60:54

lecture to the last

play60:56

few remaining programming languages that

play60:59

we will be talking about within this

play61:01

chapter

play61:02

there are quite a number of languages

play61:03

that we'll cover but we won't be going

play61:05

into as much detail

play61:07

for each programming language

Rate This
โ˜…
โ˜…
โ˜…
โ˜…
โ˜…

5.0 / 5 (0 votes)

Related Tags
Programming LanguagesHistory of ComputingHigh-Level LanguagesAlgol 60COBOLBASICPL/1APLSnowballLanguage DevelopmentEducational ToolsScientific ComputingBusiness ApplicationsIBM SystemDynamic TypingText ProcessingString ManipulationConcurrencyException HandlingPointer Data Type