Чому не існує універсальної мови програмування?

чому не існує універсальної мови програмування?

Дін Х'ю, колишній електротехнік

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

Комп’ютер в даному випадку - це чисте полотно пам’яті, який чекає нанесення фарб у вигляді скрипта, додатки або утиліта. Залежно від того, що ви хочете отримати в результаті, і від того, з чого починаєте, ви вибираєте мову програмування, кожен з яких має свою специфіку. Деякі мови прості і приємні у спілкуванні, як пила або розвідний ключ. До таких мов відносяться Basic і JavaScript. Для досягнення високої швидкості і точності програмування існують мови С і С ++. Це твердження може викликати масу суперечок, але висока швидкість і точність в цьому контексті пов’язані з операційними системами, алгоритмами і іншими критичними для швидкості завданнями програмування. Містер Тьюринг навчив нас тому, що і операційну систему можна написати на Perl або Javascript, але можна і з дуба наждачним папером стіл вишліфовать, якщо звичайно вистачить наждачного паперу, часу і терпіння. Про практичності мова не йде.

Можливо, краще порівняти мови програмування з інструментами для різання. Існує хлібний ніж, ніж для м’яса, складаний ножик і, нарешті, ніж для масла. Кожен з них має свої переваги в залежності від завдання. Це ж саме актуально і для мов програмування.

Ендрю МакГрегор, інженер

Мало хто мови можуть використовуватися практично для будь-якої мети, і всі вони розрізняються по складності. До них відносяться, C ++, Haskell, Rust, Algol, Lisp або Scheme, Forth, PL / 1 і Assembler.

Помітили у них щось спільне? У них всіх репутація важких у вивченні, важких у використанні або доступних лише присвяченим мов. Або все відразу.

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

Така кількість інших мов з’явилося через те, що з’являється потреба в написанні все більшої кількості програм і згодом це робити все складніше.

Причина, по якій C і C ++ настільки популярні, полягає в тому, що вони були існують довше, ніж Haskell і Rust.До того ж С і С ++ близькі до золотої середини між широтою застосування і додатковою складністю використання в порівнянні з іншими віковими мовами з мого списку. Ймовірно, вони навіть краще, ніж Haskell.

Rust ж занадто молодий для того, щоб повсюдним, але дайте йому 20 років.Можливо, ця мова близький до того, щоб стати універсальною мовою, але найпрактичнішим на сьогоднішній день є С ++.

чому не існує універсальної мови програмування?

Ельфеус Медсен, математик, хто вдає програмістом

Багато відповідали на це питання, приводячи в приклад мови, які підходять для будь-яких цілей; C, Assembly і Machine Language є наймасштабнішими прикладами.Звичайно, з точки зору Тьюринга ці мови є завершеними, але вони не настільки гарні для дослідницького програмування або прототипирования, так що вони не проходять перевірку на універсальність. Мені також подобається Python і Ruby, але в цих мовах «близькість до заліза» означає «перегляньте свою програму, знайдіть найактивніші її частини і перепишіть ці частини на С». Навряд чи ці мови є універсальними.

Універсальний мова повинна досягати як високого, так і низького рівня: він повинен максимально використовувати абстракції, але коли вам потрібна продуктивність, ви повинні бути в змозі досягти необхідної глибини в апаратному забезпеченні та маніпулювати бітами, якщо це необхідно. Такі мови існують, і я називаю їх «трансцендентними».

Деякі з цих мов, такі як Common Lisp, Scheme і Smalltalk починають як високорівневі, але при цьому мають механізми (починаючи від опционального введення і закінчуючи поданням для апаратних команд низького рівня з використанням вбудованого асемблера), що дозволяють з легкістю досягти низького рівня. Інші ж, наприклад, Forth, починають як низькорівневі, але можуть з легкістю переходити на високий рівень. Такі мови в прямому сенсі дозволяють створювати міні-мови, ідеально вписуються в оригінальний синтаксис вихідної мови, що помітно спрощує вирішення складних завдань.

Для створення операційних систем з нуля використовувалися деякі мови вищого рівня. C - всюдисущий мову, створений в той час, коли ресурсів було не так багато, але він зайняв золоту середину між простотою, низькорівневими і високорівневих і став дуже популярний, незважаючи на те, йому не вистачає гнучкості. Мені здалося цікавим, що лише кілька відомих мені мов свого часу використовувалися для написання операційних систем - Lisp, Forth і Smalltalk - вони також трансцендентні.

Отже, якщо ці мови здатні на все, чому їх не використовує все більше людей?На жаль, причина полягає в їх простоті.Для її досягнення нею доводиться жертвувати математичної пріоритетністю, що багатьох збиває з пантелику. Lisp використовує префіксних нотацію - (+ 1 2 3) і отримує 6. Forth використовує Постфіксний нотацію - «1 2 + 3 +». Отримує 6. А Smalltalk оцінює все зліва направо, тому з «1 + 2 * 3» отримує 9 (це результат того, як Smalltalk передає повідомлення об’єктам, цифри - це об’єкти, а операції - повідомлення).

І хоча як більшість спочатку знаходять це дивним, найсмішніше полягає в тому, що насправді все не так заплутано. Це всього лише справа звички. Порівняйте ці мови будь-якої мовної на основі Algol (C, Pascal, PHP, Python і т. Д.), Який в якому присутня ієрархія виконання математичних дій, яка, як це не парадоксально, має тонкі відмінності від однієї мови до іншої. Всі ці правила занадто численні і труднозапомінаеми.Легше просто укласти все в круглі дужки, щоб не довелося турбуватися про химерних правилах пріоритетності.

Вільям Шайн, кандидат наук з інформатики та математики, університет Х'юстона (1995)

Як і було відзначено іншими користувачами, С і сімейство С є універсальними мовами. До них відносяться C, C ++, Objective C, Objective C ++ і Swift. Можна було б додати сюди Rust. Сучасні компілятори С і С ++ дозволяють писати вбудовується асемблерний код. Не те, щоб це було чудовою ідеєю. І вони майже всі можуть взаємодіяти між собою. С ++ може використовувати бібліотеки С, Swift - бібліотеки С і Objective C.

Python, Ruby, і Java можуть використовувати бібліотеки C. В С вписані перетворювачі JavaScript. Так що взаємодія дійсно активну. Для досягнення сирої продуктивності підходять С і компанія. Якщо вам потрібно написати багато кодів швидко, першими на черзі стоять JavaScript, Python і Ruby. Якщо вам важлива швидкість, безпеку та автоматичне прибирання сміття, можливими варіантами будуть C #, Java і Swift. .Якби мені довелося вибирати одну мову програмування для всіх цілей, я б вибрав C ++.

Дякую за перегляд статті, сподіваюся вона буде Вам полезна.Еслі вона Вам сподобалася, поставте like іпідпишіться якщо Вам не складно. Так само розповідайте про цю статтю своїм друзям, через VK, Facebook, Twitter


ЩЕ ПОЧИТАТИ