Ruby/RoR News Digest 21 - 27.09

Go behing the scenese of DHH created gem, check 10 lessons learn from the Ruby Refactoring Kata, check latest Puma update and more
27 September 2019   380

Greetings! I hope your week went great! Here's new Frontend news digest.

In this digest you will learn the 10 lessons from the Ruby Refractoring Kata, get familiar with new database related stuff in Rails 6 and many other things. You will also be able to go deep to the DHH written gem and check the Puma new version's source code.

Guides

  • Ruby Templating: Baking an Interpreter

Final part of a tutorial that talks about Visitor Pattern using for rendering the templates.

Articles

  • For organizing Rails projects, domain objects are good and service objects are bad

Author doesn't believe that service projects are good for organizating Rails projects, and explains his opinion

  • Ruby 2.7 Adds Integer#[] to Support Range Values 

Some explanations about updates of the abovementioned class in Ruby 2.7

  • Behind-the-Scenes of 'Geared Pagination' in Rails 

A look inside DHH written geared_pagination gem 

  • 10 lessons learnt from the Ruby Refactoring Kata - Tennis Game

Big article with advices and code examples about Ruby Refactoring

  • Rails 6 adds add_foreign_key and remove_foreign_key for SQLite3

Now you can create and remove foreign key constraints using add_foreign_key and remove_foreign_key in SQLite3 with new version of Rails; learn more in the post

Updates

  • FriendlyId

Gives you an ability to manage slug history and versioning, i18n, scoped slugs, and more

  • Puma

New version (4.2) of Rack/Ruby webserver

  • Erubi

A tiny, alternative ERB implementation; a simplified fork of Erubis with a number of differencies

Video

  • How to use Devise Test Helpers in Rails

GraalVM 19.0.3 to be Released

Along with a new update, virtual machine implementations for in JS, Python, Ruby and R received updates too
21 November 2019   61

Oracle has published the release of the universal virtual machine GraalVM 19.3.0, which supports running applications in JavaScript (Node.js), Python, Ruby, R, any languages ​​for JVM (Java, Scala, Clojure, Kotlin) and languages ​​for which the bitcode can be generated LLVM (C, C ++, Rust). Branch 19.3 is classified as long-term support (LTS) and is notable for JDK 11 support, including the ability to compile Java code into executable files (GraalVM Native Image). The project code is distributed under the GPLv2 license. At the same time, new versions of GraalVM-based implementations of the Python, JavaScript, Ruby, and R languages ​​— GraalPython, GraalJS, TruffleRuby, and FastR — have been released.

GraalVM provides a JIT compiler that can execute on-the-fly code of any scripting language in the JVM, including JavaScript, Ruby, Python, and R, and also makes it possible to run native code in the JVM, converted to LLVM bitcode. The tools provided by GraalVM include a language-independent debugger, a profiling system, and a memory allocation analyzer. GraalVM makes it possible to create combined applications with components in different languages, allowing you to access objects and arrays from code in other languages. For languages ​​based on the JVM, it is possible to create executable files compiled into machine code that can be executed directly with minimal memory consumption (memory and thread management are implemented through the connection of the Substrate VM framework).

GraalJS changes (full list):

  • Implemented the Promise.allSettled proposal. It is available in ECMAScript 2020 mode (--js.ecmascript-version=2020).
  • Implemented the nullish coalescing proposal. It is available in ECMAScript 2020 mode (--js.ecmascript-version=2020).
  • Updated ICU4J library to version 64.2.

GraalPython changes (full list):

  • Implement gc.{enable,disable,isenabled} as stubs
  • Implement charmap_build function
  • Implement hexversion in sys module

TruffleRuby changes (full list):

  • Compilation of C extensions is now done with an internal LLVM toolchain producing both native code and bitcode. This means more C extensions should compile out of the box and this should resolve most linker-related issues.
  • It is no longer necessary to install LLVM for installing C extensions on TruffleRuby.
  • It is no longer necessary to install libc++ and libc++abi for installing C++ extensions on TruffleRuby.

 And FastR chages (full list):

  • In this release, FastR does not ship with GCC runtime libraries. Use the following commands to install the necessary dependencies:
  • Preview of support for LLVM based execution of R native extensions
  • Fixed memory leaks reported on GitHub