Почему хэши Ruby называются хэшами, а не картами, dicts, таблицами или ассоциативными массивами?

#ruby #language-design

#ruby #язык-дизайн

Вопрос:

В Ruby есть встроенный класс called Hash . Согласно документам:

Хэш — это похожий на словарь набор уникальных ключей и их значений. Также называемые ассоциативными массивами, они похожи на массивы, но там, где массив использует целые числа в качестве своего индекса, хэш позволяет использовать любой тип объекта.

Хэш можно легко создать, используя его неявную форму:

 grades = { "Jane Doe" => 10, "Jim Doe" => 6 }
  

Итак, по сути, это ассоциативные массивы. Если это так, то почему они называются хэшами? Разве в информатике термин «хэш» обычно не используется для обозначения числа или какой-либо шестнадцатеричной строки, сгенерированной путем прогона некоторых данных через хэш-функцию? Фактически, у объектов Ruby даже есть вызываемый метод hash , который «генерирует хэш-значение Fixnum для этого объекта».

Я знаю, что Hash в Ruby реализовано как хэш-таблица, но, учитывая то, что я сказал выше, это не кажется достаточным оправданием для использования имени Hash вместо чего-то вроде Table или Map , особенно учитывая, что Ruby, похоже, не имеет других встроенных реализаций ассоциативных массивов. Почему было выбрано это имя?

Ответ №1:

Ruby черпает вдохновение из Perl, и Perl называет это хэшем.

Обновить:

Подтверждено Юкихиро Мацумото, создателем Ruby: https://twitter.com/yukihiro_matz/status/547516495249428480

Комментарии:

1. Хм, тогда, возможно, по историческим причинам. Этот ответ вызывает вопрос: почему Perl выбрал термин «хэш» вместо «карта», «дикт», «таблица» или «ассоциативный массив»?

2. Настолько хороший ответ, насколько вы, вероятно, получите. Но тогда возникает вопрос… почему Perl называет это хэшем?

3. Я не могу найти авторитетный источник, но, похоже, консенсус заключается в том, что ассоциативные массивы в Perl в конечном итоге в основном называются хэшами, потому что они используют внутреннее хеширование, а «хэш» значительно короче и проще произносить / записывать, чем «ассоциативный массив».

4. @AndrewMedico Не могли бы вы опубликовать любые найденные вами источники, если вы их все еще помните?

5. @Ajedi32, поскольку это лучший ответ, который вы, вероятно, получите, не могли бы вы пометить его как ответ?