JRuby bills itself as the pragmatic Ruby, the go-to implementation when you need to fit into the Java universe or support a ton of platforms.
Who knew it was also a tool for having fun exploring the realms of computer science?
This document summarizes a talk given by Ian Dees on writing your own JVM compiler. The talk discusses three main reasons why someone may want to write their own compiler: a hardware background, a computer science background, or following a self-made path of learning computer science topics. It then previews the fictional Thnad programming language that will be used to demonstrate creating a compiler. The talk outlines the main stages of creating a compiler: parsing, transforming, and emitting bytecode. Various Ruby tools like Parslet and BiteScript that will be used are also introduced.
At a previous JRubyConf, we talked about Thnad, a fictional programming language. Thnad served as a vehicle to explore the joy of building a compiler using JRuby, BiteScript, Parslet, and other tools. Now, Thnad is back with a second runtime: Rubinius. Come see the Rubinius environment through JRuby eyes. Together, we'll see how to grapple with multiple instruction sets and juggle contexts without going cross-eyed.
“What should I work on next?” Code metrics can help you answer that question. They can single out sections of your code that are likely to contain bugs. They can help you get a toehold on a legacy system that’s poorly covered by tests.
This document discusses playfulness in the workplace and how it relates to the Ruby programming language. It begins by thanking the organizers and hosts for the event. It then highlights some Ruby libraries created by the host city's Ruby community. The document goes on to discuss reasons for using Ruby at work, including dealing with data formats, scripting other software, sharing code with coworkers, and deploying software to customers. It provides examples using Ruby libraries and tools like Parslet, FFI, ChunkyPNG, and WinGui to parse data formats, control the mouse through its API, read PNG files, and click on points on the screen. The overall message is that Ruby can be used playfully to get tasks done at
My slides from "Inside PHP", a talk about how to change the syntax of the PHP programming language.
Modified PHP 5.4.4 source code (with the "until" keyword added during this presentation) is available here:
http://github.com/thomaslee/oscon2012-inside-php
The document provides an overview of the Ruby programming language for Perl programmers. Some key points:
- Ruby is an object-oriented scripting language that is interpreted, not compiled. It draws influences from Perl, Smalltalk, Lisp, and C.
- Ruby supports functional, aspect-oriented, and design-by-contract programming paradigms. It is well-suited for practices like extreme programming.
- Core concepts include classes, modules, blocks/iterators, exceptions, regular expressions and strings. Common data structures include arrays, hashes, ranges and more.
- Examples demonstrate basic syntax like variables, loops, conditions, classes and modules. Ruby emphasizes flexibility, dynamism and "
The document provides an overview of the Ruby programming language for Perl programmers. Some key points:
- Ruby is an object-oriented scripting language that is interpreted, not compiled. It draws influences from Perl, Smalltalk, Lisp, and C.
- Ruby supports functional, aspect-oriented, and design-by-contract programming paradigms. It is well-suited for practices like extreme programming.
- Core concepts include classes, modules, blocks/iterators, exceptions, regular expressions and strings. Common data structures include arrays, hashes, ranges and more.
- Examples demonstrate basic syntax like variables, loops, conditions, classes and modules. Ruby emphasizes flexibility, dynamism and "
The document provides an overview of the Ruby programming language for Perl programmers. Some key points:
- Ruby is an object-oriented scripting language that is interpreted, not compiled. It draws influences from Perl, Smalltalk, Lisp, and C.
- Ruby supports features like classes, modules, blocks/iterators, exceptions, regular expressions and threads. Everything in Ruby is an object.
- Compared to Perl, Ruby is more object-oriented, dynamic, and has built-in support for threads. Syntax also differs in some key ways.
- The document provides examples of basic Ruby syntax like variables, loops, conditions, classes and modules to illustrate how the language works.
This document summarizes a talk given by Ian Dees on writing your own JVM compiler. The talk discusses three main reasons why someone may want to write their own compiler: a hardware background, a computer science background, or following a self-made path of learning computer science topics. It then previews the fictional Thnad programming language that will be used to demonstrate creating a compiler. The talk outlines the main stages of creating a compiler: parsing, transforming, and emitting bytecode. Various Ruby tools like Parslet and BiteScript that will be used are also introduced.
At a previous JRubyConf, we talked about Thnad, a fictional programming language. Thnad served as a vehicle to explore the joy of building a compiler using JRuby, BiteScript, Parslet, and other tools. Now, Thnad is back with a second runtime: Rubinius. Come see the Rubinius environment through JRuby eyes. Together, we'll see how to grapple with multiple instruction sets and juggle contexts without going cross-eyed.
“What should I work on next?” Code metrics can help you answer that question. They can single out sections of your code that are likely to contain bugs. They can help you get a toehold on a legacy system that’s poorly covered by tests.
This document discusses playfulness in the workplace and how it relates to the Ruby programming language. It begins by thanking the organizers and hosts for the event. It then highlights some Ruby libraries created by the host city's Ruby community. The document goes on to discuss reasons for using Ruby at work, including dealing with data formats, scripting other software, sharing code with coworkers, and deploying software to customers. It provides examples using Ruby libraries and tools like Parslet, FFI, ChunkyPNG, and WinGui to parse data formats, control the mouse through its API, read PNG files, and click on points on the screen. The overall message is that Ruby can be used playfully to get tasks done at
My slides from "Inside PHP", a talk about how to change the syntax of the PHP programming language.
Modified PHP 5.4.4 source code (with the "until" keyword added during this presentation) is available here:
http://github.com/thomaslee/oscon2012-inside-php
The document provides an overview of the Ruby programming language for Perl programmers. Some key points:
- Ruby is an object-oriented scripting language that is interpreted, not compiled. It draws influences from Perl, Smalltalk, Lisp, and C.
- Ruby supports functional, aspect-oriented, and design-by-contract programming paradigms. It is well-suited for practices like extreme programming.
- Core concepts include classes, modules, blocks/iterators, exceptions, regular expressions and strings. Common data structures include arrays, hashes, ranges and more.
- Examples demonstrate basic syntax like variables, loops, conditions, classes and modules. Ruby emphasizes flexibility, dynamism and "
The document provides an overview of the Ruby programming language for Perl programmers. Some key points:
- Ruby is an object-oriented scripting language that is interpreted, not compiled. It draws influences from Perl, Smalltalk, Lisp, and C.
- Ruby supports functional, aspect-oriented, and design-by-contract programming paradigms. It is well-suited for practices like extreme programming.
- Core concepts include classes, modules, blocks/iterators, exceptions, regular expressions and strings. Common data structures include arrays, hashes, ranges and more.
- Examples demonstrate basic syntax like variables, loops, conditions, classes and modules. Ruby emphasizes flexibility, dynamism and "
The document provides an overview of the Ruby programming language for Perl programmers. Some key points:
- Ruby is an object-oriented scripting language that is interpreted, not compiled. It draws influences from Perl, Smalltalk, Lisp, and C.
- Ruby supports features like classes, modules, blocks/iterators, exceptions, regular expressions and threads. Everything in Ruby is an object.
- Compared to Perl, Ruby is more object-oriented, dynamic, and has built-in support for threads. Syntax also differs in some key ways.
- The document provides examples of basic Ruby syntax like variables, loops, conditions, classes and modules to illustrate how the language works.
This document provides an overview of the Ruby programming language for Perl programmers. Ruby is an interpreted, object-oriented scripting language that is very similar to Perl in many ways, such as its syntax for regular expressions and control structures like loops and conditionals. However, Ruby differs from Perl in that it was designed from the start to be object-oriented and highly dynamic. The document discusses Ruby's core concepts like classes, modules, blocks and iterators in detail and provides many code examples to illustrate Ruby's syntax and features.
The document provides an overview of the Ruby programming language for Perl programmers. Some key points:
- Ruby is an object-oriented scripting language that is interpreted, not compiled. It draws influences from Perl, Smalltalk, Lisp, and C.
- Ruby supports functional, aspect-oriented, and design-by-contract programming paradigms. It is well-suited for practices like extreme programming.
- Core concepts include classes, modules, blocks/iterators, exceptions, regular expressions and strings. Common data structures include arrays, hashes, ranges and more.
- Examples demonstrate basic syntax like variables, loops, conditions, classes and modules. Ruby emphasizes flexibility, dynamism and "
This document provides an overview of the Ruby programming language for Perl programmers. Ruby is an interpreted, object-oriented scripting language that is very similar to Perl but also introduces significant differences. Both languages are suitable for tasks like text processing and system administration scripts. Ruby places a stronger emphasis on object-oriented principles and is more dynamic than Perl.
My slides from "Inside Python", a talk about how to change the syntax of the Python programming language.
Modified Python 3.2 source code (with the "unless" keyword added during this presentation) is available here:
http://github.com/thomaslee/oscon2012-inside-python
A(n abridged) tour of the Rust compiler [PDX-Rust March 2014]Tom Lee
The document provides an overview of the major stages in Rust's compiler:
1) Scanning converts source code to tokens. Rust's scanner is in libsyntax/parse/lexer.rs.
2) Parsing converts tokens to an AST using grammar rules. Rust's parser is in libsyntax/parse/parser.rs and outputs an AST in libsyntax/ast.rs.
3) Semantic analysis applies Rust's rules through name resolution, type checking, borrow checking etc. This is handled by librustc/middle/*.rs.
4) Code generation translates the AST to LLVM IR. Rust uses librustc/middle/trans/base.rs and writes output with
The document discusses the author's experience learning and using XS (eXternal Subroutines) to integrate C code with Perl. It provides an overview of key concepts like data types, memory management, and libraries in C and Perl. It also demonstrates how to create an XS module that defines and exports a C function to Perl using common macros like MODULE and PACKAGE.
This Presentation is a draft of a summary of "Learn Python The Hard Way" Book which is very helpful for anyone want to learn python from scratch of
For reading the book and do exercises, the book is available for free here: http://learnpythonthehardway.org/book/
Python Compiler Internals Presentation SlidesTom Lee
The document discusses implementing a new "unless" statement in the Python compiler. It covers modifying the grammar, changing the AST definition, and generating bytecode for the new statement. Key parts of the compiler like the tokenizer, parser, AST translation, and bytecode generation are affected. Sample code is shown for how "unless" would work similarly to "if not". The presentation encourages exploring compiler internals and not being afraid to ask questions.
The document discusses topics related to variables and identifiers in imperative programming languages. It covers variable concepts like name, value, type, and scope. It also discusses data types, expressions, control statements, subprograms, abstract data types, exception handling, and object-oriented languages. Specifically, it describes different types of variables based on their lifetime and storage, such as static, stack-dynamic, explicit dynamic, and implicit dynamic variables. It also explains scoping rules and how the visibility of variables is determined based on where they are declared.
Ti1220 Lecture 2: Names, Bindings, and ScopesEelco Visser
The document provides an outline and messages from a lecture on names, bindings, and scopes in programming languages. It discusses key concepts such as:
- Names (identifiers) in programming languages and their forms
- Variables, their attributes like name, address, value, type, lifetime, and scope
- Binding and binding time, including static and dynamic binding
- Scope rules for variables in different languages like block-scoped languages like Java versus function-scoped languages like JavaScript
- Special cases like nested functions, recursion, and hoisting behavior in JavaScript
Closures allow blocks of code to access variables from the enclosing scope even after the scope has closed. This allows closures to maintain state even when passed around or returned from functions. Closures originated in Lisp and are supported in many modern languages like Python, Ruby, and C#, providing benefits like elegant iteration, filtering, and caching of results. While objects can also be used to inject strategy or share state, closures provide a more concise syntax and avoid wrapper classes in many cases.
The document discusses taking a holistic view of programming. It summarizes Adam Keys' presentation at OSCON 2007 on being a "holistic programmer". The presentation discusses understanding the layers above and below where you program in a software stack. It provides examples of abstractions that leak and summarizes Keys' discussion of compilers and algorithms, focusing on understanding data structures, grammars, parsers and automata involved in compiling source code.
The document is a presentation about taking a holistic view of programming. It discusses how programmers should understand the layers above and below where they work in the software stack. As an example, it covers compilers in detail, explaining the processes of lexical analysis, parsing, syntax trees, code generation and optimization that compilers perform. It emphasizes that understanding algorithms like finite automata, parser design and optimization is important for programmers.
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...AboutYouGmbH
Stefan Richter gave a presentation on writing simple, readable, and robust code using examples in Java, Clojure, and Go. He discussed his programming experience and showed how Martin Fowler used Java to parse a fixed-length file format into objects. Richter then demonstrated how the same task could be accomplished more concisely in Common Lisp and Clojure using macros to define domain-specific languages. He argued that macros are a powerful feature of Lisp-like languages.
This document introduces Ruby as an open-source, multi-paradigm programming language created by Yukihiro Matsumoto. Ruby is interpreted, which means code is read and executed by an interpreter rather than being pre-compiled. The document provides instructions for installing Ruby on Windows, Mac OS X, and Linux. It recommends text editors for writing Ruby code and introduces the irb interactive shell for testing code. A simple "Hello, World" program is presented to demonstrate running Ruby code.
This document provides an overview of basic Linux administration skills needed to prepare for the Linux Professional Institute's 101 certification exam. It discusses regular expressions for searching files, the Filesystem Hierarchy Standard for organizing directories, and tools for finding files on a Linux system. The tutorial covers using regular expression metacharacters like ., [], *, ^, and $ to match patterns in text. It explains the FHS specifications for separating shareable, unshareable, static, and variable files into directories like /usr, /etc, /var, and /opt. Finally, it introduces finding files using the PATH, locate, find, and whereis commands.
Exploring Elixir Codebases with ArcheometerAgustin Ramos
This document introduces Archeometer, a toolkit for analyzing Elixir codebases. It provides motivations for why such a toolkit is needed as legacy codebases grow large and complex over time. Archeometer uses a Code Query Language and various analyzers to collect data and generate reports on codebase architecture, design, and quality. Analyzers include XRef to diagram relationships between modules and a treemap visualizer. Future plans include adding repository history analysis and interactive report features.
This document provides an overview of the CS4200 Compiler Construction course at TU Delft. It discusses the course organization, structure, and assessment. The course is split into two parts - CS4200-A which covers concepts and techniques through lectures, papers, and homework assignments, and CS4200-B which involves building a compiler for a subset of Java as a semester-long project. Students will use the Spoofax language workbench to implement their compiler and will submit assignments through a private GitLab repository.
Sugar is a meta-programming language that provides a syntactic wrapper for other programming languages. It aims to have an easy to learn syntax that focuses on software architecture, readability, and expressiveness. Sugar translates code written in its syntax to commonly used languages like JavaScript, Python, and ActionScript by taking advantage of their common features while abstracting differences. It provides a full program representation through its LambdaFactory API to allow meta-programming capabilities like modifying or analyzing programs.
This document provides an overview of the Ruby programming language for Perl programmers. Ruby is an interpreted, object-oriented scripting language that is very similar to Perl in many ways, such as its syntax for regular expressions and control structures like loops and conditionals. However, Ruby differs from Perl in that it was designed from the start to be object-oriented and highly dynamic. The document discusses Ruby's core concepts like classes, modules, blocks and iterators in detail and provides many code examples to illustrate Ruby's syntax and features.
The document provides an overview of the Ruby programming language for Perl programmers. Some key points:
- Ruby is an object-oriented scripting language that is interpreted, not compiled. It draws influences from Perl, Smalltalk, Lisp, and C.
- Ruby supports functional, aspect-oriented, and design-by-contract programming paradigms. It is well-suited for practices like extreme programming.
- Core concepts include classes, modules, blocks/iterators, exceptions, regular expressions and strings. Common data structures include arrays, hashes, ranges and more.
- Examples demonstrate basic syntax like variables, loops, conditions, classes and modules. Ruby emphasizes flexibility, dynamism and "
This document provides an overview of the Ruby programming language for Perl programmers. Ruby is an interpreted, object-oriented scripting language that is very similar to Perl but also introduces significant differences. Both languages are suitable for tasks like text processing and system administration scripts. Ruby places a stronger emphasis on object-oriented principles and is more dynamic than Perl.
My slides from "Inside Python", a talk about how to change the syntax of the Python programming language.
Modified Python 3.2 source code (with the "unless" keyword added during this presentation) is available here:
http://github.com/thomaslee/oscon2012-inside-python
A(n abridged) tour of the Rust compiler [PDX-Rust March 2014]Tom Lee
The document provides an overview of the major stages in Rust's compiler:
1) Scanning converts source code to tokens. Rust's scanner is in libsyntax/parse/lexer.rs.
2) Parsing converts tokens to an AST using grammar rules. Rust's parser is in libsyntax/parse/parser.rs and outputs an AST in libsyntax/ast.rs.
3) Semantic analysis applies Rust's rules through name resolution, type checking, borrow checking etc. This is handled by librustc/middle/*.rs.
4) Code generation translates the AST to LLVM IR. Rust uses librustc/middle/trans/base.rs and writes output with
The document discusses the author's experience learning and using XS (eXternal Subroutines) to integrate C code with Perl. It provides an overview of key concepts like data types, memory management, and libraries in C and Perl. It also demonstrates how to create an XS module that defines and exports a C function to Perl using common macros like MODULE and PACKAGE.
This Presentation is a draft of a summary of "Learn Python The Hard Way" Book which is very helpful for anyone want to learn python from scratch of
For reading the book and do exercises, the book is available for free here: http://learnpythonthehardway.org/book/
Python Compiler Internals Presentation SlidesTom Lee
The document discusses implementing a new "unless" statement in the Python compiler. It covers modifying the grammar, changing the AST definition, and generating bytecode for the new statement. Key parts of the compiler like the tokenizer, parser, AST translation, and bytecode generation are affected. Sample code is shown for how "unless" would work similarly to "if not". The presentation encourages exploring compiler internals and not being afraid to ask questions.
The document discusses topics related to variables and identifiers in imperative programming languages. It covers variable concepts like name, value, type, and scope. It also discusses data types, expressions, control statements, subprograms, abstract data types, exception handling, and object-oriented languages. Specifically, it describes different types of variables based on their lifetime and storage, such as static, stack-dynamic, explicit dynamic, and implicit dynamic variables. It also explains scoping rules and how the visibility of variables is determined based on where they are declared.
Ti1220 Lecture 2: Names, Bindings, and ScopesEelco Visser
The document provides an outline and messages from a lecture on names, bindings, and scopes in programming languages. It discusses key concepts such as:
- Names (identifiers) in programming languages and their forms
- Variables, their attributes like name, address, value, type, lifetime, and scope
- Binding and binding time, including static and dynamic binding
- Scope rules for variables in different languages like block-scoped languages like Java versus function-scoped languages like JavaScript
- Special cases like nested functions, recursion, and hoisting behavior in JavaScript
Closures allow blocks of code to access variables from the enclosing scope even after the scope has closed. This allows closures to maintain state even when passed around or returned from functions. Closures originated in Lisp and are supported in many modern languages like Python, Ruby, and C#, providing benefits like elegant iteration, filtering, and caching of results. While objects can also be used to inject strategy or share state, closures provide a more concise syntax and avoid wrapper classes in many cases.
The document discusses taking a holistic view of programming. It summarizes Adam Keys' presentation at OSCON 2007 on being a "holistic programmer". The presentation discusses understanding the layers above and below where you program in a software stack. It provides examples of abstractions that leak and summarizes Keys' discussion of compilers and algorithms, focusing on understanding data structures, grammars, parsers and automata involved in compiling source code.
The document is a presentation about taking a holistic view of programming. It discusses how programmers should understand the layers above and below where they work in the software stack. As an example, it covers compilers in detail, explaining the processes of lexical analysis, parsing, syntax trees, code generation and optimization that compilers perform. It emphasizes that understanding algorithms like finite automata, parser design and optimization is important for programmers.
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...AboutYouGmbH
Stefan Richter gave a presentation on writing simple, readable, and robust code using examples in Java, Clojure, and Go. He discussed his programming experience and showed how Martin Fowler used Java to parse a fixed-length file format into objects. Richter then demonstrated how the same task could be accomplished more concisely in Common Lisp and Clojure using macros to define domain-specific languages. He argued that macros are a powerful feature of Lisp-like languages.
This document introduces Ruby as an open-source, multi-paradigm programming language created by Yukihiro Matsumoto. Ruby is interpreted, which means code is read and executed by an interpreter rather than being pre-compiled. The document provides instructions for installing Ruby on Windows, Mac OS X, and Linux. It recommends text editors for writing Ruby code and introduces the irb interactive shell for testing code. A simple "Hello, World" program is presented to demonstrate running Ruby code.
This document provides an overview of basic Linux administration skills needed to prepare for the Linux Professional Institute's 101 certification exam. It discusses regular expressions for searching files, the Filesystem Hierarchy Standard for organizing directories, and tools for finding files on a Linux system. The tutorial covers using regular expression metacharacters like ., [], *, ^, and $ to match patterns in text. It explains the FHS specifications for separating shareable, unshareable, static, and variable files into directories like /usr, /etc, /var, and /opt. Finally, it introduces finding files using the PATH, locate, find, and whereis commands.
Exploring Elixir Codebases with ArcheometerAgustin Ramos
This document introduces Archeometer, a toolkit for analyzing Elixir codebases. It provides motivations for why such a toolkit is needed as legacy codebases grow large and complex over time. Archeometer uses a Code Query Language and various analyzers to collect data and generate reports on codebase architecture, design, and quality. Analyzers include XRef to diagram relationships between modules and a treemap visualizer. Future plans include adding repository history analysis and interactive report features.
This document provides an overview of the CS4200 Compiler Construction course at TU Delft. It discusses the course organization, structure, and assessment. The course is split into two parts - CS4200-A which covers concepts and techniques through lectures, papers, and homework assignments, and CS4200-B which involves building a compiler for a subset of Java as a semester-long project. Students will use the Spoofax language workbench to implement their compiler and will submit assignments through a private GitLab repository.
Sugar is a meta-programming language that provides a syntactic wrapper for other programming languages. It aims to have an easy to learn syntax that focuses on software architecture, readability, and expressiveness. Sugar translates code written in its syntax to commonly used languages like JavaScript, Python, and ActionScript by taking advantage of their common features while abstracting differences. It provides a full program representation through its LambdaFactory API to allow meta-programming capabilities like modifying or analyzing programs.
Ruby on Rails (RoR) as a back-end processor for Apex Espen Brækken
This document discusses using Ruby and Ruby on Rails (RoR) as a supplement to Oracle Application Express (Apex). It provides an overview of why a supplement may be needed, why Ruby and Rails were chosen, and how ActiveRecord in Rails simplifies database access through object mapping. Key points covered include conventions over configuration in Rails, the anatomy of Rails including ActiveRecord, and examples of ActiveRecord usage with database configuration through YAML files rather than direct connection hashes.
Presentation introducing LISP, looking at the history and concepts behind this powerfull programming language.
Presentation by Tijs van der Storm for the sept 2012 Devnology meetup at the Mirabeau offices in Amsterdam
Rust is a systems programming language that prevents segmentation faults and guarantees thread safety. It uses ownership and borrowing to manage memory without a garbage collector. Variables in Rust have immutable access by default, and references allow mutable or immutable borrowing of data. The type system and compiler enforce these borrowing rules at compile time to prevent data races. Rust also has features like enums, pattern matching, iterators, and channels for concurrent programming.
This document provides information about a programming languages concepts course, including details about the course code, title, lecturer, and description. The course aims to describe the evolution of programming languages and understand different computation models or paradigms like imperative, functional, logic and object-oriented programming. It will cover topics like syntax, semantics, data types, expressions and control structures over 13 weeks. Students will complete an assignment on MATLAB/Octave and two term exams. The course objectives are listed as understanding different programming language paradigms and concepts to select the proper language to solve problems.
Context sensitive help
Toolbars:
Quick access to common actions
Views:
Panels for navigating code, files,
tasks etc.
Editor:
Where code is written and edited
Console:
Output from running code
Debug Perspective:
Tools for debugging code
Project Explorer:
Navigating files and folders
Outline:
Structure of current editor
Problems:
Errors and warnings
Properties:
Details of selected item
PyDev Perspective:
Python specific tools
Run/Debug Buttons:
Run and debug code
Status Bar:
Status messages
Welcome Page:
Getting started tips
Help:
Documentation and
The document discusses programming languages and ways they can be improved and customized. It argues that libraries are often overused to extend languages when the compiler itself could be extended instead. This could be done through compiler services that expose compiler information, macros that operate on the syntax tree, and quasi-quotations for building complex AST structures. Extending the compiler allows for more control and avoids issues like dependency cycles that plague library-based extensions.
The document discusses metaprogramming and expression trees in .NET. Metaprogramming allows writing code that generates other code at runtime or compile-time. Expression trees in .NET represent code as data and can be compiled into delegates. The document provides an example of building an expression tree that multiplies a parameter by 2, compiling it into a function, and calling that function. It also briefly mentions other metaprogramming techniques in .NET like Reflection.Emit and Roslyn.
This document contains an interview transcript with Bjarne Stroustrup, the creator of the C++ programming language. In the interview, Stroustrup discusses various aspects of the new C++0x standard, including its improved support for concurrency, threads, avoiding data races, and passing values between threads. He emphasizes C++'s role as a general purpose language suitable for systems programming that combines low-level machine efficiency with flexible abstraction mechanisms.
The document outlines why the author started using Ruby and provides an overview of the Ruby programming language and Ruby on Rails web application framework. It discusses how Ruby is a dynamic, object-oriented language designed to be elegant and efficient. Ruby on Rails makes it easy to build database-backed web applications according to the MVC pattern. The document also covers the Ruby ecosystem including interpreters, frameworks, libraries and tools, and discusses the future of Ruby and Rails.
Rust is a systems programming language that focuses on safety, concurrency, and speed. It prevents errors like segfaults and guarantees thread safety. Cargo is Rust's package manager and build tool. A basic Rust project can be created with cargo new and contains Cargo.toml for metadata and src/main.rs for code. Rust uses many familiar concepts like variables, functions, conditionals, loops, and more, but also introduces ideas like ownership, borrowing, and error handling via Result to ensure memory safety.
Similar to JRuby, Not Just For Hard-Headed Pragmatists Anymore (20)
1. The document discusses techniques for effective teaching, including rushing to early victories, rewarding exploration, starting where the reader is, applying dirty tricks in moderation, using head fakes, forging valuable things, building bridges to other worlds, and supporting the hero's quest.
2. It provides examples of using puzzles, tricks, and narratives to engage students and lead them to learn things like computer components without them realizing it.
3. The overall message is that the best way to teach is to make students think they are learning something else through an engaging story or game.
How 5 people with 4 day jobs in 3 time zones enjoyed 2 years writing 1 bookErin Dees
The story of writing the JRuby book together, with lessons for freelancers, telecommuters, and remote collaborators everywhere. Speaker notes from Open Source Bridge 2011.
How 5 people with 4 day jobs in 3 time zones enjoyed 2 years writing 1 bookErin Dees
The story of writing the JRuby book together, with lessons for freelancers, telecommuters, and remote collaborators everywhere. Slides from Open Source Bridge 2011.
The document summarizes the speaker's upcoming book tour stop at Powell's Books. It includes 3 topics the speaker will discuss: 1) Why capture/playback for testing is problematic and alternative approaches like model-based testing should be used instead. 2) That test-driven development (TDD) means test automation, and includes code examples of automating mouse input. 3) That the discussion will move on from talking about testing itself.
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfChart Kalyan
A Mix Chart displays historical data of numbers in a graphical or tabular form. The Kalyan Rajdhani Mix Chart specifically shows the results of a sequence of numbers over different periods.
HCL Notes and Domino License Cost Reduction in the World of DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-and-domino-license-cost-reduction-in-the-world-of-dlau/
The introduction of DLAU and the CCB & CCX licensing model caused quite a stir in the HCL community. As a Notes and Domino customer, you may have faced challenges with unexpected user counts and license costs. You probably have questions on how this new licensing approach works and how to benefit from it. Most importantly, you likely have budget constraints and want to save money where possible. Don’t worry, we can help with all of this!
We’ll show you how to fix common misconfigurations that cause higher-than-expected user counts, and how to identify accounts which you can deactivate to save money. There are also frequent patterns that can cause unnecessary cost, like using a person document instead of a mail-in for shared mailboxes. We’ll provide examples and solutions for those as well. And naturally we’ll explain the new licensing model.
Join HCL Ambassador Marc Thomas in this webinar with a special guest appearance from Franz Walder. It will give you the tools and know-how to stay on top of what is going on with Domino licensing. You will be able lower your cost through an optimized configuration and keep it low going forward.
These topics will be covered
- Reducing license cost by finding and fixing misconfigurations and superfluous accounts
- How do CCB and CCX licenses really work?
- Understanding the DLAU tool and how to best utilize it
- Tips for common problem areas, like team mailboxes, functional/test users, etc
- Practical examples and best practices to implement right away
Taking AI to the Next Level in Manufacturing.pdfssuserfac0301
Read Taking AI to the Next Level in Manufacturing to gain insights on AI adoption in the manufacturing industry, such as:
1. How quickly AI is being implemented in manufacturing.
2. Which barriers stand in the way of AI adoption.
3. How data quality and governance form the backbone of AI.
4. Organizational processes and structures that may inhibit effective AI adoption.
6. Ideas and approaches to help build your organization's AI strategy.
Digital Marketing Trends in 2024 | Guide for Staying AheadWask
https://www.wask.co/ebooks/digital-marketing-trends-in-2024
Feeling lost in the digital marketing whirlwind of 2024? Technology is changing, consumer habits are evolving, and staying ahead of the curve feels like a never-ending pursuit. This e-book is your compass. Dive into actionable insights to handle the complexities of modern marketing. From hyper-personalization to the power of user-generated content, learn how to build long-term relationships with your audience and unlock the secrets to success in the ever-shifting digital landscape.
How to Get CNIC Information System with Paksim Ga.pptxdanishmna97
Pakdata Cf is a groundbreaking system designed to streamline and facilitate access to CNIC information. This innovative platform leverages advanced technology to provide users with efficient and secure access to their CNIC details.
Your One-Stop Shop for Python Success: Top 10 US Python Development Providersakankshawande
Simplify your search for a reliable Python development partner! This list presents the top 10 trusted US providers offering comprehensive Python development services, ensuring your project's success from conception to completion.
Main news related to the CCS TSI 2023 (2023/1695)Jakub Marek
An English 🇬🇧 translation of a presentation to the speech I gave about the main changes brought by CCS TSI 2023 at the biggest Czech conference on Communications and signalling systems on Railways, which was held in Clarion Hotel Olomouc from 7th to 9th November 2023 (konferenceszt.cz). Attended by around 500 participants and 200 on-line followers.
The original Czech 🇨🇿 version of the presentation can be found here: https://www.slideshare.net/slideshow/hlavni-novinky-souvisejici-s-ccs-tsi-2023-2023-1695/269688092 .
The videorecording (in Czech) from the presentation is available here: https://youtu.be/WzjJWm4IyPk?si=SImb06tuXGb30BEH .
Ivanti’s Patch Tuesday breakdown goes beyond patching your applications and brings you the intelligence and guidance needed to prioritize where to focus your attention first. Catch early analysis on our Ivanti blog, then join industry expert Chris Goettl for the Patch Tuesday Webinar Event. There we’ll do a deep dive into each of the bulletins and give guidance on the risks associated with the newly-identified vulnerabilities.
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceIndexBug
Imagine a world where machines not only perform tasks but also learn, adapt, and make decisions. This is the promise of Artificial Intelligence (AI), a technology that's not just enhancing our lives but revolutionizing entire industries.
Threats to mobile devices are more prevalent and increasing in scope and complexity. Users of mobile devices desire to take full advantage of the features
available on those devices, but many of the features provide convenience and capability but sacrifice security. This best practices guide outlines steps the users can take to better protect personal devices and information.
Webinar: Designing a schema for a Data WarehouseFederico Razzoli
Are you new to data warehouses (DWH)? Do you need to check whether your data warehouse follows the best practices for a good design? In both cases, this webinar is for you.
A data warehouse is a central relational database that contains all measurements about a business or an organisation. This data comes from a variety of heterogeneous data sources, which includes databases of any type that back the applications used by the company, data files exported by some applications, or APIs provided by internal or external services.
But designing a data warehouse correctly is a hard task, which requires gathering information about the business processes that need to be analysed in the first place. These processes must be translated into so-called star schemas, which means, denormalised databases where each table represents a dimension or facts.
We will discuss these topics:
- How to gather information about a business;
- Understanding dictionaries and how to identify business entities;
- Dimensions and facts;
- Setting a table granularity;
- Types of facts;
- Types of dimensions;
- Snowflakes and how to avoid them;
- Expanding existing dimensions and facts.
GraphRAG for Life Science to increase LLM accuracyTomaz Bratanic
GraphRAG for life science domain, where you retriever information from biomedical knowledge graphs using LLMs to increase the accuracy and performance of generated answers
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slackshyamraj55
Discover the seamless integration of RPA (Robotic Process Automation), COMPOSER, and APM with AWS IDP enhanced with Slack notifications. Explore how these technologies converge to streamline workflows, optimize performance, and ensure secure access, all while leveraging the power of AWS IDP and real-time communication via Slack notifications.
Have you ever been confused by the myriad of choices offered by AWS for hosting a website or an API?
Lambda, Elastic Beanstalk, Lightsail, Amplify, S3 (and more!) can each host websites + APIs. But which one should we choose?
Which one is cheapest? Which one is fastest? Which one will scale to meet our needs?
Join me in this session as we dive into each AWS hosting service to determine which one is best for your scenario and explain why!
Choosing The Best AWS Service For Your Website + API.pptx
JRuby, Not Just For Hard-Headed Pragmatists Anymore
1. JRUBY, NOT JUST FOR HARD-
HEADED PRAGMATISTS ANYMORE
IAN DEES • @UNDEES
WHISKEY-
CONF 2011
✹ ALSO
JR UBY
Hi, I’m Ian. Hope everyone’s having a great WhiskyConf. I hear we’ll have some JRuby material at
this conference as well. ;-)
http://www.flickr.com/photos/etnobofin/3786071796
2. Write a Compiler
Most JRuby talks are pragmatic: either a case study of how JRuby helped a project, or a specific
library that developers can use. This talk will be more theoretical. We’ll use JRuby as a vehicle to
explore an area of computer science; namely, writing a compiler.
3. The Three Paths
Abstraction
compilers
Time
Depending on your path through computer science, you may have encountered the topic already.
4. Abstraction
compilers
xor eax, eax
e-
Time
If, like me, you grew up on the hardware path, a compiler is the next logical step beyond learning
programming languages.
5. logic
λx.x grammars
Abstraction
compilers
xor eax, eax
e-
Time
If you took the software path and learned the theory of computation first, then compilers are a
practical application of those ideas.
6. logic
λx.x grammars
Abstraction
compilers
xor eax, eax
e-
Time
If you took the self-made path, you may or may not have encountered compilers by this point on
your journey. Either way, I hope the tools we talk about today pique your interest.
7. The Plan
✓Stay up late drinking whisky
✓Wear the T-shirt of the band that’s playing
✓Choose the wrong topic
✓Go at a pace that’s awkward for everyone
✓Code live on stage
The plan for this talk is to show up tired, wear a JRubyConf t-shirt (this is like showing up at a
concert wearing the t-shirt of the band that’s playing), choose a topic and pace different from all
the other talks, and introduce an element of uncertainty by coding on stage. (If you’re reading this,
I’ll show you GitHub commits instead.)
8. This might be a train wreck, but train wrecks can be entertaining as long as they’re toy trains.
http://www.flickr.com/photos/cianginty/3148870954
9. The Tools
• Parslet
http://kschiess.github.com/parslet
• BiteScript
https://github.com/headius/bitescript
• Gritty
https://github.com/undees/gritty
• Graph
http://rubygems.org/gems/graph
• JRuby!
The first two tools are the ones we’ll use to write the compiler. The next two are the ones I used to
draw the pictures on the subsequent slides.
11. Thnad
(thank you, Dr. Seuss!)
Most of the real letters of the alphabet are already used for programming languages (C, D, J, K, R,
etc.). So we’ll use the fictional letter “Thnad,” which comes to us from Dr. Seuss.
12. function factorial(n) {
if (eq(n, 1)) {
1
} else {
times(n, factorial(minus(n, 1)))
}
}
print(factorial(4))
Here’s the Thnad program we’d eventually like to compile. It has integers, function calls,
conditionals, and function definitions—and that’s about it.
13. 1. Integers
One big step is to write a compiler top to bottom that parses an integer and outputs a working
Java .class file.
14. 42
First, we’re going to write code that parses the text “42” into a Ruby hash representing the tree on
the right.
15. Following Along
• Test → test_parser.rb
• Code → parser.rb
Slides like this one will contain a link to the tests, code, or full examples for the steps we’ve just
been over.
16. Next, we’re going to transform that Ruby hash (which isn’t as useful by itself) into a custom Ruby
class that will eventually be able to output Java bytecode.
17. • Test → test_transform.rb
• Code → transform.rb
• Full Example
27. if (0) {
42
} else {
667
}
Here’s the kind of conditional statement we’d like to be able to parse. The “else” clause is
mandatory (I hope Zed Shaw will approve).
28. Paradoxically, the more complicated the expression we parse, the more our tree of custom Ruby
classes resembles the Ruby hash we started with.
30. 4. Function Definitions
The last piece we need for our factorial Thnad program is the ability to compile function definitions.
31. function foo(x) {
5
}
A function definition is the keyword “function” followed by a list of parameters in parentheses, then
a computation between braces.
34. Marc-André Cournoyer
Marc-André Cournoyer’s book on creating your own programming language was helpful during this
process as a way of “checking my answers” (just like checking your answers to today’s crossword
puzzle by looking in tomorrow’s paper).
35. Code
https://github.com/undees/thnad
The full compiler, complete with bytecode generation, is available here.
36. For more about JRuby (which made this whole exercise possible in half an hour), see our book at
http://pragprog.com/titles/jruby.