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

  1. Дін Х'ю, колишній електротехнік
  2. Ендрю МакГрегор, інженер
  3. Ельфеус Медсен, математик, хто вдає програмістом
  4. Вільям Шайн, кандидат наук з інформатики та математики, університет Х'юстона (1995)

Чому не існує універсальної мови програмування? На це питання відповіли користувачі сайту Quora .

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

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

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

Комп'ютер в даному випадку - це чисте полотно пам'яті, який чекає нанесення фарб у вигляді скрипта, додатки або утиліта. Залежно від того, що ви хочете отримати в результаті, і від того, з чого починаєте, ви вибираєте мову програмування, кожен з яких має свою специфіку. Деякі мови прості і приємні у спілкуванні, як пила або розвідний ключ. До таких мов відносяться 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 ++.

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

Дополнительная информация

rss
Карта