Хотя я лично не одобряю один стиль над другим, я не думаю, что абстракция от Javascript - единственное преимущество, которое эти платформы приносят на стол. Конечно, при абстрагировании всего языка будут существовать вещи, которые станут невозможными, что было возможно ранее, и наоборот. Решение использовать такую среду, как GWT, вместо написания обычного JavaScript зависит от многих факторов.
Обсуждение JavaScript и языка X бесполезно, поскольку у каждого языка есть свои сильные и слабые стороны. Вместо этого проведите объективный анализ затрат и выгод в отношении того, что может быть получено или потеряно при использовании такой структуры, и это, к сожалению, может сделать только вы, а не сообщество SO.
Проблема незнания того, что происходит внутри, относится к JavaScript так же, как и к любому переведенному источнику. Как вы думаете, сколько людей будут точно знать, что происходит в jQuery, когда они попытаются сделать сравнение, например $("p") == $("p")
, и в результате получат обратно false
. Это не гипотетическая ситуация, и есть несколько вопросов относительно SO. Изучение языка или среды требует времени, и при наличии достаточного времени разработчики могли бы также понять скомпилированный источник этих структур.
Другой связанный с этим вопрос аспект - это доверие. Мы постоянно строим абстракции более высокого уровня на абстракциях более низкого уровня и полагаемся на тот факт, что вещи более низкого уровня должны работать так, как ожидается. Когда вы в последний раз копали в скомпилированный двоичный файл программы на C ++ или Java, чтобы убедиться, что он работает правильно? Мы не потому, что доверяем компилятору.
Более того, при использовании такого фреймворка стыдно возвращаться к JavaScript, например, с помощью JSNI. Все дело в том, чтобы решить проблему наилучшим образом с помощью имеющихся инструментов. В JavaScript, или Java, или в C #, или в Ruby и т. Д. Нет ничего священного. Все они являются инструментами для решения проблем, и хотя они могут стать для вас препятствием, они могут сэкономить время и принести пользу кому-то еще.
Что касается направления веб-программирования, я думаю, что есть много интересных тенденций, которые, скорее всего, преуспеют, например, JavaScript на стороне сервера. Это решает очень реальные проблемы для меня, по крайней мере, в том, что мы можем легко избежать дублирования кода в веб-приложении. Одинаковые проверки, логика и т. Д. Могут быть общими на стороне клиента и сервера. Это также позволяет написать простой (де) механизм сериализации, так что RPC или RMI связь становится возможной очень легко. Я имею в виду, что было бы здорово написать:
account.debit(200);
на стороне клиента вместо:
$.ajax({
url: "/account",
data: { amount: 200 },
success: function(data) {
..
}
error: function() {
..
}
});
Наконец, замечательно, что у нас есть все это разнообразие в инфраструктурах и решениях для создания веб-приложений, поскольку решения следующего поколения могут учиться на ошибках каждого и фокусироваться на своих успехах, создавая еще лучшие, более быстрые и более удивительные инструменты .