Ich weiß jetzt nicht genau wie Ruby intern Konstanten verwaltet, aber wenn man sich im Prinzip anguckt wie Konstanten auch in anderen Sprachen funktionieren ist der Ausdruck "Konstante Variablen" ein Widerspruch in sich.

Normalerweise sind Konstanten nur ein Hilfsmittel für den Programmier sich Arbeit zu ersparen und den Code lesbarer zu machen, da anstatt einer Zahl eben eine Konstante im Code steht.
Nehmen wir mal einfach an die Richtung wird durch eine Zahl codiert:
Code:
if (direction==0)
 # do stuff
end
if (direction==1)
 # do other stuff
end
Ohne zusätzliche Kommentare ist das nicht unbedingt lesbar.
Jetzt können wir für die Richtung aber Konstanten anlegen und das ganze wird plötzlich deutlich lesbarer:
Code:
if (direction==DIR_NORTH)
 # do stuff
end
if (direction==DIR_EAST)
 # do other stuff
end
Ein weiterer Vorteil von Konstanten ist das man bei einer Änderung nicht an allen Stellen wo der Wert verwendet wird etwas ändern muss, sondern nur dort wo der Konstante dieser Wert zugewiesen wird.

Man könnte das ganze natürlich auch mit globalen Variablen lösen, aber das ist eigentlich eine Zweckentfremdung der globalen Variablen. Daneben haben globale Variablen (also $foo) den Nachteil im globalen Namensraum zu leben, während man Konstanten problemlos in den Namensraum zugehöriger Module packen kann und dennoch jederzeit auf sie zugreifen kann (zB Input::B).

Ich kenne mich zuwenig mit den interna von Ruby aus um sagen zu können ob Konstanten schneller sind als Variablen oder weniger Speicher verbrauchen, aber Konstanten zu benutzen wo man Konstanten benutzen sollte und eben nicht globale Variablen ist guter Programmierstil und vereinfacht auch anderen Programmierern das Lesen des Codes (aha hier wird ein konstanter Wert abgefragt) und erleichtert dem Programmierer vielleicht auch den Wechsel zu anderen Sprachen.
Es gibt nämlich Sprachen wo Konstanten keinerlei Speicher verbrauchen weil sie einfach beim Compilieren durch ihren Wert ersetzt werden.

Nicht immer gibt es einen Vorteil in Performance oder Speicherverbrauch oft ist es auch einfach die Lesbarkeit und Wartbarkeit des Codes die ausreichen um bestimmte Sachen so zu machen und nicht anders.
Ich würde sogar sagen, Lesbarkeit ist wichtiger als Performance, solange nicht die Performance ein bekanntes Problem der bisherigen Lösung ist und die unlesbare Lösung eine massive Performance-Steigerung bringt. Und selbst dann würde ich eher andere Möglichkeiten suchen die Performance zu verbessern, anstatt eine lesbare Lösung durch eine unlesbare zu ersetzen.