інших


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

Основна і популярна мова

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

Наша мова буде заснована на кресленні ліній, тому ми будемо називати це LineaScript. У ньому малювання лінії буде складатися з двох етапів: малювання вектора та надання йому кольору. У свою чергу, вектор буде сформовано з двох точок з відповідними координатами x та y.

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

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

Давайте виправимо це новою мовою

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

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

Отже, з нашою новою мовою було б практично так само просто намалювати точку, лінію чи прямокутник:

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

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

Нова версія мови оригіналу

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

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

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

Яку з двох форм поведінки повинен реалізувати FiguraScript 2.0 для конструктора, який отримує чотири цілі числа як параметри?

Зіткнувшись із цією ситуацією, ми будемо змушені створити нову версію нашої мови, в якій нам доведеться вибирати між двома злами:

  • Прийняти новий синтаксис розширеного LineaScript, роблячи таким чином FiguraScript 2.0 більше не в змозі інтерпретувати програми, написані у версії 1.0, як втратити зворотну сумісність.
  • Продовжуйте підтримувати методи, визначені в 1.0 та втратити якість бути надмножиною LineaScript, і що не кожен програміст цієї мови може використовувати свій код безпосередньо в нашому.

У будь-якому випадку, наша мова втратить одну з тих якостей, якими ми спочатку хвалились, і потроху вона втратить свій сенс існування і, ймовірно, в кінцевому підсумку зникне у забутті.

Що ми зробили неправильно?

Якщо ми добросовісно створили мову, яка полегшила доступ до більш популярної, але складної, що ми зробили неправильно? Чому ми повинні бути приречені на невдачу?

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

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

Тепер змініть "Рядок" на "Java", а "Рисунок" на "Тип", і ви дізнаєтесь мою думку про нову спробу корпорації Майкрософт просунутися вперед.

Поділіться пасткою мов як надмножинами інших мов