10 October 2011

Язык Dart — Structured web programming

Programming
Translation
Original author: Google
image

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

Основные возможности


Классы

Классы и интерфейсы представляют из себя простой и понятный механизм для создания всевозможных АПИ. Эти конструкции добавляют инкапсуляцию и повторное использование методов и данных.

Опциональные типы

Программисты Dart могут добавлять статические типы для своих нужд. В зависимости от программиста и воркфолу разработки, код может мигрировать с простого не типизированного прототипа к сложному модульному приложению со строгим типизированием. Типизированный код позволяет писать меньше документации для объяснения того, что происходит в коде, а тулзы проверки типов могут использоваться для отладки.

Библиотеки

Разработчики могут создавать и использовать библиотеки, которые гарантированно не будут изменяться во время выполнения.

Инструменты

Кроме самого языка Dart включает богатый набор сред выполнения, библиотек и инструментов для разработки и поддержки языка. Эти инструменты позволяют эффективно разрабатывать и отлаживать код, включая редактирование кода во время отладки.

Цели языка


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

Эти цели решают следующие проблемы, с которыми часто встречаются веб-разработчики:
— Маленькие скрипы очень часто мутируют в огромные приложения без какой-либо структуры их очень сложно отлаживать и проблематично поддерживать. В дополнении, эти монолитные приложения не могут быть разделены на адекватные части, поэтому разные команды разработчиков не могут работать над ними раздельно. Веб-приложения невозможно продуктивно разрабатывать, когда они становятся слишком большими.
— Скриптовые языки популярны потому, что их легкая структура позволяет быстро писать код. Как правило, договоренности между частями приложения передаются в виде комментариев, вместо того, чтобы использовать языковые структуры. В результате, другим разработчикам сложно понять, читать и поддерживать такой код.
— Существующие языки делят разработчиков на 2 лагеря: приверженцев статических и динамических языков. Традиционные статические языки требуют тяжелых инструментов и сложных стилей кодирования, которые ограничивают разработчика.
— Разработчики не могут создавать однородные системы, которые охватывают как клиент и сервер, за исключением нескольких классов для Node.js и Google Web Toolkit (GWT).
— Разные языки и форматы, влекут за собой переключение контекста, что усложняет процесс кодирования.

Show me the code


Вот несколько примеров, которые дают представление о языке в целом.

Классы и интерфейсы

Интерфейсы и классы Dart дают вам возможность создавать расширяемые блоки, которые можно повторно использовать. Интерфейс определяет базовый набор методов и констант, которые могут также унаследовать от других интерфейсов. Класс может осуществить несколько интерфейсов, но унаследовать может только от одного суперкласса.

Следующий пример определяет интерфейс, наряду с классом и суперклассом которые осуществляют этот интерфейс:
interface Shape {
  num perimeter();
}

class Rectangle implements Shape {
  final num height, width; 
  Rectangle(num this.height, num this.width);  // Compact constructor syntax.
  num perimeter() => 2*height + 2*width;       // Short function syntax.
}

class Square extends Rectangle {
  Square(num size) : super(size, size);
}

Опциональные типы

Dart дает возможность программисту выбрать создавать не типизированный код или строго типизированный или смешанный. Когда разработчик экспериментирует он может писать не типизированный код для простого прототипирования. Если приложение будет расти разработчик может добавить типы, чтобы упростить отладку и повысить совместимость с другими частями приложения и улучшить читаемость.

Вот, к примеру, простой не типизированный код на Dart, который создает класс Point, который имеет параметры x и y и два метода scale() и distance().
class Point {
  var x, y;
  Point(this.x, this.y);
  scale(factor) => new Point(x*factor, y*factor);
  distance() => Math.sqrt(x*x + y*y);
}

main() {
  var a = new Point(2,3).scale(10);
  print(a.distance());
}

Вот во что превратится код выше, добавив в него типы. Теперь мы будем уверены, что x, y и factor переменные типа num и класс Point принимает два значения типа num:
class Point {
  num x, y;
  Point(num this.x, num this.y);
  Point scale(num factor) => new Point(x*factor, y*factor);
  num distance() => Math.sqrt(x*x + y*y);
}

void main() {
  Point a = new Point(2,3).scale(10);
  print(a.distance());
}

Как я могу использовать Dart?


Вы можете выполнить код Dart различными способами:
— Транслировать код Dart в JavaScript затем запустить код в современном браузере: Chrome, Safari 5+, и Firefox 4+ (другие браузеры будут поддерживаться позднее).
— Выполнить код Dart в виртуальной машине на стороне сервера
— Использовать Dartboard для написания и выполнения маленьких программ на Dart в окне браузера.

Новый MIME тип


Вы можете включить программу на Dart в HTML страницу или вы можете использовать выражения #import или #source для подключения внешних файлов. MIME тип для Dart — “application/dart”:
<html>
  <body>
    <script type="application/dart">
      main() {
        Element element = document.getElementById('message');
        element.innerHTML = 'Hello from Dart';
      }     
    </script>
    <div id="message"></div>
  </body>
</html>

Библиотеки


Dart включает в себя следующие библиотеки для поддержки веб- и северной разработки:
Core Library
Содержит интерфейсы для поддержки основных типов данных и операций.
DOM Library
Содержит интерфейсы для HTML5 DOM, слабо связанных на предложенном стандарте HTML5 по W3C/WHATWG. Эти интерфейсы будут развиваться параллельно со стандартом HTML5.

Вот примерный интерфейс текущей версии Core Library (возможно изменится):
image

Примите участие


Этот проект с открытым исходным кодом будет развиваться с помощью энтузиастов и отзывов не равнодушных разработчиков. Мы выпустили черновик спецификации языка в самом начале его развития для того, чтобы собрать отзывы тех разработчиков, которые будут использовать новый язык и его инфраструктуру для веб-программирования. Вот несколько дополнительных ссылок по Dart:
— Страницы на сайте dartlang.org такие как туториалы, примеры кода, статьи и последний черновик спецификации Dart
— Багтрекьер проекта на Google Code code.google.com/p/dart
— Группа в для обсуждения языка на Google Groups groups.google.com/a/dartlang.org/group/misc

Содержимое этой статьи распространяется под лицензией Creative Commons Attribution 3.0 License, примеры кода под BSD License
Tags:dartgooglejavascriptprogramming language
Hubs: Programming
+75
21.6k 95
Comments 188
Top of the last 24 hours