LINUX.ORG.RU

Экспериментальные нововведения в реализации JavaScript в Chrome

 , ,


0

3

В сборку браузера Google Chrome для разработчиков (dev channel) была добавлена реализация некоторых экспериментальных возможностей интерпретатора JavaScript, взятых из грядущей спецификации Harmony. Самое интересное:

  • Добавлена возможность использовать лексическую область видимости (lexical scoping). Для этого нужно использовать объявление переменной «let» или «const» вместо «var».
  • Коллекции - более адекватная реализация отображений (maps) и множеств. Правда, итерация по коллекциям пока не поддерживается.
  • Слабые отображения (weak maps) - отображения, в которых сборщик мусора удаляет элементы, ключ которых более недоступен. Это позволит разработчикам меньше волноваться об утечках памяти при использовании больших долгоживущих таблиц.
  • Прокси - виртуальные объекты, которые эмулируют работу реальных объектов и функций, и которые могут использоваться для построения интересных интерфейсов и абстракций.

Разработчики обещают двигаться дальше.

Для того, чтобы включить экспериментальные возможности, необходимо скачать последнюю сборку из dev channel и включить опцию «Experimental JavaScript features» в chrome://flags.

>>> Подробности

★★★★★

Проверено: maxcom ()

Этак еще 10 лет, и JS превратится во что-то юзабельное.

Хотя скорее он превратится в идеологического брата-близнеца C++: язык, при помощи которого можно делать всё, но через жопу.

geekless ★★ ()

Пщщпду как всегда всё усложняет. Потом ему это надоест и он это выбросит. Так что нельзя относиться серьёзно к технологиям Пщщпду.

AGUtilities ★★★ ()

Автор, поправь, пожалуйста

Прокси - виртуальные объекты, которые эмулируют работу реальных объектов и функций, и которые могут использоваться для построения интересных интерфейсов и абстракций

Забыл точку в конце предложения.

Для того, чтоб включить экспериментальные возможности,

ЧтобЫ.

последнюю сборку из dev channel, и включить опцию

По-моему, тут запятая не нужна.

«Experimental JavaScript features» во chrome://flags.

Лучше _в_ chrome://flags или, может «в разделе chrome://flags».

Silent ★★★★★ ()
Ответ на: комментарий от anonymous

Милейший, в javascript переменная объявленная через var будет видна от объявления и ниже во всех блоках кода.

function test() {
  for(var i = 0; i > 5; ++i) {
    //do some
  }
  console.debug(i);//переменная никуда не делась!
}

Такое идиотское поведения очень часто приводит к трудноуловимым ошибкам. Очевидно, что язык с такими алогичными особенностями неприменим для реальной разработки, но это стандарт, как и C++.

belous_k_a ()

итерация по коллекциям пока не поддерживается

охохо. :-|

Bad_ptr ★★★★ ()
Ответ на: комментарий от buddhist

Зачем классы в прототипном языке?

Потому что все «осиляторы» первое, что делают, взявшись писать на JS, реализуют эмуляцию классов поверх прототипов. Теперь такую эмуляцию, насколько я понимаю, хотят сделать стандартной фичей.

Знатная дурь, короче.

geekless ★★ ()

Хромозандаж -не к чему. Но яваскрипт -пусть пилят. С паршивой овцы собственно...

GNU-Ubuntu1204LTS ★★★ ()
Ответ на: комментарий от belous_k_a

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

Это для скорости, чтобы он был применим для реального отображения страниц на мониторе пользователя за приемлимое время. Правда он всёравно тормоз.

Bad_ptr ★★★★ ()
Ответ на: комментарий от Bad_ptr

это в недобраузерах он тормоз, а в хромом он jit-компилируется в натив, из-за чего довольно быстр

anonymous ()
Ответ на: комментарий от geekless

Пусть тады сразу JVM лучше бы в браузер впихивали, а не пилить очередной наколеночный скриптовый язык. Всё равно он по мере развития будет стараться догнать Явы/С++ы, но уж лучше яву.

Bad_ptr ★★★★ ()
Ответ на: комментарий от Bad_ptr

Милейший, ваша логика стольже затейлива, сколь и логика разработчиков js, объясните, пожалуйста, каким образом «разбухание стека» (а ведь увеличение области видимости, суть не удаление из стека отживших переменных) помогает скорости?

belous_k_a ()
Ответ на: комментарий от quantum-troll

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

anonymous ()
Ответ на: комментарий от Bad_ptr

уж лучше яву.

Милейший, а в Java есть указатели на функции или замыкания для не final переменных? А ведь, без них количество банальнейшего кода возрастет на порядки.

belous_k_a ()
Ответ на: комментарий от belous_k_a

объясните, пожалуйста, каким образом «разбухание стека» (а ведь увеличение области видимости, суть не удаление из стека отживших переменных) помогает скорости?

Таким, что не нужно следить за областью видимости и создавать/удалять переменные при выходе за скобки.

Bad_ptr ★★★★ ()
Ответ на: комментарий от belous_k_a

без них количество банальнейшего кода возрастет на порядки

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

Bad_ptr ★★★★ ()
Ответ на: комментарий от buddhist

> Хром не нужен

Я что-то пропустил? вроде ещё пол года назал все ссали кипятком и кричали на каждом углу @Chrome Forever@... а щас что ни коммент то «не нужен» то ещё что-то...

// me никогда не слезал с рыжего зверя

romaxa ()

let

в мозилле 100500 лет как. Плюс, я так полагаю, что let* так и нет

lazyklimm ★★★★★ ()
Ответ на: комментарий от buddhist

там на прошлое первое апреля запилили же lexical let

lazyklimm ★★★★★ ()
Ответ на: > Хром не нужен от romaxa

пол года назал все ссали кипятком и кричали на каждом углу @Chrome Forever@... а щас что ни коммент то «не нужен»

+1. Вся суть хомячков.
Но я то сразу был против хрома >:-p

Bad_ptr ★★★★ ()
Ответ на: комментарий от Bad_ptr

Таким, что не нужно следить за областью видимости

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

создавать/удалять переменные при выходе за скобки.

Создавать, таки, надо, а вот удалять — нет, отчего Mozilla Firefox съедает 1.5 GiB памяти.

belous_k_a ()
Ответ на: комментарий от Bad_ptr

>>> в Java есть указатели на функции или замыкания для не final переменных? А ведь, без них количество банальнейшего кода возрастет на порядки.

>>без них количество банальнейшего кода возрастет на порядки

>С ними количество багов и наколеночность возрастает на порядки

Функциональщики, вы _это_ слышали? Предлагаю, предать его анафеме, с последующим распитием.

belous_k_a ()

Это конечно очень интересно и радостно, но с точки зрения практической разработки кофескрипт — наше всё: 100500 полезных фич (и эти ваши классы есть, ага) плюс никаких проблем с обновлением и всё это без необходимости думать о поддержке браузера.

А вы реально всё ещё пишите на js? Только хардкор или есть серьёзные причины?

Apple-ch ★★ ()
Ответ на: комментарий от belous_k_a

Это нормальная реакция неосилятора. Не обращай внимания.

geekless ★★ ()
Ответ на: > Хром не нужен от romaxa

Когда у меня было 4 ГиБ памяти, все было нормально. Но после того, как я погонял его на нетбуке с 1 ГиБ — я сказал «не нужно» :)

buddhist ★★★★★ ()
Ответ на: комментарий от buddhist

Явно не быдлокодерские тормозящие elisp-скриптики.
---
Кстати, можешь сменить тормозной быдлокодерский emacs на реактивные sam и acme, написанные профессиональным программистом.

quantum-troll ★★★★★ ()
Ответ на: комментарий от geekless

http://shootout.alioth.debian.org/u64/benchmark.php?test=all&lang=v8&...
n-body 1/5 22×
fasta 1/2 34×
Когда у меня было 4 ГиБ памяти, все было нормально. Но после того, как я погонял его на нетбуке с 1 ГиБ — я сказал «не нужно» :)

Firefox не тормозит.

quantum-troll ★★★★★ ()
Ответ на: комментарий от Bad_ptr

На сколько оно тормознее?

Э… я не замерял. Если ты задаёшь такой вопрос, то, видимо, не в курсе, что такое кофискрипт. В продакшене он компилится в JS один раз — при деплое. Есть ли оверхед у того, что получается на выходе? Допускаю, что есть. Но ты же знаешь, человекочасы нынче дорогие, а реализации ecmascript в браузерах быстрые…

Apple-ch ★★ ()

Он и с этой ерундой не взлетит.

Fanta ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.