Не всі мови програмування однаково корисні



Кожна мова програмування хороший по-своєму. Проте з цим твердженням погодяться не всі. Після прочитання наступного матеріалу ряди незгодних можуть поповнитися. Більше того, є думка, що деякі «конструкції» взагалі не можна вважати мовами програмування.

На думку «Вікіпедії», мова програмування — формальна знакова система, призначена для запису комп'ютерних програм. Мова програмування визначає набір лексичних, синтаксичних і семантичних правил, що визначають зовнішній вигляд програми і дії, які виконає виконавець під її управлінням.

Якісь знакові системи простіше для освоєння, якісь складніше. Однак серед них є й досить химерні. А є настільки складні, що освоюють їх тільки самі хардкорні розробники.

brainfuck

Назва цієї мови програмування приблизно відповідає російському «винос мозку». Це мова реально існує. Він був придуманий Урбаном Мюллером в 1993 році. З одного боку, це зроблено потіхи заради. З іншого боку, brainfuck був створений, щоб потім розробити для нього компілятор розміром менше 200 байт — один з найменших компіляторів у світі.

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



Якщо ж у програмі з'являлися символи, які не є командою, вони сприймалися як коментарі. А горезвісний «Hello World!» на brainfuck виглядає так:

++++++++++[>+++++++>++++++++++>
+++>+<<<<-]>++.>+.+++++++..+++.
>++.<<+++++++++++++++.>.+++.--.
----.>+.>.


Щоб зрозуміти, наскільки brainfuck виправдовує свою назву, можна почати з аналізу наведеної вище програми.

Перший крок – підготовка в пам'яті (з комірки 1) масиву значень, близьких до ASCII-кодами символів, які необхідно вивести (70, 100, 30, 10). Для цього необхідно зробити 10-кратне повторення збільшення вмісту комірок на 7, 10, 3 і 1, відповідно.



Потім виконується висновок букв і символів.





Befunge

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

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

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



Для прикладу достатньо поглянути на код програми «Hello World»:

> v
 
@,,,,,,,,,,,,"Hello World!"<


Однак у програмі для генерації випадкових чисел розібратися набагато складніше:



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

Навмисно не придумаєш

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



Нещодавно в мережі з'явилися фотографії рукописних вихідного коду, які були написані на початку 1980-х. Їх опублікував сайт The Codeless Code. Розробник писав цей код для програми, яку потрібно було запустити на персональному комп'ютері Apple II, також відомому як Apple ][.

Недовірливі читачі можуть подумати, що це просто «божевілля». Однак у деяких ситуаціях реальні завдання, які доводилося вирішувати без використання асемблера, вирішувалися в той час саме так. Вихідний код писався на папері і потім, по мірі введення, переводився в шестнадцатиричную систему.
Тому якщо ви раптом підозрюєте себе в зайвій вимогливості до роботи якогось IDE, то як «щеплення» спробуйте вирішити наступну задачу, озброївшись олівцем і папером.
Завдання наведеного у прикладі коду — малювання тексту з великими та малими літерами на екрані високого дозволу. «Шрифти» створювалися програмістом на графічній папері і потім вручну переводилися в байти, які зберігалися в області даних.

Правда, запити до бібліотеки шрифтів створювалися не на папері, а на Applesoft BASIC (діалекті MS BASIC) за допомогою спеціальної послідовності символів у текстовому рядку. Наприклад:

100 PRINT "&F2&B&H3&W2Hello, world!"


Така команда дозволяла вибрати шрифт #2, жирний, з потрійний заввишки, подвійний шириною, і надрукувати «Hello, world!» в місці знаходження курсору. Схожі команди дозволяли змінювати колір тексту, і навіть призначати різні кольори сусідніх стовпчиків символів, таким чином створюючи ілюзію використання неіснуючих в Apple ][ кольорів — наприклад, бірюзового.













Для початківців

Якщо ж бути трохи скромніше, ніж «художник», згаданий вище, і не ловити зірок з неба, то машинний код для «Hello World» буде виглядати так:

BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21


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

CODE SEGMENT
ASSUME CS:CODE, DS:CODE
ORG 100h
START:
mov ah,9
mov dx,OFFSET Msg
int 21h
int 20h
Msg DB 'Hello World',13,10,'$'
CODE ENDS
END START


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

Щоб пам'ятали

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

1. ALGOL

Створений у 1958 році. Назва походить від скорочення словосполучення «алгоритмічна мова» — Algorithmic Language. Над ним працювала група європейських і американських комп'ютерних експертів. Роки його розквіту — 1958-1968.

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

BEGIN
 
FILE F (KIND=REMOTE);
 
EBCDIC ARRAY E [0:11];
 
REPLACE E BY "HELLO WORLD!";
 
WHILE TRUE DO
 
BEGIN
 
WRITE (F, *, E);
 
END;
 
END.
 


Лінгвістичний еквівалент: класичний давньогрецький.

2. COBOL

Створений у 1959 році. Назва є абревіатурою для Common Business Oriented Language. Над ним працювала велика група, в яку входила і піонер комп'ютерних наук Грейс Хоппер, відома в тому числі і як творець терміна «баг». Період розквіту COBOL — 60-80 роки. Тоді він використовувався для великих корпоративних систем (страховка, банки і т. д.).

Сьогодні його досі вчать в деяких школах. А в 2000 році фінансові установи повинні були викликати знавців COBOL з відпочинку на пенсії, щоб пофіксити «проблему 2000 року».

IDENTIFICATION DIVISION.
 
PROGRAM-ID. HELLO-WORLD.
 
* simple hello world program
 
PROCEDURE DIVISION.
 
DISPLAY 'Hello world!'.
 
STOP RUN.


Порівняємо з церковною латиною.

3. PL/I

Створений у 1964 («реліз» відбувся в 1969 році). Назва розшифровується як Programming Language One. Над ним працювала група експертів IBM. Пік слави — ранні 1970-е.

Використовували для мейнфреймів IBM System/360, які в свою чергу служили в дуже різних областях — від бухгалтерії до астрофізики. Був створений, щоб потіснити COBOL, FORTRAN та інші мови того часу. Набагато ширше використовувався в СРСР, ніж на Заході. Втратив популярність в 1970-х, оскільки був визнаний занадто ресурсномістким і складним. Але враховуючи домінування IBM в ті часи, досить багато всього, написаного на PL/I, існує до цих пір.

HELLO: PROCEDURE OPTIONS (MAIN);
 

 
/* A PROGRAM TO OUTPUT HELLO WORLD */
 
FLAG = 0;
 

 
LOOP: DO WHILE (FLAG = 0); 
 
PUT SKIP DATA('HELLO WORLD!');
 
END LOOP;
 

 
END HELLO;


Порівняємо з церковно-слов'янським.

4. PASCAL

Створений у 1968 році швейцарським ученим Никлаусом Віртом, названий на честь математика Блеза Паскаля. Роки розквіту — 1980-е. найпопулярніший спадкоємець ALGOL, використовувався в тому числі для програмування під ранні версії комп'ютерів Apple.

Популярна версія від 1983 року називалася Turbo Pascal. Зараз використовується для викладання, але набагато рідше, ніж 30 років тому.

program HelloWorld;
 
begin
 
WriteLn('Hello, World!');
 
end.


Лінгвістичний еквівалент: есперанто.

5. LISP

Створений у 1958 році Джоном Маккарті, назва — скорочення від List Processing. Розквіт його припав на 60-ті роки минулого століття. Найчастіше використовувався для розробки систем штучного інтелекту в системах ППО, причому в AI-розробках використовується і понині.

;;; This function simply returns the string Hello World that is in quotes.

(DEFUN HELLO ()
"HELLO WORLD"
) 


Можна порівняти із санскритом.

6. APL

Створений в 1962 році, названий скороченням від скромного «A Programming Language». Його творець — Кен Айверсон, якому за цю розробку дали премію Тюрінга. APL був дуже популярний в 60-х. Найчастіше використовувався в прикладній математиці. Відомий граничною простотою і ясністю синтаксису. Мінуси: вимагає наявності грецького алфавіту та інших спеціальних символів. Читається при цьому справа наліво (як іврит, наприклад).

Сьогодні нечасто, але все-таки використовується, в дуже вузькоспеціальних нішах — наприклад, розшифрування ДНК, і як не дивно, в теорії бухобліку.

@ This program is very simple in APL!
 

 
'Hello World!'
 

 
@ In APL, anything that is printed in quotes is printed to the terminal. (@ in APL signifies a comment)
 

 
@ If the "Hello World statement needed to be stored, then you could use the following :
 
h<-'Hello World'
 
h
 

 
@Typing h causes h's value to be printed to be printed.


Можна порівняти з мовою Навахо.

7. FORTRAN

Розроблений в рік польоту першого штучного супутника Землі, називається скороченням від Formula Translator. Його створив для IBM Джон Бэкус. Пік популярності — 60-70 роки.

Використовувався, так і продовжує використовуватися понині для наукових обчислень.

program hello
print *, "Hello World!"
end program hello


Можна порівняти його з англійською мовою версії Джейн Остін.

8. LOGO

Назва — від грецького «логос», тобто «слово» або «думка». Створений в 1967 році Сеймуром Пейпертом і групою під його керівництвом в лабораторії штучного інтелекту при MIT. Спочатку використовувався, щоб навчати програмування дітей, і до цих пір використовується в цих цілях. Одна з версій працює з платами Arduino.

HELLO TO
 
PRINT [Hello world]
 
END


Порівняємо з системою знаків в аеропортах.

9. ADA

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

with Text_To; use Text_To
 
procedure hello is
 
begin
 
put("Hello World");
 
end hello 


Порівняємо з американським англійським, з легким нальотом аппалачського.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.