Відокремлення людських мов походить від (дарвінівської?) Еволюції в окремих громадах. Відокремлення мов програмування відбувається від варіацій технічної потреби, технічної ідеології, від змін у техніко-теоретичному розумінні, від змін у нашій технічній здатності до реалізації. Я думаю, це дещо більш свідомий процес.
Чи можуть комп'ютерні мови більше нагадувати природні мови? Можливо, дещо, до певного моменту. Я здогадуюсь, що значна частина складності природних мов є результатом різноманітних явищ еволюції, що не мають підстав для отримання послідовного результату в будь-який момент часу, хоча, ймовірно, старі невідповідності, ймовірно, прогресивно усуваються, а нові з'являються . Я не знавець діахронічної лінгвістики. Але чи хочемо ми такої складності в мовах програмування.
Питання про неоднозначність є важливим, але не таким, як заявляє більшість людей. Мова - це засіб спілкування, і її треба аналізувати в контексті цього спілкування (людина-людина, людина-машина, обидва, між місцями або між часом, ... сказати це трохи спрощено). Важливо не те, чи можна робити лише однозначні заяви мовою, а чи можна завжди гарантувати, що спілкування буде однозначним у визначеному контексті. Є одна добре відома і широко застосовувана мова програмування, яка дозволяє писати неоднозначні програми (ну, так, але я останній час не переглядав останні версії). У цьому випадку компілятор досить розумний, щоб виявити неоднозначність і попросити роз'яснення, які можуть бути включені в програму усунення неоднозначності. Зауважте, що виявлення неоднозначності не означає, що лише один з можливих варіантів має значення, який вони мають. Питання полягає в тому, чи може хтось із комунікаційних організацій виявити неоднозначність, щоб відправник міг уточнити це. Людям в цьому погано, але комп'ютери можуть бути досить хорошими.
Формалізми та мови програмування можуть мати ситніший і гнучкіший синтаксис. Я вважаю, що головна причина, чому вони цього не роблять, - це простий консерватизм. Синтаксичні інструменти, що застосовуються, як і раніше, дуже часто є інструментами, розробленими тридцять років тому і більше, щоб відповідати обмеженням комп’ютерів того часу. Ефективність розбору вже не є настільки важливим питанням у складанні, і більш потужні методи існують трагічно.
Цікаво, що найбільш широко використовувана основа для синтаксису мов програмування походить від досліджень природних мов: без контексту граматики. Значна частина технічних досліджень перенесла теоретичну / технічну інформатику в шістдесяті роки, щоб бути дещо відтвореною на початку вісімдесятих людей природною мовою (я спрощую). З тих пір було досягнуто значного прогресу в синтаксисі природними мовами, в той час як комп'ютерна наука значною мірою дотримується старих синтаксичних інструментів. Маятник природної мови тепер знову хитається до статистичних прийомів, але алгебраїчні підходи до синтаксису не забуваються. Швидше за все, хороші підходи вийдуть із поєднання алгебраїчних та статистичних методик.
Я відчуваю, що критичною областю є семантика та перехід між синтаксисом та семантикою. Це все ще дуже важко формалізувати для природної мови, тоді як у нас є багато точних методик у випадку мов програмування та формальних систем. Оскільки ця гра далеко не грається для природних мов, важко сказати, який вплив вона може мати на мови програмування в майбутньому.
Ще один момент полягає в тому, що багато дизайнерів мови програмування намагаються щось довести або нав'язати технічну ідеологію. Таким чином, вони отримують надзвичайно вподобання в своєму дизайні, щоб не допустити користувачів відходити від своїх передбачених парадигм. На жаль, це надзвичайно контрпродуктивно для творчості. Найбільш творча мова, яку коли-небудь розробляли, була серед перших: Лісп (1958). Свобода та гнучкість, які вона дозволяла, були джерелом значної творчості. Ціна полягала в тому, що вона вимагала самодисципліни та розуміння. Але Лісп був насправді метамовою, мовою для створення мов.
Тепер, якщо взяти іншу точку зору, програми насправді є доказом їх специфікації, що розглядається як математичне твердження (ну, я ще раз спрощую). Деякі люди (я не пам’ятаю посилань, вибачте) грали з доказів теореми, щоб створити докази, схожі на те, що їх написав математик природною мовою. Тож я здогадуюсь, що ідея про програми, схожі на те, що вони написані природною мовою, може бути не зовсім абсурдною.
Однак ви можете помітити, що навіть коли він неофіційно написаний математиком, математичний дискурс виглядає зовсім інакше, ніж звичайні розмови чи книги з історії. Це пов’язано зі значною різницею у відповідній всесвіті дискурсу, семантичних областях, про які йде мова. Таким чином, хоча ви можете передбачити мови програмування, схожі на природні мови, існує природне обмеження, яке є областю дискурсу та його бажаними властивостями. Швидше за все, він залишиться по суті поверхневим, тобто переважно синтаксичним. Математик може говорити про формальні системи та про політику. Сподіваємось, два дискурси не будуть схожими. Комп'ютери не можуть (поки що?) Говорити про політику чи не розуміти її. День, коли вони це роблять, більше не буде програмуванням.
Озирнувшись до історії, мови високого рівня були з самого початку (FORTRAN) спробою наблизитися до більш природної форми для вираження обчислювальних завдань, але ці завдання розумілися як математичні чи логічні (Fortran 1957, Algol 1958, Lisp 1958 ), або більше орієнтованого на бізнес (Cobol 1959). Протягом 10 років люди переживали з приводу того, що мови будуть ближчими, краще адаптованими до існуючої проблеми, і було проведено значні дослідження в т.зв. extensible
languages
, що охоплювали і синтаксис, і семантику. Одним із головних способів висловити проблеми, більш природно, було виникнення object
orientation
(іноді під іншими іменами). Хоча батьківство завжди важко призначити, це, мабуть, випливало з роботи над штучним інтелектом, здебільшого в Ліспі та з мовиSimula
67
(Сім'я Алгол), яка сама по собі мала на меті висловити більш природно реальні проблеми світу, які повинні бути імітовані на комп'ютері. Все це здається історично послідовним.