Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lecture 17 Modern Programming Trends JVM, C#, .NET

Similar presentations


Presentation on theme: "Lecture 17 Modern Programming Trends JVM, C#, .NET"— Presentation transcript:

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


Download ppt "Lecture 17 Modern Programming Trends JVM, C#, .NET"

Similar presentations


Ads by Google