CS307: Principles of Programming Languages
Total Page:16
File Type:pdf, Size:1020Kb
Load more
Recommended publications
-
Scribble As Preprocessor
Scribble as Preprocessor Version 8.2.0.8 Matthew Flatt and Eli Barzilay September 25, 2021 The scribble/text and scribble/html languages act as “preprocessor” languages for generating text or HTML. These preprocessor languages use the same @ syntax as the main Scribble tool (see Scribble: The Racket Documentation Tool), but instead of working in terms of a document abstraction that can be rendered to text and HTML (and other formats), the preprocessor languages work in a way that is more specific to the target formats. 1 Contents 1 Text Generation 3 1.1 Writing Text Files . .3 1.2 Defining Functions and More . .7 1.3 Using Printouts . .9 1.4 Indentation in Preprocessed output . 11 1.5 Using External Files . 16 1.6 Text Generation Functions . 19 2 HTML Generation 23 2.1 Generating HTML Strings . 23 2.1.1 Other HTML elements . 30 2.2 Generating XML Strings . 32 2.3 HTML Resources . 36 Index 39 Index 39 2 1 Text Generation #lang scribble/text package: scribble-text-lib The scribble/text language provides everything from racket/base, racket/promise, racket/list, and racket/string, but with additions and a changed treatment of the module top level to make it suitable as for text generation or a preprocessor language: • The language uses read-syntax-inside to read the body of the module, similar to §6.7 “Document Reader”. This means that by default, all text is read in as Racket strings; and @-forms can be used to use Racket functions and expression escapes. • Values of expressions are printed with a custom output function. -
Section “Common Predefined Macros” in the C Preprocessor
The C Preprocessor For gcc version 12.0.0 (pre-release) (GCC) Richard M. Stallman, Zachary Weinberg Copyright c 1987-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation. A copy of the license is included in the section entitled \GNU Free Documentation License". This manual contains no Invariant Sections. The Front-Cover Texts are (a) (see below), and the Back-Cover Texts are (b) (see below). (a) The FSF's Front-Cover Text is: A GNU Manual (b) The FSF's Back-Cover Text is: You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development. i Table of Contents 1 Overview :::::::::::::::::::::::::::::::::::::::: 1 1.1 Character sets:::::::::::::::::::::::::::::::::::::::::::::::::: 1 1.2 Initial processing ::::::::::::::::::::::::::::::::::::::::::::::: 2 1.3 Tokenization ::::::::::::::::::::::::::::::::::::::::::::::::::: 4 1.4 The preprocessing language :::::::::::::::::::::::::::::::::::: 6 2 Header Files::::::::::::::::::::::::::::::::::::: 7 2.1 Include Syntax ::::::::::::::::::::::::::::::::::::::::::::::::: 7 2.2 Include Operation :::::::::::::::::::::::::::::::::::::::::::::: 8 2.3 Search Path :::::::::::::::::::::::::::::::::::::::::::::::::::: 9 2.4 Once-Only Headers::::::::::::::::::::::::::::::::::::::::::::: 9 2.5 Alternatives to Wrapper #ifndef :::::::::::::::::::::::::::::: -
Julia: a Fresh Approach to Numerical Computing
RSDG @ UCL Julia: A Fresh Approach to Numerical Computing Mosè Giordano @giordano [email protected] Knowledge Quarter Codes Tech Social October 16, 2019 Julia’s Facts v1.0.0 released in 2018 at UCL • Development started in 2009 at MIT, first • public release in 2012 Julia co-creators won the 2019 James H. • Wilkinson Prize for Numerical Software Julia adoption is growing rapidly in • numerical optimisation, differential equations, machine learning, differentiable programming It is used and taught in several universities • (https://julialang.org/teaching/) Mosè Giordano (RSDG @ UCL) Julia: A Fresh Approach to Numerical Computing October 16, 2019 2 / 29 Julia on Nature Nature 572, 141-142 (2019). doi: 10.1038/d41586-019-02310-3 Mosè Giordano (RSDG @ UCL) Julia: A Fresh Approach to Numerical Computing October 16, 2019 3 / 29 Solving the Two-Language Problem: Julia Multiple dispatch • Dynamic type system • Good performance, approaching that of statically-compiled languages • JIT-compiled scripts • User-defined types are as fast and compact as built-ins • Lisp-like macros and other metaprogramming facilities • No need to vectorise: for loops are fast • Garbage collection: no manual memory management • Interactive shell (REPL) for exploratory work • Call C and Fortran functions directly: no wrappers or special APIs • Call Python functions: use the PyCall package • Designed for parallelism and distributed computation • Mosè Giordano (RSDG @ UCL) Julia: A Fresh Approach to Numerical Computing October 16, 2019 4 / 29 Multiple Dispatch using DifferentialEquations -
Structure of Programming Languages – Lecture 2A
Structure of Programming Languages { Lecture 2a CSCI 6636 { 4536 February 4, 2020 CSCI 6636 { 4536 Lecture 2a. 1/19 February 4, 2020 1 / 19 Outline 1 Overview of Languages 2 Language Properties 3 Good or Bad: Fundamental Considerations 4 Homework CSCI 6636 { 4536 Lecture 2a. 2/19 February 4, 2020 2 / 19 Outline The Language Landscape Languages Come in Many Flavors. Possible Design Goals Design Examples Representation Issues CSCI 6636 { 4536 Lecture 2a. 3/19 February 4, 2020 3 / 19 Overview of Languages What is a Program? We can view a program two ways: Developer's view: A program is the implementation of a design (a model) for a piece of software. Coder's view: A program is a description of a set of actions that we want a computer to carry out on some data. Similarly, we can view a language more than one way: High level: It permits us to express a model. Low level: It permits us to define a correct set of instructions for the computer. CSCI 6636 { 4536 Lecture 2a. 4/19 February 4, 2020 4 / 19 Overview of Languages Aspects of a Language. To use a language effectively we must learn these four aspects: Syntax is the set legal forms that a sentence or program unit may take. During translation, if the syntax of a program unit is legal (correct), then we can talk about the semantics of the unit. Semantics is the science of meaning. Operational semantics is the set of actions when a program is executed. Style is a set of human factors. -
Multiparadigm Programming with Python 3 Chapter 5
Multiparadigm Programming with Python 3 Chapter 5 H. Conrad Cunningham 7 September 2018 Contents 5 Python 3 Types 2 5.1 Chapter Introduction . .2 5.2 Type System Concepts . .2 5.2.1 Types and subtypes . .2 5.2.2 Constants, variables, and expressions . .2 5.2.3 Static and dynamic . .3 5.2.4 Nominal and structural . .3 5.2.5 Polymorphic operations . .4 5.2.6 Polymorphic variables . .5 5.3 Python 3 Type System . .5 5.3.1 Objects . .6 5.3.2 Types . .7 5.4 Built-in Types . .7 5.4.1 Singleton types . .8 5.4.1.1 None .........................8 5.4.1.2 NotImplemented ..................8 5.4.2 Number types . .8 5.4.2.1 Integers (int)...................8 5.4.2.2 Real numbers (float)...............9 5.4.2.3 Complex numbers (complex)...........9 5.4.2.4 Booleans (bool)..................9 5.4.2.5 Truthy and falsy values . 10 5.4.3 Sequence types . 10 5.4.3.1 Immutable sequences . 10 5.4.3.2 Mutable sequences . 12 5.4.4 Mapping types . 13 5.4.5 Set Types . 14 5.4.5.1 set ......................... 14 5.4.5.2 frozenset ..................... 14 5.4.6 Other object types . 15 1 5.5 What Next? . 15 5.6 Exercises . 15 5.7 Acknowledgements . 15 5.8 References . 16 5.9 Terms and Concepts . 16 Copyright (C) 2018, H. Conrad Cunningham Professor of Computer and Information Science University of Mississippi 211 Weir Hall P.O. Box 1848 University, MS 38677 (662) 915-5358 Browser Advisory: The HTML version of this textbook requires a browser that supports the display of MathML. -
Macros & Sweet.Js
CS 252: Advanced Programming Language Principles Macros & Sweet.js Prof. Tom Austin San José State University Let's say we want to add classes to JavaScript… We'd like to have something like: class Person { constructor(name) { this.name = name; } say(msg) { console.log(this.name + " says: " + msg); } } But what we have to type is: function Person(name) { this.name = name; } Person.prototype.say = function(msg) { console.log(this.name + " says: " + msg); } We want to expand our code with classes to a version of JavaScript understood by the interpreter. Introducing macros… What is a macro? • Short for macroinstruction. • Rule specifies how input sequence maps to a replacement sequence. A Review of Compilers source Lexer/ tokens Parser code Tokenizer Abstract Compiler Interpreter Syntax Tree (AST) Machine code Commands Macros in C • C preprocessor • Text substitution macros –text is converted to text. • Embedded languages are similar – PHP, Ruby's erb, etc. Some variants work at the token level, but the concept is the same. expanded Pre- Lexer/ source code tokens Parser code processor Tokenizer Abstract Compiler Interpreter Syntax Tree (AST) Machine code Commands C preprocessor example #define PI 3.14159 #define SWAP(a,b) {int tmp=a;a=b;b=tmp;} int main(void) { int x=4, y=5, diam=7, circum=diam*PI; SWAP(x,y); } int main(void) { int x=4, y=5, diam=7, circum=diam*PI; SWAP(x,y); } int main(void) { int x=4, y=5, diam=7, circum=diam*3.14159; {int tmp=x;x=y;y=tmp;}; } Problems with C macros (in class) Many macro systems suffer from inadvertent variable capture. -
Object-Oriented Type Inference
Object-Oriented Type Inference Jens Palsberg and Michael I. Schwartzbach [email protected] and [email protected] Computer Science Department, Aarhus University Ny Munkegade, DK-8000 Arh˚ us C, Denmark Abstract The algorithm guarantees that all messages are un- derstood, annotates the program with type infor- We present a new approach to inferring types in un- mation, allows polymorphic methods, and can be typed object-oriented programs with inheritance, used as the basis of an optimizing compiler. Types assignments, and late binding. It guarantees that are finite sets of classes and subtyping is set in- all messages are understood, annotates the pro- clusion. Given a concrete program, the algorithm gram with type information, allows polymorphic methods, and can be used as the basis of an op- constructs a finite graph of type constraints. The timizing compiler. Types are finite sets of classes program is typable if these constraints are solvable. and subtyping is set inclusion. Using a trace graph, The algorithm then computes the least solution in our algorithm constructs a set of conditional type worst-case exponential time. The graph contains constraints and computes the least solution by least all type information that can be derived from the fixed-point derivation. program without keeping track of nil values or flow analyzing the contents of instance variables. This 1 Introduction makes the algorithm capable of checking most com- mon programs; in particular, it allows for polymor- phic methods. The algorithm is similar to previous Untyped object-oriented languages with assign- work on type inference [18, 14, 27, 1, 2, 19, 12, 10, 9] ments and late binding allow rapid prototyping be- in using type constraints, but it differs in handling cause classes inherit implementation and not spec- late binding by conditional constraints and in re- ification. -
PL/I for AIX: Programming Guide
IBM PL/I for AIX Programming Guide Ve r s i o n 2.0.0 SC18-9328-00 IBM PL/I for AIX Programming Guide Ve r s i o n 2.0.0 SC18-9328-00 Note! Before using this information and the product it supports, be sure to read the general information under “Notices” on page 309. Second Edition (June 2004) This edition applies to IBM PL/I for AIX 2.0.0, 5724-H45, and to any subsequent releases until otherwise indicated in new editions or technical newsletters. Make sure you are using the correct edition for the level of the product. Order publications through your IBM representative or the IBM branch office serving your locality. Publications are not stocked at the address below. A form for readers’ comments is provided at the back of this publication. If the form has been removed, address your comments to: IBM Corporation, Department HHX/H1 555 Bailey Ave San Jose, CA, 95141-1099 United States of America When you send information to IBM, you grant IBM a nonexclusive right to use or distribute the information in any way it believes appropriate without incurring any obligation to you. ©International Business Machines Corporation 1998,2004. All rights reserved. Contents Figures . vii COMPILE . .47 COPYRIGHT . .48 CURRENCY . .48 Part 1. Introducing PL/I on your DEFAULT . .48 workstation . .1 EXIT. .54 EXTRN . .54 Chapter 1. About this book . .3 FLAG . .55 FLOATINMATH. .55 Chapter 2. How to read the syntax GONUMBER . .56 GRAPHIC . .56 diagrams . .5 IMPRECISE . .56 INCAFTER . .57 Chapter 3. -
Type Inference for Late Binding. the Smalleiffel Compiler. Suzanne Collin, Dominique Colnet, Olivier Zendra
Type Inference for Late Binding. The SmallEiffel Compiler. Suzanne Collin, Dominique Colnet, Olivier Zendra To cite this version: Suzanne Collin, Dominique Colnet, Olivier Zendra. Type Inference for Late Binding. The SmallEiffel Compiler.. Joint Modular Languages Conference (JMLC), 1997, Lintz, Austria. pp.67–81. inria- 00563353 HAL Id: inria-00563353 https://hal.inria.fr/inria-00563353 Submitted on 4 Feb 2011 HAL is a multi-disciplinary open access L’archive ouverte pluridisciplinaire HAL, est archive for the deposit and dissemination of sci- destinée au dépôt et à la diffusion de documents entific research documents, whether they are pub- scientifiques de niveau recherche, publiés ou non, lished or not. The documents may come from émanant des établissements d’enseignement et de teaching and research institutions in France or recherche français ou étrangers, des laboratoires abroad, or from public or private research centers. publics ou privés. Typ e Inference for Late Binding. The SmallEiel Compiler. Suzanne COLLIN, Dominique COLNET and Olivier ZENDRA Campus Scientique, Bâtiment LORIA, Boîte Postale 239, 54506 Vando euvre-lès-Nancy Cedex France Tel. +33 03 83.59.20.93 Email: [email protected] Centre de Recherche en Informatique de Nancy Abstract. The SmallEiel compiler uses a simple typ e inference mecha- nism to translate Eiel source co de to C co de. The most imp ortant asp ect in our technique is that many o ccurrences of late binding are replaced by static binding. Moreover, when dynamic dispatch cannot b e removed, inlining is still p ossible. The advantage of this approach is that it sp eeds up execution time and decreases considerably the amount of generated co de. -
Introduction to Object-Oriented Programming (OOP)
QUIZ Write the following for the class Bar: • Default constructor • Constructor • Copy-constructor • Overloaded assignment oper. • Is a destructor needed? Or Foo(x), depending on how we want the initialization to be made. Criticize! Ch. 15: Polymorphism & Virtual Functions Virtual functions enhance the concept of type. There is no analog to the virtual function in a traditional procedural language. As a procedural programmer, you have no referent with which to think about virtual functions, as you do with almost every text other feature in the language. Features in a procedural language can be understood on an algorithmic level, but, in an OOL, virtual functions can be understood only from a design viewpoint. Remember upcasting Draw the UML diagram! We would like the more specific version of play() to be called, since flute is a Wind object, not a generic Instrument. Ch. 1: Introduction to Objects Remember from ch.1 … Early binding vs. late binding “The C++ compiler inserts a special bit of code in lieu of the absolute call. This code calculates the text address of the function body, using information stored in the object at runtime!” Ch. 15: Polymorphism & Virtual Functions virtual functions To cause late binding to occur for a particular function, C++ requires that you use the virtual keyword when declaring the function in the base text class. All derived-class functions that match the signature of the base-class declaration will be called using the virtual mechanism. example It is legal to also use the virtual keyword in the derived-class declarations, but it is redundant and can be confusing. -
Lecture 5: Scientific Computing Languages
Scientific Computing Languages (Lectures on High-performance Computing for Economists V) Jes´usFern´andez-Villaverde1 and Pablo Guerr´on2 September 15, 2021 1University of Pennsylvania 2Boston College Programming languages for scientific computation • General-purpose languages (GPL): 1. C++. 2. Python. • Domain-specific languages (DSL): 1. Julia. 2. R. 3. Matlab. • If you want to undertake research on computational-intensive papers, learning a GPL is probably worthwhile. • Moreover, knowing a GPL will make you a better user of a DSL. 1 C++ C/C++ • C/C++ is the infrastructure of much of the modern computing world. • If you know Unix and C/C++, you can probably master everything else easily (think of Latin and Romance languages!). • In some sense, C++ is really a \federation" of languages. • What is the difference between C and C++? • C++ introduced full OOP support. 2 C++ • General-purpose, multi-paradigm, static partially inferred typed, compiled language. • Current standard is C++20 (published in December 2020). C++23 in preview release. • Developed by Bjarne Stroustrup at Bells Labs in the early 1980s. • C++ has a more modern design and approach to programming than predecessor languages. Enormously influential in successor languages. • If you know C++, you will be able to read C legacy code without much problem. • In fact, nearly all C programs are valid C++ programs (the converse is not true). • But you should try to \think" in C++20, not in C or even in older C++ standards. 3 4 C++: advantages 1. Powerful language: you can code anything you can imagine in C++. 2. Continuously evolving but with a standard: new implementations have support for meta-programming, functional programming,.. -
Marco: Safe, Expressive Macros for Any Language*
Marco: Safe, Expressive Macros for Any Language? Byeongcheol Lee1, Robert Grimm2, Martin Hirzel3, Kathryn S. McKinley4,5 1 Gwangju Institute of Science and Technology 2 New York University 3 IBM Watson Research Center 4 Microsoft Research 5 The University of Texas at Austin Abstract. Macros improve expressiveness, concision, abstraction, and language interoperability without changing the programming language itself. They are indispensable for building increasingly prevalent mul- tilingual applications. Unfortunately, existing macro systems are well- encapsulated but unsafe (e.g., the C preprocessor) or are safe but tightly- integrated with the language implementation (e.g., Scheme macros). This paper introduces Marco, the first macro system that seeks both encap- sulation and safety. Marco is based on the observation that the macro system need not know all the syntactic and semantic rules of the tar- get language but must only directly enforce some rules, such as variable name binding. Using this observation, Marco off-loads most rule checking to unmodified target-language compilers and interpreters and thus be- comes language-scalable. We describe the Marco language, its language- independent safety analysis, and how it uses two example target-language analysis plug-ins, one for C++ and one for SQL. This approach opens the door to safe and expressive macros for any language. 1 Introduction Macros enhance programming languages without changing them. Programmers use macros to add missing language features, to improve concision and abstrac- tion, and to interoperate between different languages and with systems. With macros, programmers use concrete syntax instead of tediously futzing with ab- stract syntax trees or, worse, creating untyped and unchecked strings.