Ссылки о веб-разработке за ноябрь 2013

Dart 1.0: A stable SDK for structured web apps


Today we’re releasing the Dart SDK 1.0, a cross-browser, open source toolkit for structured web applications. In the two years since we first announced Dart, we’ve been working closely with early adopters to mature the project and grow the community. This release marks Dart's transition to a production-ready option for web developers.

The Dart SDK 1.0 includes everything you need to write structured web applications: a simple yet powerful programming language, robust tools, and comprehensive core libraries. Together, these pieces can help make your development workflow simpler, faster, and more scalable as your projects grow from a few scripts to full-fledged web applications.

On the tools side, the SDK includes Dart Editor, a lightweight but powerful Dart development environment. We wanted to give developers the tools to manage a growing code base, so we added code completion, refactoring, jump to definition, a debugger, hints and warnings, and lots more. Dart also offers an instant edit/refresh cycle with Dartium, a custom version of Chromium with the native Dart VM. Outside the browser, the Dart VM can also be used for asynchronous server side computation.

For deployment, dart2js is a translator that allows your Dart code to run in modern browsers. The performance of generated JavaScript has improved dramatically since our initial release and is in many cases getting close to that of idiomatic JavaScript. In fact, the dart2js output of the DeltaBlue benchmark now runs even faster than idiomatic JavaScript. Similarly, dart2js output code size has been reduced substantially. The generated JavaScript for the game Pop, Pop, Win! is now 40% smaller than it was a year ago. Performance of the VM continues to improve as well; it’s now between 42% to 130% faster than idiomatic JavaScript running in V8, depending on the benchmark.

DeltaBlue benchmark results
The Dart SDK also features the Pub package manager, with more than 500 packages from the community. Fan favorites include AngularDart and polymer.dart, which provide higher-level frameworks for building web apps. Dart developers can continue using their favorite JavaScript libraries with Dart-JavaScript interop.

Going forward, the Dart team will focus on improving Dartium, increasing Dart performance, and ensuring the platform remains rock solid. In particular, changes to core technologies will be backward-compatible for the foreseeable future.

Today’s release marks the first time Dart is officially production-ready, and we’re seeing teams like Blossom, Montage, Soundtrap, Mandrill, Google's internal CRM app and Google Elections, already successfully using Dart in production. In addition, companies like Adobe, drone.io, and JetBrains have started to add Dart support to their products.

To get started, head over to dartlang.org and join the conversation at our Dartisans community on Google+. We’re excited to see what you will build with the new stable Dart SDK 1.0.

Posted by Lars Bak, Software Engineer and Chief Dartisan

учиться всю жизнь

в обсуждениях профессии программиста часто упоминают, как динамично развивается наша индустрия, и как для сохранения уровня квалификации нам нужно всю жизнь учиться новому. Это «всю жизнь учиться» при этом звучит как нечто непростое и сложное

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

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

впрочем, мне понравились чьи-то слова, что профессионализм инженера определяется именно тем, как он будет решать задачи, которые не знает, как решать

рекомендую fish shell

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

mustache и with

недавно наша команда выбирала для себя новый шаблонизатор. К сожалению, ретрограды не дали нам использовать Jade. Остальные подходящие шаблонизаторы разделились на две группы по используемому синтаксису: mustache и jinja2

mustache оказался удивительным. Не только благодаря претензиям на отсутствие логики в шаблонах (они заменили if и for на # и думают, что логики нет). Сильнее меня удивило, что в таком молодом синтаксисе почти всё построено на приёме, который давно считается вредным. Я имею в виду оператор with из яваскрипта

напомню, чем плох этот оператор. Допустим, у нас есть функция, суммирующая некоторое число с одним из значений объекта, переданного в качестве параметра:

function sum(foo) {
    var baz = 10;
    return baz + foo.bar;
}

это можно переписать в следующем виде:

function sum(foo) {
    var baz = 10;
    with (foo) {
        return baz + bar;
    }
}

всё будет неплохо работать до тех пор, пока где-то в совершенно другом месте приложения мы не решим, что объекту foo нужно содержать и значение baz. В результате sum будет прибавлять к bar не 10, а foo.baz

и это — врождённая проблема mustache. Пара из поддерживающих этот синтакс шаблонизаторов добавляют в него возможность обойти эту проблему, но ведь базовый синтакс подталкивает к этой ловушке:

{{#people}}
    Hello, {{title}} {{name}}
{{/people}}

как думаете, здесь title это заголовок страницы или титул человека?

← предыдущий месяц