LINUX.ORG.RU
ФорумTalks

В JavaScript предложили добавить информацию о типах

 


0

0

Компании Microsoft, Igalia и Bloomberg выступили с инициативой включения в спецификацию JavaScript синтаксиса для явного определения типов, похожего на синтаксис, применяемый в языке TypeScript. В настоящее время прототип изменений, предложенный для включения в стандарт ECMAScript, вынесен для предварительных обсуждений (Stage 0). На ближайшем мартовском заседании комитета TC39 планируется перейти на первую стадию рассмотрения предложения с привлечением экспертного сообщества из ECMA.

Наличие явно заданной информации о типах позволит избежать многих ошибок в процессе разработки, даст возможность задействовать дополнительные техники оптимизации, упростит отладку и сделает код более читаемым и простым для доработки и поддержки сторонними разработчиками. Поддержку типов предлагается реализовать в виде опциональной возможности - JavaScript-движки и runtime не поддерживающие проверку типов будут игнорировать аннотации с информацией о типах и обрабатывать код как раньше, воспринимая данные о типах как комментарии. Но инструменты для проверки типов смогут на основе доступной информации выявлять ошибки, связанные с некорректным использованием типов.

При этом в отличие от информации о типах, задаваемой при помощи аннотаций JSDoc, указываемых в форме комментариев, прямое указание типов непосредственно в конструкциях определения переменных сделает код более наглядным, понятным и простым для редактирования. Например, интегрированные среды разработки с поддержкой TypeScript смогут сразу подсвечивать ошибки в типизированном JavaScript-коде без дополнительных преобразований. Кроме того, встроенная поддержка типов даст возможность выполнять программы, написанные на типизированных диалектах JavaScript, таких как TypeScript и Flow, без транспиляции из одного языка в другой.

Из типов предлагается добавить «string», «number» и «boolean», которые можно будет использовать при определении переменных, параметров функций, элементов объектов, полей классов, типизированных массивов («number[]»). Предлагается также обеспечить поддержку объединённых типов («string | number») и дженериков.

// cc-by https://www.opennet.ru/opennews/art.shtml?num=56850

це зрада или перемога? cast JavaScript

★★★★★

Последнее исправление: Dimez (всего исправлений: 1)

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

Im_not_a_robot ★★★★★
()
Ответ на: комментарий от Im_not_a_robot

Сколько лет твердили, что типы не нужны

типы нужны. Не нужна их обязательная аннотация.

Вообще, подход в C++ с auto лично мне кажется весьма удобным...

Sahas ★★★★☆
()

Но как же мы будем жить без этого цирка случайных типов и хитровыдуманных правил автопреобразования типов, которые запомнить труднее, чем аннотировать типы и даже тупо приводить??? Это ж сколько времени освободится у разрабов?

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 5)
Ответ на: комментарий от anonymous_sapiens

Для любителей типов есть TS.

это вот это извращение ts —> js —> babel —> js

для этих любителей? ))

я смотрю мисье разбирается в сортах.

Rastafarra ★★★★
()

При этом в отличие от информации о типах, задаваемой при помощи аннотаций JSDoc, указываемых в форме комментариев, прямое указание типов непосредственно в конструкциях определения переменных сделает код более наглядным, понятным и простым для редактирования

Очень сомнительное утверждение. Как раз таки удобнее чтобы инфа для тайпчекера была отдельно от кода. К тому же это мотивирует писать комментарии (раз уж всё равно делается описание типов, то почему бы не черкнуть пару строчек про назначение функции).

Ну а в целом, есть TS, так что ненужно.

no-such-file ★★★★★
()
Ответ на: комментарий от Rastafarra

В чём его костыльность? Что нет «нативных» интерпретаторов? Во-первых есть, а во-вторых в чём проблема добавить поддержку ts в тот же хром? Вместо этого мы городим костыли, ведь всё равно этот «новый js» нужно будет компилять бабелем чтобы на старом ie работало.

no-such-file ★★★★★
()

Вроде и круто, а вроде и нафига оно нужно, если есть TS. Нужны типы – юзай TS, нет голый JS.

CryNet ★★★★★
()

Это один из «стандартов». Скрее всего вылез из внутренних проектов. Уже насмотрелся на примеры коды - такое вонючее…

Видимо, это начальный этап «на посмотреть». А дальше начнут строить что-то новое. Упор на жабу (шарпей -> TS) не налез на глобус web. ООП себя плохо зарекомендовало. Вот теперь хотят пойти по пути F#

modest
()

Не понимаю, каких комментариев от меня нужно.

ECMAScript4 - пропозал от Брендана Айка, создателя JS, из 1999 года с опциональной статической типизацией - отбракован, потому что ненужно.

SoundScript - пропозал опциональной статической типизации со вкусом TypeScript для V8 от Google из 2015 года - отбракован, потому что ненужно.

Typed Objects - Stage 0 из 2014 года - отбракован, потому что ненужно.

Optional Static Typing - Stage 0 из 2014 года - отбракован, потому что ненужно.

И еще куча подобных пропозлов за разные периоды, в том числе от Майкрософта, Гугла, Фейсбука, и черта лешего.

Где вы были 8 лет 20 лет? Не нужно. Никогда не было нужно. И никогда не будет нужно.

це зрада или перемога

Кликбейт. Попытка создать инфоповод из ничего, переливая из пустого в порожнее то, что перелито тысячи раз.

javascript
()

позволит избежать многих ошибок в процессе разработки

OOGA BOOGA УГНЕТЕНИЕ НЕНУЖНО!

бросает копье в монитор

FedyaPryanichkov ★★
()
Ответ на: комментарий от a1batross

Он не @JavaScript, а @javascript.

вот-вот, чувствовал, что не попал, спасибо.

crypt ★★★★★
() автор топика
Последнее исправление: crypt (всего исправлений: 2)
Ответ на: комментарий от javascript

Почему запрос среди разработчиков есть, но не нужно?

Вроде языки программирования для людей, а не люди для языков.

a1batross ★★★★★
()

«Из всякого говна можно сделать конфетку. Но это будет конфетка из говна.» (c)

Опыт попытки добавления типов в PHP как бы показывает.

UPD. Добавили бы наконец уже DOM в WebAssembly, и кому надо – будут писать на нормальных статически типизированных языках.

dimgel ★★★★★
()
Последнее исправление: dimgel (всего исправлений: 1)
Ответ на: комментарий от a1batross

Почему запрос среди разработчиков есть, но не нужно?

Какой запрос? Их меньшинство.

th3m3 ★★★★★
()
Ответ на: комментарий от a1batross

Почему запрос среди разработчиков есть, но не нужно?

В первых версия JS оператор == работал, как ===,то есть делал строгое сравнение без приведения типов. Угадай, почему это изменили? Потому что это попросили сами разработчики, о которых ты говоришь. Айк был сильно против. То же самое касается множества иных артефактов в языке. Но ввиду того, что тогда не было еще ни коммитетов, ни бюррократии, и все решения принимались с плеча, без какого-либо рисчерча, а сама ЦА этих разработчиков были лишь штатные программисты несткейпа - вышло то, что вышло.


Нет никакого запроса. Это как с оппозицей - есть лишь громкое меньшинство, которое по факту ничтожно.

Касательно статической типизации, каждый такой пропозал начинатся с одного и того же, перетекает в один и тот же рисерч, а заканчивается одни и тем же ВНЕЗАПНЫМ осознанием - это не будет работать (если буквально - оверхед будет неимоверным).

JS - это динамическая объктная система. Здесь нельзя отделить компайл-тайм от райнтама. Куски кода подгружаются динамически. У любого типа структура и поведение может поменяться с течением времени. Нельзя ни закешировать статические проверки и ни точно сказать, что если сейчас типы не валидны, они не окажутся валидными при следующем вызове. JIT в современных движках несет с собой регулярную проверку на возможную деградацию скомпилированного кода, при этом количество триггеров для такой деградации в данный момент минимально, потому как даже внезапно исчезнувшие поля у объектов или их изменившийся тип - это валидное поведение. В случае развесистой системы статических типов полноценный тайпчек должен будет проводиться фактически при каждом вызове, проверяя полностью все шейпы объектов, по всей цепочке прототипов, в том числе Проксированных, каждого значения в каждой незначительной лямбде.

javascript
()
Последнее исправление: javascript (всего исправлений: 4)
Ответ на: комментарий от javascript

классное объяснение почему js говно и это не исправить, зачет :)

Rastafarra ★★★★
()
Последнее исправление: Rastafarra (всего исправлений: 1)

Ненужно, есть TS для любителей, и JSDoc вполне справляется.

interface Person {
  name: string;
  age: number;
}

🤢

neversleep ★★★
()
Последнее исправление: neversleep (всего исправлений: 1)
Ответ на: комментарий от javascript

Куски кода подгружаются динамически.

Единственный стоящий аргумент. Зато фатальный. (В т.ч. JSON парсится в динамические JS-структуры. С другой стороны, есть же парсеры из бинарного формата, забыл как называется фигня от гугла. Так что распарсить динамический стрим в статику – не та проблема. А динамическая подгрузка кода есть и в WebAssembly, и это ортогонально динамической типизации – аналогично как и динамически подгружаемые .so и .dll ортогональны тому факту, что пишутся они в основном на статически типизированном C++.)

Остальное – бред собачий. UPD: Впрочем, это касается не столько твоей аргументации, а самой идеи скрестить ужа с ежом. В нормальной статике всей описанной тобой бредятины нет и быть не может.

dimgel ★★★★★
()
Последнее исправление: dimgel (всего исправлений: 4)
Ответ на: комментарий от dimgel

Динамическая подгрука кода, внезапно, есть в любом языке. В том числе в статических.

Вот только в статических языках, если ты в рантайме внезапно изменишь сигнатуру функции, или подгрузишь кусок кода, который не соотвествует заранее проведенной AOT проверке типов, то получишь UB, в конечном счете вытекающее в падении твоей недопрограммки.

А JS-рантайм не имеет UB. Твой браузер не должен падать от того, что ты использовал блокировщик рекламы.

В нормальной статике

Взросые люди не используют субъективне оценочные суждения в конструктивных разговорах. Развивайся.

javascript
()
Ответ на: комментарий от javascript

в конечном счете вытекающее в падении твоей недопрограммки.

О господи, и как же миллиарды строк кода «недопрограммок» до сих пор работают, а? Ты-то сам на чём сидишь – на написанной на C/C++ винде, или на написанном на C/C++ линуксе?

Развивайся.

Зеркалу это скажи. В игнор идиота.

dimgel ★★★★★
()
Ответ на: комментарий от dimgel

как же миллиарды строк кода «недопрограммок» до сих пор работают, а?

Ой, не благодаря ли аппаратным MMU?

Хотя не, бред какой-то. О чем это я. BSOD’ы и паники это из области фантастики.

javascript
()
Ответ на: комментарий от dimgel

Ты-то сам на чём сидишь – на написанной на C/C++ винде, или на написанном на C/C++ линуксе?

Что я прочёл?

modest
()
Ответ на: комментарий от Legioner

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

abcq ★★
()
Ответ на: комментарий от abcq

Да хз лажа какая-то, жаваскрипт и так какой-то перегруженный уже. Я джуниоров собеседую, они его вообще толком не знают. Там столько учить, что по верхам скачут, var от let отличить не могут. Столярова на них не хватает.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

ну вот по этой причине его и пытаются выкинуть и подменить статически типизированным языком. Он не перегруженный, он с исторически неоднозначными решениями и скользкий слишком для новичков. ЖС - С++ от веба.

abcq ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.