Code-Reuse
A Historic Perspective
Yingcai Xiao
Want to know?
What is a computer? (From a programmer’s
point of view).
Why we have to write programs to run a
computer?
Why an error in a program is called a bug?
Why there are so many programming
languages?
How do those languages support code reuse?
Programming a Computer
Programming a Computer
Types of Computers
Analog: Analog Device, 1.2345678
Digital: Binary Device, 0 or 1
Programming a Computer
Wiring: Hardware, Bug, Ada
Coding: Software
Modern Computers: Voneumann Machines
•
Run stored programs (code reuse) to process stored
data.
•
Components: Memory, IO, CPU, Secondary Storage.
What is a program and what is programming?
Programs:
stored instructions for data processing.
Programming
= Data Structures + Algorithms
Professor Donald E. Knuth
http://www-cs-faculty.stanford.edu/~knuth/
What is a program from a computer’s point of view?
Programs:
• Stored binary opcodes
• Different types of computers have
different opcodes
• Opcodes are not reusable on different
types computers
• Programs in binary codes are not reusable
on different types of computers
How data are stored on a computer?
Bits (0/1) and bytes (0-255):
0 0 0 0 0 0 1 0
Short Int (2 bytes):
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
Endian (byte ordering):
little (Intel), big (Moterola, Sun),
bi (DEC Alpha, MIPS),
big-to-bi (Sun SPARK v9)
Is data reusable?
Is data saved on one type of computers reusable on
another type of computers?
No, in general.
Yes, for ASCII text
or any type of a byte in size.
ASCII text (ISO/IEC 8859-1) is platform-independent.
0 1 0 0 0 0 0 1
‘A’ (65)
What is a program and what is programming?
Programs:
stored binary opcodes
Punch Card Programming:
punch card machines
converts instructions
typed into binary codes
(0 no hole, 1 hole) on a
stack of cards.
Programming Languages
Assembly Languages
• English-like: load, add, save
• Assembler: a program that translates code written in an
assembly language into opcodes.
• Assembly languages are machine-dependent. An
assembly language is only valid for a specific CPU
architecture.
• Programs written in an assembly language are
machine-dependent and not reusable on a different
types of CPU architectures.
High-level Programming Languages
• English-like: if, for, switch, …
• Compiler: a program that translates code written in a
high-level programming language into opcodes. The
input is called the source code and output is called the
object code (.obj).
• Linker: a program that links object codes together to
make an executable (.exe).
• Object-codes and executables are machine-dependent.
• High-level languages are machine-independent.
High-level Programming Languages
• Object codes (from different high-level programming
languages) can be put together to make a library (.lib).
• Binary codes are reusable as libraries on computers of
the same architecture. (compile-time sharing).
• Libraries and object files on a computer are linked
together to form an executable. (compile-time sharing
of binary code).
• A dynamically-linked library (.dll) can be shared by all
programs on the same computer and by all the running
processes on the same computer (run-time sharing).
• Libraries (.lib and .dll) are machine-dependent.
High-level Programming Languages
• To use a library, one needs to include the header files
(.h) for the library in the source code.
• The header files contain the header (not the
implementation) of user defined data types and related
methods (functions), i.e., describe what’s in the library.
• The compiler use the information in the header files
to make type checking.
• Before compilation, the preprocessor of the compiler
copies everything in the header files into the source
code and generate an intermediate (.I) file.
High-level Programming Languages
• Source codes written in a high-level programming
language are reusable on different types of
computers.
• Binary codes (.obj, .lib, .dll, .exe) compiled from a
high-level programming language are reusable on
the computers of the same architecture but not
reusable on computers of different architecture.
Traditional Compilation
Source File (.cpp)
Preprocessing
Intermediate File (.I)
Compilation
Object File (.obj)
Linking
Binary File (.exe)
Common Binary Code?
(Binary Code Reuse Cross System Architectures)
Traditional Compilation
Source Code for Language 1
Source Code for Language 1
Language 1 Compiler on OS1
Language 1 Compiler on OS2
Binary Code for OS1
Binary Code for OS2
OS1
OS2
OS-Independent Code:
Intermediate Languages
The trend to support machine-independent
binary code is to compile the source code into the
binary format of an intermediate language.
And to provide an interpreter for the
intermediate language on each OS to translate the
binary code of the intermediate language into the
native binary code of the OS.
OS-Independent Compilation: Intermediate Language
Source Code for Language 1
Language 1 Compiler on OS1
Language 1 Compiler on OS2
Intermediate Binary Code for Language1
Intermediate Code Interpreter OS1
Intermediate Code Interpreter OS2
Binary Code for OS1
Binary Code for OS2
OS1
OS2
Java Intermediate Language: Java Bytecode
Java Source Code (.java)
Java Compiler (javac) on OS1
Java Compiler (javac) on OS2
Java Bytecode (.class)
Java Interpreter on OS1 (java)
Java Interpreter on OS2 (java)
Binary Code for OS1
Binary Code for OS2
OS1
OS2
Program statements are interpreted one at a time during the run-time.
JIT Compiler
An interpreter interprets intermediate code one
line at a time. Slow execution.
A JIT (Just-In-Time) compiler compiles the
complete code all at once just into native binary
code before execution. Faster execution.
JIT Complier: Java Bite Code Compiler
Java Source Code (.java)
Java Compiler (javac) on OS1
Java Compiler (javac) on OS2
Java Bytecode (.class)
Java JIT Compiler on OS1
Java JIT Compiler on OS2
Binary Code for OS1
Binary Code for OS2
OS1
OS2
All programming statements are compiled at compile time.
MSIL: Microsoft Intermediate Language (Used by .NET)
Source Code for Language 1
Language 1 Compiler on OS1
Language 1 Compiler on OS2
MSIL Code
MSIL JIT Compiler on OS1
MSIL JIT Compiler on OS2
Binary Code for OS1
Binary Code for OS2
OS1
OS2
.NET OS-Platform-Independence
JIT Compilation in .NET
All MSIL code are JIT-compiled to native binary
code before execution. No run-time interpretation,
faster execution.
A Common Language?
(Source Code Reuse Cross Languages)
.NET CTS/CLR
.NET Common Language Runtime
To make .NET language independent, CLR (Common
Language Runtime) is defined as the runtime
environment.
CLR defines CTS (Common Type System) which
should be followed by all languages to be used in the
.NET framework.
The code that follows CTS standard and runs through
CLR is called managed code.
Ex. multiple inheritance is allowed in C++ but not
allowed in Managed C++ since CTS doesn’t support it.
CLR: Common Language Runtime
Source Code for Language 1
Source Code for Language 2
Language 1 Compiler on OS1
Language 2 Compiler on OS2
MSIL Code Confirming CTS (Managed Code)
CLR on OS1
CLR on OS2
Binary Code for OS1
Binary Code for OS2
OS1
OS2
.NET Language-Independence
.NET Architecture for Language and Platform Independence
(fan-in and fan-out on MSIL)
Source Code for Language 1
Source Code for Language 2
Language 1 Compiler on OS1
Language 2 Compiler on OS2
MSIL Code Confirming CTS (Managed Code)
CLR for OS1
CLR for OS2
Binary Code for OS1
Binary Code for OS2
OS1
OS2
CLI (Common Language Infrastructure)
CLR/CTS for Everyone?
CLI : Common Language Infrastructure
A specification defines an environment for multiple
high-level languages to be used on different computer
platforms.
Created by Microsoft based on .NET, standardized by
MS, Intel, HP and others, ratified by ECMA and ISO.
.NET is an implementation of CLI for desktop systems.
.NET Compact Framework is an implementation of CLI
for portable devices.
Open Source implementations: Mono development
platform (Novell), Portable .NET (dotGNU)
CLI (Common Language Infrastructure) Specification
Open Architecture for Language and Platform Independent Programming
Source Code for Language 1
Source Code for Language 2
Language 1 Compiler on OS1
Language 2 Compiler on OS2
CIL (Common Intermediate Language) Code
Confirming CTS (Common Type System)
CLR for OS1
CLR for OS2
Binary Code for OS1
Binary Code for OS2
OS1
OS2
Run-time Binary Code Sharing
Cross the Internet
Web Services
Libraries shared over the Internet at run-time.
Service interfaces specify what the services can
do (contracts).
Service interfaces are defined in WSDL (Web
Service Description Language)
UDDI Registry: Universal Description,
Discovery, and Integration. (yellow page)
Access Standard:
SOAP: Simple Object Access Protocol
Architecture of Web Services
Programming
Client 1
UDDI Registry 2
SOAP
Programming
UDDI Registry 1
Client 2
Web Service 1
WSDL Interface 1
Web Service 2
WEB
SOAP
WSDL Interface 2
Web Service Example
.NET Passport (one login for the whole Internet)
www.passport.com (run by Microsoft)
www.ubid.com (An online auction shop using
Passport web service)
Windows Live (one location to get all you need
from the Internet)
http://get.live.com/ (run by Microsoft)
Windows Live ID is replacing Passport ID.
Code Reuse Tools by Microsoft
MFC: code reuse within an application (process)
COM: Component Object Model, code reuse
across applications (processes)
DCOM: Distributed COM, code reuse across
systems
COM+: Internet-based Enterprise COM, code
reuse across the Internet
.NET: COM+ 2.0, all COM+ services are
available in .NET, even those not in managed
code, interoperable with COM-based applications
A Common Language for the Internet?
A Common Language for the Internet
ASCII text (ISO/IEC 8859-1) is platform-independent.
Tim Berners-Lee
=> HTTP (Hyper Text Transport Protocol)
=> HTML (Hyper Text Markup Language)
=> Everything is presented as text including data and programs.
=> Recognizable by all types of computers. (World Wide Web)
A Common Language for the Internet
=> XML (eXtensible Markup Language), HTML-based
=> WSDL (Web Service Description Language), HTML-based
=> SOAP (Simple Object Access Protocol), HTML-based
Descargar

Applet Graphical User Interface Event