Чому 80 символів є "стандартним" обмеженням для ширини коду?


572

Чому 80 символів є "стандартним" обмеженням для ширини коду? Чому 80, а не 79, 81 чи 100? Яке походження саме цього значення?



14
Арг! Ви не могли зачекати тиждень, перш ніж запитати? Це могло бути питанням, яке виграло конкурс .
янніс

12
Перш ніж хтось подумає додати ще одну відповідь на це питання, будь ласка, прочитайте прийняту відповідь та відповідь Марка Бута . Вони відповідають на питання всебічно. Перфоратор прийшов першим.
ChrisF

4
Чому цей шматок незначних дрібниць набрав 139 підсумків, - це не в мене. У той же час, майже кожне друге запитання (добре чи погано) на першій сторінці є шлях менше голосів. Наші критерії колективного голосування настільки порушені? :( (@fredley Це не критика щодо вас, а до нашої громади)
Андрес Ф.

6
@AndresF. Причина, яку ця публікація зробила добре, - це те, що багато людей зацікавить, за хорошим заголовком. Він провів день на вершині суперколадера, і встиг до Hacker News тощо. Це може бути незначним дрібницею, але це добре вміст!
Фредлі

Відповіді:


734

Ви можете подякувати перфокартці IBM за цей ліміт - на ньому було 80 стовпців:

Перфокарт IBM


64
Після цього ранні телетайпи та пізніші відеотермінали використовували 80 стовпців (а потім 132 колонки) як стандартну ширину.
LapTop006

262
Тепер питання: Чому перфокарт IBM мав 80 стовпців?
Фактор Містик

139
@FactorMystic - розмір картки перфорації був заснований на розмірі валюти ще в кінці 1880-х років, коли Холлеріт сконструював їх для допомоги у переписі 1890-х .

56
Картки мають такий розмір, тому що в 1890 р. CTR хотів повторно використати валютні носії (долар тоді був більшим) для перевезення карток даних перепису.
Al Biglan

89
@AlBiglan Чому саме цей розмір був валютою?
Фредлі

249

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

На сторінці вікіпедії на перфокарті :

Культурний вплив

  • Наслідком формату картки з перфорованою 80 стовпцями є те, що відображення 80 символів на рядок було поширеним вибором у дизайні терміналів на основі символів. З листопада 2011 року деякі параметри за замовчуванням символьного інтерфейсу, такі як ширина вікна командного рядка в Microsoft Windows, залишаються встановленими в 80 стовпцях, а деякі формати файлів, такі як FITS, досі використовують зображення 80 символів карт.

Тепер питання полягає в тому, чому IBM обрала 80 карт стовпців у 1928 році, коли Герман Холлеріт раніше використовував картки з 24 та 45 стовпцями ?

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

Більшість історичних друкарських машинок, яких я бачив, мали ширину валика близько 9 дюймів, що відповідає стандартизації розмірів паперу до ширини приблизно 8 "-8,5" (див. Чому стандартний розмір паперу в США 8 ½ "x 11 "? та історія паперового стандарту серії ISO216 ).

Додайте типовий крок на друкарській машинці 10-12 символів на дюйм, і це призведе до документів із шириною від 72 до 90 символів, залежно від розміру поля.

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


До речі, не скрізь у своїх стандартах кодування вказується ширина рядка 80 символів. Там, де я працюю, встановлено обмеження 132 символів, що відповідає ширині типових широкоформатних принтерів у минулому, 12-кратній альбомній роздруківці А4 та типовій ширині ліній, що залишаються у вікні редактора Eclipse (максимізованому на екрані 1920x1200) після Package Explorer та Оглядові контури враховуються.

Незважаючи на це, я все ще віддаю перевагу коду на 80 символів, оскільки це полегшує порівняння трьох версій файлу поруч, не прокручуючи збоку (завжди погано) або загортаючи рядки (що руйнує форматування коду). З кодом на 80 символів вам знадобиться лише екран на 240 символів (1920 пікселів при 8 пікселях на символ), щоб зручно побачити повне тристоронне злиття (загальний пращур, місцева гілка та віддалене відділення) на одному екрані.


2
Щоб не розпочати черговий спекуляційний фест, але картки Холлеріта мали кругові отвори, а не прямокутники IBM 5081 та ін. А пізніше набіг IBM на карти, формат System / 3, мав 96 кругових отворів у 3 горизонтальних смугах стовпців.
Росс Паттерсон

9
Хороша причина намагатися продовжувати використовувати 80 символів навіть на великих екранах - це те, що багато програмістів вважають за краще використовувати менші термінальні (або навіть IDE) вікна, а не постійно тримати їх у повноекранному режимі.
rkulla

4
@rkulla Скільки десятиліть ми повинні продовжувати накладати обмеження на 80 символів? Звичайно, для деяких мов, таких як C з короткими ідентифікаторами, це добре, але для інших, як C # з довгими ідентифікаторами, це може бути болем. На щастя, ми накладаємо обмеження 132 знаків, де я зараз, але я дуже дратувався 80, особливо в Python
Basic

5
@Basic є аргумент, що якщо ви не можете працювати в межах 80 символьних ліній, то або ваші ідентифікатори надмірно багатослівні, або ви намагаєтеся зробити занадто багато в одному рядку. Більшості людей зручніше більш вузькі стовпці з більшою кількістю рядків, ніж дуже довгі рядки, оскільки наші очі та мізки роками тренуються через книги, газети та веб-сторінки з обмеженням ширини стовпців (як ця), що означає, що нам важко сканувати і осмислювати дуже довгі рядки.
Марк Бут

5
@MarkBooth Я не буду перетягувати його занадто сильно, оскільки це трохи релігійна проблема, але ця, яка потрапляє на прапор PEP8 за занадто довгий час, є ... `(8 пробілів) повертає HttpResponse (JsonLib (). Encode (Ret) , content_type = "application / json") `і так, це може бути розбито на кілька ліній, але воно розкидане по різних контролерам і, здається, не варто розбиватися, за винятком того, щоб відповідати 80-char" стандарту ".
Основні

59

Я б сказав, що це також тому, що старі термінали мали (в основному) розміри 80x24 символів: Ще в часи терміналів 80x24 ...

Редагувати:

Щоб відповісти точніше та ретельніше на запитання, 80 символів - це поточне "загальновизнане" обмеження ширини коду всередині редакторів, оскільки формати 80x24 та 80x25 були найпоширенішими режимами екрану на ранніх терміналах вводу / виводу та персональних комп'ютерах ( VT52 - дякую до Sandman4).

Цей ліміт є дійсним і важливим для IMHO з двох основних причин: геометрія за замовчуванням, яку багато дистрибутивів Linux присвоюють нещодавно породженим вікнам терміналів, все ще становить 80x24, і багато людей використовують їх як є , не змінюючи розмір. Більше того, програмісти ядра, в режимі реального часу та вбудовані програми часто працюють у "безголовому" середовищі без будь-якого менеджера вікон. Знову ж таки, роздільна здатність екрана за замовчуванням часто становить 80x24 (або 80x25), і в цих ситуаціях навіть це може бути важко змінити цей параметр за замовчуванням.

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


8
Але старі термінали шириною на 80 символів через programmers.stackexchange.com/a/148678/4767
Одід

9
-1 за те, що не читав попередньої відповіді, і за непотрібне посилання, яке говорить просто "Ще за часів 80x24 терміналів, один з оригінальних авторів популярної гри Unix часто отримував похвалу за те, наскільки добре коментується його код. Він сказав, що йому доведеться робіть це тому, що він завжди курив горщик, коли кодував, і втратив би свій порядок думки, коли екран прокручується ".
Гнат

7
Вибачте за привітання Авіо, ви щойно потрапили на пошту, яка стала надзвичайно популярною! Ми робимо речі дещо інакше, ніж у решті Інтернету. Ми ненавидимо дублювання, серед іншого. Почніть читати фак, щоб розпочати, сподіваємось побачитись ще раз!
Фредлі

6
+1, щоб обгрунтувати скорочення. Ще один +1 (якщо я міг), оскільки обмеження 80 символів для коду є через 80-стовпчастий термінал, а це, в свою чергу, може бути або не бути пов’язаним з перфокартами.
Sandman4

4
+1, щоб протидіяти знижці @ RossPatterson В жодних посиланнях на вікіпедії немає цитат, які б приписали 80CPR на пунктирних картах; це може бути цілком випадково, і загальноприйнята "правда", яка насправді не відповідає дійсності. Покажіть мені інтерв'ю з одним з оригінальних інженерів, який описував VT52, де він каже, що вони дотримувались стандарту перфокарти IBM.
Джеремі Головач

52

Хоча, мабуть, не первісна причина обмеження 80 символів, причиною того, що його широко прийняли, є просто читання ергономіки :

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

Це широко відомо і прийнято в типографії. Стандартна рекомендація (для тексту в книгах тощо) полягає в тому, щоб використовувати щось у районі 40-90 символів на рядок , а в ідеалі близько 60 (див., Наприклад, Вікіпедія , Маркус Ітконен: Типографія та читабельність ).

Якщо ви орієнтуєтесь на 60 символів на рядок, верхня межа, очевидно, повинна бути трохи вище, щоб вмістити час від часу довгий вираз (і такі речі, як маркер поля та номери рядків), тому мати верхню межу 70-80 має сенс.

Це, мабуть, пояснює, чому обмеження 80 символів перейняли багато інших систем.


1
Мені подобається ця відповідь, оскільки вона виходить за рамки конкретних технологій і уникає гоніння за «справжнім» оригінальним техніком.
kakyo

26

Питання пов'язане з тим, "чому зберігається 80 стовпців". Навіть відповіді на цій сторінці приблизно такої ширини. Я погоджуюся з історичними причинами 80 колонок, але питання полягає в тому, чому стандарт зберігається. Я б стверджував, що читабельність - для прози та коду. Наш розум може поглинути стільки інформації лише однією частиною. Я все ще використовую маркер стовпців 80 у своєму редакторі коду, щоб нагадати мені, коли вислів стає занадто довгим і незрозумілим. Це також залишає мені безліч екрану нерухомості для браузера та підтримуючих вікон IDE. Хай живе 80 стовпчик - як керівництво не правило.


4
Я бачив 80-символьну (приблизно) максимальну ширину, про яку йдеться в типографічних дискусіях - мабуть, це дійсно допомагає читати, монопростір чи ні.
nkorth

12

Ще одна поширена межа довжини рядка в дні фіксованих шрифтів з фіксованою висотою - 72 символи. Приклади: код Fortran, пошта, новини.

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

Ще одна причина обмеження 72 символів полягала в тому, що загальні шрифти були високими в 10 балів і шириною 6 балів (1/12 "). Сторінка формату А4 або 8,5" може містити 72 символи в колоні шириною 6 "і все ще мати місце для поля понад дюйм.


7

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

Також є спадщина перфокартів, але я не думаю, що лазерні принтери або 8,5х11-дюймовий папір встановлені таким чином, щоб вони відповідали обмеженням перфокарт.


Як я пропоную у своїй відповіді @CMike, я думаю, що можливо, що ширина картки перфоратора пов'язана з розміром табличок друкарських машинок і, отже, розмірами паперу (або навпаки).
Марк Бут

4

Прокрутка в документах для принтерів була розміром літер або шириною 15 ".

Це були лінійні принтери на 80 cps для копіювання кодів або звітів, а пізніше Epson підтримує конденсований друк 132 cps (вихідний код \ 015 для конденсованого друку).


Особливо, коли на цій сторінці написано (кілька разів!)!
Фредлі

12
@Ross: Ви не повинні когось порушувати за те, що щось не знаєте на сайті Q&A !
абатищев

6
@abatishchev - але відповідь, про яку йдеться, знаходиться на цій сторінці .
ChrisF

10
@abatishchev Власне, саме така ідея сайтів StackExchange. "Хороші" відповіді мають бути схвалені, а "погані" відповіді - щоб забезпечити майбутнім читачам, які, можливо, не зможуть судити про себе, можуть знати думку громади щодо відповідей.
Росс Паттерсон

2
@abatishchev Справа не в тому, що ти не подобаєшся відповідей, а не у відповіді, які не корисні . Дивіться текст миші на кнопках для голосування.
Марк Бут

0

Однією з причин карт 80 карт можуть бути пов’язані з «ручним ударом», який, ймовірно, використовувався до машин для пробивання електронних карт. Це той, який я використовував на початку 70-х років на основному комп'ютерному веб-сайті системи ICL 4-50. Треба було пробити секцію з трьох? одночасно пробивати ножі в вагоні.

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