Live data from Hacker News

Pstore: Ruby Built-In Hash Persistence

github.com

21–30 of 42 posts

Re: Pstore: Ruby Built-In Hash Persistence

#22
post #9
post #3

I do a lot of ML and AI work nowadays... I miss Ruby a lot especially the its culture around ergonomics.

There have been some interesting ML gems rolled in the past few years: https://ankane.org/new-ml-gems Any thoughts on what the Ruby community would need to build in order for it to become an attractive tool for AI work?

A huge cultural shift. People in scientific computing speak Python and R.

Something would need to happen that makes Ruby far more attractive. Say performance parity with Crystal or Nim.

Re: Pstore: Ruby Built-In Hash Persistence

#23
post #3

I do a lot of ML and AI work nowadays... I miss Ruby a lot especially the its culture around ergonomics.

Have you tried Scala?

It's more of a cultural thing. People tend to write Ruby in a literate fashion and think critically about their APIs. Scala devs get a little over their skis sometimes playing with language features.

Re: Pstore: Ruby Built-In Hash Persistence

#24

Earlier quoted context omitted.

> too many issues Such as?

Marshal is Ruby's version of pickle in Python: it serializes arbitrary objects, which means that correct deserialization requires arbitrary code execution. This is bad enough on its own, but it also makes pivoting a file read/write primitive into code execution much easier.

Pickle is fine (in a pinch). It's not meant for untrusted data.

Re: Pstore: Ruby Built-In Hash Persistence

#25
post #15
post #8

Don't use this. Marshal has too many issues. If you really need persistence and can't use something like Postgres, use the Ox gem instead. It's more reliable between versions of Ruby and easier to parse from other languages if you ever have to.

> use the Ox gem The main thing is that it's part of the standard library. If you import a gem anyway, often you'd be well off with sqlite. As for storage format, there's also: https://ruby-doc.org/stdlib-3.1.2/libdoc/yaml/rdoc/YAML/Stor...

I love the simplicity of YAML::Store. It was introduced in Ruby 1.8, almost 20 years ago (https://github.com/ruby/ruby/commit/55f4dc4c9a5345c28d0da750...).

I even created a little gem when I was starting with Ruby, 10 years ago, that was a very thin wrapper around it so that I could play around using an ActiveRecord like syntax (https://github.com/brunnogomes/active_yaml). I used in some pet projects so I could do stuff like:

  p = Post.new
  p.title = "Great post!"
  p.body = "Lorem ipsum..."
  p.save

  Post.all # => [#]

  Post.find(1) # => #

  Post.where(author: 'Brunno', visibility: 'public')
  # => [#, #]
And have access to the data directly in the YAML files.

Good times!

Re: Pstore: Ruby Built-In Hash Persistence

#26
post #13
post #6

pstore has been a built-in with Ruby stdlib for as long as ruby has existed, so _over_ 20 years.

I'm assuming it pre-dates Rubygems because it really should be a gem. I can't speak for Japan but few people in the Western world seem to use it.

There was a time when some stuff was being extracted (removed) from Ruby core and becoming gems and I really tought PStore and YAML::Store were going to be among those, but no, they decided to keep them in core. So maybe there are some important enough use cases that justify it being there.

Or maybe it would be a hard task that didn't justify the effort.

Re: Pstore: Ruby Built-In Hash Persistence

#27

Earlier quoted context omitted.

Marshal is Ruby's version of pickle in Python: it serializes arbitrary objects, which means that correct deserialization requires arbitrary code execution. This is bad enough on its own, but it also makes pivoting a file read/write primitive into code execution much easier.

Pickle is fine (in a pinch). It's not meant for untrusted data.

Anything is fine when the data is trusted. The problem is that the data is almost never actually trusted :-)

Re: Pstore: Ruby Built-In Hash Persistence

#28
post #9

Earlier quoted context omitted.

There have been some interesting ML gems rolled in the past few years: https://ankane.org/new-ml-gems Any thoughts on what the Ruby community would need to build in order for it to become an attractive tool for AI work?

My guess is some kind of corporate sponsorship. Someone with deep pockets to maintain it, encourage new apis keeping up with the latest papers, and make sure it works out of the box with the accelerator people want to use this month.

The web framework part is basically sponsored by 37signals https://37signals.com/32

Maybe that's why Ruby is best known for Ruby on Rails.

Re: Pstore: Ruby Built-In Hash Persistence

#29
Interesting. Transactionality is implemented via a regular thread lock, this means in a concurrent Rails app where this library is used in a hot path you might suffer some contention. Best is to use for marshaling data in non-hot paths such as stand alone scripts or app start up. I only say this because it's quite different from expectations around transactions in an SQL sense.

Re: Pstore: Ruby Built-In Hash Persistence

#30
post #26
post #13

Earlier quoted context omitted.

I'm assuming it pre-dates Rubygems because it really should be a gem. I can't speak for Japan but few people in the Western world seem to use it.

There was a time when some stuff was being extracted (removed) from Ruby core and becoming gems and I really tought PStore and YAML::Store were going to be among those, but no, they decided to keep them in core. So maybe there are some important enough use cases that justify it being there. Or maybe it would be a hard task that didn't justify the effort.

Many parts of the stdlib are being slowly gemified, that's the case of `pstore` too hence why it has it's own repo.

It's now no longer technically stdlib, but a "default gem", a gem that is installed by default with ruby, see: https://stdgems.org/

Since a few years every version remove one or two rarely used default gems. The Ruby core team just doesn't like big breaking changes.

Post reply on HN