CSE373: Data Structure & Algorithms Lecture 23: Programming Languages Aaron Bauer Winter 2014.

Slides:



Advertisements
Similar presentations
Introduction to .NET Framework
Advertisements

Programming Languages Marjan Sirjani 2 2. Language Design Issues Design to Run efficiently : early languages Easy to write correctly : new languages.
INF 212 ANALYSIS OF PROG. LANGS Type Systems Instructors: Crista Lopes Copyright © Instructors.
CSE 341, Winter Type Systems Terms to learn about types: –Type –Type system –Statically typed language –Dynamically typed language –Type error –Strongly.
Type Checking.
Reasons to study concepts of PL
Programming Languages Structure
ISBN Lecture 01 Preliminaries. Copyright © 2004 Pearson Addison-Wesley. All rights reserved.1-2 Lecture 01 Topics Motivation Programming.
CSE S. Tanimoto Syntax and Types 1 Representation, Syntax, Paradigms, Types Representation Formal Syntax Paradigms Data Types Type Inference.
Describing Syntax and Semantics
Type Inference: CIS Seminar, 11/3/2009 Type inference: Inside the Type Checker. A presentation by: Daniel Tuck.
CSE 373: Data Structure & Algorithms Lecture 25: Programming Languages Nicki Dell Spring 2014.
CSE341: Programming Languages Lecture 11 Type Inference Dan Grossman Winter 2013.
WHAT IS PHP PHP is an HTML-embedded scripting language primarily used for dynamic Web applications.
JAVA v.s. C++ Programming Language Comparison By LI LU SAMMY CHU By LI LU SAMMY CHU.
Introduction to High-Level Language Programming
+ Java vs. Javascript Jessi Style. + Java Compiled Can stand on its own Written once, run anywhere Two-stage debugging Java is an Object Oriented Programming.
Overview. Copyright © 2006 The McGraw-Hill Companies, Inc. Chapter 1 Overview A good programming language is a conceptual universe for thinking about.
Groovy WHAT IS IT? HOW DOES IT WORK? IS IT USEFUL?
CS 355 – Programming Languages
C++ Programming. Table of Contents History What is C++? Development of C++ Standardized C++ What are the features of C++? What is Object Orientation?
CIS 199 Test 01 Review. Computer Hardware  Central Processing Unit (CPU)  Brains  Operations performed here  Main Memory (RAM)  Scratchpad  Work.
CSE373: Data Structure & Algorithms Lecture 22: Beyond Comparison Sorting Aaron Bauer Winter 2014.
CS 363 Comparative Programming Languages
Types for Programs and Proofs Lecture 1. What are types? int, float, char, …, arrays types of procedures, functions, references, records, objects,...
ICAPRG301A Week 4Buggy Programming ICAPRG301A Apply introductory programming techniques Program Bugs US Navy Admiral Grace Hopper is often credited with.
CSC3315 (Spring 2009)1 CSC 3315 Programming Languages Hamid Harroud School of Science and Engineering, Akhawayn University
Computing with C# and the.NET Framework Chapter 1 An Introduction to Computing with C# ©2003, 2011 Art Gittleman.
DEPARTMENT OF COMPUTER SCIENCE & TECHNOLOGY FACULTY OF SCIENCE & TECHNOLOGY UNIVERSITY OF UWA WELLASSA 1 CST 221 OBJECT ORIENTED PROGRAMMING(OOP) ( 2 CREDITS.
1 Chapter 10: Data Abstraction and Object Orientation Aaron Bloomfield CS 415 Fall 2005.
JAVA SERVER PAGES. 2 SERVLETS The purpose of a servlet is to create a Web page in response to a client request Servlets are written in Java, with a little.
University of Houston-Clear Lake Proprietary© 1997 Evolution of Programming Languages Basic cycle of improvement –Experience software difficulties –Theory.
Chapter 3.5 Memory and I/O Systems. 2 Memory Management Memory problems are one of the leading causes of bugs in programs (60-80%) MUCH worse in languages.
Copyright © 2006 Addison-Wesley. All rights reserved.1-1 ICS 410: Programming Languages.
Basics of Java IMPORTANT: Read Chap 1-6 of How to think like a… Lecture 3.
Copyright © 2007 Addison-Wesley. All rights reserved.1-1 Reasons for Studying Concepts of Programming Languages Increased ability to express ideas Improved.
CSE 425: Data Types I Data and Data Types Data may be more abstract than their representation –E.g., integer (unbounded) vs. 64-bit int (bounded) A language.
Introduction to PHP Advanced Database System Lab no.1.
We will talking about story of JAVA language. By Kristsada Songpartom.
CSE373: Data Structure & Algorithms Lecture 24: Memory Hierarchy and Data Locality Aaron Bauer Winter 2014.
Semantics In Text: Chapter 3.
RUBY by Ryan Chase.
How to execute Program structure Variables name, keywords, binding, scope, lifetime Data types – type system – primitives, strings, arrays, hashes – pointers/references.
CSE 374 Programming Concepts & Tools Hal Perkins Fall 2015 Lecture 12 – C: structs, linked lists, and casts.
8 th Semester, Batch 2009 Department Of Computer Science SSUET.
Announcements Assignment 1 due Wednesday at 11:59PM Quiz 1 on Thursday 1.
Dr. Abdullah Almutairi Spring PHP is a server scripting language, and a powerful tool for making dynamic and interactive Web pages. PHP is a widely-used,
PHP is a server scripting language, and a powerful tool for making dynamic and interactive Web pages. PHP is a widely-used, free, and efficient alternative.
Sung-Dong Kim, Dept. of Computer Engineering, Hansung University Java - Introduction.
Heath Carroll Bill Hanczaryk Rich Porter.  A Theory of Type Polymorphism in Programming ◦ Robin Milner (1977)  Milner credited with introducing the.
Concepts of Programming Languages
Basic 1960s It was designed to emphasize ease of use. Became widespread on microcomputers It is relatively simple. Will make it easier for people with.
Concepts of Programming Languages
Types for Programs and Proofs
PROGRAMMING LANGUAGES
What, Where and Why Swift
Choosing Technologies
Representation, Syntax, Paradigms, Types
CSE 374 Programming Concepts & Tools
Type Systems Terms to learn about types: Related concepts: Type
Representation, Syntax, Paradigms, Types
Programming Languages 2nd edition Tucker and Noonan
Representation, Syntax, Paradigms, Types
The Challenge of Cross - Language Interoperability
Type Systems Terms to learn: Type Type system
Representation, Syntax, Paradigms, Types
Tonga Institute of Higher Education IT 141: Information Systems
Tonga Institute of Higher Education IT 141: Information Systems
Type Systems Terms to learn about types: Related concepts: Type
Presentation transcript:

CSE373: Data Structure & Algorithms Lecture 23: Programming Languages Aaron Bauer Winter 2014

Choosing a Programming Language Most of the time you won’t have a choice about what programming language to use –Software is already written in a particular language –Platform requires a specific language (Objective-C for iOS) –Language required by computational tool (Mathematica, etc.) Still important to understand capabilities and limitations of language When you do get to choose, your choice can have tremendous impact –This is despite theoretical equivalence! –Turing Completeness Winter 20142CSE373: Data Structures & Algorithms

Turing Completeness A programming language is said to be Turing complete if it can compute every computable function –Recall the Halting Problem as a non-computable function In other words, every Turing complete language can approximately simulate every other Turing complete language Virtually every programming language you might encounter is Turing complete –Data or markup languages (e.g. JSON, XML, HTML) are an exception So a choice of language is about how computation is described, not about what it’s possible to compute Winter 20143CSE373: Data Structures & Algorithms

What we might want from a Language Readable (good syntax, intuitive semantics) High-level of abstraction (but still possible to access low level) Fast Good concurrency and parallelism Portable Manage side effects Expressive Make dumb things hard Secure Provably correct etc. Winter 20144CSE373: Data Structures & Algorithms

Type System Collection of rules to assign types to elements of the language –Values, variables, functions, etc. The goal is to reduce bugs –Logic errors, memory errors (maybe) Governed by type theory, an incredibly deep and complex topic The type safety of a language is the extent to which its type system prevents or discourages relevant type errors –Via type checking We’ll cover the following questions: –When does the type system check? –What does the type system check? –What do we have to tell the type system? Winter 20145CSE373: Data Structures & Algorithms

When Does It Check? Static type-checking (check at compile-time) –Based on source code (program text) –If program passes, it’s guaranteed to satisfy some type- safety properties on all possible inputs –Catches bugs early (program doesn’t have to be run) –Possibly better run-time performance Less (or no) checking to do while program runs Compiler can optimize based on type –Inherently conservative if then else –Not all useful features can be statically checked Many languages use both static and dynamic checking Winter 20146CSE373: Data Structures & Algorithms

When Does it Check? Dynamic type-checking (check at run-time) –Performed as the program is executing –Often “tag” objects with their type information –Look up type information when performing operations –Possibly faster development time edit-compile-test-debug cycle –Fewer guarantees about program correctness Winter 20147CSE373: Data Structures & Algorithms

What Does it Check? Nominal type system (name-based type system) –Equivalence of types based on declared type names –Objects are only subtypes if explicitly declared so –Can be statically or dynamically checked Structural type system (property-based type system) –Equivalence of types based on structure/definition –An element A is compatible with an element B if for each feature in B’s type, there’s an identical feature in A’s type Not symmetric, subtyping handled similarly Duck typing –Type-checking only based on features actually used –Only generates run-time errors Winter 20148CSE373: Data Structures & Algorithms

How Much do we Have to Tell it? Type Inference –Automatically determining the type of an expression –Programmer can omit type annotations Instead of (in C++) std::vector ::const_iterator itr = myvec.cbegin() use (in C++11) auto itr = myvec.cbegin() –Can make programming tasks easier –Only happens at compile-time Otherwise, types must be manifest (always written out) Winter 20149CSE373: Data Structures & Algorithms

How Flexible is it? Type conversion (typecasting) –Changing a value from one type to another, potentially changing the storage requirements –Reinterpreting the bit pattern of a value from one type to another Can happen explicitly or implicitly Can be done safely (checked) or unsafely (unchecked) Objects can be upcast (to supertype) or downcast (to subtype) Winter CSE373: Data Structures & Algorithms double da = 3.3 double db = 3.3; double dc = 3.4; int result = (int)da + (int)db + (int)dc; int result = da + db + dc;

What Does it All Mean? Most of these distinctions are not mutually exclusive –Languages that do static type-checking often have to do some dynamic type-checking as well –Some languages use a combination of nominal and duck typing Terminology useful shorthand for describing language characteristics The terms “strong” or “weak” typing are often applied –These lack any formal definition –Use more precise, informative descriptors instead Languages aren’t necessarily limited to “official” tools Winter CSE373: Data Structures & Algorithms

Memory Safety Memory errors –Buffer overflow –Dynamic –Uninitialized variables –Out of memory Often closely tied to type safety Can be checked at compile-time or run-time (or not at all) Memory can be managed manually or automatically –Garbage collection is a type of automatic management –Some languages make use of both Winter CSE373: Data Structures & Algorithms

Programming Paradigms A programming paradigm describes some fundamental way of constructing and organizing computer programs –A programming language supports one or more paradigms Imperative –A program is a series of statements which explicitly change the program state. Declarative –A program describes what should happen without describing how it happens Functional (can be considered a type of declarative) –Computation done by evaluation of functions, avoiding state and mutable data Object-oriented (as opposed to procedural) –Computation done via objects (containing data and methods) Winter CSE373: Data Structures & Algorithms

Language Development Many attempts to develop a “universal language” –have failed due to diverse needs –program size, programmer expertise, program requirements, program evolution, and personal taste Languages often change over time –Generics were added to Java 9 years after initial release –Take extreme care not to break existing code One “standard,” many implementations –Standard defines syntax and semantics Whether a language will become popular is unpredictable –Some research suggests things like library availability and social factors may be more important than language features Winter CSE373: Data Structures & Algorithms

Java Age: 19 years Developer: Oracle Corporation Paradigms: imperative, object-oriented Type system: static, nominative, manifest One of the most popular languages in use today –Lots of great tools and other resources Write Once, Run Anywhere approach (via JVM) –Used to be considered slow, improved by JIT optimization –Other languages using JVM (Scala, Jython, Clojure, Groovy) Can be quite verbose, lacks a number of nice features Sees lots of use in large-scale enterprise software I would only choose to use Java if given no other options Winter CSE373: Data Structures & Algorithms

C/C++ Age: 42/31 years Developer: International Organization for Standardization Paradigms: imperative, procedural, object-oriented (C++ only) Type system: static, nominative, manifest (C++11 has inference) Two of the most popular languages in use today “Closer to the hardware” than Java –Used where predictable resource use is necessary –OS, graphics, games, compilers Manual memory management, less protection from memory errors, sometimes inscrutable compiler errors –Generally easier to “do dumb things” I’ve only used C/C++ when doing systems programming or when a library I needed was in C++ Winter CSE373: Data Structures & Algorithms

Winter CSE373: Data Structures & Algorithms

C# Age: 14 years Developer: Microsoft Paradigms: imperative, object-oriented, functional Type system: static, nominative, partially inferred –optionally dynamic Runs on the.NET Framework –Provides things like garbage collection (similar to the JVM) Allows access to system functions with unsafe keyword Less verbose than Java, safer than C++ Primary use is writing Windows applications I have really enjoyed programming in C#, but Windows-only can be a big drawback Winter CSE373: Data Structures & Algorithms

Haskell Age: 24 years Developer: many (research language) Paradigm: pure functional, lazy evaluation Type system: static, inferred Pure functional programming is a different way of thinking –maybe liberating, maybe frustrating Functional programming has seen only limited industrial use Safer and more transparent than an imperative language –Same function with same args always returns same value –Allows for compiler optimizations Performance suffers as hardware better suited to mutable data I think functional programming is fascinating, and enough languages include functional elements to make it worth learning Winter CSE373: Data Structures & Algorithms

Haskell examples Winter CSE373: Data Structures & Algorithms factorial 0 = 1 factorial n | n > 0 = n * factorial (n - 1) factorial n = product [1..n] quicksort :: Ord a => [a] -> [a] quicksort [] = [] quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater) where lesser = filter (< p) xs greater = filter (>= p) xs product xs = prod xs 1 where prod [] a = a prod (x:xs) a = prod xs (a*x)

SQL (Structured Query Language) Age: 40 years Developer: ISO Paradigms: declarative Type system: static Used as a database query language –Declarative paradigm perfect for this application Using SQL is both easy and very powerful If you have a lot of data, definitely consider using free database software like MySQL Winter CSE373: Data Structures & Algorithms

Python Age: 23 years Developer: Python Software Foundation Paradigm: imperative, object-oriented, functional, procedural Type system: dynamic, duck Has a Read-Eval-Print-Loop (REPL) –Useful for experimenting or one-off tasks Scripting language –Supports “scripts,” small programs run without compilation Often used in web development or scientific/numeric computing Variables don’t have types, only values have types Whitespace has semantic meaning Lack of variable types and compile-time checks mean more may be required of documentation and testing Python is my language of choice for accomplishing small tasks Winter CSE373: Data Structures & Algorithms

JavaScript Age: 19 years Developer: Mozilla Foundation Paradigm: imperative, object-oriented, functional, procedural Type system: dynamic, duck Also a scripting language (online/browser REPLs exist) Primary client-side language of the web Does inheritance through prototypes rather than classes –Objects inherit by cloning the behavior of existing objects Takes a continue at any cost approach –Shared by many web-focused languages (PHP, HTML) –Things that would be errors in other languages don’t stop execution, and are allowed to fail silently JavaScript is nice for simple things, immediately running on the web is great, but doing larger/more complex software is terrible Winter CSE373: Data Structures & Algorithms

PHP Age: 19 years Developer: The PHP Group Paradigm: imperative, object-oriented, functional, procedural Type system: dynamic Works with Apache (>50% all websites), so very common server-side language Minimal type system, lots of strange behavior, just awful –If two strings are compared with ==, PHP will silently cast them to numbers (0e45h7 == 0w2318 evaluates to true) I’ve never used it and I never will (hopefully) Winter CSE373: Data Structures & Algorithms

LOLCODE Age: 7 years An example of an esoteric programming language Winter CSE373: Data Structures & Algorithms HAI CAN HAS STDIO? PLZ OPEN FILE "LOLCATS.TXT"? AWSUM THX VISIBLE FILE O NOES INVISIBLE "ERROR!" KTHXBYE HAI CAN HAS STDIO? IM IN YR LOOP UPPIN YR VAR TIL BOTH SAEM VAR AN 10 VISIBLE SUM OF VAR AN 1 IM OUTTA YR LOOP KTHXBYE