High-level Languages
Assembly language benefits Hides details of hardware
Assembly language benefits Hides details of hardware Easier to remember instruction names
Assembly language benefits Hides details of hardware Easier to remember instruction names A tiny step closer to how humans think
Assembly language benefits Hides details of hardware Easier to remember instruction names A tiny step closer to how humans think Assembly language is a useful level of abstraction from the bare hardware
Assembly language benefits Hides details of hardware Easier to remember instruction names A tiny step closer to how humans think Assembly language is a useful level of abstraction from the bare hardware Assembly language programs must be "assembled" into machine language executables.
Assembly Language issues Still tied directly to the machine language instruction set
Assembly Language issues Still tied directly to the machine language instruction set Most machine language instructions do only a tiny amount of work
Assembly Language issues Still tied directly to the machine language instruction set Most machine language instructions do only a tiny amount of work Humans solve problems at a higher level, using much larger steps
Example For each value I read in from a file If the value is negative, then add it to the list of expenditures Otherwise add it to the list of income (This is pseudo-code, like the way we write textual storyboards)
High-level languages Def: a programming language that provides statements that are a closer match to the way humans solve problems than assembly language. Why can't we just write programs in English (or any other spoken language)?
Examples COBOL – business application language FORTRAN – scientific application language BASIC, Pascal – teaching languages Ada – designed and used for US military software Smalltalk – early object-oriented language C, C++ - systems/general purpose languages
Can a program in a high-level language be executed on a computer?
High-level language translation compiler – a program that translates a program written in a particular high level language into another form. What form should a compiler output?
Compiled languages High level languages that are translated into a machine language executable are called "compiled languages." Executables might be called "native code."
HLL correspondence to AL Benefit of HLL is being able to work in "bigger steps." One HLL statement might translate to many AL/ML instructions
HLL correspondence to AL Benefit of HLL is being able to work in "bigger steps." One HLL statement might translate to many AL/ML instructions Java statement sum = sum + value;
HLL correspondence to AL Benefit of HLL is being able to work in "bigger steps." One HLL statement might translate to many AL/ML instructions Woody equivalent CopyFrom sum Add value CopyTo sum Java statement sum = sum + value;
Hierarchy of abstraction High-level lang. program Language closest to "how humans think." Input for compiler Compiler Assembly language program Assembler Machine language program
Hierarchy of abstraction High-level lang. program Translates programs from a specific HLL into a particular architecture's assembly language. Compiler Assembly language program Assembler Machine language program
Hierarchy of abstraction High-level lang. program Compiler Assembly language program "Human readable" form of a particular architecture's machine language. Input for assembler. Assembler Machine language program
Hierarchy of abstraction High-level lang. program Compiler Assembly language program Translates a particular architecture's assembly language into that archi- tecture's machine language. Assembler Machine language program
Hierarchy of abstraction High-level lang. program Compiler Assembly language program Assembler Machine language program Binary form executable version of program.
Interpreted Languages Interpreter – a program that can execute high-level language programs "directly," without first being translated to machine language. Code in the interpreter emulates the circuitry that understands how to carry out each machine language instruction. Some are "scripting" languages, used to stitch together existing executables to perform higher level tasks.
Examples TCL/TK Python Windows Batch files/Windows Scripting Host Perl PHP – web scripting language
Compiled vs. interpreted Compiled execution Hardware follows instruction cycle for each machine language instruction in the executable Interpreted execution Interpreter translates HLL statement, then imitates hardware to execute it.
Interpreted pros and cons
"Hybrid" languages Goal: High Level Language with platform-independent executable format, performance close to compiled languages. How?
Examples Java – originally intended for set-top TV/Video boxes, widely used on the web C# - Supported by MS .Net platform, their answer to Java
How it works Source program is compiled to an intermediate form – byte code Byte code is the assembly language for an imaginary architecture For each supported platform, write a "virtual machine" emulator that reads byte code and emulates its execution.
Java source program Java compiler Java byte code Java Virtual Machine Java Virtual Machine Java Virtual Machine Java Virtual Machine Wintel Hardware Sun Hardware IBM Hardware Mac Hardware
web request web request web request Web server Java Virtual Java Machine Applet Java Virtual Machine Applet Java Virtual Machine Applet web request web request web request HTML HTML Java Applet Java Applet Java Applet HTML Web server
"Just In Time" compilation JVMs actually compile each bytecode instruction to native code the first time it is used. Subsequent executions of that instruction are faster. Why would the same instruction be used again?
Computer Systems A computer system is the combination of hardware and operating system An operating system is the software that controls the overall operation of the computer, managing the processor, memory, files and attached devices
Computer System examples PC – MS Windows OS running on Intel CPU Mac – Mac OS running on IBM or Intel CPU Linux – Linux OS running on Intel CPU Unix – Unix OS running on various hardware platforms IBM – OS/400 running on IBM servers