Download presentation
Published byGrant Norton Modified over 9 years ago
1
Lecture 17 Modern Programming Trends JVM, C#, .NET
Programming Language Concepts Lecture 17 Modern Programming Trends JVM, C#, .NET
2
From Source Code to Executable Code
program gcd(input, output); var i, j: integer; begin read(i, j); while i <> j do if i > j then i := i – j; else j := j – i; writeln(i) end. Compilation Compiler translate high-level source program intro an equivalent target program
3
Phases of Compilation The first three phases are language-dependent
The last two are machine-dependent The middle two dependent on neither the language nor the machine
4
Example program gcd(input, output); var i, j: integer; begin
read(i, j); while i <> j do if i > j then i := i – j; else j := j – i; writeln(i) end.
5
Example Syntax Tree and Symbol Table
6
Phases of Compilation Intermediate code generation transforms the abstract syntax tree into a less hierarchical representation: a control flow graph
7
Example Control Flow Graph
Basic blocks are maximal-length set of sequential operations Operations on a set of virtual registers Unlimited A new one for each computed value Arc represents interblock control flow
8
Phases of Compilation Machine-independent code improvement performs a number of transformations: Eliminate redundant loads stores and arithmetic computations Eliminate redundancies across blocks
9
Phases of Compilation Target Code Generation translates blocks into the instruction set of the target machine, including branches for the arc It still relies in the set of virtual registers
10
Phases of Compilation Machine-specific code improvement consists of:
Register allocation (mapping of virtual register to physical registers and multiplexing) Instruction scheduling
11
Compilation Passes Why are compilers divided in passes?
Sharing the front-end among the compilers of more than one machine Sharing the back-end among the compilers of more than one language Historically, passes help reducing memory usage
12
Intermediate Forms Front-end and back-end are linked using an abstract representation known as the Intermediate Format (IF) They classified according to their level of machine dependence High-level IFs are usually trees or directed graphs that capture the hierarchy of the program They are useful for machine-independent code improvement, interpretation and other operations
13
Intermediate Forms Stack-based Language
Stack-based language are another type of IFs E.g. JVM, Pascal’s P-code They are simple and compact They resemble post-order tree enumeration Operations Take their operands from an implicit stack Return their result to an implicit stack These languages tend to make language easy to port and the result code is very compact Ideal for network transfer of applets
14
The Java Virtual Machine
Java Architecture Java Programming Language Java Virtual Machine (JVM) Java API We will use the JVM as a case study of an intermediate program representation
15
The Java Programming Environment
16
The Java Platform The byte code generated by the Java front-end is an intermediate form Compact and Platform-independent
17
The Role of the Virtual Machine
Local or Remote
18
Dynamic Class Loading You don't have to know at compile-time all the classes that may ultimately take part in a running Java application. User-defined class loaders enable you to dynamically extend a Java app at run-time As it runs, your app can determine what extra classes it needs and load them Custom loaders can download classes across a network (applets), get them out of some kind of database, or even calculate them on the fly.
19
The Execution Engine Back-end transformation and execution
Simple JVM: byte code interpretation Just-in-time compiler Method byte codes are compiled into machine code the first time they are invoked The machine code is cached for subsequent invocation It requires more memory Adaptive optimization The interpreter monitors the activity of the program, compiling the heavily used part of the program into machine code It is much faster than simple interpretation
20
The Java Virtual Machine
21
Shared Data Areas Each JVM has one of each:
Method area: byte code and class (static) data storage Heap: object storage
22
Thread Data Areas Frame in Execution
23
Stack Frames Stack frames have three parts: Local variables
Operand stack Frame data
24
Stack Frame Local Variables
class Example { public static int runClassMethod(int i, long l, float f, double d, Object o, byte b) { return 0; } public int runInstanceMethod(char c, double d, short s, boolean b) {
25
Stack Frame Operand Stack
Adding 2 numbers iload_0 iload_1 Iadd istore_2
26
Stack Frame Frame Data The stack frame also supports
Constant pool resolution Normal method return Exception dispatch
27
Stack Frame Frame Allocation in a Heap
class Example { public static void addAndPrint() { double result = addTwoTypes(1, 88.88); System.out.println(result); } public static double addTwoTypes(int i, double d) { return i + d;
28
Stack Frame Native Method
A simulated stack of the target language (e.g. C) is compared.
29
The Heap Class instances and array are stores in a single, shared heap
Each Java application has its own heap Isolation But a JVM crash will break this isolation JVM heaps always implement garbage collection mechanisms
30
Heap Object Representation
31
The Heap Object Representation
32
The Heap Memory/Speed Tradeoff
33
Reference The content of this lecture is based on Inside the Java 2 Virtual Machine by Bill Venners Chapter 1 Introduction to Java's Architecture Chapter 5 The Java Virtual Machine Interactive Illustrations
34
C# and .NET In 2000, Microsoft releases a new language, C#, heavily influences by Java and C++ Is there anything new from the programming languages point of view? Microsoft is making it the key stone in their new development strategy (.NET) Big bucks… big evil…
35
Hello World Java C# public class HelloWorld { public static void main(String[] args) { System.out.println(“Hello world!"); } } class HelloWorld { static void Main(string[] args) { System.Console.WriteLine(“Hello world!"); } }
36
Framework Class Libraries Common Language Runtime
Motivation for C# .NET New development framework that promises to simplify Windows programming COM/DCOM is hard to learn Heavy on component orientation Language independence run-time system Common Language Run-time (CLR) C# programs VB .NET Framework Class Libraries Common Language Runtime Windows
37
Common Language Runtime
It can execute .NET program in an intermediate representation, the Common Language Interface (CLI) CLR is designed to work well in a multi-language environment Java Virtual Machines is rather Java-oriented CLR is supposed to work well with imperative programming languages (e.g., C, Pascal) and statically typed object oriented languages (e.g., C#, Eiffel) Many language have compilers for CLR at different stages of development, including Python, Perl, Scheme, Haskell, Prolog,…
38
Motivation for C# Rapid application development (RAD)
Visual development tools/languages such as Visual Basic and Delphi, are very popular and useful C# is optimized for such development model Platform-independence CLR and CLI Access to platform-native resources A more direct approach than the one taken by Java Native Interface (JNI)
39
C# Syntax Comparison with Java
If/then/else Java C# int i = 0; if (i == 0) { i = 1; } else { i = 2; } int i = 0; if (i == 0) { i = 1; } else { i = 2; }
40
C# Syntax Switch C# Java int i = 0; switch (i) { case 0:
break; case 1: i = 2; break; default: i = -1; break; } int i = 0; switch (i) { case 0: i = 1; break; case 1: i = 2; break; default: i = -1; break; }
41
C# Syntax While Do/While C# Java int i = 0; while (i++ < 10) { }
int i = 0; do { } while (i++ < 10); int i = 0; do { } while (i++ < 10);
42
C# Syntax foreach Java import java.util.Vector; public static int sum(Vector v) { int sum = 0; for (int j = 0; j < v.size(); j++) { Integer i = (Integer)v.elementAt(j); sum = sum + i.intValue(); } return sum; } C# using System.Collections; static int SumList(ArrayList theList) { int sum = 0; foreach (int j in theList) { sum = sum + j; } return sum; }
43
C# Syntax Break/Continue Return Java C#
int i = 0; while (i++ < 10) { if (i < 5) continue; break; } int i = 0; while (i++ < 10) { if (i < 5) continue; break; } public void returnNothing() { return; } public int returnOne() { return 1; } public void returnNothing() { return; } public int returnOne() { return 1; }
44
C# Syntax Object instantiation Exclusive access Java C# Something s =
new Something(); Something s = new Something(); synchronized(this) { // do something } lock(this) { // do something }
45
C# Syntax try/catch/finally
Java try { throw new SampleException(); } catch (SampleException ex) { } finally { } C# try { throw new SampleException(); } catch (SampleException ex) { } finally { } try { throw new SampleException(); } catch {} finally { } catch clause is optional catch argument is optional No throws keyword
46
C# Syntax Class definition Interface definition
Interface implementation Java C# class Foo extends Bar { ... } class Foo extends Bar { ... } interface IFoo extends IBar { ... } interface IFoo : IBar { ... } class Foo implements IFoo, IBaz { ... } class Bar: IFoo, IBaz { }
47
Other C# Features C# provides Java-style garbage collection
C# implements a Java- and Delphi-style value/reference-type system Variables of primitive types also act like objects (unlike Java primitive objects) Java Integer iobj = new Integer(12); System.out.println(iobj.toString()); C# Console.WriteLine(12.ToString());
48
Other C# Features Enumerations Properties (forced getter and setters)
enum description: ulong { Good, Bad, Ugly }; Properties (forced getter and setters) TextBlock tb; if (tb.backgroundColor == Color.green) { // "get" is called for comparison tb.backgroundColor = Color.red; // "set" is called } else { tb.backgroundColor = Color.blue; // "set“ is called }
49
Other C# Features Get/set public class TextBlock {
// Assume Color is an enum private Color _bgColor; private Color _fgColor; public Color backgroundColor { get { return _bgColor; } set { _bgColor = value; } //... and so on... } }
50
End of Lecture
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.