набори


Напоследък изглежда, че всеки иска създайте надмножество от езици какво са те по-сложни, за да се улесни използването му, без да се губи функционалност. По принцип това е много похвална идея и би било трудно да се разбере, че някой е против, но искам да ви покажа някои причини, поради които, например, създаването на 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, така че новата му версия, в която всички програми, разработени в предишни версии, ще продължат да бъдат съвместими, също ще включва повече подобрения, отколкото може да разработи без нашето сътрудничество.

Сега променете "Line" на "Java" и "Figure" на "Type" и ще разберете мнението ми за новия опит на Microsoft да премине към неговия сюжет.

Споделете капана на езиците като супермножество на други езици