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

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
B (Бі)
процедурна мова програмування[d]
Парадигма: процедурна
Дата появи: 1969
Творці: Кен Томпсон, Денніс Рітчі: Bell Labs
Діалекти: внутрішній стандарт
Під впливом від: BCPL
Вплинула на: C (сі)
формат файлу, Just Solve the File Format Problem B

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

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

Історія[ред.ред. код]

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

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

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

Ранні реалізації були розроблені для DEC PDP-7[ru] та мінікомп'ютерів PDP-11, використовувавших початкові версії Unix і Honeywell. Перші версії PDP-7[ru] компілювали все через багатопотоковий код[en], і Річі написав компілятор за допомогою TMG[en], який виробляв машинний код.[1][2][3] Рання версія Yacc була виготовлена з цією конфігурацією PDP-7[ru]. Річі взяв на себе обслуговування протягом цього періоду.[4]

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

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

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

Приклади[ред.ред. код]

// даний приклад рахує суму трьох послідовних цілих чисел
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 March 2014. 
  6. Johnson and Kernighan. THE PROGRAMMING LANGUAGE B. Bell Laboratories. Процитовано 21 March 2014. 
  7. Thompson, Ken (7 January 1972). Users' Reference to B. Bell Laboratories. Процитовано 21 March 2014. 

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


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