ruby
IParse
Our great sponsors
ruby | IParse | |
---|---|---|
182 | 5 | |
21,526 | 11 | |
0.8% | - | |
10.0 | 3.3 | |
about 1 hour ago | 5 months ago | |
Ruby | C++ | |
GNU General Public License v3.0 or later | GNU General Public License v3.0 only |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
ruby
-
🚀Secure Rails Authentication: A Step-by-Step Guide to Sign Up, Log In, and Log Out
To create a new Rails app, you should have Ruby and Rails installed on your machine. You can find how to install Ruby on your local machine using the Ruby docs. You can install Rails by running the following command:
- Ruby – Implement Chilled Strings
- Ruby 3.3
-
Tests Everywhere - Ruby
Ruby testing with RSpec
-
YJIT Is the Most Memory-Efficient Ruby JIT
Not parent poster and do not have production YJIT experience. =)
My guess is that you would monitor `RubyVM::YJIT.runtime_stats[:code_region_size]` and/or `RubyVM::YJIT.runtime_stats[:code_gc_count]` so that you can get a feel for a reasonable value for your application, as well as know whether or not the "code GC" is running frequently.
https://github.com/ruby/ruby/blob/master/doc/yjit/yjit.md#pe...
-
M:N thread scheduler for Ractors has been merged!
Link to the commit
-
GitHub and Developer Ecosystem Control
Part of the major userbase pull in GitHub revolves around hosting a considerable number of popular projects including Angular, React, Kubernetes, cpython, Ruby, tensorflow, and well even the software that powers this site Forem.
-
Undocumented Features of GitHub
Hold option and click on the “collapse file” button in the Files view of a commit or pull request, and it will collapse all the files.
Select text in a comment, issue, or pull request description and press r—the selected text (including markdown formatting) will get pre-populated as a markdown block quote reply in the next comment box.
Add .patch or .diff to any pull request URL if you want to see a plain-text diff of the pull request (e.g. maybe you want to quickly `curl ... | git apply -` an unmerged pull request into a local copy of the repo without trying to add and fetch the git remote that the pull request is from).
There are lots of keyboard shortcuts. For example, / to jump to the file finder.
Not so much a secret but more like a hiding in plain sight: when looking at a commit GitHub will show you the earliest and latest tag (i.e. release) that includes the commit. For example, this commit[1] first appeared in v3_2_0_preview3.
[1]: https://github.com/ruby/ruby/commit/892f350a7db4d2cc99c5061d...
-
Ruby Outperforms C: Breaking the Catch-22
The title is misleading, just like other commenters mentioned. Just check how much indirection "rb_iv_get()" has to make (at the end, it will call [1], which isn't "a light" call). Now, check generated JIT code (in a blog post) for the same action where JIT knows how to shave off unnecessary indirection.
We are comparing apples and oranges here.
[1] https://github.com/ruby/ruby/blob/b635a66e957e4dd3fed83ef1d7...
-
How to Check If a Variable Is Defined with Ruby's Defined? Keyword
I'm not sure why, but all the source values are listed here: https://github.com/ruby/ruby/blob/1cc700907d3ad3368272488a6f...
Maybe someone knowledgeable in the underpinnings of Ruby will explain why "class variable" was not hyphenated.
IParse
-
I Wrote a String Type
Nice library with many features. But I do not always understand the focus on memory usage. I guess that the reason behind this is that less memory allocations, have a positive effect on execution times. In a parser, where you often have to compare identifiers, it is a good idea to put all strings for identifiers into a unique pointer with the help of a hash table.
In my interpreting parser [1] I use a hexa hash tree [2] for storing identifiers. It is not very memory efficient, but very fast. It turns every string (from the input buffer) into a unique pointer for that string pointing to a copy of the string. In this way comparing string (identifiers) is equivalent to comparing pointers.
The idea of the hexa hash tree is that is a tree where each node has sixteen child nodes. Which node is selected is based on a step wise evaluated hash function that first takes the lower four bytes of the string, and after reaching the end of the string, the higher four bytes of the string. The nodes often taken up more memory space than the strings themselves.
[1] https://github.com/FransFaase/IParse/
[2] https://github.com/FransFaase/IParse/blob/master/software/Id...
- Noulith: A new programming language currently used by the Advent of Code leader
-
The Tools I Use to Write Books (2018)
I wrote a tool that can process a number of MarkDown files with fragments of C code and put all those fragments in the right order to produce a file that can be compiled. It is grammar based and works with manipulating Abstract Syntax Trees, so I guess, it could be adapted for different programming languages. See: https://github.com/FransFaase/IParse#markdownc
-
C++ Compile Time Parser Generator
Interesting. I have not looked into the code, but I wonder whether it is a compiler, or just an interpreter, e.g. it converts the grammar into some internal representation that is executed by an interpreter or virtual machine. I started worked on an interpreting parser in C many years ago. And later also made Java, C++ and JavaScript version of it. For the JavaScript implementation, see: https://fransfaase.github.io/ParserWorkshop/Online_inter_par... For the C++ version, see: https://github.com/FransFaase/IParse
-
Parser generators vs. handwritten parsers: surveying major languages in 2021
I implemented an unparse function in IParse, which is not a parser generator, but a parser that interprets a grammar. See for example https://github.com/FransFaase/IParse/blob/master/software/c_... where symbols starting with a back slash are a kind of white space terminals during the unparse. For example, \inc stands for incrementing the indentation where \dec decrements it. The \s is used to indicate that at given location a space should be included.
What are some alternatives?
CocoaPods - The Cocoa Dependency Manager.
Crate - CrateDB is a distributed and scalable SQL database for storing and analyzing massive amounts of data in near real-time, even with complex queries. It is PostgreSQL-compatible, and based on Lucene.
advent-of-code - My solutions for Advent of Code
aoc - My Advent of Code solutions.
SimpleCov - Code coverage for Ruby with a powerful configuration library and automatic merging of coverage across test suites
ctpg - Compile Time Parser Generator is a C++ single header library which takes a language description as a C++ code and turns it into a LR1 table parser with a deterministic finite automaton lexical analyzer, all in compile time.
Ruby on Rails - Ruby on Rails
wefx - Basic WASM graphics package to draw to an HTML Canvas using C. In the style of the gfx library
CPython - The Python programming language
pp - PP - Generic preprocessor (with pandoc in mind) - macros, literate programming, diagrams, scripts...
yjit - Optimizing JIT compiler built inside CRuby
nearley - 📜🔜🌲 Simple, fast, powerful parser toolkit for JavaScript.