Heap-Based Reasoning About Asynchronous Programs

Total Page:16

File Type:pdf, Size:1020Kb

Heap-Based Reasoning About Asynchronous Programs Heap-based reasoning about asynchronous programs Vom Fachbereich Informatik der Technischen Universität Kaiserslautern zur Verleihung des akademischen Grades Doktor der Ingenieurwissenschafen (Dr.-Ing.) genehmigte Dissertation von Johannes Kloos Datum der wissenschaftlichen Aussprache: 14.06.2018 Dekan: Stefan Deßloch Berichterstatter: Rupak Majumdar Berichterstatter: Ranjit Jhala Berichterstatter: Viktor Vafeiadis D 386 Contents 1. Introduction1 1.1. How does asynchronous programming differ from other models? . .2 1.2. State of the art . .3 1.3. Contributions of this thesis . .4 2. Related work7 2.1. Asynchronous and event-driven programming . .7 2.2. Analysis and testing of asynchronous programs . .9 2.3. Deductive verification and semantics . 10 2.4. Type systems . 13 2.5. Optimization and parallelisation . 14 2.6. Proving refinement and behavior inclusion . 15 2.7. Automated program analysis . 16 3. Asynchronous Liquid Separation Types 19 3.1. Examples and Overview . 20 3.1.1. A core calculus for asynchronous programming . 20 3.1.2. Promise types . 21 3.1.3. Refinement types . 21 3.1.4. Refinements and state: strong updates . 22 3.1.5. Asynchrony and shared resources . 24 3.1.6. Detecting concurrency pitfalls . 25 3.2. The Type System . 26 3.2.1. Typing rules . 28 3.2.2. Value and expression typing . 29 3.2.3. Type safety . 31 3.3. Type Inference . 32 3.4. Case Studies . 36 3.4.1. The double-buffering example, revisited . 37 3.4.2. Another asynchronous copying loop . 38 3.4.3. Coordination in a parallel SAT solver . 40 3.4.4. The MirageOS FAT file system . 41 3.5. Limitations . 42 4. DontWaitForMe 43 4.1. A core calculus and type system . 44 4.1.1. A program logic for asynchronous programs . 46 iii Contents 4.1.2. Semantics of types . 49 4.2. Relational reasoning for asynchronous programs . 55 4.2.1. The rewrite rules . 55 4.2.2. Why existing methods are not sufficient . 57 4.2.3. Delayed refinement . 64 4.2.4. Closure properties and the fundamental lemma . 70 4.2.5. Soundness of DontWaitForMe . 73 4.2.6. Connection to standard soundness criteria . 75 5. Loading JavaScript asynchronously — JSDefer 77 5.1. Background: Loading JavaScript . 78 5.2. Deferrability analysis . 80 5.2.1. A hypothetical static approach . 81 5.2.2. Background: Event traces and races in web pages . 82 5.2.3. When is a set of scripts deferrable? . 83 5.2.4. JSDefer: A dynamic analysis for deferrability . 84 5.3. Evaluation . 86 5.3.1. Tools and environment . 86 5.3.2. How are async and defer used so far? . 87 5.3.3. Are our assumptions justified? . 88 5.3.4. Can we derive deferrability annotations for scripts? . 89 5.3.5. Does deferring actually gain performance? . 91 5.3.6. Threats to validity . 96 5.4. Soundness of the analysis . 96 6. Conclusion 101 A. Type safety for ALST 121 A.1. Adapting the type system . 121 A.2. The statement of type preservation . 122 A.3. The type preservation proof . 124 B. Delayed refinement and soundness of DWFM 131 B.1. Overview of the development . 131 B.1.1. corecalculus . 133 B.1.2. types . 134 B.1.3. specification . 134 B.1.4. typetranslation . 135 B.1.5. delayed . 136 B.2. Interesting proofs . 137 C. Curriculum Vitae 147 iv Summary Asynchronous concurrency is a wide-spread way of writing programs that deal with many short tasks. It is the programming model behind event-driven concurrency, as exemplified by GUI applications, where the tasks correspond to event handlers, web applications based around JavaScript, the implementation of web browsers, but also of server-side software or operating systems. This model is widely used because it provides the performance benefits of concurrency together with easier programming than multi-threading. While there is ample work on how to implement asynchronous programs, and significant work on testing and model checking, little research has been done on handling asynchronous programs that involve heap manipulation, nor on how to automatically optimize code for asynchronous concurrency. This thesis addresses the question of how we can reason about asynchronous programs while considering the heap, and how to use this this to optimize programs. The work is organized along the main questions: (i) How can we reason about asynchronous programs, without ignoring the heap? (ii) How can we use such reasoning techniques to optimize programs involving asynchronous behavior? (iii) How can we transfer these reasoning and optimization techniques to other settings? The unifying idea behind all the results in the thesis is the use of an appropriate model encompassing global state and a promise-based model of asynchronous concurrency. For the first question, We start from refinement type systems for sequential programs and extend them to perform precise resource-based reasoning in terms of heap contents, known outstanding tasks and promises. This extended type system is known as Asynchronous Liquid Separation Types, or ALST for short. We implement ALST in for OCaml programs using the Lwt library. For the second question, we consider a family of possible program optimizations, described by a set of rewriting rules, the DWFM rules. The rewriting rules are type- driven: We only guarantee soundness for programs that are well-typed under ALST. We give a soundness proof based on a semantic interpretation of ALST that allows us to show behavior inclusion of pairs of programs. For the third question, we address an optimization problem from industrial practice: Normally, JavaScript files that are referenced in an HTML file are be loaded synchronously, i.e., when a script tag is encountered, the browser must suspend parsing, then load and execute the script, and only after will it continue parsing HTML. But in practice, there are numerous JavaScript files for which asynchronous loading would be perfectly sound. First, we sketch a hypothetical optimization using the DWFM rules and a static analysis. To actually implement the analysis, we modify the approach to use a dynamic analysis. This analysis, known as JSDefer, enables us to analyze real-world web pages, and provide experimental evidence for the efficiency of this transformation. v Zusammenfassung Asynchrone Nebenläufigkeit ist ein gängiger Weg, Programm zu schreiben, die aus vielen kleinen Tätigkeiten (“Tasks”) bestehen. Es ist das Programmiermodell hinter ereignisgetrie- bener Nebenläufigkeit, wie in: GUI-Anwendungen, wo die Tasks die Ereignis-Behandlung erledigen; Web-Anwendungen auf Basis von JavaScript; Web-Browsern sowie Servern und Betriebssystemen. Das Modell ist weit verbreitet, da es die Leistungsvorteile der Nebenläufigkeit mit einem einfacheren Programmiermodell als Multi-Threading verbindet. Zwar gibt es viele Arbeiten über die Implementierung asynchroner Programme, wie auch über Testen und Model Checking, doch wurde wenig in die Richtung geforscht, wie man mit asynchronen Programmen, die den Heap manipulieren, umgeht, noch wie man Programme automatisch für asynchrone Nebenläufigkeit optimieren kann. Diese Dissertation behandelt die Frage, wie man über asynchrone Programme unter Einbeziehung des Heaps argumentieren kann, und wie man damit Programm optimiert. Die Arbeit ist auf drei Grundfragen aufgebaut: (i) Wie kann man über asynchrone Programme argumentieren, ohne den Heap zu ignorieren? (ii) Wie kann man mit solchen Techniken Programm mit asynchronem Verhalten optimieren? (iii) Wie kann man solche Techniken auf andere Gebiete übertragen? Die vereinheitlichende Idee hinter allen Resultaten der Dissertation ist die Verwen- dung eines geeigneten Modells, das den globalen Programmzustand und ein promise- basiertes Modell asynchroner Nebenläufigkeit enthält. Für die erste Frage gehen wir von Verfeinerungs-Typsystemen für sequentielle Programme aus und erweitern sie um ein präzises Resourcenmodell aus Heap-Inhalt, bekanntermaßen ausstehenden Tasks und Promises. Dieses erweiterte Typsystem heißt Asynchronous Liquid Separation Types, kurz ALST. Wir implementieren ALST für OCaml-Programme mit der Lwt-Bibliothek. Für die zweite Frage betrachten wir eine Familie potentieller Programm-Optimierungen in Form von Rewriting-Regeln, die DWFM-Regeln. Die regeln sind typgetrieben: Wir garantieren Korrektheit nur für Programme, die ALST-wohltypisiert sind. Wir führen einen Korrektheitsbeweis auf Basis einer semantischen Interpretation von ALST, die uns erlaubt, Verhaltensinklusion von Programmpaaren zu zeigen. Für die dritte Frage gehen wir ein Optimierungsproblem aus der Praxis an: Norma- lerweise werden JavaScript-Dateien, die in einer HTML-Datei verlinkt sind, synchron geladen, d.h., wenn ein script-Tag gelesen wird, muss der Browser anhalten, das Skript laden und ausführen, und darf dann erst das HTML-Parsing fortsetzen. Aber in der Praxis gibt es viele JavaScript-Dateien, für die asynchrones Laden unproblematisch wäre. Wir zeigen zuerst eine hypothetische Optimierung auf Basis von DWFM und einer statischen Analyse. Um die Analyse tatsächlich zu implementieren, ändern wir den Ansatz, indem wir eine dynamische Analyse verwenden. Diese Analyse, JSDefer, erlaubt uns, realistische Webseiten zu analysieren, und liefert experimentelle Daten für die Effizienz dieser Trans- formation. vii Contents Acknowledgements The work that went into this PhD thesis could not have been completed without the help of a great number of individualsl. First of all, I thank my supervisor Rupak Majumdar for his continued guidance and support during my PhD time. He was a wise mentor and a great supervisor, and helped me learn a lot of what I know today. It has to be said that the depth of his knowledge is truly awe-inspiring. Second, I wish to thank my co-author and reviewer Viktor Vafeiadis. He was always willing to have a scientific discussion, and would provide me with important insights. I also wish to thank my third reviewer, Prof. Ranjit Jhala, and my PhD committee, Professors Schweitzer, Poetzsch-Heffter and Schneider, for the work they put into reviewing my thesis and hold my PhD defense. Next, I want to thank all the many people that accompanied me on my way through my PhD, whether at MPI-SWS or at Instart Logic and Menlo Park Hacker Home.
Recommended publications
  • The Scrabble Player's Handbook Is Available for Free Download At
    The Scrabble Player's Handbook is available for free download at www.scrabbleplayershandbook.com 1 Contents Introduction 3 Meet The Team 5 What's Different About Competitive Scrabble? 10 How To Play Good Scrabble 11 The Words 14 What Is Scrabble? 16 Scoring Well 21 Understanding Rack Leaves 32 Word Learning 35 The First Move 46 Tile Tracking 50 Time Management 54 Exchanging 58 Phoneys 64 Set-Ups 65 Open and Closed Boards 68 The Endgame 75 Playing Style 85 How To Play Amazing Scrabble 94 The Luck Element 98 The Game Behind The Game 99 Starting Out in Competitive Play 101 Quackle 103 Zyzzyva 109 Internet Scrabble Club 115 Aerolith 117 Scrabble by Phone 119 Books 121 Scrabble Variants 123 Scrabble Around The World 125 Playing Equipment 127 Glossary 128 Appendix 133 Rules Governing Word Inclusion 133 Two-letter words 137 Three-letter words 140 SCRABBLE® is a registered trademark. All intellectual property rights in and to the game are owned in the U.S.A. by Hasbro Inc., in Canada by Hasbro Canada Inc. and throughout the rest of the world by J.W. Spear & Sons Ltd. of Maidenhead SL6 4UB, England, a subsidiary of Mattel Inc. Mattel and Spear are not affiliated with Hasbro or Hasbro Canada. The Scrabble Player's Handbook is available free of charge. There is no copyright on the contents and readers are encouraged to distribute the book in PDF or printed form to all who would benefit from it. Please respect our work by retaining the footer on every page and by refraining from reproducing any part of this book for financial gain.
    [Show full text]
  • Automated Program Transformation for Improving Software Quality
    Automated Program Transformation for Improving Software Quality Rijnard van Tonder CMU-ISR-19-101 October 2019 Institute for Software Research School of Computer Science Carnegie Mellon University Pittsburgh, PA 15213 Thesis Committee: Claire Le Goues, Chair Christian Kästner Jan Hoffmann Manuel Fähndrich, Facebook, Inc. Submitted in partial fulfillment of the requirements for the degree of Doctor of Philosophy in Software Engineering. Copyright 2019 Rijnard van Tonder This work is partially supported under National Science Foundation grant numbers CCF-1750116 and CCF-1563797, and a Facebook Testing and Verification research award. The views and conclusions contained in this document are those of the author and should not be interpreted as representing the official policies, either expressed or implied, of any sponsoring corporation, institution, the U.S. government, or any other entity. Keywords: syntax, transformation, parsers, rewriting, crash bucketing, fuzzing, bug triage, program transformation, automated bug fixing, automated program repair, separation logic, static analysis, program analysis Abstract Software bugs are not going away. Millions of dollars and thousands of developer-hours are spent finding bugs, debugging the root cause, writing a patch, and reviewing fixes. Automated techniques like static analysis and dynamic fuzz testing have a proven track record for cutting costs and improving software quality. More recently, advances in automated program repair have matured and see nascent adoption in industry. Despite the value of these approaches, automated techniques do not come for free: they must approximate, both theoretically and in the interest of practicality. For example, static analyzers suffer false positives, and automatically produced patches may be insufficiently precise to fix a bug.
    [Show full text]
  • Opportunities and Open Problems for Static and Dynamic Program Analysis Mark Harman∗, Peter O’Hearn∗ ∗Facebook London and University College London, UK
    1 From Start-ups to Scale-ups: Opportunities and Open Problems for Static and Dynamic Program Analysis Mark Harman∗, Peter O’Hearn∗ ∗Facebook London and University College London, UK Abstract—This paper1 describes some of the challenges and research questions that target the most productive intersection opportunities when deploying static and dynamic analysis at we have yet witnessed: that between exciting, intellectually scale, drawing on the authors’ experience with the Infer and challenging science, and real-world deployment impact. Sapienz Technologies at Facebook, each of which started life as a research-led start-up that was subsequently deployed at scale, Many industrialists have perhaps tended to regard it unlikely impacting billions of people worldwide. that much academic work will prove relevant to their most The paper identifies open problems that have yet to receive pressing industrial concerns. On the other hand, it is not significant attention from the scientific community, yet which uncommon for academic and scientific researchers to believe have potential for profound real world impact, formulating these that most of the problems faced by industrialists are either as research questions that, we believe, are ripe for exploration and that would make excellent topics for research projects. boring, tedious or scientifically uninteresting. This sociological phenomenon has led to a great deal of miscommunication between the academic and industrial sectors. I. INTRODUCTION We hope that we can make a small contribution by focusing on the intersection of challenging and interesting scientific How do we transition research on static and dynamic problems with pressing industrial deployment needs. Our aim analysis techniques from the testing and verification research is to move the debate beyond relatively unhelpful observations communities to industrial practice? Many have asked this we have typically encountered in, for example, conference question, and others related to it.
    [Show full text]
  • Job Description: Riverside Research's Engineering and Support Solutions
    Job Description: Riverside Research’s Engineering and Support Solutions Directorate has an opening in the Dayton, Ohio area for a Software Developer. This candidate will have the opportunity to develop a web-based client application and backend server for a highly scalable physics tool while setting direction and leading an assisting support team, with a focus on the use of permissively licensed programming languages and libraries. Job Responsibilities: • Utilizing languages like C and C++ • Working with JavaScript/ECMAscript and its language extensions • User interface development • Creating 3D renderings • Using revision control systems • Other duties as assigned Requirements: • Experience with compiled languages like C and C++ • Experience with Javascript/ECMAscript and its language extensions like dart (dart2js), TypeScript, Google Closure Tools, Google Web Toolkit, Haxe • Experience with user interface development toolkits like Qt, GTK, VTK, etc. • Experience with 3D rendering libraries like OpenGL, OpenSceneGraph, etc. • Experience with revision control systems like git, svn, mercurial, etc. Desired experience: • Experience working in projects comprising >100,000 sloc • Development of browser-centric 3D applications (in particular utilization of WebGL) • Experience combining web client and server backend components into a single thick client application • Development experience on Unix and/or Linux systems • Experience with WebGL • Familiarity with Unix shell scripting and supporting tools like bash, awk, sed • Usage of CAD systems
    [Show full text]
  • Racerd: Compositional Static Race Detection
    RacerD: Compositional Static Race Detection SAM BLACKSHEAR, Facebook, USA NIKOS GOROGIANNIS, Facebook, UK and Middlesex University London, UK PETER W. O’HEARN, Facebook, UK and University College London, UK ILYA SERGEY∗, Yale-NUS College, Singapore and University College London, UK Automatic static detection of data races is one of the most basic problems in reasoning about concurrency. We present RacerD—a static program analysis for detecting data races in Java programs which is fast, can scale to large code, and has proven effective in an industrial software engineering scenario. To our knowledge, RacerD is the first inter-procedural, compositional data race detector which has been empirically shownto have non-trivial precision and impact. Due to its compositionality, it can analyze code changes quickly, and this allows it to perform continuous reasoning about a large, rapidly changing codebase as part of deployment within a continuous integration ecosystem. In contrast to previous static race detectors, its design favors reporting high-confidence bugs over ensuring their absence. RacerD has been in deployment for over a year at Facebook, where it has flagged over 2500 issues that have been fixed by developers before reaching production. It has been important in enabling the development of new code as well as fixing old code: it helped support the conversion of part of the main Facebook Android app from a single-threaded to a multi-threaded architecture. In this paper we describe RacerD’s design, implementation, deployment and impact. CCS Concepts: • Theory of computation → Program analysis; • Software and its engineering → Concurrent programming structures; Additional Key Words and Phrases: Concurrency, Static Analysis, Race Freedom ACM Reference Format: Sam Blackshear, Nikos Gorogiannis, Peter W.
    [Show full text]
  • Augmenting Information Flow for Visual Privacy
    Augmenting Information Flow for Visual Privacy by Ian Spiro A dissertation submitted in partial fulfillment of the requirements for the degree of Doctor of Philosophy Department of Computer Science New York University September 2013 Professor Christoph Bregler c Ian Spiro All Rights Reserved, 2013 Acknowledgements First and foremost, I would like to thank my partner Molly Tanenbaum for her love, patience, good cheer, and support. I'm excited for our next chapter and looking forward to the day that we can enjoy spiced lamb shanks in a hot tub. Thanks to Chris Bregler, my research advisor and patron. He encouraged me to explore new intellectual paths and brought me along for some wild rides. Thanks to Helen Nissenbaum for leading the Privacy Research Group and for the great discussions in which we managed to bridge the interdisciplinary abyss. Thanks to my family, Mom, Dad, and Miranda. Thanks to the Motion Chain alpha users who tested and invented charades: Phil Dhingra, Raphael Holmes, Kiefer Katovich, Carrie Kemper, Doug Kenter, Devon Sherman. I met some great people at NYU who made the experience considerably more enjoyable: Clement Farabet, Yotam Gingold, Eric Hielscher, Adrian Secord, Kirill Smolskiy, Murphy Stein, Graham Taylor, Matthew Tierney, and George Williams. iv Preface The work presented in chapter 2 is based upon two previously published papers. The first paper appeared in Computer Vision and Pattern Recognition Workshops (CVPRW 2010) and was co-authored with Graham Taylor, George Williams, and Christoph Bregler [80]. The second paper was presented at Collective Intelligence 2012 [79]. This work was co-authored with Thomas Huston and Christoph Bregler.
    [Show full text]
  • Prestans Documentation Release 2.0
    Prestans Documentation Release 2.0 Anomaly Software November 02, 2016 Contents 1 Installation 3 1.1 Software Requirements.........................................3 1.2 Deployment notes............................................4 1.2.1 Apache + mod_wsgi......................................4 1.2.2 AppEngine...........................................4 1.3 Unit testing................................................4 2 Framework Design 7 2.1 Exceptions................................................7 2.2 HTTP Header Reference.........................................7 2.2.1 Content Negotiation.......................................8 2.2.2 Custom headers.........................................8 3 Routing & Handling Requests 11 3.1 Serializers & DeSerializers........................................ 11 3.2 Routing Requests............................................. 12 3.2.1 Regex & URL design primer.................................. 12 3.2.2 Using Request Router...................................... 13 3.3 Handling Requests............................................ 14 3.4 Constructing Response.......................................... 17 3.4.1 Minifying Content....................................... 18 3.4.2 Serving Binary Content..................................... 18 3.5 Raising Exceptions............................................ 19 3.5.1 Unsupported Vocabulary or Content Type........................... 19 3.5.2 Configuration Exceptions.................................... 19 3.5.3 Data Validation Exceptions..................................
    [Show full text]
  • Vysoké Učení Technické V Brně Brno University of Technology
    VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV POČÍTAČOVÉ GRAFIKY A MULTIMÉDIÍ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA PRÁCE S HISTORICKÝMI MAPAMI NA MOBILNÍM ZAŘÍZENÍ DIPLOMOVÁ PRÁCE MASTER’S THESIS AUTOR PRÁCE Bc. MARTIN URBAN AUTHOR BRNO 2014 VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV POČÍTAČOVÉ GRAFIKY A MULTIMÉDIÍ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA PRÁCE S HISTORICKÝMI MAPAMI NA MOBILNÍM ZAŘÍZENÍ INTERACTION WITH OLD MAPS ON MOBILE DEVICES DIPLOMOVÁ PRÁCE MASTER’S THESIS AUTOR PRÁCE Bc. MARTIN URBAN AUTHOR VEDOUCÍ PRÁCE Ing. VÍTĚZSLAV BERAN, Ph.D. SUPERVISOR BRNO 2014 Abstrakt Cílem této diplomové práce je experimentovat s nejmodernějšími webovými technologiemi a navrhnout nový postup pro tvorbu mobilních aplikací. Díky navženým postupùm je možné vytváøet mobilní aplikace, které jsou multiplatformní a zároveň téměř nerozpoznatelné od nativních. Dùraz je kladený na výkon a nativní chování uživatelského rozhraní. Popsané postupy jsou demonstrované na aplikaci pro práci s historickými mapami, která je schopna v reálném èase zobrazovat mapy z historických archivù po celém světě. Testy demonstrační aplikace vykazují oproti standardním postupùm tvorby webových aplikací rapidní zrychlení. Abstract The goal of this thesis is to experiment with the latest web technologies and to design new process for mobile application creation. It is possible to create multiplatform applications which are almost unrecognizable from native applications by proposed procedures. It is focused on performance and native behaviour of the user interface in this thesis. Described practices are demonstrated on application designed for work with historical maps, which is able to show maps from historical archives whole over world real-time.
    [Show full text]
  • Building a Complete Language in the Browser
    The DOPPIO JVM: Building a Complete Language in the Browser John Vilk CJ Carey Jez Ngy Emery D. Berger School of Computer Science yDept. of Computer Science University of Massachusetts, Amherst Amherst College Amherst, MA 01003 Amherst, MA 01002 {jvilk,ccarey,emery}@cs.umass.edu, [email protected] Abstract 1. Introduction Web browsers are rapidly overtaking native environments as Recent dramatic improvements in JavaScript performance the central focus of application development. Developers are have made it possible to write a wide range applications building increasingly rich and responsive applications that that run entirely inside the browser. Examples of these run entirely in the browser. However, web applications must include full office suites [7, 16], instant messengers [4], and be written in JavaScript, the only language available in all photo editors [6]. Browsers are an attractive implementation browsers. Developers thus cannot reuse existing code in other substrate because web applications can run unchanged across languages; rewriting this code in JavaScript can be onerous desktop, mobile, and tablet platforms. and error-prone. However, these applications must be written specifically An attractive alternative is to enable the execution of stan- in JavaScript and tailored to the browser environment. Devel- dard programming languages within the browser. This ap- opers cannot take advantage of existing bodies of well-tested proach would let programmers use familiar languages and code in languages like Java, and must instead rewrite
    [Show full text]
  • Developing a Pedagogical Framework for Gaming Literacy in the Multimodal Composition Classroom
    TOOLS OF PLAY: DEVELOPING A PEDAGOGICAL FRAMEWORK FOR GAMING LITERACY IN THE MULTIMODAL COMPOSITION CLASSROOM Tina Lynn Arduini A Dissertation Submitted to the Graduate College of Bowling Green State University in partial fulfillment of the requirements for the degree of DOCTOR OF PHILOSOPHY May 2016 Committee: Kristine Blair, Advisor Gi Yun, Graduate Faculty Representative Lee Nickoson Sue Carter Wood ii ABSTRACT Kristine Blair, Advisor Since the publication of James Paul Gee’s (2003) seminal text What Video Games Have to Teach us About Learning and Literacy, scholars in the field of rhetoric and writing have been looking at the ways video games have made an impact on modern literacies. Paralleling this research, rhetoric and writing teacher-scholars have also been exploring the benefits to teaching multimodal composition skills to their students. My dissertation examines the intersections of these two related fields of study in order to help construct a pedagogical framework that utilizes gaming literacies in the multimodal composition classroom. Using the gaming literacy narratives of three student gamers at a rural Midwestern university, I address the following research questions: How do students acquire gaming literacy? What kinds of multimodal skills are acquired through gaming literacy? What does one’s gaming literacy narrative reveal about his or her literate practices? The answers to these questions help to inform my approach to the more pedagogically-driven research question: How can gaming literacy be effectively used in the multimodal composition classroom? My findings are influenced by technofeminist research methodologies so that I explore not only the role that video games have played upon my research participants but also the social adaptations that the participants have exerted over their gaming experiences.
    [Show full text]
  • Become a Ninja with Angular2 (Free Sample)
    Become a ninja with Angular2 (free sample) Ninja Squad Table of Contents 1. Free sample . 1 2. Introduction. 2 3. A gentle introduction to ECMASCRIPT 6 . 4 3.1. Transpilers . 4 3.2. let . 5 3.3. Constants . 6 3.4. Creating objects. 7 3.5. Destructuring assignment . 7 3.6. Default parameters and values . 9 3.7. Rest operator . 11 3.8. Classes . 12 3.9. Promises . 14 3.10. Arrow functions . 18 3.11. Sets and Maps . 21 3.12. Template literals . 22 3.13. Modules . 22 3.14. Conclusion . 24 4. Going further than ES6 . 25 4.1. Dynamic, static and optional types . 25 4.2. Enters TypeScript . 26 4.3. A practical example with DI . 26 5. Diving into TypeScript . 29 5.1. Types as in TypeScript. 29 5.2. Enums . 30 5.3. Return types. 30 5.4. Interfaces . 31 5.5. Optional arguments . 31 5.6. Functions as property . 32 5.7. Classes . 32 5.8. Working with other libraries . 34 5.9. Decorators . 35 6. The wonderful land of Web Components . 38 6.1. A brave new world. 38 6.2. Custom elements . 38 6.3. Shadow DOM . 39 6.4. Template . 40 6.5. HTML imports . 41 6.6. Polymer and X-tag . 41 7. Grasping Angular’s philosophy . 44 8. From zero to something . 48 8.1. Developing and building a TypeScript app . 48 8.2. Our first component . 50 8.3. Bootstrapping the app . 52 8.4. From zero to something better with angular-cli. 55 9. End of the free sample .
    [Show full text]
  • On Source-To-Source Compilers
    See discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/303348270 On source-to-source compilers Article · April 2016 CITATIONS READS 2 1,257 2 authors: Evgeniy Ilyushin Dmitry Namiot Lomonosov Moscow State University Lomonosov Moscow State University 5 PUBLICATIONS 5 CITATIONS 116 PUBLICATIONS 788 CITATIONS SEE PROFILE SEE PROFILE Some of the authors of this publication are also working on these related projects: Pentagon communications (AIN, IP, cybersecurity, etc), digital railway (GSM-R, LTE/4G, 5G) View project AI in software engineering View project All content following this page was uploaded by Evgeniy Ilyushin on 19 May 2016. The user has requested enhancement of the downloaded file. International Journal of Open Information Technologies ISSN: 2307-8162 vol. 4, no. 5, 2016 On source-to-source compilers Evgeniy Ilyushin, Dmitry Namiot Abstract - Computer technologies like computer languages and hardware have been involving for past few decades. We II. THE ARCHITECTURE AND REQUIREMENTS have a lot of computer programs which need to maintain and rewrite when releasing new equipment or technology. It is too As with the traditional compiler, an architecture of transpiler can expensive and unreliable to rewrite the whole code from be divided into two parts – front-end and back-end. The front-end scratch. Also the spread of portable devices, which usually translates the source language into an intermediate representation. have multi-core processors, increase the demands on the The back-end works with the internal representation to produce quality of the developed programs, their effective work in code in the output language.
    [Show full text]