! Broaden your language horizons! Different programming languages! Different language features and tradeoffs. ! Study how languages are implemented

Similar documents
! Broaden your language horizons. ! Study how languages are implemented. ! Study how languages are described / specified

CMSC 330: Organization of Programming Languages. Administrivia

CMSC 330: Organization of Programming Languages

Course Goal CMSC 330: Organization of Programming Languages. All Languages Are (Kind of) Equivalent. Studying Programming Languages.

CMSC 330: Organization of Programming Languages. Administrivia

Concepts of Programming Languages

Programming Languages 2nd edition Tucker and Noonan"

Programming Languages, Summary CSC419; Odelia Schwartz

8/27/17. CS-3304 Introduction. What will you learn? Semester Outline. Websites INTRODUCTION TO PROGRAMMING LANGUAGES

Organization of Programming Languages (CSE452) Why are there so many programming languages? What makes a language successful?

CS 565: Programming Languages. Spring 2008 Tu, Th: 16:30-17:45 Room LWSN 1106

Concepts in Programming Languages

Topic I. Introduction and motivation References: Chapter 1 of Concepts in programming languages by J. C. Mitchell. CUP, 2003.

Principles of Programming Languages. Lecture Outline

Chapter 1. Preliminaries

Com S 541. Programming Languages I

CSCI 3136 Principles of Programming Languages

Why are there so many programming languages? Why do we have programming languages? What is a language for? What makes a language successful?

CS383 PROGRAMMING LANGUAGES. Kenny Q. Zhu Dept. of Computer Science Shanghai Jiao Tong University

Lecture 09. Ada to Software Engineering. Mr. Mubashir Ali Lecturer (Dept. of Computer Science)

General Concepts. Abstraction Computational Paradigms Implementation Application Domains Influence on Success Influences on Design

Chapter 1. Preliminaries

SOFTWARE ARCHITECTURE 6. LISP

CS 314 Principles of Programming Languages

Introduction. A. Bellaachia Page: 1

Chapter 1 Preliminaries

CMSC 330: Organization of Programming Languages

G Programming Languages - Fall 2012

Compilers. Prerequisites

CS 242. Fundamentals. Reading: See last slide

Compiler Construction D7011E

Early computers (1940s) cost millions of dollars and were programmed in machine language. less error-prone method needed

LECTURE 1. Overview and History

What Is Computer Science? The Scientific Study of Computation. Expressing or Describing

CS 330 Lecture 18. Symbol table. C scope rules. Declarations. Chapter 5 Louden Outline

What is a programming language?

CSc 372 Comparative Programming Languages

NOTE: Answer ANY FOUR of the following 6 sections:

Seminar in Programming Languages

IA010: Principles of Programming Languages

Closures. Mooly Sagiv. Michael Clarkson, Cornell CS 3110 Data Structures and Functional Programming

CS101 Introduction to Programming Languages and Compilers

The role of semantic analysis in a compiler

CS321 Languages and Compiler Design I. Winter 2012 Lecture 1

CS 3304 Comparative Languages. Lecture 1: Introduction

Topics Covered Thus Far. CMSC 330: Organization of Programming Languages. Language Features Covered Thus Far. Programming Languages Revisited

INSTITUTE OF AERONAUTICAL ENGINEERING

Semantic Analysis. Outline. The role of semantic analysis in a compiler. Scope. Types. Where we are. The Compiler Front-End

Programmiersprachen (Programming Languages)

1DL321: Kompilatorteknik I (Compiler Design 1) Introduction to Programming Language Design and to Compilation

PROGRAMMING LANGUAGE PARADIGMS & THE MAIN PRINCIPLES OF OBJECT-ORIENTED PROGRAMMING

Why are there so many programming languages?

1DL321: Kompilatorteknik I (Compiler Design 1)

Closures. Mooly Sagiv. Michael Clarkson, Cornell CS 3110 Data Structures and Functional Programming

Language Translation, History. CS152. Chris Pollett. Sep. 3, 2008.

Lecture 1: Course Introduction

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

Lecture 1. Introduction to course, Welcome to Engineering, What is Programming and Why is this the first thing being covered in Engineering?

CSCI-GA Scripting Languages

CMSC 331 Final Exam Section 0201 December 18, 2000

CS2900 Introductory Programming with Python and C++ Kevin Squire LtCol Joel Young Fall 2007

1. true / false By a compiler we mean a program that translates to code that will run natively on some machine.

Chapter 1. Preview. Reason for Studying OPL. Language Evaluation Criteria. Programming Domains

Semantic Analysis. Lecture 9. February 7, 2018

Tail Calls. CMSC 330: Organization of Programming Languages. Tail Recursion. Tail Recursion (cont d) Names and Binding. Tail Recursion (cont d)

Why study Programming Language Concepts? Chapter One. Language Evaluation Criteria. Programming Domains. Readability Writability Reliability Cost

CS A331 Programming Language Concepts

St. MARTIN S ENGINEERING COLLEGE Dhulapally, Secunderabad

Type Inference. Prof. Clarkson Fall Today s music: Cool, Calm, and Collected by The Rolling Stones

So what does studying PL buy me?

Concepts of Programming Languages

Undergraduate Compilers in a Day

Outline. Programming Languages 1/16/18 PROGRAMMING LANGUAGE FOUNDATIONS AND HISTORY. Current

Lecture 1: Course Introduction

CS 50 Introduction to Computer Science I

Program Abstractions, Language Paradigms. CS152. Chris Pollett. Aug. 27, 2008.

CS558 Programming Languages

Compilers and interpreters

CIS24 Project #3. Student Name: Chun Chung Cheung Course Section: SA Date: 4/28/2003 Professor: Kopec. Subject: Functional Programming Language (ML)

9/5/17. The Design and Implementation of Programming Languages. Compilation. Interpretation. Compilation vs. Interpretation. Hybrid Implementation

COMP-421 Compiler Design. Presented by Dr Ioanna Dionysiou

MIDTERM EXAM (Solutions)

Programming Paradigms

CST-402(T): Language Processors

CMSC 330: Organization of Programming Languages. Functional Programming with OCaml

CS 415 Midterm Exam Spring SOLUTION

Chapter 2 Preview. Preview. History of Programming Languages. History of Programming Languages. History of Programming Languages

CSc 520. Course Outline (Subject to change) Course Outline (Subject to change)... Principles of Programming Languages. Christian Collberg

CS Compiler Construction West Virginia fall semester 2014 August 18, 2014 syllabus 1.0

CSE 341: Programming Languages

Compiling and Interpreting Programming. Overview of Compilers and Interpreters

Lecture 13 CIS 341: COMPILERS

CS 415 Midterm Exam Spring 2002

Hi! My name is Sorin. Programming Languages. Why study PL? (discussion) Why study PL? Course Goals. CSE 130 : Fall 2013

Programming Languages

Programming Languages

Notes from a Short Introductory Lecture on Scala (Based on Programming in Scala, 2nd Ed.)

Topics Covered Thus Far CMSC 330: Organization of Programming Languages

CS Exam #1-100 points Spring 2011

Question No: 1 ( Marks: 1 ) - Please choose one One difference LISP and PROLOG is. AI Puzzle Game All f the given

Transcription:

Course Goal CMSC 330: Organization of Programming Languages Introduction Learn how programming languages work Broaden your language horizons! Different programming languages! Different language features and tradeoffs Study how languages are implemented! What really happens when I write x.foo( )? Study how languages are described / specified! Mathematical formalisms 1 CMSC 330 2 All Languages Are Equivalent A language is Turing complete if it can compute any function computable by a Turing Machine Essentially all general-purpose programming languages are Turing complete! I.e., any program can be written in any programming language Why Study Programming Languages? To allow you to choose between languages Using the right programming languages for a problem may make programming! Easier! Faster! Less error-prone Therefore this course is useless?!! Learn only one programming language, always use it CMSC 330 3 CMSC 330 4

Why Study Programming Languages? To make you better at learning new languages! You may need to add code to a legacy system E.g., FORTRAN (1954), COBOL (1959),! You may need to write code in a new language Your boss says, From now on, all software will be written in {C++/Java/C#/Python/ }! You may think Java is the ultimate language But if you are still programming or managing programmers in 20 years, they probably won t be using Java Why Study Programming Languages? To make you better at using languages you think you already know! Many design patterns in Java are functional programming techniques! Understanding what a language is good for will help you know when it is appropriate to use CMSC 330 5 CMSC 330 6 Course Subgoals Learn fundamental CS concepts! Regular expressions! Context-free grammars! Automata theory! Compilers and parsing! Concurrent programming Improve programming skills! Learn how to learn new programming languages! Learn how to program in new programming styles Calendar / Course Overview Exams! 2 midterms, final exam Projects! 2 Ruby, 2 OCaml, 2 concurrency Programming languages! Ruby! OCaml!?? CMSC 330 7 CMSC 330 8

Rules and Reminders Use lecture notes as your text! Supplement with readings, internet Keep ahead of your work! Get help as soon as you need it Office hours, web forum, email Don t disturb other students in class! Keep cell phones quiet! Use laptops only for school work Academic Integrity All written work (including projects) must be done on your own! Do not copy code from other students! Do not copy code from the web Can work together on practice questions for the exams Work together on high-level project questions! Never look at another student s code! If unsure, ask instructor CMSC 330 9 CMSC 330 10 Syllabus Scripting languages (Ruby) Regular expressions and finite automata Context-free grammars Functional programming (OCaml) Environments, scoping, and binding Concurrency Advanced topics and history Changing Language Goals 1950s-60s: Compile programs to execute efficiently! Language features based on hardware concepts Integers, reals, goto statements! Programmers cheap; machines expensive Keep the machine busy Today:! Language features based on design concepts Encapsulation, records, inheritance, functionality, assertions! Processing power and memory very cheap; programmers expensive Ease the programming process CMSC 330 11 CMSC 330 12

Language Attributes to Consider Syntax! What a program looks like Semantics! What a program means Imperative Languages Also called procedural or von Neumann Building blocks are functions and statements! Programs that write to memory are the norm int x = 0; while (x < y) x := x + 1;! FORTRAN (1954)! Pascal (1970)! C (1971) CMSC 330 13 CMSC 330 14 Functional Languages Also called applicative languages No or few writes to memory! Functions are higher-order let rec map f = function [] -> [] x::l -> (f x)::(map f l) Logical Languages Also called rule-based or constraint-based Program consists of a set of rules! A :- B If B holds, then A holds append([], L2, L2). append([x Xs],Ys,[X Zs]) :- append(xs,ys,zs).! LISP (1958)! ML (1973)! Scheme (1975)! Haskell (1987)! OCaml (1987) CMSC 330 15! PROLOG (1970)! Various expert systems CMSC 330 16

Object-Oriented Languages Programs are built from objects! Objects combine functions and data! Often have classes and inheritance! Base may be either imperative or functional class C { int x; int getx() {return x;} } class D extends C { }! Smalltalk (1969)! C++ (1986)! Java (1995) CMSC 330 17 Scripting Languages Rapid prototyping languages for little tasks! Typically with rich text processing abilities! Generally very easy to use! Base may be imperative or functional; may be OO #!/usr/bin/perl for ($j = 0; $j < 2*$lc; $j++) { $a = int(rand($lc)); sh (1971) perl (1987) Python (1991) Ruby (1993) CMSC 330 18 Other Languages There are lots of other languages around with various features! COBOL (1959) Business applications Imperative, rich file structure! BASIC (1964) MS Visual Basic widely used Originally an extremely simple language Now a single word oxymoron! Logo (1968) Introduction to programming! Forth (1969) Mac Open Firmware Extremely simple stack-based language for PDP-8! Ada (1979) The DoD language Realtime! Postscript (1982) Printers; based on Forth! CMSC 330 19 Ruby An imperative, object-oriented scripting language! Created in 1993 by Yukihiro Matsumoto! Similar in flavor to many other scripting languages (e.g., perl, python)! Much cleaner than perl! Full object-orientation (even primitives are objects!) CMSC 330 20

A Small Ruby Example intro.rb: def greet(s) print("hello, ) print(s) print("!\n ) end % irb # you ll usually use ruby instead irb(main):001:0> require "intro.rb" => true irb(main):002:0> greet("world") Hello, world! => nil OCaml A mostly-functional language! Has objects, but won t discuss (much)! Developed in 1987 at INRIA in France! Dialect of ML (1973) Natural support for pattern matching! Makes writing certain programs very elegant Has a really nice module system! Much richer than interfaces in Java or headers in C Includes type inference! Types checked at compile time, but no annotations CMSC 330 21 CMSC 330 22 A Small OCaml Example intro.ml: $ ocaml let greet s = begin print_string "Hello, "; print_string s; print_string "!\n" end Objective Caml version 3.08.3 # #use "intro.ml";; val greet : string -> unit = <fun> # greet "world";; Hello, world! - : unit = () Attributes of a Good Language 1.! Clarity, simplicity, and unity Provides both a framework for thinking about algorithms and a means of expressing those algorithms 2.! Orthogonality Every combination of features is meaningful Features work indepdenently 3.! Naturalness for the application Program structure reflects the logical structure of algorithm 4.! Support for abstraction Program data reflects problem being solved 5.! Ease of program verification Verifying that program correctly performs its required function CMSC 330 23 CMSC 330 24

Attributes of a Good Language Executing Languages 6.! Programming environment External support for the language 7.! Portability of programs Transportability of the resulting programs from the computer on which they are developed to other computer systems 8.! Cost of use Program execution, program translation, program creation, and program maintenance Suppose we have a program P written in a high-level language (i.e., not machine code) There are two main ways to run P 1.! Compilation 2.! Interpretation CMSC 330 25 CMSC 330 26 Compilation or Translation Steps of Compilation def greet(s) print("hello, ) print(s) print("!\n ) end 11230452 23230456 01200312 world Hello, world Source program translated to another language! Often machine code, which can be directly executed! Advantages? Disadvantages? 1. Lexical Analysis (Scanning) Break up source code into tokens such as numbers, identifiers, keywords, and operators CMSC 330 27 CMSC 330 28

Steps of Compilation Steps of Compilation 2. Parsing (Syntax Analysis) Group tokens together into higher-level language constructs (conditionals, assignment statements, functions, ) 3. Intermediate Code Generation Verify that the source program is valid and translate it into an internal representation! May have more than one intermediate rep CMSC 330 29 CMSC 330 30 Steps of Compilation Interpretation def greet(s) print("hello, ) print(s) print("!\n ) end Hello, world world 4. Optimization (optional) Improve the efficiency of the generated code! Eliminate dead code, redundant code, etc.! Change algorithm without changing functionality (e.g., X=Y+Y+Y+Y! X=4*Y! X = Y<<2) [If interested in compilation, take CMSC 430] CMSC 330 31 Interpreter executes each instruction in source program one step at a time! No separate executable! Advantages? Disadvantages? CMSC 330 32

Compiler or Intepreter? gcc Compiler C code translated to object code, executed directly on hardware javac Compiler Java source code translated to Java byte code tcsh/bash Interpreter commands executed by shell program java Interpreter Java byte code executed by virtual machine Compilation or Interpretation Not so simple today Previously! Build program to use hardware efficiently! Often use of machine language for efficiency Today! No longer write directly in machine language! Use of layers of software! Concept of virtual machines Each layer is a machine that provides functions for the next layer (e.g., javac/java distinction) This is an example of abstraction, a basic building-block in computer science CMSC 330 33 CMSC 330 34