Eugene Agafonov on the .NET
Блог Евгения Агафонова
[ANN] TypeScript - типизированный JavaScript от MS
01.10.2012
|
Gollum |
Не знаю в какой форум положить сообщение. Думаю, что в asp.net это точно придет
Андерс Хайлсберг представляет новый язык программирования — TypeScript, который является типизированным надмножеством языка JavaScript, и компилируется в него.
Спецификация языка TypeScript доступна на Open Web Foundation, a компилятор выложен в Open Source
Андерс рассказывает о TypeScript на Channel 9:
http://channel9.msdn.com/posts/Anders-Hejlsberg-Introducing-TypeScript
Андерс Хайлсберг представляет новый язык программирования — TypeScript, который является типизированным надмножеством языка JavaScript, и компилируется в него.
Спецификация языка TypeScript доступна на Open Web Foundation, a компилятор выложен в Open Source
Андерс рассказывает о TypeScript на Channel 9:
http://channel9.msdn.com/posts/Anders-Hejlsberg-Introducing-TypeScript
01.10.2012 8 комментариев |
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 мало для того, чтобы подобные проекты пошли в массы.
"по ссылке не ходил, но осуждаю"
я тебя правильно понял???
[js]
function sqr(n: number) { return n * n }
var x : any = ...
sqr(x)
[/js]
проходит без ошибок. нужна хотя бы прагма какая нить, которая бы пребывала ЯВНОГО приведения any к конкретному типу.
J>проходит без ошибок. нужна хотя бы прагма какая нить, которая бы пребывала ЯВНОГО приведения any к конкретному типу.
"use verystrict"
G>Здравствуйте, Jack128, Вы писали:
J>>проходит без ошибок. нужна хотя бы прагма какая нить, которая бы пребывала ЯВНОГО приведения any к конкретному типу.
G>"use verystrict"
ну да, что нить типа того.
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 к конкретному типу.
А>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".
Вот решение о ковариантности массивов достаточно спорное на мой взгляд.