Ruby Cookbook, Second Edition, by Lucas Carlson and Leonard Richardson

Total Page:16

File Type:pdf, Size:1020Kb

Load more

Updated2nd for Edition Ruby 2.1 Ruby Cookbook SECOND EDITION Why spend time on coding problems that others have already solved when Programmersdon’t “ Cookbook Ruby you could be making real progress on your Ruby project? This updated livebylanguagesyn- cookbook provides more than 350 recipes for solving common problems, on topics ranging from basic data structures, classes, and objects, to web taxalone,butbyevery development, distributed programming, and multithreading. lineofconcretecode Revised for Ruby 2.1, each recipe includes a discussion on why and how theywrite.Tothatend, the solution works. You’ll find recipes suitable for all skill levels, from thisbookisfilledwith Ruby newbies to experts who need an occasional reference. With Ruby practicalrecipes,tips, Cookbook, you’ll not only save time, but keep your brain percolating with new ideas as well. knowledge,andwisdom. Ihopeitleadsreaders Recipes cover: tothenextstepofRuby ■ Data structures including strings, numbers, date and time, programming.” arrays, hashes, files, and directories —Yukihiro (Matz) Matsumoto ■ Using Ruby’s code blocks, also known as closures Creator of Ruby ■ OOP features such as classes, methods, objects, and modules ■ XML and HTML, databases and persistence, and graphics and other formats ■ Web development with Rails and Sinatra ■ Internet services, web services, and distributed programming ■ Software testing, debugging, packaging, and distributing ■ Multitasking, multithreading, and extending Ruby with other languages Ruby Lucas Carlson founded AppFog, a PaaS that leverages the open source Cloud Foundry project. A professional developer for 20 years, he specializes in Ruby on Rails development. Lucas has written Programming for PaaS and Ruby Cookbook, First Edition (both O’Reilly). He maintains a website at http://www.lucascarlson.net/. Richardson Leonard Richardson has been programming since he was eight years old. Carlson & Recently, the quality of his code has improved somewhat. He is responsible for programming language libraries, including Rubyful Soup. He maintains a website Cookbook at http://www.crummy.com/. RECIPES FOR OBJECT-ORIENTED SCRIPTING PROGRAMMING LANGUAGES/RUBY Twitter: @oreillymedia facebook.com/oreilly US $49.99 CAN $57.99 ISBN: 978-1-449-37371-9 Lucas Carlson & Leonard Richardson www.allitebooks.com Updated2nd for Edition Ruby 2.1 Ruby Cookbook SECOND EDITION Why spend time on coding problems that others have already solved when Programmersdon’t “ Cookbook Ruby you could be making real progress on your Ruby project? This updated livebylanguagesyn- cookbook provides more than 350 recipes for solving common problems, on topics ranging from basic data structures, classes, and objects, to web taxalone,butbyevery development, distributed programming, and multithreading. lineofconcretecode Revised for Ruby 2.1, each recipe includes a discussion on why and how theywrite.Tothatend, the solution works. You’ll find recipes suitable for all skill levels, from thisbookisfilledwith Ruby newbies to experts who need an occasional reference. With Ruby practicalrecipes,tips, Cookbook, you’ll not only save time, but keep your brain percolating with new ideas as well. knowledge,andwisdom. Ihopeitleadsreaders Recipes cover: tothenextstepofRuby ■ Data structures including strings, numbers, date and time, programming.” arrays, hashes, files, and directories —Yukihiro (Matz) Matsumoto ■ Using Ruby’s code blocks, also known as closures Creator of Ruby ■ OOP features such as classes, methods, objects, and modules ■ XML and HTML, databases and persistence, and graphics and other formats ■ Web development with Rails and Sinatra ■ Internet services, web services, and distributed programming ■ Software testing, debugging, packaging, and distributing ■ Multitasking, multithreading, and extending Ruby with other languages Ruby Lucas Carlson founded AppFog, a PaaS that leverages the open source Cloud Foundry project. A professional developer for 20 years, he specializes in Ruby on Rails development. Lucas has written Programming for PaaS and Ruby Cookbook, First Edition (both O’Reilly). He maintains a website at http://www.lucascarlson.net/. Richardson Leonard Richardson has been programming since he was eight years old. Carlson & Recently, the quality of his code has improved somewhat. He is responsible for programming language libraries, including Rubyful Soup. He maintains a website Cookbook at http://www.crummy.com/. RECIPES FOR OBJECT-ORIENTED SCRIPTING PROGRAMMING LANGUAGES/RUBY Twitter: @oreillymedia facebook.com/oreilly US $49.99 CAN $57.99 ISBN: 978-1-449-37371-9 Lucas Carlson & Leonard Richardson www.allitebooks.com SECOND EDITION Ruby Cookbook Lucas Carlson and Leonard Richardson www.allitebooks.com Ruby Cookbook by Lucas Carlson and Leonard Richardson Copyright © 2015 Lucas Carlson and Leonard Richardson. All rights reserved. Printed in the United States of America. Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions are also available for most titles (http://safaribooksonline.com). For more information, contact our corporate/ institutional sales department: 800-998-9938 or [email protected]. Editors: Brian Anderson and Allyson MacDonald Interior Designer: David Futato Production Editor: Matthew Hacker Cover Designer: Ellie Volckhausen Proofreader: Rachel Monaghan Illustrator: Rebecca Demarest Indexer: Angela Howard July 2006: First Edition March 2015: Second Edition Revision History for the Second Edition 2015-03-10: First Release See http://oreilly.com/catalog/errata.csp?isbn=9781449373719 for release details. The O’Reilly logo is a registered trademark of O’Reilly Media, Inc. Ruby Cookbook, the cover image of a side-striped jackal, and related trade dress are trademarks of O’Reilly Media, Inc. While the publisher and the authors have used good faith efforts to ensure that the information and instructions contained in this work are accurate, the publisher and the authors disclaim all responsibility for errors or omissions, including without limitation responsibility for damages resulting from the use of or reliance on this work. Use of the information and instructions contained in this work is at your own risk. If any code samples or other technology this work contains or describes is subject to open source licenses or the intellectual property rights of others, it is your responsibility to ensure that your use thereof complies with such licenses and/or rights. 978-1-449-37371-9 [M] www.allitebooks.com For Yoscelina, my muse and inspiration for everything great I have ever accomplished. For Hugh and Valentina, the most incredible miracles ever. For Tess, who sat by me the whole time. —Lucas Carlson For Sumana. —Leonard Richardson www.allitebooks.com www.allitebooks.com Table of Contents Preface. xvii 1. Ruby 2.1. 1 1.1 What’s Different Between Ruby 1.8 and 2.1? 2 1.2 YARV (Yet Another Ruby VM) Bytecode Interpreter 9 1.3 Syntax Changes 11 1.4 Keyword Arguments 14 1.5 Performance Enhancements 15 1.6 Refinements 16 1.7 Debugging with DTrace and TracePoint 17 1.8 Module Prepending 19 1.9 New Methods 21 1.10 New Classes 23 1.11 New Standard Libraries 26 1.12 What’s Next? 27 2. Strings. 29 2.1 Building a String from Parts 33 2.2 Substituting Variables into Strings 35 2.3 Substituting Variables into an Existing String 37 2.4 Reversing a String by Words or Characters 39 2.5 Representing Unprintable Characters 40 2.6 Converting Between Characters and Values 43 2.7 Converting Between Strings and Symbols 44 2.8 Processing a String One Character at a Time 45 2.9 Processing a String One Word at a Time 47 2.10 Changing the Case of a String 49 2.11 Managing Whitespace 50 v www.allitebooks.com 2.12 Testing Whether an Object Is String-Like 52 2.13 Getting the Parts of a String You Want 53 2.14 Word-Wrapping Lines of Text 54 2.15 Generating a Succession of Strings 56 2.16 Matching Strings with Regular Expressions 59 2.17 Replacing Multiple Patterns in a Single Pass 61 2.18 Validating an Email Address 63 2.19 Classifying Text with a Bayesian Analyzer 66 3. Numbers. 69 3.1 Parsing a Number from a String 70 3.2 Comparing Floating-Point Numbers 73 3.3 Representing Numbers to Arbitrary Precision 76 3.4 Representing Rational Numbers 79 3.5 Generating Random Numbers 80 3.6 Converting Between Numeric Bases 82 3.7 Taking Logarithms 83 3.8 Finding Mean, Median, and Mode 86 3.9 Converting Between Degrees and Radians 89 3.10 Multiplying Matrices 90 3.11 Solving a System of Linear Equations 94 3.12 Using Complex Numbers 97 3.13 Simulating a Subclass of Fixnum 99 3.14 Doing Math with Roman Numbers 103 3.15 Generating a Sequence of Numbers 109 3.16 Generating Prime Numbers 112 3.17 Checking a Credit Card Checksum 116 4. Date and Time. 119 4.1 Finding Today’s Date 122 4.2 Parsing Dates, Precisely or Fuzzily 126 4.3 Printing a Date 129 4.4 Iterating Over Dates 134 4.5 Doing Date Arithmetic 135 4.6 Counting the Days Since an Arbitrary Date 138 4.7 Converting Between Time Zones 140 4.8 Checking Whether Daylight Saving Time Is in Effect 142 4.9 Converting Between Time and DateTime Objects 144 4.10 Finding the Day of the Week 147 4.11 Handling Commercial Dates 149 4.12 Running a Code Block Periodically 150 4.13 Waiting a Certain Amount of Time 152 vi | Table of Contents www.allitebooks.com 4.14 Adding a Timeout to a Long-Running Operation 155 5. Arrays. 157 5.1 Iterating Over an Array 159 5.2 Rearranging Values Without Using Temporary Variables 163 5.3 Stripping Duplicate Elements from an Array 165 5.4 Reversing an Array 166 5.5 Sorting an Array 167 5.6 Ignoring Case When Sorting Strings 169 5.7 Making Sure a Sorted Array Stays Sorted 170 5.8 Summing the Items of an Array 175 5.9 Sorting an Array by Frequency of Appearance 177 5.10 Shuffling an Array 179 5.11 Getting the N Smallest Items of an Array 180 5.12 Building a Hash from an Array 183 5.13 Extracting Portions of Arrays 185 5.14 Computing Set Operations on Arrays 188 5.15 Partitioning or Classifying a Set 191 6.
Recommended publications
  • Konzeption Und Implementierung Eines Gamification Services Mit Ruby

    Konzeption Und Implementierung Eines Gamification Services Mit Ruby

    Konzeption und Implementierung eines Gamification Services mit Ruby Reinhard Buchinger MASTERARBEIT eingereicht am Fachhochschul-Masterstudiengang Interaktive Medien in Hagenberg im Dezember 2012 © Copyright 2012 Reinhard Buchinger Diese Arbeit wird unter den Bedingungen der Creative Commons Lizenz Namensnennung–NichtKommerziell–KeineBearbeitung Österreich (CC BY- NC-ND) veröffentlicht – siehe http://creativecommons.org/licenses/by-nc-nd/ 3.0/at/. ii Erklärung Ich erkläre eidesstattlich, dass ich die vorliegende Arbeit selbstständig und ohne fremde Hilfe verfasst, andere als die angegebenen Quellen nicht benutzt und die den benutzten Quellen entnommenen Stellen als solche gekennzeich- net habe. Die Arbeit wurde bisher in gleicher oder ähnlicher Form keiner anderen Prüfungsbehörde vorgelegt. Hagenberg, am 3. Dezember 2012 Reinhard Buchinger iii Inhaltsverzeichnis Erklärung iii Kurzfassung vii Abstract viii 1 Einleitung 1 1.1 Motivation und Zielsetzung . .1 1.2 Inhaltlicher Aufbau . .2 2 Grundlagen 3 2.1 Gamification . .3 2.1.1 Verfolgte Ziele . .3 2.1.2 Geläufige Spielemechanismen . .4 2.1.3 Frühere Formen . .4 2.2 Apache Cassandra . .6 2.2.1 Datenmodell im Vergleich zu RDBMS . .6 2.2.2 Vorteile im Clusterbetrieb . .7 2.3 Apache ZooKeeper . .7 2.4 RabbitMQ . .9 2.5 Memcached . 10 2.6 Ruby . 11 2.6.1 JRuby . 11 2.6.2 Gems . 12 2.7 Domänenspezifische Sprachen . 14 2.7.1 Vorteile . 14 2.7.2 Nachteile . 15 2.7.3 DSL in Ruby . 15 2.8 runtastic . 15 2.8.1 Produktpalette . 16 2.8.2 Infrastruktur . 16 3 Verwandte Systeme und Anforderungen 19 3.1 Verwandte Systeme . 19 iv Inhaltsverzeichnis v 3.1.1 Gamification Systeme .
  • Rubyperf.Pdf

    Rubyperf.Pdf

    Ruby Performance. Tips, Tricks & Hacks Who am I? • Ezra Zygmuntowicz (zig-mun-tuv-itch) • Rubyist for 4 years • Engine Yard Founder and Architect • Blog: http://brainspl.at Ruby is Slow Ruby is Slow?!? Well, yes and no. The Ruby Performance Dichotomy Framework Code VS Application Code Benchmarking: The only way to really know performance characteristics Profiling: Measure don’t guess. ruby-prof What is all this good for in real life? Merb Merb Like most useful code it started as a hack, Merb == Mongrel + Erb • No cgi.rb !! • Clean room implementation of ActionPack • Thread Safe with configurable Mutex Locks • Rails compatible REST routing • No Magic( well less anyway ;) • Did I mention no cgi.rb? • Fast! On average 2-4 times faster than rails Design Goals • Small core framework for the VC in MVC • ORM agnostic, use ActiveRecord, Sequel, DataMapper or roll your own db access. • Prefer simple code over magic code • Keep the stack traces short( I’m looking at you alias_method_chain) • Thread safe, reentrant code Merb Hello World No code is faster then no code • Simplicity and clarity trumps magic every time. • When in doubt leave it out. • Core framework to stay small and simple and easy to extend without gross hacks • Prefer plugins for non core functionality • Plugins can be gems Key Differences • No auto-render. The return value of your controller actions is what gets returned to client • Merb’s render method just returns a string, allowing for multiple renders and more flexibility • PartController’s allow for encapsualted applets without big performance cost Why not work on Rails instead of making a new framework? • Originally I was trying to optimize Rails and make it more thread safe.
  • Snow Blocks Rescuers in West Coast Flood

    Snow Blocks Rescuers in West Coast Flood

    . ^ * A r t n g m Daflj Net PrcM Rim The Weather War tka Week Dniled r o n e u l of U. S. WeMher Were— Deeeilibee U , 1»M ' Fair, cidder tonight, low ih>-SS; 14,151 fair, HMIe temperature ehaiige to­ Memhnr at the Audit morrow, high in Ma. Poi ee u of ClreoUtion Manehe»ter^-^A CUy o f ViUage Charm VOL. LXXXIV, NO. 74 (TWENTY-FOUR PAGES—TWO SECTIONS) MANCHESTER, CONN., MONDAY, DECEMBER 28, 1964 (Claaslfied Advertialng on Page tZ) PRICE SEVEN CENTS Events In State Snow Blocks Rescuers State Denies Bus Request In West Coast Flood For Enfield --------- \ HARTFORD (A P )— The SAN FRANCISCO (AP)-*'n"t take off from Stead Alr^ Oregon reported 18 deaths<^day halted helicopter flights fa Stale has denied a bus Force Base in Nevada because from '1“flood '' action." " " — the area. The prediction was for — A heavy snowfall block of the storm. line’s request to serve En- ed flood relief flights in The Red Cross listed 16.300 contin\ied snow today. The turn to cold dropped the families as suffering major loss­ "W e’ll have to airlift supplies n iield commuters who work Northern California today snow level to 1,000 feet eleva­ es to homes, businesses or or evacuate soon.” Sowle said. in East Hartford but ap­ and prolonged the isolation tion. farms in Oregon, California, He called those isolated In the proved a similar request ordeal of sTOnded refugees The Columbia dropped enough Idaho and Washington, mountainous, heavily wooded from a competitor. into an eighth day.
  • Avaliação De Performance De Interpretadores Ruby

    Avaliação De Performance De Interpretadores Ruby

    Universidade Federal de Santa Catarina Centro Tecnológico Curso de Sistemas de Informação Wilson de Almeida Avaliação de Performance de Interpretadores Ruby Florianópolis 2010 Wilson de Almeida Avaliação de Performance de Interpretadores Ruby Monograa apresentada ao Curso de Sistemas de Informação da UFSC, como requisito para a obten- ção parcial do grau de BACHAREL em Sistemas de Informação. Orientador: Lúcia Helena Martins Pacheco Doutora em Engenharia Florianópolis 2010 Almeida, Wilson Avaliação de Performance de Interpretadores Ruby / Wilson Al- meida - 2010 xx.p 1.Performance 2. Interpretadores.. I.Título. CDU 536.21 Wilson de Almeida Avaliação de Performance de Interpretadores Ruby Monograa apresentada ao Curso de Sistemas de Informação da UFSC, como requisito para a obten- ção parcial do grau de BACHAREL em Sistemas de Informação. Aprovado em 21 de junho de 2010 BANCA EXAMINADORA Lúcia Helena Martins Pacheco Doutora em Engenharia José Eduardo De Lucca Mestre em Ciências da Computação Eduardo Bellani Bacharel em Sistemas de Informação Aos meus pais e meu irmão. Aos familiares e amigos, em especial pra mi- nha eterna amiga Liliana, que está torcendo por mim de onde ela estiver. Agradecimentos Agradeço ao meu amigo, colega de curso, parceiro de trabalhos e orientador Eduardo Bellani, pelo encorajamento, apoio e seus ricos conselhos sobre o melhor direci- onamento deste trabalho. A professora Lúcia Helena Martins Pacheco pela orientação, amizade, e pela paciência, sem a qual este trabalho não se realizaria. Ao professor José Eduardo Delucca, por seus conselhos objetivos e pontuais. Todos os meus amigos que incentivaram e compreenderam a minha ausência nesse período de corrida atrás do objetivo de concluir o curso.
  • Insert Here Your Thesis' Task

    Insert Here Your Thesis' Task

    Insert here your thesis' task. Czech Technical University in Prague Faculty of Information Technology Department of Software Engineering Master's thesis New Ruby parser and AST for SmallRuby Bc. Jiˇr´ıFajman Supervisor: Ing. Marcel Hlopko 18th February 2016 Acknowledgements I would like to thank to my supervisor Ing. Marcel Hlopko for perfect coop- eration and valuable advices. I would also like to thank to my family for support. Declaration I hereby declare that the presented thesis is my own work and that I have cited all sources of information in accordance with the Guideline for adhering to ethical principles when elaborating an academic final thesis. I acknowledge that my thesis is subject to the rights and obligations stip- ulated by the Act No. 121/2000 Coll., the Copyright Act, as amended. In accordance with Article 46(6) of the Act, I hereby grant a nonexclusive au- thorization (license) to utilize this thesis, including any and all computer pro- grams incorporated therein or attached thereto and all corresponding docu- mentation (hereinafter collectively referred to as the \Work"), to any and all persons that wish to utilize the Work. Such persons are entitled to use the Work in any way (including for-profit purposes) that does not detract from its value. This authorization is not limited in terms of time, location and quan- tity. However, all persons that makes use of the above license shall be obliged to grant a license at least in the same scope as defined above with respect to each and every work that is created (wholly or in part) based on the Work, by modifying the Work, by combining the Work with another work, by including the Work in a collection of works or by adapting the Work (including trans- lation), and at the same time make available the source code of such work at least in a way and scope that are comparable to the way and scope in which the source code of the Work is made available.
  • Aplikacija Za Pregled Tehnologij Spletnih Projektov Na Podlagi Avtomatske Analize Repozitorijev

    Aplikacija Za Pregled Tehnologij Spletnih Projektov Na Podlagi Avtomatske Analize Repozitorijev

    Univerza v Ljubljani Fakulteta za računalništvo in informatiko Aljana Polanc Aplikacija za pregled tehnologij spletnih projektov na podlagi avtomatske analize repozitorijev DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO IN INFORMATIKA Mentor: doc. dr. Aleš Smrdel Ljubljana, 2016 Rezultati diplomskega dela so intelektualna lastnina avtorja in Fakultete za računalništvo in informatiko Univerze v Ljubljani. Za objavljanje ali iz- koriščanje rezultatov diplomskega dela je potrebno pisno soglasje avtorja, Fakultete za računalništvo in informatiko ter mentorja. Besedilo je oblikovano z urejevalnikom besedil LATEX. Fakulteta za računalništvo in informatiko izdaja naslednjo nalogo: Tematika naloge: V okviru diplomskega dela razvijte aplikacijo, ki bo služila za vzdrževanje ažurne evidence o tehnologijah pri različnih spletnih projektih. Aplikacija mora omogočiti avtomatsko periodično pregledovanje vseh aktivnih projek- tov znotraj nekega podjetja in posodabljanje podatkov o uporabljenih teh- nologijah za vsakega izmed projektov. V ta namen najprej analizirajte teh- nologije, ki se uporabljajo pri izdelavi sodobnih spletnih projektov, nato pa realizirajte aplikacijo, ki se mora biti sposobna povezati z repozitorijem pro- jektov, prebrati vse projekte in na podlagi analize datotek projektov razbrati tehnologije, ki so uporabljene pri posameznem projektu. Za vsak projekt mora aplikacija razbrati uporabljene programske jezike, orodja, knjižnice ter razvijalce, ki sodelujejo pri posameznem projektu. Razvijte tudi spletni vme- snik, ki bo omogočal prikaz podatkov o projektih in tehnologijah znotraj ne- kega podjetja ter nadroben prikaz tehnologij uporabljenih pri posameznem projektu. Razvijte tudi administrativni spletni vmesnik, ki bo omogočal do- polnjevanje in popravljanje avtomatsko pridobljenih podatkov. Pri razvoju aplikacije izberite najprimernejše tehnologije na strani odjemalca in na strani strežnika. Uspešnost delovanja razvite aplikacije testirajte na nekem repozi- toriju projektov.
  • UNIVERSITY of CALIFORNIA, SAN DIEGO Toward Understanding And

    UNIVERSITY of CALIFORNIA, SAN DIEGO Toward Understanding And

    UNIVERSITY OF CALIFORNIA, SAN DIEGO Toward Understanding and Dealing with Failures in Cloud-Scale Systems A dissertation submitted in partial satisfaction of the requirements for the degree of Doctor of Philosophy in Computer Science by Peng Huang Committee in charge: Professor Yuanyuan Zhou, Chair Professor Tara Javidi Professor Ranjit Jhala Professor George Porter Professor Stefan Savage 2016 Copyright Peng Huang, 2016 All rights reserved. The Dissertation of Peng Huang is approved and is acceptable in quality and form for publication on microfilm and electronically: Chair University of California, San Diego 2016 iii DEDICATION To my parents, brother and fiancée for their unconditional love and support. iv EPIGRAPH Quis custodiet ipsos custodes? (But who can watch the watchmen?) Juvenal Anything that can go wrong, will go wrong. Murphy’s law Those who fail to learn from the mistakes are doomed to repeat them. George Santayana In the middle of the night, [...] He would awaken and find himeself wondering if one of the machines had stopped working for some new, unknown reason. Or he would wake up thinking about the latest failure, the one whose cause they’d been looking for a whole week and sitll hadn’t found. The bogeyman—la machine—was there in his bedroom. Tracy Kidder, The Soul of a New Machine v TABLE OF CONTENTS SignaturePage...................................... .................. iii Dedication ......................................... .................. iv Epigraph........................................... .................. v TableofContents
  • Node.Js: Building for Scalability with Server-Side Javascript

    Node.Js: Building for Scalability with Server-Side Javascript

    #141 CONTENTS INCLUDE: n What is Node? Node.js: Building for Scalability n Where does Node fit? n Installation n Quick Start with Server-Side JavaScript n Node Ecosystem n Node API Guide and more... By Todd Eichel Visit refcardz.com Consider a food vending WHAT IS NODE? truck on a city street or at a festival. A food truck In its simplest form, Node is a set of libraries for writing high- operating like a traditional performance, scalable network programs in JavaScript. Take a synchronous web server look at this application that will respond with the text “Hello would have a worker take world!” on every HTTP request: an order from the first customer in line, and then // require the HTTP module so we can create a server object the worker would go off to var http = require(‘http’); prepare the order while the customer waits at the window. Once Get More Refcardz! Refcardz! Get More // Create an HTTP server, passing a callback function to be the order is complete, the worker would return to the window, // executed on each request. The callback function will be give it to the customer, and take the next customer’s order. // passed two objects representing the incoming HTTP // request and our response. Contrast this with a food truck operating like an asynchronous var helloServer = http.createServer(function (req, res) { web server. The workers in this truck would take an order from // send back the response headers with an HTTP status the first customer in line, issue that customer an order number, // code of 200 and an HTTP header for the content type res.writeHead(200, {‘Content-Type’: ‘text/plain’}); and have the customer stand off to the side to wait while the order is prepared.
  • Supporting C Extensions for Dynamic Languages an Abbreviated Version of [10]

    Supporting C Extensions for Dynamic Languages an Abbreviated Version of [10]

    High-Performance Language Composition: Supporting C Extensions for Dynamic Languages An abbreviated version of [10]. Grimmer Matthias1, Chris Seaton2, Thomas W¨urthinger2 and Hanspeter M¨ossenb¨ock1 1 Johannes Kepler University, Linz, Austria fgrimmer,[email protected] 2 Oracle Labs fchris.seaton,[email protected] Abstract. Many dynamic languages such as Ruby offer functionality for writing parts of applications in a lower-level language such as C. These C extension modules are usually written against the API of an interpreter, which provides access to the higher-level language's internal data struc- tures. Alternative implementations of the high-level languages often do not support such C extensions because implementing the same API as in the original implementations is complicated and limits performance. In this paper we describe a novel approach for modular composition of languages that allows dynamic languages to support C extensions through interpretation. We propose a flexible and reusable cross-language mechanism that allows composing multiple language interpreters. This mechanism allows us to efficiently exchange runtime data across different interpreters and also enables the dynamic compiler of the host VM to inline and optimize programs across multiple language boundaries. We evaluate our approach by composing a Ruby interpreter with a C interpreter. We run existing Ruby C extensions and show how our system executes combined Ruby and C modules on average over 3× faster than the conventional implementation of Ruby with native C extensions. 1 Introduction Most programming languages offer functionality for calling routines in modules that are written in another language. There are multiple reasons why program- mers want to do this, including to run modules already written in another lan- guage, to achieve higher performance than is normally possible in the primary language, or generally to allow different parts of the system to be written in the most appropriate language.
  • Development of Benchmarking Suite for Various Ruby Implementations

    Development of Benchmarking Suite for Various Ruby Implementations

    MASARYKOVA UNIVERZITA FAKULTA}w¡¢£¤¥¦§¨ INFORMATIKY !"#$%&'()+,-./012345<yA| Development of benchmarking suite for various Ruby implementations BACHELOR THESIS Richard Ludvigh Brno, Spring 2015 Declaration Hereby I declare, that this paper is my original authorial work, which I have worked out by my own. All sources, references and literature used or excerpted during elaboration of this work are properly cited and listed in complete reference to the due source. Richard Ludvigh Advisor: RNDr. Adam Rambousek ii Acknowledgement I would like to thank my supervisor RNDr. Adam Rambousek who has supported me throughout my thesis. I would also like to thank my advisor Ing. Václav Tunka for advice and consultation regarding technical aspects of work as well as guidance and feedback through- out my thesis. Access to the CERIT-SC computing and storage facilities provided under the programme Center CERIT Scientific Cloud, part of the Op- erational Program Research and Development for Innovations, reg. no. CZ. 1.05/3.2.00/08.0144, is greatly appreciated. iii Abstract Ruby is a modern, dynamic, pure object-oriented programming lan- guage. It has multiple implementations which provide different per- formance. The aim of this bachelor thesis is to provide a container- based tool to benchmark and monitor those performance differences inside an isolated environment. iv Keywords Ruby, JRuby, Rubinius, MRI, Docker, benchmarking, performance v Contents 1 Introduction ............................3 2 State of the art ...........................4 3 Ruby performance ........................6 3.1 Introduction to Ruby ....................6 3.2 Ruby implementations ...................7 3.2.1 MRI or CRuby . .7 3.2.2 JRuby . .7 3.2.3 Rubinius .
  • Optimizing Ruby on Rails for Performance and Scalability

    Optimizing Ruby on Rails for Performance and Scalability

    DEGREE PROJECT IN COMPUTER SCIENCE 120 CREDITS, SECOND CYCLE STOCKHOLM, SWEDEN 2016 Optimizing Ruby on Rails for performance and scalability KIM PERSSON KTH ROYAL INSTITUTE OF TECHNOLOGY SCHOOL OF COMPUTER SCIENCE AND COMMUNICATION Optimizing Ruby on Rails for performance and scalability Optimering av Ruby on Rails för prestanda och skalbarhet KIM PERSSON [email protected] Degree project in Computer Science Master’s Programme Computer Science Supervisor: Stefano Markidis Examiner: Jens Lagergren Employer: Slagkryssaren AB February 2016 Abstract Web applications are becoming more and more popular as the bound- aries of what can be done in a browser are pushed forward. Ruby on Rails is a very popular web application framework for the Ruby pro- gramming language. Ruby on Rails allows for rapid prototyping and development of web applications but it suffers from performance prob- lems with large scale applications. This thesis focuses on optimization of a Ruby on Rails application to improve its performance. We performed three optimizations to a benchmark application that was developed for this project. First, we removed unnecessary modules from Ruby on Rails and optimized the database interaction with Active Record which is the default object re- lational mapping (ORM) in Ruby on Rails. It allows us to fetch and store models in the database without having to write database specific query code. These optimizations resulted in up to 36% decrease in ap- plication response time. Second, we implemented a caching mechanism for JavaScript Object Notation (JSON) representation of models in the optimized application. This second optimization resulted in a total of 96% response time decrease for one of the benchmarks.
  • Rubinius Rubini Us Rubini.Us Rubini.Us Rubini.Us Rubinius History and Design Goals

    Rubinius Rubini Us Rubini.Us Rubini.Us Rubini.Us Rubinius History and Design Goals

    Rubinius Rubini us Rubini.us rubini.us http:// rubini.us Rubinius http://godfat.org/slide/2008-12-21-rubinius.pdf History and Design Goals Architecture and Object Model History and Design Goals Architecture and Object Model Evan Phoenix February of 2006 RubySpec MSpec Engine Yard C VM Shotgun C VM Shotgun C++ VM CxxTest LLVM History and Design Goals Architecture and Object Model Reliable, Rock Solid Code Reliable, Rock Solid Code Full Test Coverage 健康 Clean, Readable Code Clean, Readable Code Little Lines in Each File Clean, Readable Code Macro, Code Generator, Rake Task Clean, Readable Code CMake Clean, Readable Code CMake Clean, Readable Code C++ Object to Ruby Object 1 to 1 Mapping 清新 健康 清新 Modern Techniques Modern Techniques Pluggable Garbage Collectors Modern Techniques Pluggable Garbage Collectors • Stop-and-Copy Modern Techniques Pluggable Garbage Collectors • Stop-and-Copy • Mark-and-Sweep Modern Techniques Optimizers Modern Techniques Git, Rake, LLVM Squeak the Smalltalk-80 Implementation Squeak Slang Squeak • Alan Kay • Dan Ingalls • Adele Goldberg Smalltalk Xerox PARC Smalltalk Object-Oriented (differ from Simula and C++) Smalltalk GUI Smalltalk MVC History and Design Goals Architecture and Object Model Real Machine C++ Virtual Machine Real Machine kernel/bootstrap C++ Virtual Machine Real Machine kernel/platform kernel/bootstrap C++ Virtual Machine Real Machine kernel/common kernel/platform kernel/bootstrap C++ Virtual Machine Real Machine kernel/delta kernel/common kernel/platform kernel/bootstrap C++ Virtual Machine Real