Як склався звичай використання квадратних дужок для елементів масиву?


11

Багато мов програмування використовують синтаксис a[i]для позначення i'-го елемента масиву, послідовності чи вектора, aзокрема, це роблять C та Pascal (з кінця 1960-х та початку 1970-х). З іншого боку, деякі більш ранні мови, як, наприклад, Фортран (з 1950-х років), не використовують цю конвенцію. Крім того, я вивчив трохи математики, і математики використовують квадратні дужки для інтервалів, а підписки для, ну атрибуції масиву та матриці (або звичайні дужки, якщо масив вважається функцією з негативних цілих чисел).

Отже, моє запитання: Де / як / у якому контексті розвинулися ці квадратні дужки для передплати масиву, і ким?

Примітка: Зовсім не справжнє питання щодо використання фігурних дужок у С.



@gnat: Як це дурне це?
einpoklum

1
Пов’язаний, але не дурний.
бластер

1
Другий верхній відповідь там висвітлює історію квадратних дужок
gnat

1
@Paul Typo. Ви маєте на увазі xkcd.com/163 (домен xkdc зареєстрований у Китаї)
1201ProgramAlarm

Відповіді:


10

Основною мовою попередника для С і Паскаля був Алголь . Найбільш ранньою версією цього був Algol 58, який використовував квадратні дужки для оголошень масиву та посилань.

Причина того, що Алголь використовував квадратні дужки, а не, наприклад, дужки, була триразовою:

  1. бо вони могли. Ранні клавіатури IBM, якими розроблявся Fortran, мали лише дужки. Це змінилося до моменту визначення Алгола.
  2. Досвід роботи з Fortran показав, що програмістів часто плутають із надмірним використанням дужок, тому це сприймається як важлива синтаксична зміна.
  3. Задум Алгола полягав у тому, що він буде використовуватися для опису алгоритмів, тому його наближення до стандартних математичних позначень мало сенс.

Зауважте, на відміну від C, який використовує масиви здебільшого для індексації пам’яті, Algol дозволяв задавати як нижній, так і верхній межі індексу. Знову ж таки, це відповідало його більш математичним намірам. Насправді, що насправді Алгол був фактично мовою псевдокоду протягом багатьох років.


Але чи справді квадратні дужки ближче до стандартних математичних позначень? Коли я вивчав відповідність, [x]використовувався для класів еквівалентності, а не для позицій індикації у векторах чи матрицях.
einpoklum

2
@einpoklum Більше для діапазонів у декларації, ніж підписки або надписи у посиланнях. Але оскільки вони фактично не могли робити підписки або надписи за технологією того часу, вони намагалися досягти візуальної послідовності. І вони не прагнули до математичного поняття так, як, скажімо, APL. Вони мали на меті чітко виразити алгоритми, що є досить вузькою галуззю.
Алекс

Ой, також квадратні дужки були використані для інтервалів. Я думаю, це як діапазони в масиві, в певному сенсі. Крім того - ви впевнені, що Алгол звідки почався цей звичай?
einpoklum

@einpoklum Я впевнений, що використання квадратних дужок у С та Паскалі походить від Algol. Родовід досить добре зафіксований. Якщо був попередник Algol 58, від якого дизайнери взяли синтаксис, я цього не знаю. Навряд чи з огляду на терміни, але не неможливо. Algol 58 не реалізовувався до Algol 60, тому можливо, що натхненна мова була натхненною.
Алекс

5

Це цікаве прочитання: https://en.m.wikipedia.org/wiki/Bracket

Далі мої власні спостереження.

Дизайнери C дуже обережно прийняли значення символів та конструкцій, оскільки вони сотні років використовувались звичайною письмовою мовою. І, роблячи це, їм довелося працювати з досить обмеженим набором символів ASCII. У західній мові в письмовому тексті використовується більше символів групування, але вони просто не перетворили його на ASCII.

У звичайній мові значення дужок - це надання побічної інформації, не перериваючи основне повідомлення. Це має сенс під час виклику процедури: основне повідомлення - це дія, яку слід виконати, а підінфо - це аргументи.

Фігурні брекети використовуються для групування. "Ця колекція слів належить разом, їх слід встановити окремо від решти". Тому має сенс використовувати їх для блоків коду, складених операторів.

Квадратні дужки використовуються для вставок у текст, які не входили до оригіналу, для уточнення оригінального тексту та надання контексту. Або для позначення опущення еліпсисом: [...]. "Вона [королева] не розвеселилася". У комп'ютерному програмуванні мало сенсу використовувати дужку для індексації масивів, оскільки це своєрідний контекст. "Масив? Який масив? Ну, конкретно, цей елемент." Але навіть якщо оригінальне значення повністю не охоплює використання в комп'ютерній мові, в ASCII не залишилося занадто багато інших варіантів.

Тому я б сказав, що це комбінація попереднього рівня техніки та того, що було на той час, що призводить до використання квадратних дужок для індексації масиву.

[редагувати через коментар Алекса]

Згідно з цим джерелом, ASCII був представлений у 1963 році, а урядове схвалення отримав у 1968 році. Розвиток мови С розпочався до 1969 року, згідно з цією вікі . Тож, мабуть, містер Річі підбирав цей новий широко підтримуваний стандарт під назвою ASCII під час вибору своїх персонажів.

Будь ласка, дивіться також інші відповіді, які стосуються справи Алголя, "матері багатьох мов", що має сильний вплив.


Я думаю, я розумію, що ви говорите, але ASCII не був кодифікований майже через десять років після того, як C був розроблений. Набагато більш прямий вплив мала клавіатура PDP-11, для якої створений C. Має сенс використовувати символи, які він підтримує. Використання квадратних дужок для масивів було безпосередньо натхнене компанією Algol через BCPL та B. Аналогічно для Pascal. Вірт реалізував Algol-W до розробки Pascal.
Алекс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.