Comparative Programming Languages
Total Page:16
File Type:pdf, Size:1020Kb
Load more
Recommended publications
-
Application and Interpretation
Programming Languages: Application and Interpretation Shriram Krishnamurthi Brown University Copyright c 2003, Shriram Krishnamurthi This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 United States License. If you create a derivative work, please include the version information below in your attribution. This book is available free-of-cost from the author’s Web site. This version was generated on 2007-04-26. ii Preface The book is the textbook for the programming languages course at Brown University, which is taken pri- marily by third and fourth year undergraduates and beginning graduate (both MS and PhD) students. It seems very accessible to smart second year students too, and indeed those are some of my most successful students. The book has been used at over a dozen other universities as a primary or secondary text. The book’s material is worth one undergraduate course worth of credit. This book is the fruit of a vision for teaching programming languages by integrating the “two cultures” that have evolved in its pedagogy. One culture is based on interpreters, while the other emphasizes a survey of languages. Each approach has significant advantages but also huge drawbacks. The interpreter method writes programs to learn concepts, and has its heart the fundamental belief that by teaching the computer to execute a concept we more thoroughly learn it ourselves. While this reasoning is internally consistent, it fails to recognize that understanding definitions does not imply we understand consequences of those definitions. For instance, the difference between strict and lazy evaluation, or between static and dynamic scope, is only a few lines of interpreter code, but the consequences of these choices is enormous. -
Formalizing the Expertise of the Assembly Language Programmer
MASSACHUSETTS INSTITUTE OF TECHNOLOGY ARTIFICIAL INTELLIGENCE LABORATORY Working Paper 203 September 1980 Formalizing tte Expertise of the Assembly Language Programmer Roger DuWayne Duffey II Abstract: A novel compiler strategy for generating high quality code is described. The quality of the code results from reimplementing the program in the target language using knowledge of the program's behavior. The research is a first step towards formalizing the expertise of the assembly language programmer. The ultimate goal is to formalize code generation and implementation techniques it, the same way that parsing and code generation techniques have been formalized. An experimental code generator based on the reimplementation strategy will be constructed. The code generator will provide a framework for analyzing the costs, applicability, and effectiveness of various implementation techniques. Several common code generation problems will be studied. Code written by experienced programmers and code generated by a conventional optimizing compiler will provide standards of comparison. A.I. Laboratory Working Papers are produced for internal circulation, and may contain information that is, for 4.xample, too preliminary or too detailed for formal publication. It is not intended that they should be considered papers to which reference can be made in the literature. 0 MASSACHUSETTS INSTITUTE OF TECHNOLOGY 1980 I. Introduction This research proposes a novel compiler strategy for generating high quality code. The strategy evolved .from studying the differences between the code produced by experienced programmers and the code produced by conventional optimization techniques. The strategy divides compilation into four serial stages: analyzing the source implementation, undoing source implementation decisions, reimplementing the program in the target language, and assembling the object modules. -
Latest Results from the Procedure Calling Test, Ackermann's Function
Latest results from the procedure calling test, Ackermann’s function B A WICHMANN National Physical Laboratory, Teddington, Middlesex Division of Information Technology and Computing March 1982 Abstract Ackermann’s function has been used to measure the procedure calling over- head in languages which support recursion. Two papers have been written on this which are reproduced1 in this report. Results from further measurements are in- cluded in this report together with comments on the data obtained and codings of the test in Ada and Basic. 1 INTRODUCTION In spite of the two publications on the use of Ackermann’s Function [1, 2] as a mea- sure of the procedure-calling efficiency of programming languages, there is still some interest in the topic. It is an easy test to perform and the large number of results ob- tained means that an implementation can be compared with many other systems. The purpose of this report is to provide a listing of all the results obtained to date and to show their relationship. Few modern languages do not provide recursion and hence the test is appropriate for measuring the overheads of procedure calls in most cases. Ackermann’s function is a small recursive function listed on page 2 of [1] in Al- gol 60. Although of no particular interest in itself, the function does perform other operations common to much systems programming (testing for zero, incrementing and decrementing integers). The function has two parameters M and N, the test being for (3, N) with N in the range 1 to 6. Like all tests, the interpretation of the results is not without difficulty. -
Cs 98 Algol W Implementat Ion by H. Bauer S. Becker S
CS 98 ALGOL W IMPLEMENTAT ION BY H. BAUER S. BECKER S. GRAHAM TECHNICAL REPORT NO. CS 98 MAY 20, 1968 COMPUTER SC IENCE DEPARTMENT School of Humanities and Sciences STANFORD UNIVERS llTY ALGOL W IMPLEMENTATION* -- H, Bauer S. Becker S. Graham * This research is supported in part by the National Science Foundation under grants GP-4053 and ~~-6844. -ALGOL -W IMPLEMENTATION Table -.of Contents ,, 1, Introduction . ..~.........*0.~.**.e.....*.....".....* XI. General Organization . ..os.*..e.~*....~****.*..*.. 3 lX1. Overall Design . ..*.0~....~..~e~eo~o.e...e.....*~~.... 4 A. Principal Design Considerations . ..*......** 4 B. Run-Time Program and Data Segmentation ., ,,,... 6 C. Pass One . ..~D..O......~e~~.*~.*~.....~.. 7 D. Pass Two . ..*..eOC~O.4....*~~..~...~..~~....~ 8 1. Description of Principles and -=. Main Tasks .*0*.*.......0~,00*..*..* 8 2. Parsing Algorithm . ...*......**.* 8 3* Error Recovery .0....~..~.~.~.,~,~~~, 9 4. Register Analysis . ..*.......*.... 11 L- 5* Tables *.....@.,..*......e..*.*.y...* 13 6. Output ,.......*..*0..00..0*~~..~... 13 E. Pass Three . ..0......*....e...e..e.e........*, 16 L l-v. Compiler Details . ..~..~~~...~~~~.~~.....~..~... 17 A. Run-Time Organization ..~*0**~..*~...~...*~..., 17 1. Program and Data Segmentation ,,.,., 17 2. Addressing Conventions . ..*.9..*..** 20 30 Block Marks and Procedure Marks ,.., 20 4. Array Indexing Conventions . ..I.# 22 5. Base Address Table and Lirikage to System Routines . ..****..o....*.. 23 6. Special Constants and Error Codes ,. 24 Register Usage ..OI.OI.O,,..O..L,..~ 27 ;3** Record Allocation and Storage Reclamation .0.0.~.~*0*~0..~~~.**, 27 B. Pass We r....oc.o....o....o..~.*..~*.,.,.....* 33 1. Table Formats Internal to Pass One . ..0...*ee..o...Q....*.~.* 3c 2. The Output String Representing an ALGOL W Program l . -
50 Years of Pascal Niklaus Wirth the Programming Language Pascal Has Won World-Wide Recognition
50 Years of Pascal Niklaus Wirth The programming language Pascal has won world-wide recognition. In celebration of its 50th birthday I shall remark briefly today about its origin, spread, and further development. Background In the early 1960's, the languages Fortran (John Backus, IBM) for scientific, and Cobol (Jean Sammet, IBM and DoD) for commercial applications dominated. Programs were written on paper, then punched on cards, and one waited for a day for the results. Programming languages were recognized as essential aids and accelerators of the hard process of programming. In 1960, an international committee published the language Algol 60. It was the first time that a language was defined by concisely formulated constructs and by a precise, formal syntax. Already two years later it was recognized that a few corrections and improvements were needed. Mainly, however, the range of applications should be widened, because Algol 60 was intended for scientific calculations (numerical mathematics) only. Under the auspices of IFIP a Working Group (WG 2.1) was established to tackle this project. The group consisted of about 40 members with almost the same number of opinions and views about what a successor of Algol should look like. There ensued many discussions, and on occasions the debates ended even violently. Early in 1964 I became a member, and soon was requested to prepare a concrete proposal. Two factions had developed in the committee. One of them aimed at a second, after Algol 60, milestone, a language with radically new, untested concepts and pervasive flexibility. The other faction remained more modest and focused on realistic improvements of known concepts. -
System Language: Understanding Systems
SYSTEM LANGUAGE: UNDERSTANDING SYSTEMS George Mobus1 University of Washington Tacoma, Institute of Technology, 1900 Commerce St. Tacoma WA, 98402 Kevin Anderson University of Washington Tacoma, Institute of Technology, 1900 Commerce St. Tacoma WA, 98402 ABSTRACT Current languages for system modelling impose limitations on how a system is described. For example system dynamics languages (e.g. Stella) assume that the only concern in modelling a system is its dynamics which can be expressed in stocks, flows, and regulators only. A language for describing systems in a general framework provides guidance for the analysis of real systems as well as a way to construct models of those systems suitable for simulation. The language being developed, system language (SL) for lack of a catchier name, consists of: • A set of lexical elements, terms that represent abstractions of components and entities that are found in all dynamic, complex systems to one extent or another - e.g. regulator, process, flow, boundaries, interfaces, etc. • A syntax for constructing the structure of a system including: o describing the boundary and its conditions (including expansion of boundaries as needed) o describing the hierarchical network of connections and relations (e.g. system of systems) o describing interfaces and protocols for entities to exchange flows o describing the behaviour of elements in the system (e.g. functions) o providing specific identifiers naming the abstract lexical elements (e.g. electrical power flow) o providing a set of attributes appropriate to the nature of the element (e.g. voltage, amperage, etc.) • A semantics that establishes patterns of connectivity and behaviour including: o distinction of material, energy, and message (communications) flows o laws of nature to be observed, e.g. -
The Java® Language Specification Java SE 11 Edition
The Java® Language Specification Java SE 11 Edition James Gosling Bill Joy Guy Steele Gilad Bracha Alex Buckley Daniel Smith 2018-08-21 Specification: JSR-384 Java SE 11 (18.9) ("Specification") Version: 11 Status: Final Release Specification Lead: Oracle America, Inc. ("Specification Lead") Release: September 2018 Copyright © 1997, 2018, Oracle America, Inc. All rights reserved. The Specification provided herein is provided to you only under the Limited License Grant included herein as Appendix A. Please see Appendix A, Limited License Grant. Table of Contents 1 Introduction 1 1.1 Organization of the Specification 2 1.2 Example Programs 6 1.3 Notation 6 1.4 Relationship to Predefined Classes and Interfaces 7 1.5 Feedback 7 1.6 References 7 2 Grammars 9 2.1 Context-Free Grammars 9 2.2 The Lexical Grammar 9 2.3 The Syntactic Grammar 10 2.4 Grammar Notation 10 3 Lexical Structure 15 3.1 Unicode 15 3.2 Lexical Translations 16 3.3 Unicode Escapes 17 3.4 Line Terminators 19 3.5 Input Elements and Tokens 19 3.6 White Space 20 3.7 Comments 21 3.8 Identifiers 22 3.9 Keywords 24 3.10 Literals 25 3.10.1 Integer Literals 25 3.10.2 Floating-Point Literals 32 3.10.3 Boolean Literals 35 3.10.4 Character Literals 35 3.10.5 String Literals 36 3.10.6 Escape Sequences for Character and String Literals 38 3.10.7 The Null Literal 39 3.11 Separators 40 3.12 Operators 40 4 Types, Values, and Variables 41 4.1 The Kinds of Types and Values 41 4.2 Primitive Types and Values 42 4.2.1 Integral Types and Values 43 iii The Java® Language Specification 4.2.2 Integer -
5. the Implementation of Algol W
5. THE IMPLEMENTATION OF ALGOL W The two preceding chapters outline the data and control structures which appear with minor variations in most implementations of Algol-like languages, and they suggest how mechanisms for providing debugging facilities can be superimposed upon such structures. By emphasizing the generality of certain ideas, however, those chapters obscure the many crucial and often nontrivial problems of detail which must be solved for a particular language and implementation. This and subsequent chapters describe the internal structure of an implemented debugging system, which is based upon the Algol W language and the IBM System/360, IBM System/370, or ICL System 4 hardware. Various design problems are pinpointed and their solutions are described. Some of these are of general interest; others are specific to Algol W or the System/360 and are mentioned primarily to suggest the kinds of difficulties other designers should anticipate. This chapter sketches the underlying implementation of Algol W. It illustrates the application of some of the ideas in Chapter 3 and provides information necessary for understanding subsequent chapters. It also attempts to demonstrate that many features of the Algol W language and System/360 hardware naturally lead to design decisions which, as subsequent chapters show, simplify the implementation of useful debugging aids. The treatment of detail is intentionally selective; very cursory attention is given to those features of the compiler and object code which either are quite standard or are unrelated to the provision of debugging tools. A more thorough, although rather obsolete, description of the compiler is available elsewhere [Bauer 68]. -
An Interview with Tony Hoare ACM 1980 A.M. Turing Award Recipient
1 An Interview with 2 Tony Hoare 3 ACM 1980 A.M. Turing Award Recipient 4 (Interviewer: Cliff Jones, Newcastle University) 5 At Tony’s home in Cambridge 6 November 24, 2015 7 8 9 10 CJ = Cliff Jones (Interviewer) 11 12 TH = Tony Hoare, 1980 A.M. Turing Award Recipient 13 14 CJ: This is a video interview of Tony Hoare for the ACM Turing Award Winners project. 15 Tony received the award in 1980. My name is Cliff Jones and my aim is to suggest 16 an order that might help the audience understand Tony’s long, varied, and influential 17 career. The date today is November 24th, 2015, and we’re sitting in Tony and Jill’s 18 house in Cambridge, UK. 19 20 Tony, I wonder if we could just start by clarifying your name. Initials ‘C. A. R.’, but 21 always ‘Tony’. 22 23 TH: My original name with which I was baptised was Charles Antony Richard Hoare. 24 And originally my parents called me ‘Charles Antony’, but they abbreviated that 25 quite quickly to ‘Antony’. My family always called me ‘Antony’, but when I went to 26 school, I think I moved informally to ‘Tony’. And I didn’t move officially to ‘Tony’ 27 until I retired and I thought ‘Sir Tony’ would sound better than ‘Sir Antony’. 28 29 CJ: Right. If you agree, I’d like to structure the discussion around the year 1980 when 30 you got the Turing Award. I think it would be useful for the audience to understand 31 just how much you’ve done since that award. -
Topic I � Introduction and Motivation
� Topic I � Introduction and motivation References: � Chapter 1of Concepts in programm ing languages by J. C. Mitchell. CUP, 2003. � Chapter 1of Programming languag es: Design and implementation(3 RD EDITION) by T.W. Pr tt !" M. #.$elkowit'. Prentice Hall, )***. � Chapter 1of Programming languag e pragmatics (2ND EDITION) by M. L. ,cott. El-e.ier, 2006. � 5 Goals Critic l thinking bout 1rogr 3mi!2 la!20 ge-. ? What is 1rogr 33i!2 l !20 ge45 Study 1rogr 3mi!2 la!20 ge-. � 6e f 3iliar &ith ba-ic l !20 2e concepts. � 71preciate tr de8off- i! l !20 ge design. Tr ce history, 1preci te evolution !" di.er-ity of ideas. 6e 1re1 red for !e& 1ro2r 33i!2 methods, paradigms. � 6 Why study programming languages? � To i31ro.e the ability to "e.elop effecti.e lgorithms. � To i31ro.e the 0-e of f 3ili r l !20 2es. � To incre -e the .oc b0lary of 0-ef0l pro2r 33i!2 con-truct-. � To llo& better choice of 1rogr 33i!2 l !20 2e. � To 3 %e it e -ier to lear! !e& l !20 ge. � To 3 %e it e -ier to "e-ig! ne& l !20 2e. � To -im0late 0-ef0l feat0re- in l !20 ge- that l c% them. � To 3 %e better 0-e of l !20 2e technology &here.er it 11ear-. � 7 What makes a good language? Clarity, -i31licity, !" 0!ity. Ortho2onality. N turalne-- for the 11lication. ,011ort of bstraction. E -e of pro2r 3 .eri9c tion. Progr 33i!2 e!.iro!3ent-. -
Programming Languages: Principles and Paradigms Prof
Undergraduate Topics in Computer Science Undergraduate Topics in Computer Science (UTiCS) delivers high-quality instruc- tional content for undergraduates studying in all areas of computing and information science. From core foundational and theoretical material to final-year topics and ap- plications, UTiCS books take fresh, concise, and modern approach and are ideal for self-study or for a one- or two-semester course. The texts are all authored by established experts in their fields, reviewed by an international advisory board, and contain numerous examples and problems. Many include fully worked solutions. For further volumes: http://www.springer.com/series/7592 Maurizio Gabbrielli and Simone Martini Programming Languages: Principles and Paradigms Prof. Dr. Maurizio Gabbrielli Prof. Dr. Simone Martini Università di Bologna Università di Bologna Bologna Bologna Italy Italy Series editor Ian Mackie Advisory board Samson Abramsky, University of Oxford, UK Chris Hankin, Imperial College London, UK Dexter Kozen, Cornell University, USA Andrew Pitts, University of Cambridge, UK Hanne Riis Nielson, Technical University of Denmark, Denmark Steven Skiena, Stony Brook University, USA Iain Stewart, University of Durham, UK David Zhang, The Hong Kong Polytechnic University, Hong Kong ISSN 1863-7310 ISBN 978-1-84882-913-8 e-ISBN 978-1-84882-914-5 DOI 10.1007/978-1-84882-914-5 Springer London Dordrecht Heidelberg New York British Library Cataloguing in Publication Data A catalogue record for this book is available from the British Library Library of Congress Control Number: 2010922995 Translated from the original Italian edition: “Linguaggi di programmazione: principi e paradigmi”, pub- lished in 2006 by McGraw-Hill Companies, Publishing Group Italia. -
Wirth Abstract an Entire Potpourri of Ideas Is Listed from the Past Decades of Computer Science and Computer Technology
1 Zürich, 2. 2. 2005 / 15. 6. 2005 Good Ideas, Through the Looking Glass Niklaus Wirth Abstract An entire potpourri of ideas is listed from the past decades of Computer Science and Computer Technology. Widely acclaimed at their time, many have lost in splendor and brilliance under today’s critical scrutiny. We try to find reasons. Some of the ideas are almost forgotten. But we believe that they are worth recalling, not the least because one must try to learn from the past, be it for the sake of progress, intellectual stimulation, or fun. Contents 1. Introduction 2. Hardware Technology 3. Computer Architecture 3.1. Representation of numbers 3.2. Data addressing 3.3. Expression Stacks 3.4. Variable length data 3.5. Storing return addresses in the code 3.6. Virtual Addressing 3.7. Memory protection and user classes 3.8. Complex Instruction Sets 3.9. Register windows 4. Programming Language Features 4.1. Notation and Syntax 4.2. The GO TO statement 4.3. Switches 4.4. Algol’s complicated for statement 4.5. Own variables 4.6. Algol’s name parameter 4.7. Incomplete parameter specifications 4.8. Loopholes 5. Miscellaneus techniques 5.1. Syntax analysis 5.2. Extensible languages 5.3. Nested procedures and Dijkstra’s display 5.4. Tree-structured symbol tables 5.5. Using wrong tools 5.6. Wizards 6. Programming paradigms 6.1. Functional programming 6.2. Logic programming 2 6.3. Object-oriented programming 7. Concluding remarks 1. Introduction The history of Computing has been driven by many good and original ideas.