* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Systematic Development of Programming Languages
Name mangling wikipedia , lookup
Recursion (computer science) wikipedia , lookup
Java (programming language) wikipedia , lookup
Ada (programming language) wikipedia , lookup
Join-pattern wikipedia , lookup
History of compiler construction wikipedia , lookup
Assembly language wikipedia , lookup
Interpreter (computing) wikipedia , lookup
Control flow wikipedia , lookup
Java performance wikipedia , lookup
Falcon (programming language) wikipedia , lookup
Reactive programming wikipedia , lookup
Programming language wikipedia , lookup
Structured programming wikipedia , lookup
Corecursion wikipedia , lookup
Object-relational impedance mismatch wikipedia , lookup
Go (programming language) wikipedia , lookup
Scala (programming language) wikipedia , lookup
Object-oriented programming wikipedia , lookup
Abstraction (computer science) wikipedia , lookup
Systematic Development of Programming Languages cs7100(Prasad) L1Intro 1 Orthogonal Parameters Conceptual view (Model of Computation) » imperative, functional, relational,... Level of abstraction (Model of Implementation) » problem domain » ... » machine – Computational Task : I/O relation to be implemented cs7100(Prasad) L1Intro 2 1. Customized Digital Computer Task j Ij Oj Task k Ik Ok Rig different circuit for each task cs7100(Prasad) L1Intro 3 2. Stored Program Computing von Neumann showed the existence of a Universal Machine (hardware) that can be customized using control inputs to carry out different tasks. Software is the encoding of the task to control this machine. encoding(Tj) Ij cs7100(Prasad) Oj L1Intro 4 Imperative Languages Model of Computation » ALU + Memory + Input + Output (von Neumann architecture) Levels of Abstraction (“Human Interface”) – Machine Language » Binary Representation of the task – Assembly Language » Symbolic Representation of the task cs7100(Prasad) L1Intro 5 Assembly Language ADDI R4,R2,21 ADDI R4 R2 21 10101100100000100000000000010101 Use symbols instead of binary digits to describe fields of instructions. Every aspect of machine visible in program: – One statement per machine instruction. – Register allocation, call stack, etc. must be managed explicitly. No cs7100(Prasad) structure: everything looks the same. L1Intro 6 Pros and Cons of Assembly Language Avoids Absolute Addressing » relocatable, reusable/shareable Uses Symbolic » readable Names Low-level programming wastes effort in coding a solution rather than solving a problem. Difficult cs7100(Prasad) to build and maintain large programs. L1Intro 7 High-level Language Provides notation to describe problem solving strategies rather than organize data and instructions at machine-level. Improves programmer productivity by supporting features to abstract/reuse code, and to improve reliability/robustness of programs. Requires a compiler. cs7100(Prasad) L1Intro 8 Levels of Abstraction Problem Domain (stacks, tables) (Class Hierarchies) Java/C#/Scala/Python/Scheme/Clojure C++ Ada (ADTs) C Pascal (arrays) Assembly Language Machine (char, int) cs7100(Prasad) L1Intro 9 Evolution of Programming Languages • FORTRAN ( FORmula TRANslator) Goals : Scientific Computations Efficiency of execution Compile-time storage determination Features : Symbolic Expressions Subprograms Absence of Recursion • COBOL Goal: Business Application Features : Record/Structure; File Handling cs7100(Prasad) L1Intro 10 Evolution of Programming Languages • ALGOL - 60 (ALGOrithmic Language) Goals : Communicating Algorithms Features : Block Structure (Top-down design) Recursion (Problem-solving strategy) BNF - Specification • LISP (LISt Processing) Goals : Manipulating symbolic information Features : List Primitives Interpreters / Environment cs7100(Prasad) L1Intro 11 Problems Not rugged wrt typographical errors Do 10 I = 1.20 vs Do 10 I = 1,20 I5 = I5 + 1 vs I5 = IK + 1 – Remedy: Use spaces to delimit tokens, Declare before use Unintended Coercion I > J and false – Remedy: Type checking cs7100(Prasad) L1Intro 12 Evolution of Programming Languages • Pascal Goal : Structured Programming, Type checking, Compiler writing. Features : • Rich set of data types for efficient algorithm design • E.g., Records, sets, ... • Variety of “readable” single-entry single-exit control structures • E.g., for-loop, while-loop,... • Efficient Implementation • Recursive descent parsing cs7100(Prasad) L1Intro 13 Programming in the Large Programs no longer monolithic. Developed by a team of programmers. Code sharing and reuse very important. Correctness, reliability, and robustness essential. – Data Abstraction / Encapsulation / Strong Typing » Ada, CLU, Modula etc. cs7100(Prasad) L1Intro 14 Other Languages Functional » Common LISP, Scheme, Clojure » ML, Haskell Logic » Prolog Object-oriented » Smalltalk, SIMULA, Modula-3, Oberon » C++, Eiffel, Ada-95, Java, C# Hybrid » Python, Ruby, Scala Application cs7100(Prasad) specific languages and tools L1Intro 15 Scripting vs Systems Programming Languages Designed for gluing applications : flexibility Interpreted Dynamic typing and variable creation Data and code integrated : meta-programming supported Examples: PERL, Tcl, Python, Ruby, PHP, Scheme, Visual Basic, etc. cs7100(Prasad) L1Intro Designed for building applications : efficiency Compiled Static typing and variable declaration Data and code separated : cannot create/run code on the fly Examples: PL/1, Ada, Java, C, C++, C#, Scala, etc. 16 (cont’d) Does application implement complex algorithms and data structures? Does application process large data sets (>10,000 items)? Are application functions well-defined, fixed? If yes, consider a system programming language. Is the main task to connect components, legacy apps? Does the application manipulate a variety of things? Does the application have a GUI? Are the application's functions evolving rapidly? Must the application be extensible? Does the application do a lot of string manipulation? If yes, consider a scripting language. cs7100(Prasad) L1Intro 17 Jython (for convenient access to Java APIs) I:\tkprasad\cs7100>jython … >>> import javax.swing as swing >>> win = swing.JFrame("Welcome to Jython") >>> win.size = (200, 200) >>> win.show() >>> ^Z cs7100(Prasad) L1Intro 18 Java vs Jython map = new HashMap(); map.put("one",new Integer(1)); map.put("two",new Integer(2)); map.put("three",new Integer(3)); System.out.println(map.get("one")); list = new LinkedList(); list.add(new Integer(1)); list.add(new Integer(2)); list.add(new Integer(3)); cs7100(Prasad) map = {"one":1,"two":2,"three":3} print map ["one"] list = [1, 2, 3] L1Intro 19 (cont’d) for (Iterator i; i.hasNext();) { i.next(); } for i in list: (* iterator *) List newList = ArrayList() for (Iterator i; i.hasNext();) { Object obj = i.next(); newList.add(function(obj)) } cs7100(Prasad) L1Intro newList = [function(i) for i in oldList] (* list comprehension *) 20 Functional Programming in Jython apply(lambda x,y : x*y, (10, 20)) # 200 map(lambda x,y: x + y, [[1,2],[“a”]], [[“3”],[“b”]]) # [[1, 2, ‘3’], [‘a’, ‘b’]] reduce(lambda x,y: x + y, [1,2,3], 100) # 106 filter(lambda x: x > 0, range(10,-5,-3)) # [10, 7 , 4, 1] cs7100(Prasad) L1Intro 21 Meta-programming in Jython Dynamic code evaluation print eval (“[1,3] + range(6,10,3)”) # [1, ,3, 6, 9] x = 2 + 3j exec “x = 5, x + x” #(5, (4+6j) cs7100(Prasad) L1Intro 22 Java functionality through Jython import java.lang as lang import javax.swing as swing import java.awt as awt names = ["Groucho", "Chico", "Harpo"] quotes = {"Groucho": "Say the secret word", "Chico": "Viaduct?", "Harpo": "HONK!"} def buttonPressed(event): field.text = quotes[event.source.text] def exit(event): lang.System.exit(0) def createButton(name): return swing.JButton(name, preferredSize=(100,20), actionPerformed=buttonPressed) cs7100(Prasad) L1Intro 23 win = swing.JFrame("Welcome to Jython", size=(200, 200),windowClosing=exit) win.contentPane.layout = awt.FlowLayout( ) field = swing.JTextField(preferredSize=(200,20)) win.contentPane.add(field) buttons = [createButton(each) for each in names] for eachButton in buttons: win.contentPane.add(eachButton) win.pack( ) win.show( ) cs7100(Prasad) L1Intro 24 Current Trend Multiparadigm languages – Functional constructs for programming in the small » Focus on conciseness and correctness – Object-Oriented constructs for programming in the large » Focus on programmer productivity, robustness and code evolution Example languages – Older: Python, Ruby – Recent: Scala, F# cs7100(Prasad) L1Intro 25 Scheme (dialect of LISP) Recursive definitions Symbolic computation : List Processing Higher-order functions Dynamic type checking Functional + Imperative features Automatic storage management – Provides a uniform executable platform for studying, specifying, and comparing languages. cs7100(Prasad) L1Intro 26 DrRacket (IDE for dialect of LISP) http://docs.racket-lang.org/quick/ http://docs.racket- lang.org/teachpack/2htdp2htdp.html http://picturingprograms.com/download/cha p03.pdf cs7100(Prasad) L1Intro 27 Standard ML and Scala Strongly typed language – static type inference – SML supports polymorphic types Supports Abstract Data Types and Modules Higher-order functions Pattern matching – cf. Prolog, list-processing in Scheme cs7100(Prasad) L1Intro 28 Java vs Scala //Java - what we're used to seeing public String buildEpochKey(String... keys) { StringBuilder s = new StringBuilder("elem") for(String key:keys) { if(key != null) { s.append(".") s.append(key) } } return s.toString(). toLowerCase() } cs7100(Prasad) L1Intro 29 Java vs Scala //Scala def buildEpochKey(keys: String*): String = { ("elem" +: keys) . mkString(".") . toLowerCase } println(buildEpochKey("aBcDeF")) cs7100(Prasad) L1Intro 30