LORE: a Loop Repository for the Evaluation of Compilers Zhi Chen∗, Zhangxiaowen Gong†, Justin Josef Szaday†, David C

Total Page:16

File Type:pdf, Size:1020Kb

LORE: a Loop Repository for the Evaluation of Compilers Zhi Chen∗, Zhangxiaowen Gong†, Justin Josef Szaday†, David C LORE: A Loop Repository for the Evaluation of Compilers Zhi Chen∗, Zhangxiaowen Gongy, Justin Josef Szadayy, David C. Wongz, David Padua y, Alexandru Nicolau ∗, Alexander V Veidenbaum ∗, Neftali Watkinson ∗, Zehra Sura x, Saeed Maleki{, Josep Torrellasy, Gerald DeJongy z Intel Corporation, x IBM Research, { Microsoft Research, ∗ University of California, Irvine, y University of Illinois at Urbana-Champaign, Email: ∗fzhic2, nicolau, alexv, [email protected], [email protected], yfgong15, szaday2, padua, torrella, [email protected], [email protected], {[email protected] Abstract—Although numerous loop optimization techniques successive versions, and the effectiveness of solo/compound have been designed and deployed in commercial compilers in transformations. While some of such data can be found in the the past, virtually no common experimental infrastructure nor literature, in many cases compiler studies are confined to a repository exists to help the compiler community evaluate the effectiveness of these techniques. few codes, which are not always widely available. In addition, This paper describes a repository, LORE, that maintains a there is little in the area of historical data that shows how much large number of C language for loop nests extracted from popu- progress compiler technology has made in terms of delivering lar benchmarks, libraries, and real applications. It also describes performance. the infrastructure that builds and maintains the repository. Each In this paper, we propose LORE, a repository of program loop nest in the repository has been compiled, transformed, executed, and measured independently. These loops cover a segments, their semantically equivalent transformed versions, variety of properties that can be used by the compiler community and performance measurements with various compilers. Our to evaluate loop optimizations using a broad and representative goal is to create an extensible repository for the compiler collection of loops. community that can provide a common base for experimen- To illustrate the usefulness of the repository, we also present tation and comparison of results, allowing compiler writers two example applications. One is assessing the capabilities of to see the effect of transformations on individual loop nests the auto-vectorization features of three widely used compilers. The other is measuring the performance difference of a compiler and to compare execution times of different transformation across different versions. These applications prove that the repos- sequences. Currently, the repository contains: itory is valuable for identifying the strengths and weaknesses of • A growing number of C language for loop nests (∼2,500 a compiler and for quantitatively measuring the evolution of a as of the writing of this paper) extracted from multiple compiler. benchmarks, libraries, and real applications by an extractor. The extractor encapsulates loop nests into standalone exe- I. INTRODUCTION cutables called codelets. Each codelet executes a loop using A significant fraction of execution time is consumed by data captured during the original benchmark execution, loops for a large class of programs. For this reason, numerous measures its execution time, and collects readouts from loop optimization techniques [1], [2] have been designed and hardware performance counters for further analysis. deployed in all major compilers. These optimizations trans- • Multiple semantically equivalent versions of each loop pro- form loops into semantically equivalent versions that exhibit duced by a source-to-source mutator that applies sequences better locality, require less computation, and/or take advantage of loop transformations constructed by combining tiling, of parallelism from vector devices/multicores. Furthermore, interchange, distribution, unrolling, and unroll-and-jam into compiler optimizations also enhance programability and en- sets of possibly repeated subsets of these transformations. able machine independence. The ultimate goal of research in We call the result of applying each of the transformation automatic program optimization is to enable programmers to sequences a mutation. The repository currently contains focus on the preparations of readable and correct code because ∼90,000 different mutations (an average of 36 mutations they can rely on compilers to generate highly efficient code per original loop), as of the writing of this paper. for each target machine. It is well known that we are far from • A database that correlates the execution profiling of the reaching the ultimate goal and that compilers today are brittle original loop and its mutations with the compilers and target in that it is impossible to know before hand if they will be machines used for each execution. This data is valuable not able to generate a highly efficient version of the code or if, on only for comparing the effectiveness of different compilers’ the contrary, it will be necessary to devote considerable time optimization passes but also for tracking the evolution of to manually transform the code for good performance. a compiler’s capability in loop optimization. Currently the Clearly, there is much room for advances in compiler repository contains data on the execution on a single target technology. An important enabler of these future advances is machine from 2 versions of the Intel R C++ Compiler data on the effectiveness of compilers on different classes of (ICC), the GNU C Compiler (GCC), and Clang (frontend codes and target machines, the progress of compilers across of LLVM for C family languages). We extract the loops from the benchmarks for two reasons. Loop identification One is to reduce the time to evaluate each loop. Evaluating and extraction the effect of different compilers with various switches on the C applications Source level original loop nests and their semantically equivalent mutations instrumentation typically requires numerous executions of the loop. Much time Input dataset is saved by executing the loop and its mutations in isolation. capturing The second reason is that it is important to study the execution Loop extractor Performance measurement of the loops separately so that we could classify loops for Dependence analysis Characteristic the purposes of applying machine learning techniques for extraction compilation and, when necessary, alter the context of execution Loop Loop Repository Website of each loop. transformations interfaces Both the source code for the original loop and its mutations Loop mutator Other tools and the measurement data are available for download/query Similarity analysis Loop clustering from the LORE website. The web interface also conveniently Loop clusterer allows users to view dynamically generated plots/charts from Fig. 1: The system framework of the infrastructure. selected loops/compilers. In order to illustrate the usefulness of LORE, we include in data items that the loop reads before being modified during this paper two experiments. One compares the effectiveness of its execution. This is done to guarantee that the execution major compilers’ auto-vectorizers since vectorization plays an of the codelet will follow the same flow of control as the important role in performance improvement and efficient hard- benchmark. The memory layout is preserved for data accessed ware utilization. The other assesses the performance difference in the loop, however the extractor does not replicate the cache across generations of a compiler. These experiments prove state when a benchmark executes the target loop since cache that LORE is an efficient approach to effectively identify the state is invisible to the programmers during coding. Finally, strengths and weaknesses of a compiler and to quantitatively the extractor copies the loop statements, creates the necessary measure the evolution of a compiler. declaration, and inserts the instrumentation statements. The remainder of the paper is organized as follows. Sec- Data copying. For each for loop nest to be separated, tionII presents the tools contained in the infrastructure for the extractor inserts code into the source file to first capture loop extraction, mutation, and clustering. We explain the the data read inside the loop and then save them to a file. details of the repository in Section III. SectionIV gives two To this end, the loop nest is analyzed statically to identify all example analysis that users can perform using the data in the variables that are read-only or read-before-write. Variables that repository. SectionV discusses related work and compares are guaranteed to be write-only or write-before-read are not our repository and infrastructure tools with the state-of-the-art instrumented as their values are generated during the execution research. Finally, SectionVI concludes the paper. of the loop. Then, for these collected variables the values are obtained as follows depending on the nature of the variables. ODULES TO CREATE AND ACCESS LORE II. M • Non-pointer scalar variables are instrumented simply by Figure1 shows the different software modules that we have adding code to write their values to a file directly. built to create and access LORE, which include: • Arrays with known dimensions are treated similarly to scalar • an extractor to create codelets, variables. Statements are added before the target loop to • a mutator to create multiple semantically equivalent versions write the values of all array elements to a file in a row- (mutations) of each codelet, major way. • a clusterer
Recommended publications
  • FLAC Decoder Using ARM920T Using S3C2440
    International Journal of Engineering Research and Development e-ISSN: 2278-067X, p-ISSN: 2278-800X, www.ijerd.com Volume 4, Issue 7 (November 2012), PP. 21-24 FLAC Decoder using ARM920T using S3C2440 J. L. DivyaShivani1, M. Madan Gopal 2 1M.Tech (Embedded Systems) Student, 2Assoc.Professor Aurora’s Technological & Research Institute Uppal, Hyderabad, INDIA Abstract: In this paper, an embedded FLAC decoder system was designed, and the embedded development platform of ARM920T was built for the design. Furthermore, the IIS bus of S3C2440 in Linux which were used in designing the decoder system. Results show that the FLAC format sound can play well in the decoder system. The decoding solution can be applied to many high-end audio devices. With the development of multimedia technology, as well as the people's requirements to higher sound quality, the Lossy compression coding audio format such as MP3 cannot satisfy many music lovers. Therefore, many R & D staffs have research on how to develop Lossless Audio Decoding systems based on embedded devices with lower price and better sound quality. FLAC stands for Free Lossless Audio Codec, an audio format similar to MP3, but lossless, meaning that audio is compressed in FLAC without any loss in quality. This is similar to how Zip works, except with FLAC you will get much better compression because it is designed specifically for audio, and you can play back compressed FLAC files in your favorite player (or your car or home stereo) just like you would an MP3 file. FLAC stands out as the fastest and most widely supported lossless audio codec, and the only one that at once is non-proprietary, is unencumbered by patents, has an open- source reference implementation, has a well-documented format and API, and has several other independent implementations.
    [Show full text]
  • Lossless Audio Codec Comparison
    Contents Introduction 3 1 CD-audio test 4 1.1 CD's used . .4 1.2 Results all CD's together . .4 1.3 Interesting quirks . .7 1.3.1 Mono encoded as stereo (Dan Browns Angels and Demons) . .7 1.3.2 Compressibility . .9 1.4 Convergence of the results . 10 2 High-resolution audio 13 2.1 Nine Inch Nails' The Slip . 13 2.2 Howard Shore's soundtrack for The Lord of the Rings: The Return of the King . 16 2.3 Wasted bits . 18 3 Multichannel audio 20 3.1 Howard Shore's soundtrack for The Lord of the Rings: The Return of the King . 20 A Motivation for choosing these CDs 23 B Test setup 27 B.1 Scripting and graphing . 27 B.2 Codecs and parameters used . 27 B.3 MD5 checksumming . 28 C Revision history 30 Bibliography 31 2 Introduction While testing the efficiency of lossy codecs can be quite cumbersome (as results differ for each person), comparing lossless codecs is much easier. As the last well documented and comprehensive test available on the internet has been a few years ago, I thought it would be a good idea to update. Beside comparing with CD-audio (which is often done to assess codec performance) and spitting out a grand total, this comparison also looks at extremes that occurred during the test and takes a look at 'high-resolution audio' and multichannel/surround audio. While the comparison was made to update the comparison-page on the FLAC website, it aims to be fair and unbiased.
    [Show full text]
  • C++ Programming: Program Design Including Data Structures, Fifth Edition
    C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 5: Control Structures II (Repetition) Objectives In this chapter, you will: • Learn about repetition (looping) control structures • Explore how to construct and use count- controlled, sentinel-controlled, flag- controlled, and EOF-controlled repetition structures • Examine break and continue statements • Discover how to form and use nested control structures C++ Programming: From Problem Analysis to Program Design, Fifth Edition 2 Objectives (cont'd.) • Learn how to avoid bugs by avoiding patches • Learn how to debug loops C++ Programming: From Problem Analysis to Program Design, Fifth Edition 3 Why Is Repetition Needed? • Repetition allows you to efficiently use variables • Can input, add, and average multiple numbers using a limited number of variables • For example, to add five numbers: – Declare a variable for each number, input the numbers and add the variables together – Create a loop that reads a number into a variable and adds it to a variable that contains the sum of the numbers C++ Programming: From Problem Analysis to Program Design, Fifth Edition 4 while Looping (Repetition) Structure • The general form of the while statement is: while is a reserved word • Statement can be simple or compound • Expression acts as a decision maker and is usually a logical expression • Statement is called the body of the loop • The parentheses are part of the syntax C++ Programming: From Problem Analysis to Program Design, Fifth Edition 5 while Looping (Repetition)
    [Show full text]
  • Download Media Player Codec Pack Version 4.1 Media Player Codec Pack
    download media player codec pack version 4.1 Media Player Codec Pack. Description: In Microsoft Windows 10 it is not possible to set all file associations using an installer. Microsoft chose to block changes of file associations with the introduction of their Zune players. Third party codecs are also blocked in some instances, preventing some files from playing in the Zune players. A simple workaround for this problem is to switch playback of video and music files to Windows Media Player manually. In start menu click on the "Settings". In the "Windows Settings" window click on "System". On the "System" pane click on "Default apps". On the "Choose default applications" pane click on "Films & TV" under "Video Player". On the "Choose an application" pop up menu click on "Windows Media Player" to set Windows Media Player as the default player for video files. Footnote: The same method can be used to apply file associations for music, by simply clicking on "Groove Music" under "Media Player" instead of changing Video Player in step 4. Media Player Codec Pack Plus. Codec's Explained: A codec is a piece of software on either a device or computer capable of encoding and/or decoding video and/or audio data from files, streams and broadcasts. The word Codec is a portmanteau of ' co mpressor- dec ompressor' Compression types that you will be able to play include: x264 | x265 | h.265 | HEVC | 10bit x265 | 10bit x264 | AVCHD | AVC DivX | XviD | MP4 | MPEG4 | MPEG2 and many more. File types you will be able to play include: .bdmv | .evo | .hevc | .mkv | .avi | .flv | .webm | .mp4 | .m4v | .m4a | .ts | .ogm .ac3 | .dts | .alac | .flac | .ape | .aac | .ogg | .ofr | .mpc | .3gp and many more.
    [Show full text]
  • Compiler Construction Assignment 3 – Spring 2018
    Compiler Construction Assignment 3 { Spring 2018 Robert van Engelen µc for the JVM µc (micro-C) is a small C-inspired programming language. In this assignment we will implement a compiler in C++ for µc. The compiler compiles µc programs to java class files for execution with the Java virtual machine. To implement the compiler, we can reuse the same concepts in the code-generation parts that were done in programming assignment 1 and reuse parts of the lexical analyzer you implemented in programming assignment 2. We will implement a new parser based on Yacc/Bison. This new parser utilizes translation schemes defined in Yacc grammars to emit Java bytecode. In the next programming assignment (the last assignment following this assignment) we will further extend the capabilities of our µc compiler by adding static semantics such as data types, apply type checking, and implement scoping rules for functions and blocks. Download Download the Pr3.zip file from http://www.cs.fsu.edu/~engelen/courses/COP5621/Pr3.zip. After unzipping you will get the following files Makefile A makefile bytecode.c The bytecode emitter (same as Pr1) bytecode.h The bytecode definitions (same as Pr1) error.c Error reporter global.h Global definitions init.c Symbol table initialization javaclass.c Java class file operations (same as Pr1) javaclass.h Java class file definitions (same as Pr1) mycc.l *) Lex specification mycc.y *) Yacc specification and main program symbol.c *) Symbol table operations test#.uc A number of µc test programs The files marked ∗) are incomplete. For this assignment you are required to complete these files.
    [Show full text]
  • PDF Python 3
    Python for Everybody Exploring Data Using Python 3 Charles R. Severance 5.7. LOOP PATTERNS 61 In Python terms, the variable friends is a list1 of three strings and the for loop goes through the list and executes the body once for each of the three strings in the list resulting in this output: Happy New Year: Joseph Happy New Year: Glenn Happy New Year: Sally Done! Translating this for loop to English is not as direct as the while, but if you think of friends as a set, it goes like this: “Run the statements in the body of the for loop once for each friend in the set named friends.” Looking at the for loop, for and in are reserved Python keywords, and friend and friends are variables. for friend in friends: print('Happy New Year:', friend) In particular, friend is the iteration variable for the for loop. The variable friend changes for each iteration of the loop and controls when the for loop completes. The iteration variable steps successively through the three strings stored in the friends variable. 5.7 Loop patterns Often we use a for or while loop to go through a list of items or the contents of a file and we are looking for something such as the largest or smallest value of the data we scan through. These loops are generally constructed by: • Initializing one or more variables before the loop starts • Performing some computation on each item in the loop body, possibly chang- ing the variables in the body of the loop • Looking at the resulting variables when the loop completes We will use a list of numbers to demonstrate the concepts and construction of these loop patterns.
    [Show full text]
  • 7. Control Flow First?
    Copyright (C) R.A. van Engelen, FSU Department of Computer Science, 2000-2004 Ordering Program Execution: What is Done 7. Control Flow First? Overview Categories for specifying ordering in programming languages: Expressions 1. Sequencing: the execution of statements and evaluation of Evaluation order expressions is usually in the order in which they appear in a Assignments program text Structured and unstructured flow constructs 2. Selection (or alternation): a run-time condition determines the Goto's choice among two or more statements or expressions Sequencing 3. Iteration: a statement is repeated a number of times or until a Selection run-time condition is met Iteration and iterators 4. Procedural abstraction: subroutines encapsulate collections of Recursion statements and subroutine calls can be treated as single Nondeterminacy statements 5. Recursion: subroutines which call themselves directly or indirectly to solve a problem, where the problem is typically defined in terms of simpler versions of itself 6. Concurrency: two or more program fragments executed in parallel, either on separate processors or interleaved on a single processor Note: Study Chapter 6 of the textbook except Section 7. Nondeterminacy: the execution order among alternative 6.6.2. constructs is deliberately left unspecified, indicating that any alternative will lead to a correct result Expression Syntax Expression Evaluation Ordering: Precedence An expression consists of and Associativity An atomic object, e.g. number or variable The use of infix, prefix, and postfix notation leads to ambiguity An operator applied to a collection of operands (or as to what is an operand of what arguments) which are expressions Fortran example: a+b*c**d**e/f Common syntactic forms for operators: The choice among alternative evaluation orders depends on Function call notation, e.g.
    [Show full text]
  • Repetition Structures
    24785_CH06_BRONSON.qrk 11/10/04 9:05 M Page 301 Repetition Structures 6.1 Introduction Goals 6.2 Do While Loops 6.3 Interactive Do While Loops 6.4 For/Next Loops 6.5 Nested Loops 6.6 Exit-Controlled Loops 6.7 Focus on Program Design and Implementation: After-the- Fact Data Validation and Creating Keyboard Shortcuts 6.8 Knowing About: Programming Costs 6.9 Common Programming Errors and Problems 6.10 Chapter Review 24785_CH06_BRONSON.qrk 11/10/04 9:05 M Page 302 302 | Chapter 6: Repetition Structures The applications examined so far have illustrated the programming concepts involved in input, output, assignment, and selection capabilities. By this time you should have gained enough experience to be comfortable with these concepts and the mechanics of implementing them using Visual Basic. However, many problems require a repetition capability, in which the same calculation or sequence of instructions is repeated, over and over, using different sets of data. Examples of such repetition include continual checking of user data entries until an acceptable entry, such as a valid password, is made; counting and accumulating running totals; and recurring acceptance of input data and recalculation of output values that only stop upon entry of a designated value. This chapter explores the different methods that programmers use to construct repeating sections of code and how they can be implemented in Visual Basic. A repeated procedural section of code is commonly called a loop, because after the last statement in the code is executed, the program branches, or loops back to the first statement and starts another repetition.
    [Show full text]
  • Tamil Flac Songs Free Download Tamil Flac Songs Free Download
    tamil flac songs free download Tamil flac songs free download. Get notified on all the latest Music, Movies and TV Shows. With a unique loyalty program, the Hungama rewards you for predefined action on our platform. Accumulated coins can be redeemed to, Hungama subscriptions. You can also login to Hungama Apps(Music & Movies) with your Hungama web credentials & redeem coins to download MP3/MP4 tracks. You need to be a registered user to enjoy the benefits of Rewards Program. You are not authorised arena user. Please subscribe to Arena to play this content. [Hi-Res Audio] 30+ Free HD Music Download Sites (2021) ► Read the definitive guide to hi-res audio (HD music, HRA): Where can you download free high-resolution files (24-bit FLAC, 384 kHz/ 32 bit, DSD, DXD, MQA, Multichannel)? Where to buy it? Where are hi-res audio streamings? See our top 10 and long hi-res download site list. ► What is high definition audio capability or it’s a gimmick? What is after hi-res? What's the highest sound quality? Discover greater details of high- definition musical formats, that, maybe, never heard before. The explanation is written by Yuri Korzunov, audio software developer with 20+ years of experience in signal processing. Keep reading. Table of content (click to show). Our Top 10 Hi-Res Audio Music Websites for Free Downloads Where can I download Hi Res music for free and paid music sites? High- resolution music free and paid download sites Big detailed list of free and paid download sites Download music free online resources (additional) Download music free online resources (additional) Download music and audio resources High resolution and audiophile streaming Why does Hi Res audio need? Digital recording issues Digital Signal Processing What is after hi-res sound? How many GB is 1000 songs? Myth #1.
    [Show full text]
  • Detail Streaming Support Protocols
    Encore+ User Guide Detail Streaming Support Protocols Supported Audio Codecs Supported Container Formats • MP3 • WAV • AAC • M4A • FLAC • OGG • LPCM/WAV/AIFF • AIFF • ALAC Supported Protocols • WMA, WMA9 • SHOUTcast • Ogg Vorbis • HTTPS Supported Playlist • WMA streaming • ASX • RTSP/SDP • M3U • PLS • WPL 43 Detail Audio Codec Support Encore+ User Guide Supported MP3 encoding parameters • Sampling rates [kHz]: 32, 44.1, 48 • Resolution [bits]: 16 • Bit rate [kbps]: 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, VBR • Channels: stereo, joined stereo, mono • MP3PRO playback • MP3 File extensions: *.mp3 • Decoding of ID3v1, ID3v2, MP3 ID tags including optional album art in .jpeg format up to 2 megapixels • Gapless MP3: Playback is gapless if the container provides LAME encoder delay and padding tags. Supported Vorbis encoding parameters • Sampling rates [kHz]: 32, 44.1, 48 • Resolution [bits]: 16 • Nominal bit rate [kbps] (quality level): 80 (Q1), 96 (Q2), 112 (Q3), 128 (Q4), 160 (Q5), 192 (Q6), • Channels: stereo • The audio player supports reading of Vorbis content stored in Ogg containers. Supported file name extensions: *.ogg and *.oga. • The audio player supports decoding of Vorbis comments. NOTE: There is no specification for tag names. The system relies on the OSS implementation. • Tag names decoded: TITLE, ALBUM, ARTIST, GENRE. • Binary data (e.g. for album art) is not supported. • The audio player supports gapless Vorbis playback. Supported FLAC encoding parameters • Sampling rates [kHz]: 44.1, 48, 88.2, 96, 176.4, 192 • Resolution [bits]: 16, 24 • Channels: stereo, mono • The audio player supports reading of FLAC content stored in native FLAC containers.
    [Show full text]
  • Opus, a Free, High-Quality Speech and Audio Codec
    Opus, a free, high-quality speech and audio codec Jean-Marc Valin, Koen Vos, Timothy B. Terriberry, Gregory Maxwell 29 January 2014 Xiph.Org & Mozilla What is Opus? ● New highly-flexible speech and audio codec – Works for most audio applications ● Completely free – Royalty-free licensing – Open-source implementation ● IETF RFC 6716 (Sep. 2012) Xiph.Org & Mozilla Why a New Audio Codec? http://xkcd.com/927/ http://imgs.xkcd.com/comics/standards.png Xiph.Org & Mozilla Why Should You Care? ● Best-in-class performance within a wide range of bitrates and applications ● Adaptability to varying network conditions ● Will be deployed as part of WebRTC ● No licensing costs ● No incompatible flavours Xiph.Org & Mozilla History ● Jan. 2007: SILK project started at Skype ● Nov. 2007: CELT project started ● Mar. 2009: Skype asks IETF to create a WG ● Feb. 2010: WG created ● Jul. 2010: First prototype of SILK+CELT codec ● Dec 2011: Opus surpasses Vorbis and AAC ● Sep. 2012: Opus becomes RFC 6716 ● Dec. 2013: Version 1.1 of libopus released Xiph.Org & Mozilla Applications and Standards (2010) Application Codec VoIP with PSTN AMR-NB Wideband VoIP/videoconference AMR-WB High-quality videoconference G.719 Low-bitrate music streaming HE-AAC High-quality music streaming AAC-LC Low-delay broadcast AAC-ELD Network music performance Xiph.Org & Mozilla Applications and Standards (2013) Application Codec VoIP with PSTN Opus Wideband VoIP/videoconference Opus High-quality videoconference Opus Low-bitrate music streaming Opus High-quality music streaming Opus Low-delay
    [Show full text]
  • An Introduction to Programming in Simula
    An Introduction to Programming in Simula Rob Pooley This document, including all parts below hyperlinked directly to it, is copyright Rob Pooley ([email protected]). You are free to use it for your own non-commercial purposes, but may not copy it or reproduce all or part of it without including this paragraph. If you wish to use it for gain in any manner, you should contact Rob Pooley for terms appropriate to that use. Teachers in publicly funded schools, universities and colleges are free to use it in their normal teaching. Anyone, including vendors of commercial products, may include links to it in any documentation they distribute, so long as the link is to this page, not any sub-part. This is an .pdf version of the book originally published by Blackwell Scientific Publications. The copyright of that book also belongs to Rob Pooley. REMARK: This document is reassembled from the HTML version found on the web: https://web.archive.org/web/20040919031218/http://www.macs.hw.ac.uk/~rjp/bookhtml/ Oslo 20. March 2018 Øystein Myhre Andersen Table of Contents Chapter 1 - Begin at the beginning Basics Chapter 2 - And end at the end Syntax and semantics of basic elements Chapter 3 - Type cast actors Basic arithmetic and other simple types Chapter 4 - If only Conditional statements Chapter 5 - Would you mind repeating that? Texts and while loops Chapter 6 - Correct Procedures Building blocks Chapter 7 - File FOR future reference Simple input and output using InFile, OutFile and PrintFile Chapter 8 - Item by Item Item oriented reading and writing and for loops Chapter 9 - Classes as Records Chapter 10 - Make me a list Lists 1 - Arrays and simple linked lists Reference comparison Chapter 11 - Like parent like child Sub-classes and complex Boolean expressions Chapter 12 - A Language with Character Character handling, switches and jumps Chapter 13 - Let Us See what We Can See Inspection and Remote Accessing Chapter 14 - Side by Side Coroutines Chapter 15 - File For Immediate Use Direct and Byte Files Chapter 16 - With All My Worldly Goods..
    [Show full text]