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

B (Бі)
Парадигма процедурна
Дата появи 1969
Творці Кен Томпсон, Денніс Рітчі: Bell Labs
Розробник Bell Laboratories і Кен Томпсон
Діалекти внутрішній стандарт
Під впливом від 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 в час створення Бі ще не було.

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

Початково Бі було розроблено для мінікомп'ютерів 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[en] мейнфреймах[5] і на деяких вбудованих системах, зважаючи на ряд причин, у тому числі через обмежену апаратну частину в невеликих системах; великі бібліотеки, інструменти, питання вартості ліцензій; та просто через достатньо хорошу роботу.[6] Вельми впливова AberMUD[en] була спочатку написана на Бі.

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

Приклади ред.

// даний приклад рахує суму трьох послідовних цілих чисел
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. Архів оригіналу за 3 квітня 2017. Процитовано 29 березня 2015.
  2. Ritchie, Dennis M. The Development of the C Language. Bell Labs/Lucent Technologies. Архів оригіналу за 22 червня 2013. Процитовано 29 березня 2015.
  3. McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF). CSTR (139). Bell Labs. Архів оригіналу (PDF) за 11 листопада 2017. Процитовано 29 березня 2015.
  4. Ritchie, Dennis M. (March 1993). The Development of the C Language. ACM SIGPLAN Notices. 28 (3): 201—208. doi:10.1145/155360.155580. Архів оригіналу за 22 червня 2013. Процитовано 29 березня 2015.
  5. Thinkage UW Tools Package. Thinkage, Ltd. Архів оригіналу за 27 березня 2014. Процитовано 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.

Посилання ред.


Див. також ред.