Следует ли избегать написания Javascript в пользу GWT/WebSharper или какой-либо другой абстракции?

Мне любопытно, что такое представление о "вещах, которые компилируются в javascript", например. GWT, Script # и WebSharper и т.п. Они кажутся довольно нишевыми компонентами, которые позволяют пользователям писать javascript без написания javascript.

Лично мне комфортно писать javascript (используя JQuery/Prototype/ExtJS или какую-то другую такую ​​библиотеку) и просматривать такие вещи, как GWT, как ненужные абстракции, которые могут в конечном итоге ограничить то, что разработчик должен выполнить или в лучшем случае обеспечить очень долговременное обходное решение. В некоторых случаях вы все еще в конечном итоге записываете javascript, например. JSNI.

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

Мне любопытно слышать мнения других. Это где веб-программирование возглавляется?

Ответ 1

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

Сделать это обсуждение JavaScript и языка X бесполезно, поскольку у каждого языка есть свои сильные и слабые стороны. Вместо этого сделайте объективный анализ затрат и выгод, который должен быть получен или потерян, перейдя к такой структуре, и это может быть сделано только вами, а не сообществом SO, к сожалению.

Проблема не зная, что происходит под капотом, относится к JavaScript так же, как к любому переведенному источнику. Сколько людей, по вашему мнению, точно знает, что происходит в jQuery, когда они пытаются сделать сравнение, например $("p") == $("p"), и возвращаются false в результате. Это не гипотетическая ситуация, и есть несколько вопросов относительно SO относительно того же. Для изучения языка или структуры требуется время, и разработчики могут достаточно хорошо понимать компилируемый источник этих фреймворков.

Другой связанный с этим вопрос относится к доверию. Мы постоянно строим абстракции более высокого уровня при абстракциях более низкого уровня и полагаемся на то, что материал нижнего уровня должен работать так, как ожидалось. Какой последний раз вы выкапывали в скомпилированный двоичный файл программы на С++ или Java, чтобы убедиться, что он работает правильно? Мы не потому, что доверяем компилятору.

Кроме того, при использовании такой структуры нет стыда в возвращении к JavaScript с использованием JSNI, например. Все дело в том, чтобы решить проблему наилучшим образом с помощью имеющихся инструментов. Нет ничего святого в JavaScript, или Java, или С#, или Ruby и т.д. Это все инструменты для решения проблем, и хотя это может быть барьером для вас, это может быть реальным временем и выгодным для кого-то другого.

Что касается того, где я думаю, что веб-программирование возглавлено, есть много интересных тенденций, которые, я думаю, или, скорее, надеюсь, будут успешными, например JavaScript на стороне сервера. Это решает для меня очень реальные проблемы, по крайней мере, в том, что мы можем легко избежать дублирования кода в веб-приложении. Те же валидации, логика и т.д. Можно разделить на стороне клиента и сервера. Это также позволяет писать простой (де) механизм сериализации, поэтому связь RPC или RMI становится очень простой. Я имею в виду, было бы очень приятно писать:

account.debit(200);

на стороне клиента, а не:

$.ajax({
    url: "/account",
    data: { amount: 200 },
    success: function(data) {
        ..
    }
    error: function() {
        ..
    }
});

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

Ответ 2

Следует ли избегать JavaScript в пользу X? Во что бы то ни стало!

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

Для меня JavaScript - это портативная сборка веб-сайта, выполняющая ту же роль, что и C в остальном мире. Он переносится, широко используется, и он останется. Но я не хочу писать JavaScript, не более, чем писать сборку. Причины, по которым я не хочу использовать JavaScript в качестве языка, включают:

  • Нет статического анализа, он даже не проверяет, вызваны ли функции с правильным количеством аргументов. Типос укусит!

  • Существует не очень ограниченная концепция библиотек, пространств имен, модулей, классов, поэтому каждая инфраструктура создает собственные (аналогичная ситуация с схемой R5RS).

  • Инструментальные средства (редакторы кода, отладчики, профилировщики) довольно бедны, и большинство из них из-за (1) и (2): JavaScript не поддается статическому анализу.

  • Существует не очень ограниченная стандартная библиотека.

  • Есть много грубых ребер и смещение к использованию мутации. JavaScript - плохо разработанный язык даже в нетипизированной семье (я предпочитаю Схему).

Мы пытаемся решить все эти проблемы в WebSharper. Например, WebSharper в Visual Studio имеет завершение кода, даже если он предоставляет сторонние JavaScript-API, такие как Ext Js. Но есть ли у нас или увенчались успехом или неудача, на самом деле это не так. Дело в том, что это возможно, и, я надеюсь, очень желательно решить эти проблемы.

Хуже, если вы не знаете, что происходит под крышками, которыми вы управляете риск непредвиденных последствий. Например. как вы знаете, что GWT создает закрытие и управление пространствами имен Правильно?

Это только то, чтобы написать компилятор правильно. Например, WebSharper отображает F # lambdas на JavaScript lambdas в 1-1 манере (фактически, он никогда не вводит лямбда). Возможно, я согласился бы с вашим аргументом, если бы вы упомянули об этом, скажем, WebSharper еще не созрел и недостаточно проверен, и поэтому вы не решаетесь доверять ему. Но затем GWT существует некоторое время и должен создавать правильный код.

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

Ответ 3

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

  • Если вы не хорошо знаете Javascript, вы не можете понять большинство примеров в Интернете с использованием DOM/ExtJ и т.д., поэтому вам нужно научиться Javascript независимо. (По какой-то причине все программисты F # должны иметь возможность, по крайней мере, читать С# или VB.NET, иначе они не смогут получить доступ к большей информации о структуре .net)
  • В любом веб-проекте вам нужно несколько веб-экспертов, которые знают DOM и CSS наизнанку; будет ли такой человек готов работать с F #, а не с Javascript?
  • Будучи привязанным к поставщику компилятора, они будут примерно через 5 лет; Я хочу полностью открыть исходный код или инструменты, которые будут поддерживаться Microsoft.

4 больших позитива, которые я вижу в этих рамках:

  • Обмен кодом между сервером/клиентом
  • Имея меньше языков, которые программист должен знать (javascript - настоящая боль, поскольку он похож на Jave/С#, но не похож на них)
  • Среднее качество программиста F # намного лучше, чем программист jscript.

Ответ 4

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

Я предпочитаю придерживаться чистых решений JavaScript самостоятельно, но, как говорится, я могу придумать несколько случаев, когда GWT будет полезен. GWT позволит команде совместно использовать код между сервером/клиентом, уменьшая необходимость писать один и тот же код дважды (JS и Java). Или, если кто-то переносит Java-клиент в веб-интерфейс, им может быть проще придерживаться GWT (конечно, опять же это может усложнить:-)).

Ответ 5

Я знаю, что это грубое чрезмерное упрощение, потому что есть много других вещей, которые предлагают такие платформы, как GWT, но вот как я его просматриваю: если вам нравится JavaScript, пишите JavaScript; если вы этого не сделаете, используйте GWT или Cappuccino или что-то еще.

Причина, по которой люди используют фреймворки, такие как GWT, не обязательно является абстракцией, которую они дают, - вы можете иметь это с фреймворками JavaScript, такими как ExtJS, - а скорее тем, что они позволяют писать веб-приложения в чем-то, кроме JavaScript. Если бы я был программистом на Java, который хотел написать веб-приложение, я бы использовал GWT, потому что мне не нужно было бы изучать новый язык.

Это все предпочтение, действительно. Я предпочитаю писать JavaScript, но многие люди этого не делают.