Eugene Agafonov on the .NET

Блог Евгения Агафонова

[ANN] TypeScript - типизированный JavaScript от MS

Gollum Gollum
Не знаю в какой форум положить сообщение. Думаю, что в asp.net это точно придет

Андерс Хайлсберг представляет новый язык программирования — TypeScript, который является типизированным надмножеством языка JavaScript, и компилируется в него.

Спецификация языка TypeScript доступна на Open Web Foundation, a компилятор выложен в Open Source

Андерс рассказывает о TypeScript на Channel 9:
http://channel9.msdn.com/posts/Anders-Hejlsberg-Introducing-TypeScript
sergeyt4
sergeyt4
02.10.2012 12:01
Здравствуйте, Gollum, Вы писали:

G>Не знаю в какой форум положить сообщение. Думаю, что в asp.net это точно придет


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

G>Андерс Хайлсберг представляет новый язык программирования — TypeScript, который является типизированным надмножеством языка JavaScript, и компилируется в него.


Все, конечно хорошо. Intellisense, и т.п. Это не первый язык и компилятор из строго-типизированных и более других языков в JS. Уже есть компиляторы и с C#, и с Java и с кучи других забавных языков типа Boo, CoffeScript, Kaffeine...

Я пытался писать приложения на языках, компилируемых в JS, но меня остановили следующие проблемы:

1. Разработка на JS обычно ведется с использованием библиотек и фреймворков и runtime типа jQuery, ExtJS, NodeJS и.т.п. Они предназначены для использования с JS. Для успешной разработки на другом языке, нужно, чтобы и библиотеки и фреймворки были написаны (или хотя бы предоставляли inerop-ы) на том же языке — чтобы работал Intellisense и проверка типов, ради которой все это затевается.

Вопрос: где их брать и кто будет поддерживать их в соответствии с последнией версией? Разработчики самих библиотек вряд ли этим будут заниматься. Разработчики кросс-компилеров и IDE — не смогут поддерживать все эти многочисленные фреймворки. Самому — слишком трудоемко.

Cкорей всего MS сделает нормальную поддержку этого TypeScript только со своими WinJS-библиотеками. Что ограничит его использование в пределах Windows8.

2. при создании interop-ов к фреймворкам приходится сильно извращаться, т.к. обычно они не рассчитаны на строгую типизацию и тот способ реализации классов, наследования, интерфейсов, которые производит кросс-компилятор. В результате, чтобы сделать что-то, что делается просто на "голом" JS, приходится городить нечитаемую многоэтажную конструкцию, которая при компиляции даст нужный JS. И предугадать, что за JS получится на выходе — задача не всегда простая. Даже в случае такого похожего на JS как CoffeeScript языка. В итоге понимаешь, что проще сразу на JS написать.

3. самое неприятное — отладка. Исходник написан на одном языке, а в браузере выполняется другой.

Соответствие строк кода — еще ладно, решается как-то — можно взять исходый текст, замапить строки исходного на результирующий. Что-то вроде PDB файлов. У Chrome, кстати, есть поддержка подобного маппинга (см. "Enable source maps" в опциях devtools).

Но что происходит с переменными? Они-то вообще почти неузнаваемые получаются, когда компилятор нагенерит кучу вспомогательных переменных с чудными именами... Да и значения у них не всегда похожи на то, что ожидается увидеть.

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

В общем, мой вывод таков: только компилятора и IDE мало для того, чтобы подобные проекты пошли в массы.
Jack128
Jack128
02.10.2012 05:59
Здравствуйте, sergeyt4, Вы писали:

"по ссылке не ходил, но осуждаю"
я тебя правильно понял???
Jack128
Jack128
02.10.2012 05:58
Здравствуйте, Gollum, Вы писали:


[js]
function sqr(n: number) { return n * n }
var x : any = ...
sqr(x)
[/js]
проходит без ошибок. нужна хотя бы прагма какая нить, которая бы пребывала ЯВНОГО приведения any к конкретному типу.
Gollum
Gollum
02.10.2012 07:55
Здравствуйте, Jack128, Вы писали:

J>проходит без ошибок. нужна хотя бы прагма какая нить, которая бы пребывала ЯВНОГО приведения any к конкретному типу.


"use verystrict"
... << RSDN@Home 1.2.0 alpha 5 rev. 66>>
Jack128
Jack128
02.10.2012 08:31
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, Jack128, Вы писали:


J>>проходит без ошибок. нужна хотя бы прагма какая нить, которая бы пребывала ЯВНОГО приведения any к конкретному типу.


G>"use verystrict"


ну да, что нить типа того.
gravatar
Аноним
02.10.2012 02:13
Спецификация:

The Any type is used to represent any JavaScript value. A value of the Any type supports the same operations
as a value in JavaScript and no static type checking is performed for operations on Any values.


Здравствуйте, Jack128, Вы писали:

J>Здравствуйте, Gollum, Вы писали:



J>[js]

J>function sqr(n: number) { return n * n }
J>var x : any = ...
J>sqr(x)
J>[/js]
J>проходит без ошибок. нужна хотя бы прагма какая нить, которая бы пребывала ЯВНОГО приведения any к конкретному типу.
gravatar
Аноним
02.10.2012 02:28
C#:
dynamic d = 10;
int i = d;
Gollum
Gollum
02.10.2012 06:36
Здравствуйте, Аноним, Вы писали:

А>The Any type is used to represent any JavaScript value. A value of the Any type supports the same operations

А>as a value in JavaScript and no static type checking is performed for operations on Any values.

Даже понятно почему, речь о том, чтобы сделать варнинги на такое, а-ля "use strict".
Вот решение о ковариантности массивов достаточно спорное на мой взгляд.