чому б не поєднати найкращі риси всіх існуючих мов програмування та не вписати їх у універсальну мову програмування?
чому б не поєднати найкращі риси всіх існуючих мов програмування та не вписати їх у універсальну мову програмування?
Відповіді:
З тієї ж причини ви не використовуєте швейцарський армійський ніж для вирізання курки ...
Нож швейцарської армії, як правило, має лезо, а також різні інструменти, такі як викрутки та відкривачі для консервів та багато інших. Ці насадки зберігаються всередині рукоятки ножа через механізм повороту ...
Конструкція ножа та його гнучкість призвели до всесвітнього визнання ...
Оскільки
Те, що у вас є в програмуванні, є дуже великою проблемою. Цей домен варіюється надзвичайно в багатьох напрямках.
Ось чому вбудовані контролери польотів написані на C, а веб-сайти написані на PHP, Java, Rails, .NET та безлічі інших.
Для вбудованого контролера польоту у мене є близько 128 кб пам'яті, з якою я працюю, і, крім того, якщо мій код отримує необроблений виняток, літак розбивається, 200 людей гинуть, і я подаваю позов на суму 1B доларів, і мені потрібно надсилати інженерів до кожного аеропорт у світі, щоб виправити літаки, які обґрунтовано втрачають моїх клієнтів 10 млн доларів на день. Мені доводиться працювати з дуже щільною мовою і має невелику кількість рухомих частин, які можуть піти не так.
Для мого веб-додатку у мене є кілька ГБ оперативної пам’яті, але швидкість роботи мережі обмежена (меншою мірою щодня, але це, мабуть, найбільша межа в Інтернеті). Я буду дивитись на мову, яка надає мені тону функцій і дає результат, який можна передавати якомога швидше. Мені дуже не байдуже, якщо мій сайт знизиться, я, можливо, втрачу декілька продажів (100 доларів) і мені доведеться зафіксувати випадок використання, який бомбили, нічого великого.
Веб-сайти не написані на С протягом більше 15 років (хтось робить якісь cgi-скрипти?), І наскільки я знаю, диспетчери польотів тільки зараз починають дивитися на C ++, але навіть тоді дуже обмежено.
Якщо у вас немає набору інструментів або є лише один із цих маленьких молотків із шматочками викрутки в порожнистій ручці, то я дуже симпатизую вам.
Серйозно. Якщо ви їдете в автомагазин, чи має ваш механік лише один єдиний інструмент "все це" у своєму інструментообігу? Він (або вона) - професіонал з інструментами професійного класу, спеціально розробленими для виконання різних завдань з ремонту автомобілів.
Так само професійні розробники програмного забезпечення повинні мати достатній набір інструментів для здійснення своєї торгівлі. Якщо ви відкриєте панель інструментів і бачите лише [програмний еквівалент] викрутки Philips, ви не можете вважати себе професіоналом.
Ви можете повернути болт із відкритим гайковим ключем, коробчастим гайковим ключем, храповим ключем або регульованим гайковим ключем. Ви навіть можете повернути болт у щіпці за допомогою ковзаючих шпильок, незграбно, з незначними до серйозних пошкоджень. Але повернути болт за допомогою кувалди досить складно.
Відповідь на інші - я думаю, що є можливість, щоб мова стала "універсальною", що дозволяє ознаки та парадигми багатьох інших мов, хоча це не є строго розробленою мовою, про яку ви могли б думати.
Щоб використовувати аналогію brettmjohnson вище, ідея про те, що кожна мова програмування є інструментом всередині коробки (або на ножі швейцарської армії), є припущенням, яке всі роблять, але насправді є хибним припущенням.
Що робити, якщо мова програмування була інструментальною?
Я маю на увазі, що робити, якщо ви можете додавати та видаляти функції з мови, як завгодно, і мати власний набір інструментів із потрібними інструментами - навіть якщо інструменти призначені для різних цілей.
Концепція існує частково вже. Наприклад, такі мови, як Nemerle, дозволяють вам додати до мови синтаксис , і, таким чином, ви можете взяти "найкращу функцію з мови X" та додати її до Nemerle (або вашої власної). Це не обов'язково означає, що постійно писати власні макроси - кожну мову (або парадигму) можна визначити всередині макросу в стандартній бібліотеці - такою, яку ви могли б import Haskell; import Prolog;
, і почати писати дві мови так, ніби вони були частиною твоя мова?
Тоді питання - як змусити функції різних мов / парадигм працювати між собою? Хоча я не можу відповісти на це, такі рамки, як .Net та JVM, пропонують певне рішення - мови принаймні частково сумісні через спосіб їх складання. Ви можете взяти наприклад будь-який код, написаний на C #, і використовувати його з F # без нарікань.
Проблема з рішенням, як це є сьогодні, полягає в тому, що при використанні цих мов разом потрібно створити їх як окремі проекти, які не можуть посилатися один на одного - у вас може бути лише одностороння посилання. Мовний бар'єр полягає в тому, що кожен проект збирає всі файли окремо до загальної проміжної мови, перш ніж будь-який інший проект може отримати доступ до нього.
Кроком до усунення цього бар'єру було б дозволити код різних мов (наприклад, C # і F #) збирати всередині одного проекту. Теоретично ви могли скласти кожен файл окремо (або в групи - якщо вони мають часткові типи або кругові посилання), а потім компілювати файли іншої мови, які можуть отримати доступ до тих, що вже складені (CIL) об'єкти. Вам потрібно буде чітко визначити порядок компіляції, щоб це працювало - але порядок компіляції вже потрібен у випадку F #.
У всякому разі, я не кажу, що "напевно може бути універсальна мова". Я припускаю, що існує потенціал для набагато кращої взаємодії між мовами, ніж те, що існує зараз. Насправді це, швидше за все, не дуже швидко покращиться, лише через величезну кількість роботи над впровадженням мови та бібліотек, інструментів тощо, необхідних для її використання.
Найкращі риси деяких мов суперечать кращим рисам інших.
Наприклад: Роздуми, що знають про тип, - це дійсно приємна особливість, але це не варто дуже сильно набирати мову, але вільне введення тексту може бути справді корисною також.
Навіть в межах однієї мови ви не завжди можете використовувати всі найкращі функції одночасно, оскільки вони суперечать один одному.
"Джек всіх торгів - майстер нікому". випливає з розуму.
Деякі програми потребують швидкості, інші - великої кількості пам'яті або швидкого доступу до диска. Деякі мови хороші в одній, а погані в іншій - я не думаю, що ти б взагалі не отримав хорошої мови.
Тож, хоча ви можете написати практично будь-яку програму будь-якою мовою, те, що ви отримаєте, не гарантовано є найкращою програмою, яку ви могли написати для вирішення цієї проблеми.
Існує. Жоден інструмент не найкращий для всього, але деякі інструменти, як і багато мов програмування, служать для всіх цілей, а не найкращих для всіх.
Ви можете вибрати найкращий інструмент для роботи, але є мови програмування, які можна використовувати в усіх цілях, і ви можете їх вибрати. Я не рекомендую, але це можливо.
Через щось я називаю "парадокс узагальнення / спеціалізації", який, ймовірно, має іншу назву і насправді не є парадоксом
Чим узагальненіша мова програмування, тим більше коду потрібно, щоб щось досягти. Чим більш спеціалізована мова, тим менше ви можете її виконати.
Мови формують спосіб мислення людей. Це стосується природних мов. Якщо дитина знає лише одну мову з цифрами «один, два, багато», навчити цю дитину математиці - важко. (Вибачте, у мене немає посилання) англійською мовою ми говоримо про різні часи так, ніби вони були місцями - отже, концепцію подорожі у часі можна уявити. В деяких інших мовах ідеї подорожі у часі ніколи не виникнуть у її ораторів.
Це справедливо і для мов програмування.
Отже, якщо ми маємо єдину мову програмування, всі будуть думати про всі обчислювальні завдання точно однаково. Таким чином, ми не будемо вивчати альтернативи, і найкращий спосіб зробити щось залишиться нерозкритим.
Найближче, що ми маємо до універсальної мови, це C. C відображає дуже тісно до базових апаратних концепцій (як насправді все робиться в апараті), а програми на кожній * мові конвертовані в C. (Дивіться, як CFront використовував компілятори C для асемблера завдання) Проблема з C полягає в тому, що перераховані вище перетворення не мали б сенсу з точки зору програмістів на C.
"Лямбда" завжди були можливі в C. Синтаксис вимкнено, включаючи код, розповсюджений на весь проект / файл, отже, це не було кращим рішенням. З версією no-capture / upvalue / etc визначте функцію десь в іншому місці та передайте вказівник на функцію. (див. qsort () ) Щоб використовувати лямбда з захопленими значеннями, кількість і складність коду, який ви повинні написати, значно зростає - наскільки я знаю, ніхто ніколи насправді не написав код для використання цього методу програмування в C. На відміну від мов, де лямбда є частиною мови і в основному використовується скрізь.
Основна відмінність C і C ++ полягає в тому, як ви можете попросити C ++ піклуватися про речі для вас; але тоді ви не можете бачити лише з одного рядка коду, скільки ви насправді просите про це. Відповідь стає: це залежить (від усього цього іншого коду).
Деякі мови програмування чудово підходять для виконання конкретних завдань, але там, де більшість сучасних програм, що використовуються у всьому світі, просто не було б сенсу, якщо вони запрограмовані на цій мові. Тобто, якщо мова могла бути використана для реалізації цієї програми для початку, що не є даною.
Неможливість технічних достоїнств наявності Універсальної мови? Це тотальна нісенітниця. Ти міг бимати універсальну мову, яка охоплює всі основи. Проблема здебільшого історична: різні мови були винайдені для того, щоб робити різні речі та використовувалися в різних громадах. Багато з них застрягли. Додайте до цього уподобання (vi! Emacs! Почекайте, я мав на увазі Java! C #, чекайте, я маю на увазі Microsoft, Open Source тощо. Тощо) та загальне втілення історичних аварій ... Подивіться на природні мови у крихітній землі як деякі європейські країни, щоб побачити, наскільки шаленою може стати ця тема. У деяких містах є своя гордість і радість, трохи діалекту, який говорять тільки вони. Нації та спільноти програмування не настільки різні, як і спільноти програмування, не більш раціональні. Якби вони були, ми б усі говорили на есперанто і програмували в Universal Somethin 'Somethin' ...
Помилково думати, що "поєднання всіх функцій" зробить кращу мову.
Ви, швидше за все, закінчитесь роздутим, складним, нечитабельним безладом.
Хороший мовний дизайн вимагає вибору та компромісів. Можливо, найкращі / найреволюційніші / найуспішніші мови - це ті, які щось витягують та надають кращу альтернативу, а не додають нові речі.
Про це чудово розмовляє дядько Боб Мартін - Остання мова програмування
goto
. Але мені подобається решта відповіді. Головне, що C робить, - це не турбуватися про те, де саме в пам'яті все є і що знаходиться в якому реєстрі в який час, і він приховує лічильник програм (з точки зору точної адреси, на якій він сидить, знову. Ви можете перемістити його майже на рівні складання точності з гото).
Не існує жодного інструменту, який має всі найкращі функції. Наприклад, приємними можливостями Javascript і Scheme є те, що вони невеликі, тому якщо ви почнете пакувати функції, ви вже втратили цей.
Все-таки Кобра виглядає багатообіцяючо в напрямку отримання всіх приємних рис з інших мов. :-)
Тому що якщо ви створите таку мову, це буде ще одна нова мова. Ви можете отримати велику фан-базу, але всі інші мови все ще існуватимуть.
C досі існує, хоча з тих пір було винайдено багато нових мов.
Можна сказати, що пітон - така універсальна мова, але тоді є і рубін.
Причина, що багато мов, полягає просто в тому, що є багато програмістів, і деякі з них люблять створювати нові мови.
Причина відсутності єдиної універсальної мови, з якою всі згодні, полягає в тому, що програмування як ремесло не диктується якоюсь установою, яка приймає всі рішення. Кожен вільний робити те, що хоче.
Це гарна річ.
З усього, що написано до цього часу, важко додати багато нового обгрунтування, але я закину кілька.
Еволюція: це не просто біологічні системи, які впроваджуються, мутують та проходять конкуренцію за виживання найпридатніших за ресурси та нішу, щоб назвати свої власні. Конкуренція хороша і штовхає справи вперед.
Зрілість: комп'ютерні мови ми робимо, мабуть, не менше століття. У нас поки немає відповіді, тому що ми ще навіть не знаємо всіх питань.
Окремий генезис: Не впевнений, що для цього потрібне слово, але у світі їх багато систем письма, які почалися в багатьох географічних регіонах. Подумайте про клинопис, який був продиктований частково вимогами різьблення в глиняні таблички. Подумайте про санскрит, грецьку, іврит, римську, арабську абетки. Ієрогліфи, китайський метод красивого письма з 6000+ символами, який ділиться у багатьох країнах Східної Азії. Подумайте про більш сучасні змішані алфавіти з фонетичною основою, такі як кирилиця, катакана та хірігана. Я не мовознавець, тому не горіть надто жорстоко, але коли культурам у всьому світі щось потрібно, вони створюватимуть це і роблять його власним із необхідності. Комп'ютерні мови з'явилися, коли було багато спілкування у всьому світі і, як Імперська та Метрична системи, прийшов з місць з потужним лідерством ідеї. Але мови програмування обслуговують багато різних культур (деякі з них корпоративні культури), тому вони відображають людей, які їх створили. Комп'ютерні мови мають культурні спадщини, які формували їх дизайн та використання. У культурі ядра ОС C та C ++ навряд чи будуть застаріли для Java (або навпаки), оскільки вони дозволяють створювати нативний код, тісне / ефективне з'єднання з обладнанням для створення апаратних шарів абстракції та мають встановлену значну базу.
Дизайн дизайну: мови програмування створюються з використанням різних організаційних парадигм. COBOL і Ada були від комітетів, що входили до складу DOD, які мали багато ієрархії. Якщо я правильно пригадую, C, C ++, Java та, мабуть, багато інших прийшли від однієї чи невеликої кількості дизайнерів. Фред Брукс порівнює результати роботи комітету та підходи, що базуються на візіонерах у своїй роботі «Дизайн дизайну» (http://www.youtube.com/watch?v=pC-DlX-PaF4). Якби ми сьогодні сіли або вибирали Da Vinci, або комітет із визначення універсальної мови програмування, ми б знали, хто чи що, за яким методом він повинен бути побудований?
Можливо, трохи інший нахил у всьому цьому:
Що таке мова? Щоб бути смішно простим, це словниковий запас, синтаксис та семантика.
Що перше, що ви робите з мовою програмування?
Ви визначаєте речі - класи, змінні, методи - ви розширюєте словниковий запас і семантику.
Чому? Тож тепер ви можете сказати речі, які ви раніше не могли сказати.
Вам подобається чи ні, ви створили нову мову спеціального призначення.
ІМХО, потрібно шукати мову загального призначення, якщо це спрощує створення мов спеціального призначення.
Крім аргументу швейцарської армії-ножа (який має сенс - складніше розробити гарну мову широкого спектра, ніж специфіку для домену, - але це не означає, що така мова не була б обома можлива і гарна ідея), є проблеми з "поєднанням найкращих функцій":
Коротше кажучи, мовна конструкція складніше і складніша за це. Хоча, можливо, ви захочете поглянути на Скалу .
Visual Batch - це спроба настроюваної мови програмування. Посилання нижче показано, як цей інтерфейс програмування можна адаптувати відповідно до потреб універсальної мови програмування.
http://sourceforge.net/apps/phpbb/visualbatch/viewtopic.php?f=4&t=4
Існує універсальна мова програмування. Це називається "машинна мова", і все в будь-якій іншій мові комп'ютера в кінцевому підсумку виконується як машинна мова.
На що це схоже? Рядок 0-9 та AF.
Але це сука використовувати. Тож Алан придумує мову, яку можна перекласти машинною мовою і більше відповідає тому, що хоче зробити Алан. Білл вигадує іншу мову для того, що хоче зробити Білл. Невдовзі ви отримали Cobol і Fortran, Lisp і Java. Усі вони - це просто спрощені версії машинної мови, простіше писати певні програми, але складніше або неможливо писати інші типи програм. Один хороший для обліку, інший - для управління космічним човником.
Більшість відповідей тут зосереджені на використанні найкращого інструменту для кожної проблеми. Я не вірю, що це досить вагома причина.
Якщо ви дивитесь на великі компанії, то зазвичай компанія, як правило, використовує одну (або невелику кількість) мов і технологій, навіть якщо для конкретного проекту є якась краща мова.
Це робиться тому, що переваги, що виникають від покращеної стандартизації, спрощеної підтримки, спільного використання коду тощо (у більшості разів) більше, ніж додана вартість певної мови.
Я думаю, що у всіх відповідях "тому, що ти не вирізуєш олівці статуй" немає думки.
Хто тут, ПРОСТО вибирає мову перед кожним новим проектом?
Правда, нам потрібні всього лише кілька мов програмування, і світ програмування буде краще таким чином: люди будуть зосереджені на створення на мові сценаріїв краще замість того , щоб бути розкидані по пітон / рубін / Perl / younameit, наприклад.
C # запрограмований на / для Windows (добре, є Mono, хтось тут щодня запускає C # під програмою Mono?), І це змушує користувачів купувати Windows7 / 8, і це заробляє гроші для Microsoft.
Інші компанії роблять те саме, тоді відкритий код знає краще, тоді ще й геній геній ... і у нас багато мов схожих на вигляд, це просто егоцентрична природа людства.
Щоб відповісти на це питання, ми маємо звернутися до економіки. Якби це заощадило гроші бізнесу, щоб мати лише одну мову, ми б її мали. Вони стандартизували б його і вимагали від усіх його використовувати. Інші мови пропадуть у запилених академічних будівлях та підвалах любителів диких очей. Цього не сталося, тож їх не повинно бути стимулом для отримання прибутку в універсальній мові програмування, або воно б, природно, вже розвинулося.