Чому так багато мов програмування? Чому нові мови все ще створюються? [зачинено]


51

Чому так багато мов програмування?

І що спонукає когось створити мови програмування, незважаючи на те, що інші мови вже існують?


розважальне відео на цю тему - "Остання мова програмування" від дядька Боб Мартіна ( skillsmatter.com/podcast/agile-testing/bobs-last-language )
mikera

Тому що програмістам подобаються інструменти.
хайлем


2
Не пов’язано між собою: xkcd.com/927
Гонки легкості з Монікою

Це важко виправдати, я думаю, кожна мова має історію. Більшість мов не дуже сприйняли виробника, наскільки мені відомо. Більшість мов обертаються одними і тими ж поняттями і рідко вирішують реальні проблеми або забезпечують сприятливе середовище. Я думаю, що до моменту їх створення вони відчувають дошку та втомилися від усієї справи і, можливо, бачать, як вони витратили своє життя .... Подумайте про ksh чи JavaScript ..... Просто жахливі та шкідливі інструменти.
NoChance

Відповіді:


36

Мови програмування розвиваються

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

Також є нові проблеми, які потрібно вирішити, наприклад, збільшення багатоядерних процесорів. Найпоширенішим рішенням для цього були потоки, але деякі мови програмування намагаються вирішити проблему одночасності по-іншому, наприклад, модель актора. Див. Erlang - Програмне забезпечення для одночасного світу


10
Що цікаво в Ерланге, це те, що це "винахідлення чистої кімнати" моделі "Актор". Коли Армстронг та його друзі розробляли Ерланг, вони не знали про роботу Хьюітта та ін над моделлю Актора!
Френк Ширар

@Frank: Це цікаво. Я не знав цього, дякую.
Йонас

2
+1 для еволюції. Аналогічне запитання може бути: "Чому існує так багато видів тварин і рослин? Чому все ще з'являються нові?"
Gyan aka Gary Buyn

1
@GaryBuyn - це лише "+1 для еволюції", якщо ви підписалися на цю точку зору. Для багатьох аналогія тварин є занадто далеко.
Темна ніч

@GaryBuyn, Uhm ... це так само аналогічно, як "хутір" - це "хом'як".
Pacerier

22

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


2
Це безумовно стосується бібліотек, рамок і програмного забезпечення, але я особисто не знаю мови, до якої це стосується. У вас є приклади?
back2dos

16
Ну, я думаю, що і C #, і Java були представлені принаймні частково для вирішення складностей із C ++. А тепер, якщо ви подивитесь на обидві ці мови кілька версій пізніше, їх синтаксис та набір функцій набувають достатньо складних умов, коли люди починають говорити про те, що вони знаходяться "за пагорбом". Тільки я сприймаю це, хоча нічого не можу довести. :-)
RationalGeek

2
Хороший момент, але я думаю, що ще один факт грає на C # - це комерційний продукт, який не існує з благодійних причин та для прийняття на ринок / утримання ваших клієнтів, продукти повинні бути «покращені» для нових випусків тощо
gf

1
Це правда. Прагнення додати нові функції, щоб отримати більше грошей на ринку, безумовно, не можна ігнорувати. Однак це меч з двома острими. Ви можете очікувати нових функцій від комерційно захищеного продукту саме з цієї причини. Але з продукту з відкритим кодом ви отримуєте нові функції лише до тих пір, поки добровольча армія залишається зацікавлена, і за кермом котів є хтось досвідчений.
RationalGeek

C # має безліч функцій, але це все-таки більш чиста мова, ніж C ++. Більш нові доповнення, такі як LINQ, дозволяють робити чітко те, що ви не можете легко зробити в C ++. Я думаю, що більш імовірно, що існує два види збереження складності - той, де певна складність притаманна проблемі, і той, де, коли ви усуваєте один вид зайвої складності зі своїх програм, вимоги стають складнішими - складність, як дані, розширюється, щоб заповнити наявний "простір".
Steve314

11

З цієї ж причини є молотки, викрутки, ручні пилки, стрічкові пилки, відбійні молотки, ломи та безліч інших інструментів: не кожна мова ідеально підходить для кожного завдання. Деякі мови орієнтовані на конкретні проблемні області: R особливо добре підходить для статистичного аналізу, C особливо хороший для написання ядер операційної системи, Haskell особливо хороший для математично важких або фінансових обчислень, Ерланг особливо хороший при одночасному програмуванні тощо.

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

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


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

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

8

Тому що всі вони смокчуть (так чи інакше).

Зараз ми створили близько 5000 мов для опису природних проблем, і жодна з них не доступна для написання програм (наприклад, "англійська").

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


15
Навіть тоді вони продовжуватимуть приходити. У камені написані лише мертві мови, вибачте за каламбур. Існує причина, що живі мови постійно змінюються.
Р. Мартіньо Фернандес

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

5
Домовились. Так важко виразити "я голодний", використовуючи чисту математику.
Аарон Дігулла

1
@AaronDigulla: голодний = сума (живіт / їжа) напевно :)
gbjbaanb

@AaronDigulla - це хороший приклад, часто потрібно виразити обчислення. Тож ми приймаємо такий сценарій, як: я голодний, тепер їмо -> добре, тепер не їмо -> голодую. Щоб побудувати системи, здатні домовлятися або розширювати контекст, я думаю, що це мета AI. Звичайні мови програмування виражають лише те, що люди говорять їм, що їм слід робити, і зазвичай це досить специфічно, ніж загальне. Але оскільки більшість проблем самі по собі є специфічними, ви можете побачити цю проблему тут.
AndreasScheinert

6

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

Комерційні інтереси - ще одна велика причина. Я вважаю, що, наприклад, Microsoft важливо, щоб вони могли запропонувати мову для кожної потреби, тому компанії та розробники віддають перевагу своїм платформам.


6

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


3
Чи є якийсь задокументований випадок, коли мова розробляється, щоб уникнути застарілого коду? Ця претензія видається дуже малоймовірною. Я бачу випадок, коли ви хочете почати свіжий (.net приходить на думку), але це не стільки, щоб уникнути застарілого коду, а для того, щоб краще включити майбутній код.
Брайан Оуклі

Я не вірю, що це правильно. Це, як правило, можливе роздрібнення реалізації існуючої мови з відкритим кодом.
альтернатива

@BryanOakley - спочатку .NET повинен був підтримувати сумісність з VB6, але вони вирішили, що це занадто важка проблема. .NET все ще мав багато застарілих WRT Java / J ++, на яких він був заснований. Я думаю, що D - приклад мови, розробленої проти застарілого коду.
gbjbaanb

4

адже цікаво створювати нові мови, навіть якщо вони не мають реального використання

Езотерична мова програмування (іноді скорочена до esolang) - мова програмування, призначена для перевірки меж дизайну мови комп'ютерного програмування, як доказ концепції, або як жарт.


1
Для тих, хто не потрапив до виносок у статті wikipedia, вікі езотеричних мов - це дуже весело: esoteric.voxelperfect.net/wiki/Main_Page
David Winslow

Ви не проти пояснити, що це робить, і чому ви рекомендуєте це відповісти на поставлене запитання? "Відповіді лише на посилання" не дуже вітаються на Stack Exchange
gnat

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

3

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

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

Подумайте про будь-яку мову програмування, яку ви знаєте. Ви можете легко придумати кілька речей, які вам не подобаються, правда? Імовірно, у вас є ідеї, як це можна виправити. Маючи трохи більше поштовху, якщо припустити, що ви знаєте багато про побудову компілятора (і це багато людей), ви можете почати розробляти і навіть реалізовувати свій власний.


2

Швидкий короткий відповідь

Повторне винайдення колеса ... Який сучасний тренд ...

Нудна довга відповідь

Багато хто забуває, що "інша подібна нова мова для старих програмістів" є "простою новою мовою для нових програмістів".

Що я маю на увазі для цього?

Ну, а для декількох років програмісти Java або C # можуть бути додатковою мовою програмування для існуючих Cobol, (OO / Procedural) Basic, C / C ++, тоді як для "нових" програмістів Java або C # - це нові мови, тоді як Cobol, (OO / Procedural) Basic, C / C ++ для них не існує, тому винахід колеса стає звичайною справою ...

І якщо є нова тенденція в галузі технологій, люди можуть створити нову мову програмування на основі цієї тенденції, як ecmascript / javascript для Інтернету та функціональне програмування ...

Ура.


+1 для вказівки на аспект винахідництва колеса. Часто це робиться з маркетингової причини: будь-яка достатньо велика компанія чи організація повинна мати власну мову програмування.
Джорджіо

1

нові мови програмування побудовані з багатьох різних причин, головним чином через те, що з'явилися нові парадигми програмування, або через досягнення технічного обладнання люди створюють нову мову, щоб скористатися новими апаратними функціями, такими як багатозадачність тощо.

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

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

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


0

З тієї ж причини є так багато <що б> не було, і ми продовжуємо створювати нове <що б> не було

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

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


Синдром NIH = взагалі не корисний для ІТ-індустрії.
gbjbaanb

0

Університети сприяють великій кількості мов програмування, і так роблять дуже великі корпорації, такі як Ericsson (Erlang = мова Ericsson), Bell Labs (B і C мови), Google (мова Go на кілька місяців до цього). Багато з тих, що були написані як частина університетських досліджень, мало використовуються. Однак є кілька помітних винятків. Я вважаю, що написання власної мови / укладача є гарною темою для кандидатських дисертацій людей, які вивчають теорію CS або суміжні дисципліни. Мені вражає, що Python - одна з перших мов, яка народилася завдяки спільним зусиллям різних програмістів в Інтернеті навколо однієї ідеї.



0

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

Я думаю, що є вагомий аргумент, що питання про те, як ви розробляєте ідеальну мову, ще не вирішене (а може і не буде). До тих пір, поки у людей з’являться нові ідеї щодо того, що б зробити чудовою мовою, люди продовжуватимуть намагатися. Деякі з цих спроб відображатимуть новий прохолодний простір, наприклад, Erlang, а деякі пролітатимуть, але доки щось буде вивчено з флопу, що також добре.


-1

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

Ще одна причина нових мов - це намагання включати багато різних завдань і бути мовою вибору для багатьох різних потреб. Деякі з цих мов намагаються бути всеохоплюючими мовами, якими ви б завжди користувалися, незалежно від необхідності.


-1

На моїх мовах програмування я дізнався, що більшість мов було винайдено, щоб подряпати свербіж. Більшість мов було винайдено, щоб мати можливість краще виражати деякий набір алгоритмів. Наприклад, функціональні мови були винайдені, щоб надавати рекурсивним алгоритмам набагато більш виразний простір.

Запитувати, чому так багато мов, як запитати, чому C ++ 0x? :)

Плюс, чим більше мов ви знаєте, тим виразніше ви можете стати - це вірно і в програмуванні, і в природних мовах!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.