B (мова програмування)

В (Бі) (друга буква лат. aлфавіту — B) — інтерпретована мова програмування, розроблена в AT&T Bell Telephone Laboratories. Вона є нащадком мови BCPL та попередником C (Сі). Мова B була розроблена Кеном Томпсоном та Деннісом Рітчі і вперше презентована в 1969 році.

B (Бі)
Парадигма процедурна
Дата появи 1969
Творці Кен Томпсон, Денніс Рітчі: Bell Labs
Розробник Лабораторії Белла і Кен Томпсон
Діалекти внутрішній стандарт
Під впливом від BCPL, PL/I, TMG
Вплинула на Сі

На неї сильно вплинула BCPL, і назва цієї мови, ймовірно, є скороченням від BCPL. Також, можливо, що назва походить від мови Bon, більш ранньої, але не зв'язаної з Бі мови, яку Томпсон розробив для використання в Multics. У свою чергу назва Bon, походить або від імені дружини Томпсона Bonnie, або від назви старотібетської релігії Бон.

Історія

Кен Томпсон розробив Бі ґрунтуючись головним чином на мові BCPL, яку Томпсон використовував у проекті Multics. По суті, Бі була версією BCPL, позбавленою деяких компонентів, без яких, як вважав Томпсон, можна не виходити за об'єм пам'яті, встановлений на мінікомп'ютерах того часу. Перехід від BCPL до Бі також містив зміни у напрямку зменшення кількості непробільних символів в типовій програмі. Велика частина типового ALGOL-подібного синтаксису BCPL була вагомо змінена протягом цього процесу. Наприклад, оператор := був замінений на = , = для порівняння тексту був замінений на ==. Пізніше оператори & та | в BCPL було змінено на && та || відповідно, при переході до мови програмування, яка зараз відома як Сі.[джерело?]

Томпсон запозичив арифметичні оператори присвоювання для Бі, використовуючи синтаксис x =+ y (додати «y» до змінної «x») із мови програмування TMG. Додатково Томпсон винайшов оператори інкременту та декременту (++ та --). Їх префіксне або постфіксне положення визначає, чи приймаються значення до або після зміни операнда. Ці нововведення були запроваджені не в перших версіях Бі.[джерело?] Дехто вважає, що вони були створені для автоінкрементних та автодекрементних типів адресування у машинному коді PDP-11, хоча це історично неможливо, оскільки PDP-11 в час створення Бі ще не було.

В Бі не існує типів даних, або, точніше, він лише один: комп'ютерне слово. Більшість операторів (наприклад, +, -, *, /) обробляли його як ціле число, а інші як посилання для розіменування посилання. У багатьох інших напрямках вона виглядала, як рання версія Сі. Існує кілька бібліотечних функцій, в тому числі ті, які віддалено нагадують функції з бібліотеки вводу-виводу в Сі.

Початково Бі було розроблено для мінікомп'ютерів DEC PDP-7 та PDP-11, на яких працювали ранні версії Unix. Кен Томпсон написав перший компілятор за допомогою мови програмвання TMG. Оскільки компілятор Бі використовував техніку нитевого коду (аналогічну сучасному байткоду), програми на Бі працювали повільно.[1][2][3] Згодом покращенням швидкості Бі зайнявся Річі.[4]

Безтиповий характер Бі був природним на PDP-7 і багатьох інших старих комп'ютерах, які не могли адресувати окремий байт, але на PDP-11 з'являлися проблеми, оскільки було важко отримати доступ до символьних типів даних, які PDP-11 повністю підтримував. Починаючи з 1971 Річі вніс зміни в мову при роботі компілятора та при переведенні у машинний код, в першу чергу, додавши типи даних для змінних. Протягом 1971 і 1972 Бі перетворилася на «New-B» (NB) («Нова-В»), а потім Сі.

Бі продовжують використовувати (станом на 2014) на GCOS мейнфреймах[5] і на деяких вбудованих системах, зважаючи на ряд причин, у тому числі через обмежену апаратну частину в невеликих системах; великі бібліотеки, інструменти, питання вартості ліцензій; та просто через достатньо хорошу роботу.[6] Вельми впливова AberMUD була спочатку написана на Бі.

Зараз Бі майже зникла через витіснення її наступником — мовою Сі.

Приклади

// даний приклад рахує суму трьох послідовних цілих чисел
main()  {
   auto a, b, c, sum;
   a = 1; b = 2; c = 3;
   sum = a+b+c;
   putnumb(sum);
   }

Наступний приклад взятий з Users' Reference to B Кена Томпсона:[7]

/* наступна функція буде друкувати невід'ємне число n, з 
 основою b, де 2<=b<=10. Ця процедура використовує той факт, що
 в наборі символів ASCII, цифри від 0 до 9 мають послідовні
 значення кодів.  */

printn(n, b) {
 EXTRN putchar;
 auto a;

 if (a = n/b){        /* призначення, а не тест на рівність */
   printn(a, b);     /* рекурсія */
   putchar(n % b + '0');
}

Примітки

  1. TMG. multicians.org.
  2. Ritchie, Dennis M.. The Development of the C Language. Bell Labs/Lucent Technologies.
  3. McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986. CSTR (139). Bell Labs.
  4. Ritchie, Dennis M. (March 1993). The Development of the C Language. ACM SIGPLAN Notices 28 (3): 201–208. doi:10.1145/155360.155580.
  5. Thinkage UW Tools Package. Thinkage, Ltd. Процитовано 26 березня 2014.
  6. Johnson and Kernighan. THE PROGRAMMING LANGUAGE B. Bell Laboratories. Архів оригіналу за 8 серпень 2007. Процитовано 21 березня 2014.
  7. Thompson, Ken (7 січня 1972). Users' Reference to B. Bell Laboratories. Архів оригіналу за 6 липень 2006. Процитовано 21 березня 2014.

Посилання


Див. також

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.