Hash Keys in WEBrick config.rb

E

Explosiv0SX

Hi -- long time lurker, first time poster.

While searching for Ruby app configuration best practices, I came
across the config.rb file for WEBrick. In this file, a few hashes are
created as follows:

General = {
:ServerName => Utils::getservername,
:BindAddress => nil, # "0.0.0.0" or "::" or nil
:port => nil, # users MUST specifiy this!!
:MaxClients => 100, # maximum number of the concurrent
connections
:ServerType => nil, # default: WEBrick::SimpleServer
:Logger => nil, # default: WEBrick::Log.new
:ServerSoftware => "WEBrick/#{WEBrick::VERSION} " +
"(Ruby/#{RUBY_VERSION}/#{RUBY_RELEASE_DATE})",
:TempDir => ENV['TMPDIR']||ENV['TMP']||ENV['TEMP']||'/
tmp',
:DoNotListen => false,
:StartCallback => nil,
:StopCallback => nil,
:AcceptCallback => nil,
}

I'm curious as to why the author used symbols here as the hash keys.
Is it for performance reasons? My first inclination was to use
strings in the same way, but after seeing this, I started to wonder
how these symbols are represented internally compared to strings.

Can anyone shed any light on why symbols are used here?

Rick
 
P

Patrick Hurley

Hi -- long time lurker, first time poster.

While searching for Ruby app configuration best practices, I came
across the config.rb file for WEBrick. In this file, a few hashes are
created as follows:

General =3D {
:ServerName =3D> Utils::getservername,
:BindAddress =3D> nil, # "0.0.0.0" or "::" or nil
:port =3D> nil, # users MUST specifiy this!!
:MaxClients =3D> 100, # maximum number of the concurrent
connections
:ServerType =3D> nil, # default: WEBrick::SimpleServer
:Logger =3D> nil, # default: WEBrick::Log.new
:ServerSoftware =3D> "WEBrick/#{WEBrick::VERSION} " +
"(Ruby/#{RUBY_VERSION}/#{RUBY_RELEASE_DATE})",
:TempDir =3D> ENV['TMPDIR']||ENV['TMP']||ENV['TEMP']||'/
tmp',
:DoNotListen =3D> false,
:StartCallback =3D> nil,
:StopCallback =3D> nil,
:AcceptCallback =3D> nil,
}

I'm curious as to why the author used symbols here as the hash keys.
Is it for performance reasons? My first inclination was to use
strings in the same way, but after seeing this, I started to wonder
how these symbols are represented internally compared to strings.

Can anyone shed any light on why symbols are used here?

Rick

Largely a matter of style - plus you have to type one less letter :)

Symbols will be slightly more efficent and use a little less memory,
as every reference to an existing symbol will become a reference to
the existing symbol in the symbol table. Of course the flip side is
there is no garbage collection of symbols, so they are there to stay,
where string objects can be collected and discarded when they are no
longer needed. This is only a real issue in long running processes
that might create many dynamic symbols.

pth
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Members online

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top