Advances in Programming Languages: Efficiency

Size: px
Start display at page:

Download "Advances in Programming Languages: Efficiency"

Transcription

1 Advances in Programming Languages: Efficiency Stephen Gilmore The University of Edinburgh March 1, 2007 Overview Computer programs should execute efficiently. The art and skill of computer programming lies in making programs which execute efficiently while also ensuring that they are reliable. Anyone can get the wrong answers fast. Efficiency and correctness are sometimes in opposition. To craft a program which executes more efficiently we might have to research or invent a better algorithm to solve the problem, or we might have to invest more time and effort in understanding our chosen compiler. However, as a general rule of thumb, more efficient algorithms are often more complex than less efficient ones, and may be more difficult to implement correctly. In addition to this there is also a welldocumented history of compilers introducing errors by including optimisations, so using a large number of combinations of switch-controlled optimisations might also introduce errors into our code. Set against this is another peril. It is becoming increasingly difficult for programmers to understand how they can optimise their programs. This is because modern compilers are much more complex than were the compilers in the frontier days of the wild west. Processors too are much more complex, with pipelined architectures which execute many instructions simultaneously. Efficiency and programming languages Choosing efficiency as an object of study, we might ask how high a price we pay for using safe programming languages, and whether more better compilers can reduce these disadvantages. We compare C, Java, C#, Cyclone and Caml using a microbenchmark, Takeuchi s function. Takeuchi s function is a three-argument recursive integer function which eventually returns the value of its first argument. As a benchmark, the important properties of this function are that its running time may be very long, without using a large amount of stack space. Quite obviously, Takeuchi s function is not a typical program which practicising developers would be commissioned to create. Benchmarks are either realistic examples which test a range of qualities of the implementation at a time, or they are microbenchmarks which test only a few qualities. Takeuchi s function tests the efficiency with which languages call functions (invoke methods) and handle simple conditional branching. These are things which even real-world programs need to do as well. One way to make this comparison is through measurement. Essentially, we just run the program and time it. Our timings will depend on (at least) three things: 1. how the program is implemented; 1

2 UG4 Advances in Programming Languages 2005/ how the program is compiled; and 3. how the measurements are obtained. We look at each of these in each case. Takeuchi s function implemented in C Takeuchi s function is implemented in C below. /* File: programs/c/takeuchi.c */ #include <stdio.h> #include <stdlib.h> int tak(int x, int y, int z) { else return tak(tak(x-1,y,z),tak(y-1,z,x),tak(z-1,x,y)); int main() { printf("%d\n", tak(16,6,1)); exit(0); Makefile for the C code We can control the behaviour of the C compiler through command-line arguments. Below, the important one is -O3, which asks for as many optimisations as possible. Thus, we produce two binaries and expect the tak.opt executable to run faster than the tak executable. # File: programs/c/makefile.timings GCC=gcc -Wall ${GCC -o tak Takeuchi.c ${GCC -O3 -o tak.opt Takeuchi.c (${TIME./tak) 2> c.timings (${TIME./tak.opt) 2>> c.timings Timings for the C code To obtain this, and all other timings, we have used the GNU time command version 1.7. This demonstrates that the optimised version runs faster than the version without optimisations turned on, as we might have expected. These, and each of the subsequent timings, were obtained on the machine slim.inf.ed.ac.uk user 0.04system 0:27.52elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (78major+14minor)pagefaults 0swaps

3 UG4 Advances in Programming Languages 2005/ user 0.02system 0:26.09elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (78major+14minor)pagefaults 0swaps Takeuchi s function implemented in C# Takeuchi s function is implemented in C# below. The requirement to have the class sealed is analogous to final in Java; this class can have no subclasses. Making the tak method both static and public gives the compiler the license to make as many optimisations as possible. /* File: programs/cs/takeuchi.cs */ using System; public sealed class Takeuchi { public static int tak(int x, int y, int z) { else return tak(tak(x-1,y,z), tak(y-1,z,x), tak(z-1,x,y)); public static void Main(string[] args) { Console.WriteLine(tak(16,6,1)); Makefile for the C# code In the version of the Mono C# compiler which I used (version ) I was unable to find the command-line option to turn on compiler optimisations. The obvious choices (-O3 and -optimise) did not work. So it could be that the code could be compiled better than I managed. # File: programs/cs/makefile.timings MCS=mcs -warn:4 ${MCS -o Takeuchi.exe Takeuchi.cs (${TIME mint Takeuchi.exe) 2> cs.timings (${TIME mono Takeuchi.exe) 2>> cs.timings Timings for the C# code Running the code in the mint interpreter runs much more slowly than the mono JIT, as might be expected user 0.38system 36:26.16elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (619major+402minor)pagefaults 0swaps 30.18user 0.01system 0:30.77elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (713major+423minor)pagefaults 0swaps

4 UG4 Advances in Programming Languages 2005/ Takeuchi s function implemented in Java The tak function is implemented as a public, static, final method. /* File: programs/java/takeuchi.java */ public final class Takeuchi { public static final int tak(int x, int y, int z) { else return tak(tak(x-1,y,z), tak(y-1,z,x), tak(z-1,x,y)); public static void main(string[] args) { System.out.println(tak(16,6,1)); Makefile for the Java code This class was compiled both with SUN s Java compiler, javac (version ) and the GNU gcj compiler (version ). # File: programs/java/makefile.timings GCJ=gcj -O3 GCJLINK=gcj -c -g -O3 javac Takeuchi.java ${GCJLINK Takeuchi.java ${GCJ --main=takeuchi -o tak Takeuchi.o (${TIME java -Xint Takeuchi) 2> java.timings (${TIME java Takeuchi) 2>> java.timings (${TIME./tak) 2>> java.timings Timings for the Java code The compiled Java versions were run in the interpreter (with the JIT turned off); with the JIT; and as a native code executable. Unsurprisingly, the interpreter runs slowest, although not as slowly as the Mono interpreter. Rather more surprisingly SUN s Java HotSpot(TM) Client VM (build b06) executes faster than the native code version compiled by GCJ, more than repaying the cost of running the JIT itself user 0.18system 5:54.33elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (1264major+540minor)pagefaults 0swaps 33.19user 0.17system 0:34.36elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (1266major+540minor)pagefaults 0swaps 57.25user 0.03system 0:59.49elapsed 96%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (1360major+160minor)pagefaults 0swaps

5 UG4 Advances in Programming Languages 2005/ Takeuchi s function implemented in Cyclone The C implementation of Takeuchi s function can be used unchanged with Cyclone. /* File: programs/cyclone/takeuchi.cyc */ #include <stdio.h> #include <stdlib.h> int tak(int x, int y, int z) { else return tak(tak(x-1,y,z),tak(y-1,z,x),tak(z-1,x,y)); int main() { printf("%d\n", tak(16,6,1)); exit(0); Makefile for the Cyclone code The Makefile for the Cyclone code is very similar to the C Makefile. # File: programs/cyclone/makefile.timings CYCLONE=cyclone -Wall ${CYCLONE -o tak Takeuchi.cyc ${CYCLONE -O3 -o tak.opt Takeuchi.cyc (${TIME./tak) 2> cyclone.timings (${TIME./tak.opt) 2>> cyclone.timings Timings for the Cyclone code Perhaps surprisingly, the optimised Cyclone code outperforms the optimised GCC code. Only slightly, but it does outperform it user 0.05system 0:29.82elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (97major+41minor)pagefaults 0swaps 24.99user 0.06system 0:25.76elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (97major+41minor)pagefaults 0swaps Takeuchi s function in Objective Caml (* File: programs/caml/takeuchi.ml *) let rec tak(x,y,z) = if x<=y then y else tak(tak(x-1,y,z),tak(y-1,z,x),tak(z-1,x,y));; print_endline(string_of_int(tak(16,6,1)));;

6 UG4 Advances in Programming Languages 2005/ Makefile for the Objective Caml code The Makefile for the Objective Caml code uses the bytecode compiler ocamlc and the native code compiler ocamlopt. # File: programs/caml/makefile.timings ocamlc -o tak Takeuchi.ml ocamlopt -o tak.opt Takeuchi.ml (${TIME ocaml Takeuchi.ml) 2> caml.timings (${TIME./tak) 2>> caml.timings (${TIME./tak.opt) 2>> caml.timings Timings for the Objective Caml code The first run of the Objective Caml implementation includes compiling and running the Caml bytecode. The second runs the pre-compiled bytecode. The final run is the optimised native code, which significantly outperforms the C implementation user 0.28system 4:59.59elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (156major+487minor)pagefaults 0swaps user 0.21system 4:57.81elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (152major+120minor)pagefaults 0swaps 17.56user 0.01system 0:17.58elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (115major+26minor)pagefaults 0swaps Takeuchi s function in Ruby # File: programs/ruby/takeuchi.rb def tak(x,y,z) if (x <= y) then y else tak(tak(x-1,y,z),tak(y-1,z,x),tak(z-1,x,y)) end end puts (tak(16,6,1)) Makefile for the Ruby implementation The Makefile for the Ruby implementation simply runs the Ruby interpreter on the Ruby source code. This is compiled to bytecode and executed on the Ruby virtual machine. (/usr/bin/time ruby Takeuchi.rb) 2> ruby.timings

7 UG4 Advances in Programming Languages 2005/ Timings for the Ruby implementation The Ruby implementation is significantly slower than all of the others, with a run-time of nearly three hours (compared to, for example, 17 seconds with Objective Caml) user system 2:54:28elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+511minor)pagefaults 0swaps Results The timings from all of the runs are shown below, with the two slowest timings (for the Mono interpreter and the Ruby virtual machine) omitted to preserve the scale. Ocamlopt Cyclone O3 GCC O3 GCC Cyclone Mono C# Java GCJ Ocamlc Ocaml Java Xint Summary When one talks about software performance and predicts how optimisations can be applied pretty much only two things are certain 1. your intuitions are wrong; and 2. you need to implement and time an optimisation before you can be sure of it. The quest for efficiency should not be allowed to overtake the quest for reliability. Slow code that works is preferred over fast code that does not every time. Interpreted bytecode programs are often slower than programs compiled to native code. Programs in type-safe languages (such as Objective Caml and Cyclone) are not always slower than their equivalents in weakly-typed languages such as C. Compile-time static type-checking incurs no run-time cost.

Dialects of ML. CMSC 330: Organization of Programming Languages. Dialects of ML (cont.) Features of ML. Functional Languages. Features of ML (cont.

Dialects of ML. CMSC 330: Organization of Programming Languages. Dialects of ML (cont.) Features of ML. Functional Languages. Features of ML (cont. CMSC 330: Organization of Programming Languages OCaml 1 Functional Programming Dialects of ML ML (Meta Language) Univ. of Edinburgh,1973 Part of a theorem proving system LCF The Logic of Computable Functions

More information

Advances in Programming Languages: Generics, interoperability and implementation

Advances in Programming Languages: Generics, interoperability and implementation Advances in Programming Languages: Generics, interoperability and implementation Stephen Gilmore The University of Edinburgh February 1, 2007 Understanding generic code Generic Java extends Java with generic

More information

PROJECT 2 - MEMORY ALLOCATOR Computer Systems Principles. October 1, 2010

PROJECT 2 - MEMORY ALLOCATOR Computer Systems Principles. October 1, 2010 PROJECT 2 - MEMORY ALLOCATOR Computer Systems Principles Emery Berger Mark Corner October 1, 2010 1 Overview The purpose of this project is to acquaint you with how memory allocators provide virtual memory

More information

Compiling Techniques

Compiling Techniques Lecture 10: Introduction to 10 November 2015 Coursework: Block and Procedure Table of contents Introduction 1 Introduction Overview Java Virtual Machine Frames and Function Call 2 JVM Types and Mnemonics

More information

Atelier Java - J1. Marwan Burelle. EPITA Première Année Cycle Ingénieur.

Atelier Java - J1. Marwan Burelle.  EPITA Première Année Cycle Ingénieur. marwan.burelle@lse.epita.fr http://wiki-prog.kh405.net Plan 1 2 Plan 3 4 Plan 1 2 3 4 A Bit of History JAVA was created in 1991 by James Gosling of SUN. The first public implementation (v1.0) in 1995.

More information

Introduction. CS 2210 Compiler Design Wonsun Ahn

Introduction. CS 2210 Compiler Design Wonsun Ahn Introduction CS 2210 Compiler Design Wonsun Ahn What is a Compiler? Compiler: A program that translates source code written in one language to a target code written in another language Source code: Input

More information

Tools and techniques for optimization and debugging. Fabio Affinito October 2015

Tools and techniques for optimization and debugging. Fabio Affinito October 2015 Tools and techniques for optimization and debugging Fabio Affinito October 2015 Profiling Why? Parallel or serial codes are usually quite complex and it is difficult to understand what is the most time

More information

Control Flow. Stephen A. Edwards. Fall Columbia University

Control Flow. Stephen A. Edwards. Fall Columbia University Control Flow Stephen A. Edwards Columbia University Fall 2013 Control Flow Time is Nature s way of preventing everything from happening at once. Scott identifies seven manifestations of this: 1. Sequencing

More information

Notes of the course - Advanced Programming. Barbara Russo

Notes of the course - Advanced Programming. Barbara Russo Notes of the course - Advanced Programming Barbara Russo a.y. 2014-2015 Contents 1 Lecture 2 Lecture 2 - Compilation, Interpreting, and debugging........ 2 1.1 Compiling and interpreting...................

More information

CS4215 Programming Language Implementation

CS4215 Programming Language Implementation CS4215 Programming Language Implementation You have 45 minutes to complete the exam. Use a B2 pencil to fill up the provided MCQ form. Leave Section A blank. Fill up Sections B and C. After finishing,

More information

CS577 Modern Language Processors. Spring 2018 Lecture Interpreters

CS577 Modern Language Processors. Spring 2018 Lecture Interpreters CS577 Modern Language Processors Spring 2018 Lecture Interpreters 1 MAKING INTERPRETERS EFFICIENT VM programs have an explicitly specified binary representation, typically called bytecode. Most VM s can

More information

Advances in Programming Languages: Regions

Advances in Programming Languages: Regions Advances in Programming Languages: Regions Allan Clark and Stephen Gilmore The University of Edinburgh February 22, 2007 Introduction The design decision that memory will be managed on a per-language basis

More information

Topic 6: A Quick Intro To C

Topic 6: A Quick Intro To C Topic 6: A Quick Intro To C Assumption: All of you know Java. Much of C syntax is the same. Also: Many of you have used C or C++. Goal for this topic: you can write & run a simple C program basic functions

More information

Some possible directions for the R engine

Some possible directions for the R engine Some possible directions for the R engine Luke Tierney Department of Statistics & Actuarial Science University of Iowa July 22, 2010 Luke Tierney (U. of Iowa) Directions for the R engine July 22, 2010

More information

Goals. Java - An Introduction. Java is Compiled and Interpreted. Architecture Neutral & Portable. Compiled Languages. Introduction to Java

Goals. Java - An Introduction. Java is Compiled and Interpreted. Architecture Neutral & Portable. Compiled Languages. Introduction to Java Goals Understand the basics of Java. Introduction to Java Write simple Java Programs. 1 2 Java - An Introduction Java is Compiled and Interpreted Java - The programming language from Sun Microsystems Programmer

More information

Topic 6: A Quick Intro To C. Reading. "goto Considered Harmful" History

Topic 6: A Quick Intro To C. Reading. goto Considered Harmful History Topic 6: A Quick Intro To C Reading Assumption: All of you know basic Java. Much of C syntax is the same. Also: Some of you have used C or C++. Goal for this topic: you can write & run a simple C program

More information

Pla$orm independence and languages. CSCI 136: Fundamentals of Computer Science II Keith Vertanen

Pla$orm independence and languages. CSCI 136: Fundamentals of Computer Science II Keith Vertanen Pla$orm independence and languages CSCI 136: Fundamentals of Computer Science II Keith Vertanen Language types: Compiled e.g. C++ Overview Intermediate / bytecode e.g. Java,.NET Interpreted e.g. PHP, JavaScript

More information

Advances in Programming Languages: Exam preparation and exam questions

Advances in Programming Languages: Exam preparation and exam questions Advances in Programming Languages: Exam preparation and exam questions Stephen Gilmore The University of Edinburgh March 24, 2006 Examinations What is the purpose of examinations? 1. To test understanding.

More information

Supplementary Test 1

Supplementary Test 1 Name: Please fill in your Student Number and Name. Student Number : Student Number: University of Cape Town ~ Department of Computer Science Computer Science 1015F ~ 2009 Supplementary Test 1 Question

More information

Background. CMSC 330: Organization of Programming Languages. Useful Information on OCaml language. Dialects of ML. ML (Meta Language) Standard ML

Background. CMSC 330: Organization of Programming Languages. Useful Information on OCaml language. Dialects of ML. ML (Meta Language) Standard ML CMSC 330: Organization of Programming Languages Functional Programming with OCaml 1 Background ML (Meta Language) Univ. of Edinburgh, 1973 Part of a theorem proving system LCF The Logic of Computable Functions

More information

Context Threading: A flexible and efficient dispatch technique for virtual machine interpreters

Context Threading: A flexible and efficient dispatch technique for virtual machine interpreters : A flexible and efficient dispatch technique for virtual machine interpreters Marc Berndl Benjamin Vitale Mathew Zaleski Angela Demke Brown Research supported by IBM CAS, NSERC, CITO 1 Interpreter performance

More information

CSc 520 Principles of Programming Languages

CSc 520 Principles of Programming Languages CSc 520 Principles of Programming Languages 44: Interpreters Christian Collberg collberg@cs.arizona.edu Department of Computer Science University of Arizona Copyright c 2005 Christian Collberg [1] Compiler

More information

CSE P 501 Compilers. Java Implementation JVMs, JITs &c Hal Perkins Winter /11/ Hal Perkins & UW CSE V-1

CSE P 501 Compilers. Java Implementation JVMs, JITs &c Hal Perkins Winter /11/ Hal Perkins & UW CSE V-1 CSE P 501 Compilers Java Implementation JVMs, JITs &c Hal Perkins Winter 2008 3/11/2008 2002-08 Hal Perkins & UW CSE V-1 Agenda Java virtual machine architecture.class files Class loading Execution engines

More information

CSc 453. Compilers and Systems Software. 18 : Interpreters. Department of Computer Science University of Arizona. Kinds of Interpreters

CSc 453. Compilers and Systems Software. 18 : Interpreters. Department of Computer Science University of Arizona. Kinds of Interpreters CSc 453 Compiler source Lexer tokens Parser AST Compilers and Systems Software 18 : Interpreters VM Code Gen IR Interm. Code Gen AST Semantic Analyser Department of Computer Science University of Arizona

More information

Lecture 1: Overview of Java

Lecture 1: Overview of Java Lecture 1: Overview of Java What is java? Developed by Sun Microsystems (James Gosling) A general-purpose object-oriented language Based on C/C++ Designed for easy Web/Internet applications Widespread

More information

Advances in Programming Languages: Type accuracy

Advances in Programming Languages: Type accuracy Advances in Programming Languages: Type accuracy Stephen Gilmore The University of Edinburgh January 29, 2007 Introduction Strongly typed programming languages catch programmer errors, leading to program

More information

Ahead of Time (AOT) Compilation

Ahead of Time (AOT) Compilation Ahead of Time (AOT) Compilation Vaibhav Choudhary (@vaibhav_c) Java Platforms Team https://blogs.oracle.com/vaibhav Copyright 2018, Oracle and/or its affiliates. All rights reserved. Safe Harbor Statement

More information

Truffle A language implementation framework

Truffle A language implementation framework Truffle A language implementation framework Boris Spasojević Senior Researcher VM Research Group, Oracle Labs Slides based on previous talks given by Christian Wimmer, Christian Humer and Matthias Grimmer.

More information

A brief introduction to C programming for Java programmers

A brief introduction to C programming for Java programmers A brief introduction to C programming for Java programmers Sven Gestegård Robertz September 2017 There are many similarities between Java and C. The syntax in Java is basically

More information

Compiler Theory. (GCC the GNU Compiler Collection) Sandro Spina 2009

Compiler Theory. (GCC the GNU Compiler Collection) Sandro Spina 2009 Compiler Theory (GCC the GNU Compiler Collection) Sandro Spina 2009 GCC Probably the most used compiler. Not only a native compiler but it can also cross-compile any program, producing executables for

More information

CMSC 330: Organization of Programming Languages. Closures (Implementing Higher Order Functions)

CMSC 330: Organization of Programming Languages. Closures (Implementing Higher Order Functions) CMSC 330: Organization of Programming Languages Closures (Implementing Higher Order Functions) CMSC 330 - Summer 2017 1 Returning Functions as Results In OCaml you can pass functions as arguments to map,

More information

Lecture 1: Introduction to Java

Lecture 1: Introduction to Java Accelerating Information Technology Innovation http://aiti.mit.edu Lecture 1: Introduction to Java AITI Nigeria Summer 2012 University of Lagos. Agenda First Lab.. Class is Hands on remember? Recap Previously

More information

Administration CS 412/413. Why build a compiler? Compilers. Architectural independence. Source-to-source translator

Administration CS 412/413. Why build a compiler? Compilers. Architectural independence. Source-to-source translator CS 412/413 Introduction to Compilers and Translators Andrew Myers Cornell University Administration Design reports due Friday Current demo schedule on web page send mail with preferred times if you haven

More information

Mixed Mode Execution with Context Threading

Mixed Mode Execution with Context Threading Mixed Mode Execution with Context Threading Mathew Zaleski, Marc Berndl, Angela Demke Brown University of Toronto {matz,berndl,demke}@cs.toronto.edu (CASCON 2005, Oct 19/2005.) Overview Introduction Background:

More information

A Func'onal Introduc'on. COS 326 David Walker Princeton University

A Func'onal Introduc'on. COS 326 David Walker Princeton University A Func'onal Introduc'on COS 326 David Walker Princeton University Thinking Func'onally In Java or C, you get (most) work done by changing something temp = pair.x; pair.x = pair.y; pair.y = temp; commands

More information

Improving Java Performance

Improving Java Performance Improving Java Performance #perfmatters Raimon Ràfols ...or the mumbo-jumbo behind the java compiler Agenda - Disclaimer - Who am I? - Our friend the java compiler - Language additions & things to consider

More information

Reversing. Time to get with the program

Reversing. Time to get with the program Reversing Time to get with the program This guide is a brief introduction to C, Assembly Language, and Python that will be helpful for solving Reversing challenges. Writing a C Program C is one of the

More information

Delft-Java Link Translation Buffer

Delft-Java Link Translation Buffer Delft-Java Link Translation Buffer John Glossner 1,2 and Stamatis Vassiliadis 2 1 Lucent / Bell Labs Advanced DSP Architecture and Compiler Research Allentown, Pa glossner@lucent.com 2 Delft University

More information

CS263: Runtime Systems Lecture: High-level language virtual machines

CS263: Runtime Systems Lecture: High-level language virtual machines CS263: Runtime Systems Lecture: High-level language virtual machines Today: A Review of Object-oriented features Chandra Krintz UCSB Computer Science Department Virtual machines (VMs) Terminology Aka managed

More information

MethodHandle implemention tips and tricks

MethodHandle implemention tips and tricks MethodHandle implemention tips and tricks Dan Heidinga J9 VM Software Developer daniel_heidinga@ca.ibm.com J9 Virtual Machine 2011 IBM Corporation MethodHandles: a 30 sec introduction A method handle is

More information

Compilers. Prerequisites

Compilers. Prerequisites Compilers Prerequisites Data structures & algorithms Linked lists, dictionaries, trees, hash tables Formal languages & automata Regular expressions, finite automata, context-free grammars Machine organization

More information

Project. there are a couple of 3 person teams. a new drop with new type checking is coming. regroup or see me or forever hold your peace

Project. there are a couple of 3 person teams. a new drop with new type checking is coming. regroup or see me or forever hold your peace Project there are a couple of 3 person teams regroup or see me or forever hold your peace a new drop with new type checking is coming using it is optional 1 Compiler Architecture source code Now we jump

More information

CMSC 330: Organization of Programming Languages. Closures (Implementing Higher Order Functions)

CMSC 330: Organization of Programming Languages. Closures (Implementing Higher Order Functions) CMSC 330: Organization of Programming Languages Closures (Implementing Higher Order Functions) CMSC330 Spring 2018 1 Returning Functions as Results In OCaml you can pass functions as arguments to map,

More information

CSCI-GA Scripting Languages

CSCI-GA Scripting Languages CSCI-GA.3033.003 Scripting Languages 12/02/2013 OCaml 1 Acknowledgement The material on these slides is based on notes provided by Dexter Kozen. 2 About OCaml A functional programming language All computation

More information

Problem Set 1 Due: 11:59pm Wednesday, February 7

Problem Set 1 Due: 11:59pm Wednesday, February 7 CS251 Programming Languages Handout # 13 Prof. Lyn Turbak January 31, 2007 Wellesley College Reading: Problem Set 1 Due: 11:59pm Wednesday, February 7 Handouts #1 #12 (only Chapters 1 5 of Handout #9 =

More information

YETI. GraduallY Extensible Trace Interpreter VEE Mathew Zaleski, Angela Demke Brown (University of Toronto) Kevin Stoodley (IBM Toronto)

YETI. GraduallY Extensible Trace Interpreter VEE Mathew Zaleski, Angela Demke Brown (University of Toronto) Kevin Stoodley (IBM Toronto) YETI GraduallY Extensible Trace Interpreter Mathew Zaleski, Angela Demke Brown (University of Toronto) Kevin Stoodley (IBM Toronto) VEE 2007 1 Goal Create a VM that is more easily extended with a just

More information

Running a C program Compilation Python and C Variables and types Data and addresses Functions Performance. John Edgar 2

Running a C program Compilation Python and C Variables and types Data and addresses Functions Performance. John Edgar 2 CMPT 125 Running a C program Compilation Python and C Variables and types Data and addresses Functions Performance John Edgar 2 Edit or write your program Using a text editor like gedit Save program with

More information

Fibonacci in Lisp. Computer Programming: Skills & Concepts (CP1) Programming Languages. Varieties of Programing Language

Fibonacci in Lisp. Computer Programming: Skills & Concepts (CP1) Programming Languages. Varieties of Programing Language Fibonacci in Lisp Computer Programming: Skills & Concepts (CP1) Programming Languages (defun fibonacci (n) (if (or (= n 0) (= n 1)) 1 (+ (fibonacci (- n 1)) (fibonacci (- n 2))))) 22nd November 2010 defun-

More information

What is a compiler? Xiaokang Qiu Purdue University. August 21, 2017 ECE 573

What is a compiler? Xiaokang Qiu Purdue University. August 21, 2017 ECE 573 What is a compiler? Xiaokang Qiu Purdue University ECE 573 August 21, 2017 What is a compiler? What is a compiler? Traditionally: Program that analyzes and translates from a high level language (e.g.,

More information

COSC 2P91. Introduction Part Deux. Week 1b. Brock University. Brock University (Week 1b) Introduction Part Deux 1 / 14

COSC 2P91. Introduction Part Deux. Week 1b. Brock University. Brock University (Week 1b) Introduction Part Deux 1 / 14 COSC 2P91 Introduction Part Deux Week 1b Brock University Brock University (Week 1b) Introduction Part Deux 1 / 14 Source Files Like most other compiled languages, we ll be dealing with a few different

More information

CSc 553. Principles of Compilation. 2 : Interpreters. Department of Computer Science University of Arizona

CSc 553. Principles of Compilation. 2 : Interpreters. Department of Computer Science University of Arizona CSc 553 Principles of Compilation 2 : Interpreters Department of Computer Science University of Arizona collberg@gmail.com Copyright c 2011 Christian Collberg Compiler source Lexer tokens Parser AST VM

More information

The VMKit project: Java (and.net) on top of LLVM

The VMKit project: Java (and.net) on top of LLVM The VMKit project: Java (and.net) on top of LLVM Nicolas Geoffray Université Pierre et Marie Curie, France nicolas.geoffray@lip6.fr What is VMKit? Glue between existing VM components LLVM, GNU Classpath,

More information

So what does studying PL buy me?

So what does studying PL buy me? So what does studying PL buy me? Enables you to better choose the right language but isn t that decided by libraries, standards, and my boss? Yes. Chicken-and-egg. My goal: educate tomorrow s tech leaders

More information

INDEX. A SIMPLE JAVA PROGRAM Class Declaration The Main Line. The Line Contains Three Keywords The Output Line

INDEX. A SIMPLE JAVA PROGRAM Class Declaration The Main Line. The Line Contains Three Keywords The Output Line A SIMPLE JAVA PROGRAM Class Declaration The Main Line INDEX The Line Contains Three Keywords The Output Line COMMENTS Single Line Comment Multiline Comment Documentation Comment TYPE CASTING Implicit Type

More information

Course introduction. Advanced Compiler Construction Michel Schinz

Course introduction. Advanced Compiler Construction Michel Schinz Course introduction Advanced Compiler Construction Michel Schinz 2016 02 25 General information Course goals The goal of this course is to teach you: how to compile high-level functional and objectoriented

More information

CS 231 Data Structures and Algorithms, Fall 2016

CS 231 Data Structures and Algorithms, Fall 2016 CS 231 Data Structures and Algorithms, Fall 2016 Dr. Bruce A. Maxwell Department of Computer Science Colby College Course Description Focuses on the common structures used to store data and the standard

More information

Anonymous Functions CMSC 330: Organization of Programming Languages

Anonymous Functions CMSC 330: Organization of Programming Languages Anonymous Functions CMSC 330: Organization of Programming Languages Recall code blocks in Ruby (1..10).each { x print x Here, we can think of { x print x as a function OCaml 2 Higher Order Functions 1

More information

An Introduction to Subtyping

An Introduction to Subtyping An Introduction to Subtyping Type systems are to me the most interesting aspect of modern programming languages. Subtyping is an important notion that is helpful for describing and reasoning about type

More information

BEAMJIT, a Maze of Twisty Little Traces

BEAMJIT, a Maze of Twisty Little Traces BEAMJIT, a Maze of Twisty Little Traces A walk-through of the prototype just-in-time (JIT) compiler for Erlang. Frej Drejhammar 130613 Who am I? Senior researcher at the Swedish Institute

More information

Two s Complement Review. Two s Complement Review. Agenda. Agenda 6/21/2011

Two s Complement Review. Two s Complement Review. Agenda. Agenda 6/21/2011 Two s Complement Review CS 61C: Great Ideas in Computer Architecture (Machine Structures) Introduction to C (Part I) Instructor: Michael Greenbaum http://inst.eecs.berkeley.edu/~cs61c/su11 Suppose we had

More information

CSCI 2041: Introduction

CSCI 2041: Introduction CSCI 2041: Introduction Chris Kauffman Last Updated: Wed Sep 5 11:56:55 CDT 2018 1 Logistics Reading OCaml System Manual: 1.1-1.3 Practical OCaml: Ch 1-2 Goals History Tour of OCaml Language First Programs

More information

Bristol Institute of Technology

Bristol Institute of Technology Bristol Institute of Technology Academic Year: 09/10 Module Leader: Module Code: Title of Module: Ian Johnson UFCETS-20-1 Programming in C Examination Date: Monday 12 th January 2009 Examination Start

More information

CMSC 430 Introduction to Compilers. Fall Language Virtual Machines

CMSC 430 Introduction to Compilers. Fall Language Virtual Machines CMSC 430 Introduction to Compilers Fall 2018 Language Virtual Machines Introduction So far, we ve focused on the compiler front end Syntax (lexing/parsing) High-level language semantics Ultimately, we

More information

CS240: Programming in C. Lecture 2: Overview

CS240: Programming in C. Lecture 2: Overview CS240: Programming in C Lecture 2: Overview 1 Programming Model How does C view the world? Stack Memory code Globals 2 Programming Model Execution mediated via a stack function calls and returns local

More information

University of Palestine. Mid Exam Total Grade: 100

University of Palestine. Mid Exam Total Grade: 100 First Question No. of Branches (5) A) Choose the correct answer: 1. If we type: system.out.println( a ); in the main() method, what will be the result? int a=12; //in the global space... void f() { int

More information

CPSC 261 Midterm 1 Tuesday February 9th, 2016

CPSC 261 Midterm 1 Tuesday February 9th, 2016 CPSC 261 Midterm 1 Tuesday February 9th, 2016 [10] 1. Short Answers [2] a. Two CPUs support the same instruction set, and use the same amount of power. CPU A s latency and throughput are both 10% lower

More information

Run-time Program Management. Hwansoo Han

Run-time Program Management. Hwansoo Han Run-time Program Management Hwansoo Han Run-time System Run-time system refers to Set of libraries needed for correct operation of language implementation Some parts obtain all the information from subroutine

More information

Why OCaml? Introduction to Objective Caml. Features of OCaml. Applications written in OCaml. Stefan Wehr

Why OCaml? Introduction to Objective Caml. Features of OCaml. Applications written in OCaml. Stefan Wehr Motivation Introduction to Objective Caml Why OCaml? Stefan Wehr University of Freiburg. October 30, 2006 Motivation Simple Expressions and Types I/O and Compilation Resources Convenient encoding of tree

More information

Information Science. No. For each question, choose one correct answer and write its symbol (A E) in the box.

Information Science. No. For each question, choose one correct answer and write its symbol (A E) in the box. For each question, choose one correct answer and write its symbol (A E) in the box. (A E) Q16. When compiling the program below, the name of which is prog.c, the following error is reported. Which program

More information

SABLEJIT: A Retargetable Just-In-Time Compiler for a Portable Virtual Machine p. 1

SABLEJIT: A Retargetable Just-In-Time Compiler for a Portable Virtual Machine p. 1 SABLEJIT: A Retargetable Just-In-Time Compiler for a Portable Virtual Machine David Bélanger dbelan2@cs.mcgill.ca Sable Research Group McGill University Montreal, QC January 28, 2004 SABLEJIT: A Retargetable

More information

Introduction to Objective Caml

Introduction to Objective Caml Introduction to Objective Caml Stefan Wehr University of Freiburg. October 30, 2006 Motivation Simple Expressions and Types Functions Simple Pattern Matching Compound Datatypes I/O and Compilation Resources

More information

Lecture Outline. Code Generation. Lecture 30. Example of a Stack Machine Program. Stack Machines

Lecture Outline. Code Generation. Lecture 30. Example of a Stack Machine Program. Stack Machines Lecture Outline Code Generation Lecture 30 (based on slides by R. Bodik) Stack machines The MIPS assembly language The x86 assembly language A simple source language Stack-machine implementation of the

More information

Java Design Goals. Lecture 32: Java. Java Original implementations slow! Exceptions & Subtyping. - void method readfiles() throws IOException {...}!

Java Design Goals. Lecture 32: Java. Java Original implementations slow! Exceptions & Subtyping. - void method readfiles() throws IOException {...}! Java Design Goals Lecture 32: Java CSC 131 Fall, 2014 Kim Bruce Portability across platforms Reliability Safety (no viruses) Dynamic Linking Multithreaded execution Simplicity and Familiarity Efficiency

More information

LESSON 13: LANGUAGE TRANSLATION

LESSON 13: LANGUAGE TRANSLATION LESSON 13: LANGUAGE TRANSLATION Objective Interpreters and Compilers. Language Translation Phases. Interpreters and Compilers A COMPILER is a program that translates a complete source program into machine

More information

COSC 2P95. Procedural Abstraction. Week 3. Brock University. Brock University (Week 3) Procedural Abstraction 1 / 26

COSC 2P95. Procedural Abstraction. Week 3. Brock University. Brock University (Week 3) Procedural Abstraction 1 / 26 COSC 2P95 Procedural Abstraction Week 3 Brock University Brock University (Week 3) Procedural Abstraction 1 / 26 Procedural Abstraction We ve already discussed how to arrange complex sets of actions (e.g.

More information

Interaction of JVM with x86, Sparc and MIPS

Interaction of JVM with x86, Sparc and MIPS Interaction of JVM with x86, Sparc and MIPS Sasikanth Avancha, Dipanjan Chakraborty, Dhiral Gada, Tapan Kamdar {savanc1, dchakr1, dgada1, kamdar}@cs.umbc.edu Department of Computer Science and Electrical

More information

Compiler construction

Compiler construction Compiler construction Martin Steffen March 13, 2017 Contents 1 Abstract 1 1.1 Symbol tables. 1 1.1.1 Introduction 1 1.1.2 Symbol table design and interface.. 2 1.1.3 Implementing symbol tables 3 1.1.4

More information

code://rubinius/technical

code://rubinius/technical code://rubinius/technical /GC, /cpu, /organization, /compiler weeee!! Rubinius New, custom VM for running ruby code Small VM written in not ruby Kernel and everything else in ruby http://rubini.us git://rubini.us/code

More information

Ordering Within Expressions. Control Flow. Side-effects. Side-effects. Order of Evaluation. Misbehaving Floating-Point Numbers.

Ordering Within Expressions. Control Flow. Side-effects. Side-effects. Order of Evaluation. Misbehaving Floating-Point Numbers. Control Flow COMS W4115 Prof. Stephen A. Edwards Spring 2003 Columbia University Department of Computer Science Control Flow Time is Nature s way of preventing everything from happening at once. Scott

More information

VM instruction formats. Bytecode translator

VM instruction formats. Bytecode translator Implementing an Ecient Java Interpreter David Gregg 1, M. Anton Ertl 2 and Andreas Krall 2 1 Department of Computer Science, Trinity College, Dublin 2, Ireland. David.Gregg@cs.tcd.ie 2 Institut fur Computersprachen,

More information

Control Flow COMS W4115. Prof. Stephen A. Edwards Fall 2006 Columbia University Department of Computer Science

Control Flow COMS W4115. Prof. Stephen A. Edwards Fall 2006 Columbia University Department of Computer Science Control Flow COMS W4115 Prof. Stephen A. Edwards Fall 2006 Columbia University Department of Computer Science Control Flow Time is Nature s way of preventing everything from happening at once. Scott identifies

More information

Code Generation. Lecture 30

Code Generation. Lecture 30 Code Generation Lecture 30 (based on slides by R. Bodik) 11/14/06 Prof. Hilfinger CS164 Lecture 30 1 Lecture Outline Stack machines The MIPS assembly language The x86 assembly language A simple source

More information

Tutorial 1 CSC 201. Java Programming Concepts عؾادئماظربجمةمبادؿكدامماجلاصا

Tutorial 1 CSC 201. Java Programming Concepts عؾادئماظربجمةمبادؿكدامماجلاصا Tutorial 1 CSC 201 Java Programming Concepts عؾادئماظربجمةمبادؿكدامماجلاصا م- م- م- م- م- Chapter 1 1. What is Java? 2. Why Learn Java? a. Java Is Platform Independent b. Java is Easy to learn 3. Programming

More information

Java and C II. CSE 351 Spring Instructor: Ruth Anderson

Java and C II. CSE 351 Spring Instructor: Ruth Anderson Java and C II CSE 351 Spring 2017 Instructor: Ruth Anderson Teaching Assistants: Dylan Johnson Kevin Bi Linxing Preston Jiang Cody Ohlsen Yufang Sun Joshua Curtis Administrivia Lab 5 Due TONIGHT! Fri 6/2

More information

Lecture 02, Fall 2018 Friday September 7

Lecture 02, Fall 2018 Friday September 7 Anatomy of a class Oliver W. Layton CS231: Data Structures and Algorithms Lecture 02, Fall 2018 Friday September 7 Follow-up Python is also cross-platform. What s the advantage of Java? It s true: Python

More information

SU 2017 May 18/23 LAB 3 Bitwise operations, Program structures, Functions (pass-by-value), local vs. global variables. Debuggers

SU 2017 May 18/23 LAB 3 Bitwise operations, Program structures, Functions (pass-by-value), local vs. global variables. Debuggers SU 2017 May 18/23 LAB 3 Bitwise operations, Program structures, Functions (pass-by-value), local vs. global variables. Debuggers 1. Problem A Pass-by-value, and trace a program with debugger 1.1 Specification

More information

Improving Java Code Performance. Make your Java/Dalvik VM happier

Improving Java Code Performance. Make your Java/Dalvik VM happier Improving Java Code Performance Make your Java/Dalvik VM happier Agenda - Who am I - Java vs optimizing compilers - Java & Dalvik - Examples - Do & dont's - Tooling Who am I? (Mobile) Software Engineering

More information

Python Implementation Strategies. Jeremy Hylton Python / Google

Python Implementation Strategies. Jeremy Hylton Python / Google Python Implementation Strategies Jeremy Hylton Python / Google Python language basics High-level language Untyped but safe First-class functions, classes, objects, &c. Garbage collected Simple module system

More information

Compilers and computer architecture: A realistic compiler to MIPS

Compilers and computer architecture: A realistic compiler to MIPS 1 / 1 Compilers and computer architecture: A realistic compiler to MIPS Martin Berger November 2017 Recall the function of compilers 2 / 1 3 / 1 Recall the structure of compilers Source program Lexical

More information

Sista: Improving Cog s JIT performance. Clément Béra

Sista: Improving Cog s JIT performance. Clément Béra Sista: Improving Cog s JIT performance Clément Béra Main people involved in Sista Eliot Miranda Over 30 years experience in Smalltalk VM Clément Béra 2 years engineer in the Pharo team Phd student starting

More information

Computers and Computation. The Modern Computer. The Operating System. The Operating System

Computers and Computation. The Modern Computer. The Operating System. The Operating System The Modern Computer Computers and Computation What is a computer? A machine that manipulates data according to instructions. Despite their apparent complexity, at the lowest level computers perform simple

More information

What Every Programmer Should Know About Floating-Point Arithmetic

What Every Programmer Should Know About Floating-Point Arithmetic What Every Programmer Should Know About Floating-Point Arithmetic Last updated: October 15, 2015 Contents 1 Why don t my numbers add up? 3 2 Basic Answers 3 2.1 Why don t my numbers, like 0.1 + 0.2 add

More information

What is a compiler? var a var b mov 3 a mov 4 r1 cmpi a r1 jge l_e mov 2 b jmp l_d l_e: mov 3 b l_d: ;done

What is a compiler? var a var b mov 3 a mov 4 r1 cmpi a r1 jge l_e mov 2 b jmp l_d l_e: mov 3 b l_d: ;done What is a compiler? What is a compiler? Traditionally: Program that analyzes and translates from a high level language (e.g., C++) to low-level assembly language that can be executed by hardware int a,

More information

Parsing Scheme (+ (* 2 3) 1) * 1

Parsing Scheme (+ (* 2 3) 1) * 1 Parsing Scheme + (+ (* 2 3) 1) * 1 2 3 Compiling Scheme frame + frame halt * 1 3 2 3 2 refer 1 apply * refer apply + Compiling Scheme make-return START make-test make-close make-assign make- pair? yes

More information

A Trace-based Java JIT Compiler Retrofitted from a Method-based Compiler

A Trace-based Java JIT Compiler Retrofitted from a Method-based Compiler A Trace-based Java JIT Compiler Retrofitted from a Method-based Compiler Hiroshi Inoue, Hiroshige Hayashizaki, Peng Wu and Toshio Nakatani IBM Research Tokyo IBM Research T.J. Watson Research Center April

More information

Agenda. CSE P 501 Compilers. Java Implementation Overview. JVM Architecture. JVM Runtime Data Areas (1) JVM Data Types. CSE P 501 Su04 T-1

Agenda. CSE P 501 Compilers. Java Implementation Overview. JVM Architecture. JVM Runtime Data Areas (1) JVM Data Types. CSE P 501 Su04 T-1 Agenda CSE P 501 Compilers Java Implementation JVMs, JITs &c Hal Perkins Summer 2004 Java virtual machine architecture.class files Class loading Execution engines Interpreters & JITs various strategies

More information

MinCaml: A Simple and Efficient Compiler for a Minimal Functional Language. Eijiro Sumii Tohoku University

MinCaml: A Simple and Efficient Compiler for a Minimal Functional Language. Eijiro Sumii Tohoku University MinCaml: A Simple and Efficient Compiler for a Minimal Functional Language Eijiro Sumii Tohoku University Highlights "Simple and efficient compiler for a minimal functional language" Only 2000 lines of

More information

JSR 292 Cookbook: Fresh Recipes with New Ingredients

JSR 292 Cookbook: Fresh Recipes with New Ingredients JSR 292 Cookbook: Fresh Recipes with New Ingredients John Rose Christian Thalinger Sun Microsystems Overview Got a language cooking on the JVM? JSR 292, a set of major changes to the JVM architecture,

More information

Opening Problem. Find the sum of integers from 1 to 10, from 20 to 30, and from 35 to 45, respectively.

Opening Problem. Find the sum of integers from 1 to 10, from 20 to 30, and from 35 to 45, respectively. Chapter 6 Methods 1 Opening Problem Find the sum of integers from 1 to 10, from 20 to 30, and from 35 to 45, respectively. 2 A Solution int sum = 0; for (int i = 1; i

More information

3. Simple Types, Variables, and Constants

3. Simple Types, Variables, and Constants 3. Simple Types, Variables, and Constants This section of the lectures will look at simple containers in which you can storing single values in the programming language C++. You might find it interesting

More information