Чи існують мови програмування, які дотримуються мінімалістичного підходу до розробки?


26

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

Чи можуть бути або існують мови, де версія 1.0 є остаточною версією? Звичайно, виправлення помилок виключаються з цього, але набір функцій завжди залишається тим самим?

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

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

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

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


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

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

4
Тоді, знову ж таки, ніхто не змушує вас нічому навчитися. Якщо C # 1.0 вирішує ваші вимоги, не витрачайте час на навчання того, що вам не потрібно.
Арсеній Муренко

11
Я думаю, що питання є законним: чому ми повинні застосовувати принципи KISS та YAGNI до артефактів програмного забезпечення, а не до мов програмування? Коли мова має достатньо основних особливостей, подальший розвиток (ІМХО) відбувається головним чином за рахунок маркетингу (конкуренція з іншими мовами, що змушує компанії наповнювати мови функціями, щоб утримати своїх клієнтів).
Джорджіо

2
@MainMa: "Ефективність вимагає постійно навчатись новим речам.": Складна мова програмування, наповнена занадто великою кількістю функцій, може знизити ефективність замість її збільшення. Наприклад, в команді це може призвести до різних розробників, які використовують різні підмножини мови, роблячи огляди коду, виправлення помилок та обслуговування менш ефективними.
Джорджіо

Відповіді:


32

Lisp, Smalltalk. Випадково це теж найкращі мови у цілій купі.

І Lisp, і Smalltalk - це мови, побудовані навколо сильної об'єднувальної метафори. Метафора Ліспа - "все - це список; цей список представляє і дані, і код (як функції)". Метафора Smalltalk - "все є об'єктом; єдиний спосіб викликати поведінку - це передавання повідомлення об'єкту". Ці метафори дозволяють мовам бути стабільними, мінімальними та потужними. Решта - у бібліотеці.

Речі, які називаються "контрольними структурами" у всіх не мінімальних (я хотів написати "роздуті") мови, є частинами бібліотеки тут (як приклад: condфункція в lisp; ifTrue:/ ifFalse:сімейство повідомлень у Smalltalk обидва реалізують умовно, де інші мови мають ifключове слово).

Видно, що Lisp / Smalltalk є майже мінімальними втіленнями їх парадигми і нічого більше (Lisp: функціональне програмування; Smalltalk: об'єктно-орієнтоване програмування).


4
Гарні реалізації Lisp можуть конкурувати з C, хороші реалізації Smalltalk можуть конкурувати з C ++. Heck, HotSopt JVM Oracle, найшвидший ВМ на планеті, є Smalltalk VM, він навіть не використовує статичну інформацію для своїх оптимізацій.
Йорг W Міттаг


9
Ця відповідь занадто мала, щоб бути конструктивною. Не вистачає деталей або підтверджуючих доказів.
Джиммі Хоффа

2
-1 Лисп? LISP ? Серйозно? Після воєн LISP 1970-х, неодноразових спроб єдності LISP і, нарешті, Common Lisp? Ні, навіть LISP не зробив це в "1,0".
Росс Паттерсон

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

6

TeX , система набору тексту, була дуже стабільною з 3 версії.

Починаючи з версії 3, TeX використовує ідіосинкратичну систему нумерації версій, де оновлення вказано додаванням додаткової цифри в кінці десяткової, так що номер версії асимптотично наближається до π. Це відображення того факту, що TeX зараз дуже стабільний, і очікуються лише незначні оновлення. Поточна версія TeX становить 3,1415926; Востаннє оновлено в березні 2008 року. Дизайн був заморожений після версії 3.0, і жодна нова функція або принципові зміни не будуть додані, тому всі новіші версії містять лише виправлення помилок. Незважаючи на те, що сам Дональд Кнут запропонував декілька областей, в яких TeX міг би бути вдосконалений, він зазначив, що він твердо вірить, що мати незмінну систему, яка дасть той же вихід зараз і в майбутньому, важливіше, ніж впровадження нових функцій. З цієї причини він заявив, що "

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


6

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

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


1
Я згоден з мінімалістичним дизайном C. Навіть якщо мова була оновлена ​​протягом років, основна модель дизайну та програмування мови все ще впізнавана (інші мови зазнають революції кожні 5 - 10 років). Звичайно, C не є загальноприйнятою мовою, як це було раніше, тому що її замінили інші мови у певних областях додатків (настільні додатки, веб-додатки тощо).
Джорджіо

@Giorgio: Не всі. Мінімальні (на зразок тих, які я згадав) не відповідають. Синтаксис Smalltalk не змінився з моменту його створення, крім однієї, внесеної Squeak: обчислені масиви з фігурними дужками. Бібліотека також дуже стабільна в основі ( Behaviorі Collectionієрархії). Мені здається, що C набагато менш стабільний з усіма цими C89, C99 і тим більше.
herby

1
@herby: Ви, мабуть, маєте рацію, що інші мови, такі як Smalltalk, більш стабільні, ніж C. Тим не менш, основна модель програмування C така сама, як це було, скажімо, 20 років тому. Інші мови зазнали глибоких змін. Отже, знову ж таки, я не стверджую, що C є найбільш стабільною мовою навколо, але, IMO, вона набагато стабільніша, ніж багато інших основних мов.
Джорджіо

6

Інші вже сказали Лісп, тому я повинен виховувати Forth . Це дуже просто здійснити, і правила мови просто дотримуватися.

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

ДУЖЕ короткий приклад графіки черепахи:

\ 8.8 fixed point sine table lookup
-2 var n F9F2 , E9DD , CEBD , AA95 , 7F67 , 4E34 , 1A c,
: s abs 3C mod dup 1D > if 3C swap - then dup E > if
  -1 1E rot - else 1 swap then n + c@ 1+ * ;

0 var x 0 var y 0 var a
0 var q 0 var w 
: c 9380 C80 0 fill ; \ clear screen
: k >r 50 + 8 << r> ! ;
: m dup q @ * x +! w @ * y +! ; \ move n-pixels (without drawing)
: g y k x k ; \ go to x,y coord
: h dup a ! dup s w ! 2D + s q ! ; \ heading
: f >r q @ x @ y @ w @ r 0 do >r r + >r over + \ forward n-pixels
  dup 8 >> r 8 >> plot r> r> loop o y ! x ! o r> o ;
: e key 0 vmode cls ; \ end
: b 1 vmode 1 pen c 0 0 g 0 h ; \ begin
: t a @ + h ; \ turn n-degrees

Тоді запуск з ним : squiral -50 50 g 20 0 do 100 f 21 t loop ;дає:

спіраль

Подяка блогу цього співробітника Microsoft .


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

4
@Telastyn Це не його питання.
Остін Генлі

4

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

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


2

Tcl, який був розроблений в першу чергу мінімалістичним

Звідси про сторінку http://www.tcl.tk/about/features.html , одна з особливостей полягає в тому, що це дуже легко вивчити і де випадкові програмісти або навіть непрограмісти можуть ним користуватися.


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

ок, зробимо, хоча через закрите запитання не знаю, скільки зусиль стоїть
Egryan

1
При удачі він буде відкритий з голосів. Це гарне запитання. Я можу написати на Meta, щоб спробувати її відкрити, якщо її незабаром громада не відкриє.
Джиммі Хоффа

Я погоджуюсь і планую додати більше до посади, як тільки я приходжу до роботи, мені не доводиться швидко шукати відповідні посилання
Egryan

Пошук у google за "Дослідження випадку мови TCL", "Tcl: вбудована командна мова" та tcl.tk/about/history.html - вони дають деякі ключові моменти. Однак я не впевнений, що вони підтримують бажання ОП - виявляється, що TCL було розширено з початкових 1,0 (див. Wiki.tcl.tk/1721 )

2

Є небагато мов, які залишилися відносно незмінними з моменту створення поза межами езотеричної однієї мови, що навряд чи буде бажаним (мені б не хотілося спробувати написати щось значиме у Befunge (хоча воно також було змінено з початкового періоду 1,0) звільнення)).

Мови, які, швидше за все, заповнюють бажання не вивчати нічого нового, - це мови, які спеціалізуються на «склеюванні» між іншими програмами. Такі мови, як jcl , bash тощо. Прості мови написання можуть також потрапляти в це - дивним, що є одним з лідерів.

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

Багато мов мають певну ступінь зворотної сумісності. Ще можна писати Java 1.4 сьогодні, хоча це, мабуть, не рекомендується - рамки, які люди пишуть для неї, змінюються швидше, ніж мова. Тут все ще можна знайти компілятори f77 та f90 для мовних специфікацій, які не змінилися за 20 чи 40 років. C, Завдання C, C ++ все ще можуть бути кодовані до старих специфікацій мови - не потрібно постійно оновлювати код, оскільки була випущена нова специфікація або там є новий фреймворк.

Деякі мови мають досить тривалу незмінну історію, оскільки сама мова є достатньо потужною, щоб робити все, що хто хоче. Лісп - головний кандидат у цій галузі. Четвертий також потрапляє у сферу "це не дуже змінилося".

Перейшовши до більш традиційних мов сценаріїв, подивіться на TCL, Perl та Python. Уникайте речей, які зараз перебувають у царині "примха", які з тих чи інших причин відчувають сплеск популярності (рубін та javascript, я дивлюся на вас). З часом TCL змінювався , хоча одна з його цілей - спробувати зберегти послідовність дизайну. Сучасні Perl та Python мають певну послідовність в дизайні, хоча, правда, нові функції можуть бути зафіксованими (хоча не потрібно використовувати їх).


2

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

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


Дата відповіді на грудень 2012 року дає вам безкоштовний пропуск, оскільки відтоді у нас є жахливість, відома під назвою Python 3, яка конкурує C ++ у бажанні додати кучу сміття з грубими, фактично видаляючи простоту. Зараз це одна з найбільш чужих мов, що заражаються аддоном в обчислювальних технологіях.
Томас Браун

-1

Я думаю, що "мінімалістичний" дизайнерський підхід може бути прикладом Tcl. Як приклад, ви можете використовувати команду {catch} зі значеннями {return -code n} для реалізації будь-якої структури управління, яку може уявити ваша фантазія, Perl довелося чекати десятиліття, щоб (офіційно) отримати {switch} - (не те, що Perl колись це було потрібно). Крім того, ви побачите , що Dodekalogue http://wiki.tcl.tk/10259 охоплює граматику Tcl повністю - інше, незалежно парадигма програмування ви хочете працювати, може бути виражено в цій граматиці.


це просто повторює пункт зробив і пояснив в відповідь відправив два роки тому
комар

Посилаючись на оригінальний пост, я думаю, я можу сказати лише ортогональність = історія (сім'я мов C) та недавня асиміляція між мовами; Я бачив, що в ОС спостерігається підхід між усіма мовами до узагальнених веб-рамок MVC, підпрограм та тощо. Поза цією тенденцією я можу відзначити чудове додавання закриттів до C11 та майбутньої лямбда Java (яка є дзеркальною розробкою в ОС "сценаріїв").
користувач132043
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.