Чому заяви на багатьох мовах програмування закінчуються крапкою з комою?


130

Чи є причина, що крапкою з двокрапкою було обрано замість іншого символу?

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


6
Ерланг і пролог використовують повні вершини.
Дейв Кларк

13
Цікаво, скільки мов програмування ви знаєте. Є багато мов, які не використовують крапки з комою.
новіт

50
Буду сумніватися, що відповідь виявиться чимось на кшталт "ASCII значення крапки з комою є особливо міцним, коли використовується як останній символ на перфокарті 80 символів".
Райан Томпсон

22
Ваше запитання не надто далеко Справжнє питання: «навіщо взагалі якийсь символ?»
Конрад Рудольф

5
Тому що це на домашньому ряду клавіатури qwerty?
Вім

Відповіді:


132

Англійською мовою крапка з комою використовується, наприклад, для розділення елементів у списку виписок

Вона побачила трьох чоловіків: Джеймі, який родом з Нової Зеландії; Джон, син молочника; і Джордж, проклятий вид людини.

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

Редагувати, щоб додати
У перші дні, коли пам'ять була дорогою, обробка була повільною, і були розроблені перші мови програмування, виникла потреба розділити програму на окремі оператори для обробки. Деякі мови вимагали, щоб кожне висловлення було розміщено на рядку, щоб повернення перевезення могло діяти як розділовий елемент заяви. Інші мови дозволяють більш вільний формат макета тексту, і тому потрібен певний символ розділення. Цей символ був обраний крапкою з комою, швидше за все, через схожість його використання в англійській мові (це, мабуть, припущення; мене в той час не було) і, оскільки він не створював конфлікту з іншими розділовими знаками знаки та символи, необхідні для математичних чи інших синтаксичних цілей.

Ще раз редагування
Потреба в деякому символі термінатора повертається до вимог розбору мовного тексту. Ранні компілятори були написані мовою складання або, в деяких випадках, безпосередньо вручну виготовлені інструкції щодо двійкових машин. Наявність спеціального символу, який визначив кінець висловлювання та розмежував шматок тексту, який обробляється, робить обробку набагато легшою. Як я вже говорив вище, інші мови використовували повернення або кронштейни. Альбол, Паскаль, Ада, BCPL, B, C, PL / M та інші сімейства мов, як правило, використовують крапку з комою. Щодо того, хто вперше застосував саме цей персонаж, я не згадуюсь досить далеко в історії, щоб згадати. Її вибір і прийняття має ідеальний сенс як

  • Її використання відображає використання в звичайній англійській розділовій знаку.
  • Інші символи (наприклад, повна зупинка) можуть бути заплутаними, оскільки вони вже мають загальне використання (повна зупинка також використовується як десяткова крапка).
  • Видимий розділовий символ дозволяє розміщувати код вільного формату.
  • Використання аналогічного символу розмежувача у похідних або пізніших мовах ґрунтується на знайомстві, отриманому всіма програмістами, які використовували попередню мову.

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


19
Не зовсім коректно. Напівна двокрапка розділяє речення на блоки: кожен блок повинен бути робочим реченням, але ми використовуємо напівкрапку для позначення того, що між двома реченнями існує міцний зв’язок. Це на півдорозі між комою та повною зупинкою, так що це справді зупинка, але вона пов'язує одне речення з наступним. Вище подане речення було б: "Вона побачила трьох чоловіків; Джеймі: який приїхав з Нової Зеландії, Джон: син молочника та Джордж: ненажерливий чоловік". Ваше використання напівколонки може бути замінено комою. Трохи поза темою, але суть по суті однакова; це розбиває заяви.
alex.p

40
@ alex.p насправді прийнятне використання крапки з комою замість коми, коли це призведе до того, що речення є заплутаним, що робить це правильним.
Рятхал

13
Критична інформація про крапки з комою: theoatmeal.com/comics/semicolon
Ед Джеймс

7
@ alex.p: Схоже, ви говорите, що вживання Іаном неправильне, але ви можете просто сказати, що його пояснення того, як ми використовуємо напівколонки, є неповним. Якщо ви говорите, що він помиляється, значить, ви неправі. Його використання напівколонок є цілком звичайним, і я гадаю, набагато частіше, ніж приклад, який ви даєте. Якщо ви просто говорите, що він не дає вичерпних пояснень, то я не впевнений, чому це насправді варто навіть згадати.
іконоборство

17
@Ian "це має бути припущення, я не був там у той час" Ви ​​пропустили прекрасну можливість (правильно) використовувати крапку з комою :)
Travis Christian

70

Багато мов використовують синтаксис, який моделюється після C (який моделювався після B - спасибі @Crollster). Як видно в коментарях, існує довгий ланцюжок таких мов ... B був натхненний PL / I, якому передував ALGOL при використанні ;як роздільника.

Оскільки в C термінатор заяви є ;, ці мови відповідають тому.

Що стосується того, чому він був вибраний термінатором тверджень на C - можливо, через його використання англійською мовою "для позначення взаємозалежних тверджень" .

C також був винайдений на PDP-11 в той час, коли для набору символів був доступний обмежений об'єм пам'яті, тому винахідникам мов довелося працювати в рамках цих обмежень.


8
C щойно дотримувався конвенції про використання крапки з комою, як використовував його попередник "B"
Кроллстер

8
B щойно дотримувався конвенції про використання крапки з комою, як використовував його попередник "PL / I" :)
Skomski

15
@Skomski - Що було за чим? Я чекаю, коли ця остання черепаха зайде;)
Одід

26
-1; Давайте, хлопці, чи всі ми забули надзвичайно впливовий АЛГОЛ? Він мав крапки з комою як роздільники висловлювань, перш ніж все, що ви згадуєте. (Я не знаю, чи взяла цю ідею десь ще)
hugomg

13
@Oded - Я думаю, ви побачите, що це черепахи аж донизу . * 8 ')
Марк Бут

54

FORTRAN використовував повернення каретки для окреслення заяв. Період використання COBOL LISP нічого не використовував, покладаючись на дужки у всьому. ALGOL була першою мовою, яка використовувала крапку з комою для розділення висловлювань. PASCAL слідував за результатами ALGOL, використовуючи крапку з комою, щоб розділити заяви.

PL / Я використав крапку з комою для завершення операторів. Є різниця, і це легко помітити в PASCAL. Ада переслідувала позицію PL / I в цьому пункті, а не на ALGOL.

Точка з комою як роздільник виразів чи термінатор швидко сприйняла спільнота інформатики як корисну нотацію, і, наскільки я знаю, кожна наступна структурована блоком мова слідувала за результатами ALGOL і використовувала крапку з комою для розділення або припинення висловлювань.

Мені говорили багато років тому, що BCPL використовував як крапку з комою І повернення каретки як роздільники / термінатори операторів, але я ніколи не використовував мову і не можу це перевірити. У якийсь момент використання повернення перевезення для відокремлення або припинення заяв було відхилено від нащадків BCPL. BCPL породив B, B породив C, C породив C ++, Java, D і цілу низку речей, значно менш продуманих, ніж PASCAL і Ada.


2
Слід зазначити, що останнім часом використання крапки з комою чи новою лінією знову з’являється. У Javascript, Lua, Go та Haskell усі мають неявну крапку з комою в новому рядку, якщо вона синтаксично дійсна. І звичайно деякі мови, які зберегли новий рядок як роздільник. Шелл і Пітон тут приходять на думку.
Ян Худек

2
+1 за "значно менш продуманий, ніж PASCAL та Ada"
Адітя

2
Algol 58 , попередник Algol 60, використовував крапки з комою. Зауважте, що в той час часто розрізняли форму публікації мови та фактичну форму введення, оскільки пристрої введення були досить обмеженими: лише великі регістри тощо. Ця дихотомія насправді не стосувалась FORTRAN, але була правдою кількість інших мов.
Ден Халберт

5
@kevincline: Чи вважаєте ви Boeing 777 загальним користуванням? Кожен рядок програмного забезпечення авіоніки, який летить у цьому літаку, написаний на Ada.
Джон Р. Стром

2
@kevincline Skype: написано на Delphi (Pascal.) Microsoft намагалася змінити це після того, як вони придбали його, але вони не змогли його успішно перенести, тому тепер вони купують ліцензії Delphi. Коли-небудь дивився телевізор у США? Станція, ймовірно, працює на програмному забезпеченні WideOrbit, написаному на Delphi; вони є лідером ринку з величезним запасом. Коли-небудь бував у тематичному парку? Є хороший шанс, що система продажу квитків була написана в Delphi. Паскаль повсюди; Просто це забезпечує настільки сильну конкурентну перевагу, що багато людей намагаються про це мовчати, щоб їх конкуренти не дізналися.
Мейсон Уілер

14

Чому б не будь-який інший символ?

Кілька мов використовували інші символи - натомість у старих версіях BASIC використовується двокрапка.

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

Друга причина дещо схожа, але більше спрямована на людей, які читають / використовують код. Знову ж таки, це повертається до того, що фактичний символ, який ви використовуєте, не має великого значення. Існує значна перевага в читанні, яку можна отримати від використання символу, який ваш читач звик бачити з певною метою, коли і якщо це можливо. Це не означає, що C - це один досконалий синтаксис, і все інше повинно слідувати йому по-рабськи, але це означає, що достатньо людей знайоме з таким стилем синтаксису, що розпливчасто схожа мова набирає багато (і втрачає дуже мало), слідуючи приблизно такий самий синтаксис, де це можливо.

Зауважу, що це дуже схоже на розробку майже будь-якої іншої програми. Якщо я напишу програму, яка використовує якісь вікна, я спробую просто використовувати власні функції цільової платформи. Багато рішень, які втілюють в собі, будуть значною мірою довільними, і їх можна зробити по-різному без значної втрати функціональності, але однаково, зміна їх без істотного збільшення функціональності просто збиває з пантелику користувачів, не виконуючи нічого корисного. Ті ж основні принципи поширюються і на те, "що повинно припиняти (або розділяти) твердження мовою?" як "як має виглядати смуга прокрутки" або "як повинен працювати елемент управління деревом?" У всіх цих випадках рішення здебільшого довільне, а рівномірність забезпечує істотну користь сама по собі.

Додам, що так само відбувається на багатьох мовах, саме так, як більшість з нас настільки звикли до програмування, що мало хто думає про це. Чому всі використовують "+" для позначення додавання або "-" для позначення віднімання? Оскільки форма символу не має великого значення, але всі, хто погоджується застосувати одне і те ж значення до кожного символу, мають велике значення.


Дуже хороші бали (+1), хоча я не можу повністю погодитися з "переважно довільною" частиною. Я думаю, що напевно є деякі речі, які є більш інтуїтивними, а інші - менш інтуїтивні. У використанні X для закриття вікон у Windows існує деяка (можливо, лише неясно пов'язана) попередня символіка, на яку він звертається. І, безумовно, у використанні кольорів OS X є сильна символіка, яку він малює. (На даний момент я ігнорую, що M $ Windows, можливо, вкрав X з X Windows, оскільки я не пригадую, для чого це використовувався.)
iconoclast

3
@Brandon: Я, звичайно, не збирався говорити, що всі частини дизайну GUI є довільними - можливо, я мав би сказати "деякі" замість "більшість". Це не X, яке визначало б якусь конкретну форму для піктограми "закрити вікно" - це залежатиме від окремого менеджера вікон.
Джеррі Труну

Наскільки мені здається, оригінальний Dartmouth BASIC використовував лише повернення каретки для припинення операторів (тобто, одне твердження на рядок). Я думаю, що декілька висловлювань у рядку, розділеному кольорами, було розширенням Microsoft.
Джон Р. Стром

7

Точка з комою була спочатку запропонована в Algol 60 як роздільник тверджень , а не як термінатор.

До Algol 60 єдиною існуючою мовою програмування на високому рівні була Fortran, яка вимагала, щоб кожне твердження було окремим рядком. Виписки, що охоплюють кілька рядків, як do-петлі, вважалися диваком, і вони розглядалися як "блоки заяв".

Дизайнери Algol 60 зрозуміли, що для операторів потрібна ієрархічна структура (тоді ще, цикли дописів, виписки з справи тощо), і вони можуть вкладатись одна в одну. Отже, ідея кожного висловлювання, що знаходиться в окремому рядку, вже не мала сенсу. Послідовний склад висловлювань форми S1; S2; ...; Sn , можливо , укладені в почати - кінець дужка були названі складними заяви , і вписуватися в ієрархічну структуру звітності , передбачений Algol 60. Отже, точка з коми явно констатація роздільник , а НЕ термінатор.

Це породило проблеми на практиці. Algol 60 також мав "порожню заяву", яку позначали нічого не написавши. Отже, можна написати « почати S1; кінець », де крапка з комою з’являється так, ніби вона закінчується S1. Але компілятор Algol 60 справді розглядав це як роздільник між S1 та невидимим порожнім висловом, що слідує за ним. Ці тонкощі були небагато для практичних програмістів. Використовуючись для лінійно-орієнтованих мов, таких як Assembly і Fortran, вони дійсно вважали крапку з комою як термінатор для висловлювань. Коли програми виписувалися, зазвичай в кінці висловлювань ставиться крапка з комою:

    a [i]: = 0;
    i: = i + 1

і крапка з комою дійсно виглядала як термінатор для першого твердження. Якби програмісти розглядали крапку з комою як термінатор, тоді таке твердження дало б помилку синтаксису:

    якщо я> 0, то
      a [i]: = 0;
    ще
      a [i]: = 1;

оскільки крапка з комою закінчується "якщо", і, отже, "else" стає звисаючим. Програмісти були ретельно розгублені.

Отже, PL / I, що був наступником IBM у лінійно-орієнтованому Fortran, вирішив зробити крапку з комою термінатором операторів, а не роздільником. Програмісти були задоволені таким вибором. Більшість мов програмування дотримувалися відповідності. (Паскаль протистояв тренду, але його наступниця Ада відмовилася від нього.)

[Примітка додано: у статті Вікіпедії про порівняння мов програмування є приємна таблиця, яка резюмує крапку з комою в різних мовах програмування.]


6

Це майже чиста здогадка, але дивлячись на стандартну клавіатуру QWERTY, обмежену значеннями ASCII, природними символами було б припинення / розділення.!?,:; і повернення вагона. з них!?: слід негайно дискваліфікувати за прийняття декількох ключів, а завершення операції буде дуже поширеною справою. Періоди будуть дискваліфіковані, тому що їх легко плутати з десятковими крапками, що зробить їх зайвим ускладненням, щоб бути термінатором, враховуючи обмежений простір початкових комп'ютерів. повернення каретки буде дискваліфіковано після того, як рядки коду можуть бути довшими, ніж ті, що можуть бути показані в одному рядку на екрані, тому складніше буде читати програму, коли рядки доводиться прокручувати по горизонталі, або потрібні додаткові символи для створення продовження в наступному рядку, який знову додає складності. це листя, і; як варіанти, з них, використовується набагато частіше в письмовій формі порівняно з; тому крапка з комою вибирається тому, що її простіше набрати, менше заплутати, оскільки вона додає значення символу з обмеженим значенням і менш складна, оскільки особливих випадків насправді не існує при його використанні.

Точку з комою було обрано тому, що він був найкращим персонажем, заснованим на ліні та простоті.


у вас тут хороший момент; Я б лише переказав слово "обраний" (що важко довести) на щось на кшталт "... Точка з комою перемогла, тому що це був найкращий персонаж, заснований на ліні та простоті"
gnat

2
Навряд чи. Точка з комою як термінатор / сепаратор заяви починається в ALGOL (1958), який передував ASCII (робота розпочалася 1960, перший реліз 1963, основний реліз 1967, останній оновлений 1986).
Джон Р. Стром

@ JohnR.Strohm добре, що це новина для мене, але все це для мене дуже давня історія
Рятхал

6
Це чудова теорія, але реальність полягає в тому, що для натискання клавіш потрібна клавіша Shift, щоб дістатися до крапки з комою, доки в 70-х не з’явився сучасний клавіатурний вклад. (У нижній частині статті у вікі є кілька хороших фотографій: en.wikipedia.org/wiki/Keypunch ) Це, швидше за все, лише на основі природних правил англійської мови, принада, яка була особливо популярною в той же час. (Я включав би всі мови кінця 50-х років: ALGOL, FORTRAN, COBOL та SQL, виключаючи LISP.) Напівколона ALGOL - це лише одна з багатьох використовуваних англомовних конвенцій, які BASIC згодом розширили далі.
SilverbackNet

@SilverbackNet, тому "чиста здогадка", мабуть, не повинна бути основою відповіді тут.
користувач1717828

6

Це багато в чому довільний вибір. Деякі мови зробили інший вибір. COBOL припиняє висловлювання з .символом. FORTRAN, BASIC і Python зазвичай припиняють оператори з новими рядками (зі спеціальним синтаксисом для багаторядкових операторів). А Лісп дужками твердить свої дужки.

Основна причина ;, настільки популярна, як роздільник / термінатор висловлювань, полягає в тому, що більшість сучасних популярних мов засновані на ALGOL , який використовував цю конвенцію.

замість іншого символу?

Який ще символ ви могли обрати?

Символи ASCII # $ @ [] ^ _ `{|} ~ не завжди були присутні у ранніх кодуваннях символів, як ISO 646 .

Символи ()*+-/<=>зазвичай використовуються як математичні оператори і створюють двозначності розбору, якщо їх використовувати як термінатори операторів.

product = a * b *  // If '*' were a statement terminator,
c * d *            // Are there two factors, or four?

Подібні проблеми стосуються 'і ", які зазвичай використовуються як роздільники рядків; ,, який зазвичай використовується для розділення аргументів функції і ., який зазвичай використовується як десяткова крапка (або як роздільник у подібних конструкціях some_struct.some_field).

Це листя !%&:;?.

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

print(x)?  # Yes, you should.
           # It's an IMPERATIVE language; stop questioning my commands.
print(x)!  # OK!  You don't have to shout!

&Буде більш розумним вибором в якості роздільника операторів (НЕ термінатор), тому що

do_thing_a() &
do_thing_b()

можна прочитати як команду виконувати завдання A, а потім робити B. Але більшість мов з &оператором використовують її як логічну або побітну І замість цього.

%Знак може викликати плутанину в заявах , як interest_rate = 2.99%(що б встановити змінну 2.99замість очікуваного 0.0299). Звичайно, добре відомий математичний сенс %не зупиняв C використовувати його як оператор, що залишився.

Так що листя :і ;.

: є розумним вибором, і він дійсно використовується як внутрішньорядковий роздільник тверджень у більшості діалектів BASIC.

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


3

Замість того, щоб намагатися відповісти на ваше заголовкове запитання, я думаю, що краще зосередитись на вашому неявному питанні:

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

Якщо ви хочете дізнатися про історію розробки та впровадження мови програмування та отримати більш глибоке розуміння процесу, то розгляд конференцій з історії мов програмування - це дуже гарне місце для початку. (Я думаю, що вам потрібно буде членство в ОСБ, щоб мати доступ до судового розгляду.)

Чому заяви на багатьох мовах програмування закінчуються крапкою з комою? Чи є причина, що крапкою з двокрапкою було обрано замість іншого символу?

Вважаючи заголовок питання як приклад питання, на який ви можете спробувати відповісти, прочитавши доповідь про HOPL, я хотів би запропонувати наступний момент: люди, які розробляють нову мову програмування, зазвичай роблять це, оскільки вважають ті, які вони знають зламаний / дефіцитний якось. Їх нова мова, з одного боку, покликана виправити цей недолік. З іншого боку, мовні дизайнери також будуть копіювати елементи дизайну з інших мов, які вони вважають гарними, або вони просто не змінюють тих елементів, з якими у них не виникло проблем.

Тим більше, що остання частина важлива: замість того, щоб намагатися з’ясувати, яка мова програмування коли-небудь була першою, яка використовувала крапки з комою як термінатори, і чому багато інших мов програмування скопіювали це, ви, ймовірно, дізнаєтесь більше, переглянувши мови, які не копіювали це. Наприклад, в той час як Smalltalk займає багато натхнення від Симула, це було НЕскопіюйте його синтаксис і, зокрема, його використання крапками з комою як термінаторами тверджень. Він змінив термінатори (дійсно роздільники) на повну зупинку і використовує крапку з комою для чогось іншого. І навпаки, перша мова, яка коли-небудь використовувала крапку з комою як термінатор висловлювань, можливо, мала причину змінити це від того, що використовувалося в мовах, які були раніше. Можливо також, що це була перша мова, яка запровадила всю концепцію термінатора висловлювань (або робила це незалежно від інших мов), і крапка з комою була використана з якоїсь причини, яка зараз втрачається часом. (Я підозрюю, що саме так і тут, тому що жоден з інших відповідей не зміг розкопати цитату від людини, яка представила крапку з комою, а не запропонував доопрацювати припущення про те, чому крапка з комою була гарним вибором.) Але перезавантажити точка, Я думаю, ви дізнаєтесь більше, вивчивши, чому мовні дизайнери змінили речі, а не чому їх копіювали / зберігали. Коли люди змінюють речі, вони зазвичай хочуть або повинні пояснити зміну, але вони цього не роблять, коли копіюють або зберігають те саме, бо "чому ми б це змінили? це просто так! »


2

Це про видимість.

Ранні розділювачі заяв були "." як у COBOL і на новій лінії, повернення вагона у FORTRAN.

КР виявився обмежуючим тим, що утрудняє обробку заяви через кілька рядків.

Повна зупинка викликала цікавішу проблему. Коли ви читаєте англійський текст, ваш мозок обробляє повні зупинки на підсвідомому рівні, ви усвідомлюєте, що пропозиція закінчилася, і ви можете зробити паузу для дихання, але ви насправді цього не помічаєте. що сигналізувало про це. Також у багатьох шрифтах "." - це найменший можливий символ, який іноді відображається як один піксель. Відсутні або зайві періоди стали найпоширенішою причиною помилок у програмах COBOL.

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


1

Я розумів, що його було обрано тому, що була потреба в явному термінальному констататорі, відмінному від перевезення-повернення / нової лінії. Ще за часів екранів з 80 стовпцями фактично маючи єдиний рядок перенесення коду в декілька рядків було досить поширеним, що використання \ r або \ n для термінатора оператора не буде працювати.

Точки з комою були просто зручними, оскільки вони не використовуються в логічних / математичних висловлюваннях. Таким чином, вони суттєво не суперечать фактичному змісту заяв.


Особисто я вважаю, що продовження використання крапки з комою разом зі стильовими вимогами до утримання ліній нижче 80 символів є відверто дурним та анахронічним. Такі мови, як python, широко продемонстрували, що ви можете легко зрозуміти, стисліше коду легше без них. Крім того, якщо у вас є проблеми з лініями, що перевищують 80 символів, вам потрібен великий монітор.


3
Ще в темних віках не було «екранів у 80 стовпців». Були картки з перфорованими 80-ти колонками, а також були принтери з різною кількістю стовпців. (Близько 130 або близько цього було загальним явищем.) FORTRAN припинив виписки в кінці картки, але дозволив карткам продовження продовження заяви. Картки продовження були позначені символом, пробитим у колонці 6 картки. (Будь-який символ спрацює. Залежно від місцевої умовності ви зазвичай бачите або знак +, або одну цифру. Цифри підраховуються для декількох карт продовження.)
Джон Р. Стром

1
Мова на зразок Python була б нездійсненною для комп'ютерів, що існували в перші дні C. Використання символу завершення оператора робить аналіз більш простим, і це було дуже важливо зменшити навантаження компіляторів пам'яті та процесора десятиліть тому. Особливо на тих комп’ютерах, де ви заплатили за час процесора секунду.
Gigatron

@Gigatron - Я мав на увазі лише використання повернення перевезення для завершення оператора, а не жодного з аспектів python вищого рівня.
Підроблене ім’я

1
@Gigatron, ви можете поглянути на LISP, а особливо на його ранню історію на IBM 704. Ви можете здивуватися тому, що могли зробити древні, навіть працюючи з кам’яними ножами та ведмедиками.
Джон Р. Стром

1
@Gigatron: FORTRAN працював на одних і тих же комп'ютерах, і він використовує нові рядки для розділення операторів (зі спеціальним синтаксисом для багаторядкових операторів).
дан04

0

Ось два питання: Чому ALGOL отримав крапку з комою та чому інші мови пішли за ним.

На перше питання тут вже багато відповідей.

Як другий варіант, ALGOL дуже широко використовувався як псевдокодова мова для написання алгоритмів. Так, крапки з комою незабаром стали природними для користувачів різних мов. І природно їх брали за молодші мови.


0

Я можу помилятися, але я думаю, що це має щось спільне з тим, що в багатьох асемблерах крапка з комою використовується для початку коментаря, як правило, розміщується після інструкції. Все після a ;було коментарем, і вже не частиною самої інструкції.

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

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

Це, звичайно, передбачає, що справді крапка з комою була використана для коментарів людиною, яка придумала цю ідею повторного використання її як термінаторів інструкцій. Як би це був будь-який інший символ, ми могли б закінчитися іншим термінатором інструкцій.

Inb4: Ні, це не історичний виклад. Я не маю жодних доказів того, що це фактичний спосіб створення крапки з комою. Просто я думаю, що це могло статися.


-1

Більшість мов взяли напівкрапку, тому що вона вже широко використовувалась для цієї мети і зміна не мала сенсу.

І, розглядаючи перші мови, щоб зробити цей вибір, вам доведеться розглянути, які є альтернативи. Створюючи мову, ви хочете, щоб потрібні символи були доступні, а набори символів у цей час були закодовані на 6 біт, часто з деякими зарезервованими шаблонами, часто з деякими символами, не чітко визначеними (для подальшого виникнення цього, подумайте про національні варіанти ISO-646 - американський варіант добре відомий під назвою ASCII - які використовують повторно коди для "загальних" символів, таких як [, #або $, і бачать ефект у контексті, де є лише половина більшої кількості кодових позицій доступні, а літери та цифри зберігають більше половини цих).

Мабуть, не було іншого символу, який би міг інтуїтивно використовуватися як роздільник висловлювань ( .мабуть, це єдиний серйозний претендент на ці критерії) і не вводив труднощів із лексінгом або синтаксичним розбором у той час, коли теорія розбору та лексики ще розроблялася ( .зараз не викликає сумнівів через його використання в реальній кількості).


-1

Ще одна причина використання крапки з комою - це один із символів, якого ми не потребуємо і не використовуємо частіше.

Припустимо, ми використовуємо його частіше як ім'я змінної або якусь річ, і якщо крапка з комою використовувалася б як ключове слово або як оператор, це було б конфліктом символів для компілятора, тому важливо було використовувати символ, який не є часто використовується в кодуванні.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.