Улучшенные отладчики для JavaScript жизненно важны, но как насчет отладки кода JavaScript, созданного машиной? Решение уже на подходе, и все дело в SMAP.
Одним из последствий того, что JavaScript стал центральным языком нашего времени, стало то, что теперь ему нужны инструменты, позволяющие использовать его для создания серьезных приложений. Он превратился из скриптового языка, используемого программистами на выходных, в язык для реализации многоуровневых приложений и игр. Менее очевидно то, что он также функционирует как язык ассемблера браузера в том смысле, что JavaScript, выполняемый в браузерах, часто генерируется машиной. Механизм генерации варьируется от простого минификации до результата компиляции с других языков.
Одна из проблем, которые это вызывает, заключается в том, что, хотя у нас были разумные средства отладки как часть современных браузеров в течение некоторого времени, но они рассматривают JavaScript как язык, на котором была написана программа, и, следовательно, связывают точки останова и информацию об отладке с кодом JavaScript, который является Бег. Это нормально, если код создан человеком, красив и аккуратен, но попытка связать ошибки в, скажем, минимизированном коде с неминифицированным JavaScript может быть трудной. Та же проблема с привязкой ошибок обратно к скомпилированному языку — скажем, CoffeeScript — еще сложнее.
Решение проблемы заключается в использовании карт источников (SMAP), которые связывают каждый фрагмент сгенерированного кода с исходным кодом, который его создал. Используя SMAP, можно сообщать об ошибках в коде, который выполняется в браузере или на сервере, в строку исходного кода, которая их создала, что дает программисту больше шансов понять природу проблемы.
В настоящее время только компилятор Google Closure генерирует файлы SMAP, и единственный инструмент, который может их использовать, — это Closure Inspector, расширение Firebug. Теперь у нас есть новости о том, что и Mozilla, и WebKit работают над проектами, которые могут привести к более широкой поддержке SMAP. Mozilla определяет требования к проекту следующим образом:
Когда доступна карта источников, сообщения об ошибках в консоли будут ссылаться на исходный источник, а не на сгенерированный JS.
Точно так же вывод журнала консоли будет ссылаться на исходный источник.
Патчи для CoffeeScript будут использоваться для создания примеров
Компилятор Closure должен генерировать совместимые исходные карты
Спецификация сгенерированных скриптов для ссылки на их сопоставления и формат сопоставления
SpiderMonkey необходимо выводить столбец в дополнение к источнику / строке.
код, загружаемый через eval (), также должен поддерживать исходные карты
Этот шаг в сторону улучшения инструментов приветствуется, но он подчеркивает, насколько плохо подготовлен JavaScript и весь подход HTML5 к созданию приложений. Да, это возможно, но какой ценой?