The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Утверждён стандарт ECMAScript 6

17.06.2015 22:21

На очередном собрании Генеральной Ассамблеи ECMA официально утверждён стандарт ECMAScript 2015 (PDF), более известный как ECMAScript 6 или "ECMA-262 6th edition". ECMAScript 6 продолжает линейку стандартов, определяющих базовые функциональные возможности JavaScript, реализованные для всех web-браузеров. Прошлый стандарт ECMAScript 5 был принят в 2009 году, а позапрошлый в 1999 году. Долгое время развитие стандарта было заморожено из-за трудноразрешимых разногласий среди производителей браузеров, одни из которых выступали за внесение значительных изменений в JavaScript, а другие настаивали на сохранении полной семантической совместимости.

Основные нововведения ECMAScript 6:

  • Поддержка классов. Например:
    
      class Polygon {
        constructor(height, width) {
           this.name = 'Polygon';
           this.height = height;
           this.width = width;
        }
    
        sayName() {
           log('Hi, I am a ', this.name + '.');
        }
      } 
    
      let p = new Polygon(300, 400);
    
    
  • Шаблоны строк, предоставляющие удобные средства для форматирования строк. Шаблоны строк являются строковыми литералами, допускающими встраивание выражений. Выражения определяются в размещённом внутри строки блоке ${...}, который может включать как отдельные переменные (${name}), так и выражения (${5 + a + b})). Например, в результате выполнения "var message = '1 + 1 = ${1 + 1}'" в переменную будет записана строка "1 + 1 = 2";
  • Поддержка лексических объявлений переменных (Lexical Declarations), позволяющих ограничить текущим блоком область видимости ключевых слов, через их повторное определение при помощи оператора let вместо var.
  • Оператор const для определения переменных, доступных только для чтения;
  • Модули. Для экспорта и импорта модулей введены операторы export и import, например, "import * as mymodule from "lib/mymodule". Предоставляются средства динамической загрузки модулей, пространства имён и изоляция состояния.
  • Arrow-функции позволяющие использовать синтаксис "=>" для быстрого определения анонимных функций (например, "x.map(x => console.log(x * x));") и ключевое слово "this" для доступа к текущему лексическому контексту функции;
  • Сокращённый формат задания объектов (например, "var a = {obj1, obj2}" вместо "var a = {'obj1': obj1, 'obj2': obj2}");
  • Тип Symbol, применимый для идентификаторов свойств объектов;
  • Генераторы, позволяющие организовать эффективное выполнение функций в асинхронном режиме. Генераторы представляют собой специальные функции, генерирующие итераторы. Использование выражения yield для генератора, позволяет приостановить его выполнение и вернуть управление вызвавшей генератор функции. Особенность генераторов состоит в том, что последующие вызовы будут использовать предыдущее состояние и продолжат выполнение кода генератора с того места, где он был приостановлен.
  • Объект WeakSet, позволяющий определить множество из объектов, и объект WeakMap, определяет коллекцию пар ключ/значение в которых ключ является объектом, к которому может быть прикреплено произвольное значение. WeakSet и WeakMap отличаются использованием эффективных с точки зрения потребления памяти структур, использующих сборщик мусора для удаления неиспользуемых объектов (объект удаляется, если на него больше не осталось ссылок, кроме ссылки из текущей коллекции) и предотвращающих возникновение утечек памяти;
  • Механизм Promise, предназначенный для получения значений в асинхронном режиме. Позволяет определить значение, которое пока неизвестно, но будут определено через какое-то время;
  • Возможность определения значений по умолчанию для аргументов функций (например, "function myfunc(a='test', b=1)");
  • Возможность передачи в функцию произвольной группы параметров в форме массива (например, "function myfunc(a, b, ...c)");
  • Новая форма слияния массивов (например, "var a= [3,4]; var b = [1,2,...a])";
  • Cтруктуры данных Map и Set, упрощающих работу со специфичными типами коллекций. Map позволяет определять коллекции наборов в формате ключ/значение, при том, что в качестве ключа и значения могут выступать любые выражения JavaScript. По аналогии Set позволяет задать множество любых выражений JavaScript;
  • Поддержка абстракции массивов (Array comprehensions), дающих возможность создания нового массива на основе другого массива;
  • Большая порция новых методов для строк, массивов и математических операций, в том числе Array.from(), Array.prototype.keys, Array.prototype.entries, Array.prototype.copyWithin(), Number.isSafeInteger(), Math.fround(), Math.ToFloat32(), startsWith(), endsWith(), contains(), clear() и Math.imul;


  1. Главная ссылка к новости (https://mail.mozilla.org/piper...)
  2. OpenNews: Google развивает AtScript, вариант JavaScript с аннотациями типов
Лицензия: CC-BY
Тип: Интересно / К сведению
Короткая ссылка: https://opennet.ru/42450-ecmascript
Ключевые слова: ecmascript, javascript
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (73) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.9, Аноним (-), 23:03, 17/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +9 +/
    Замечаю в последнее время как Джависты переходя на JS, тащят с собой весь свой легаси-абстрактный-бред вроде DAO с кучей не делающего ничего кода
     
     
  • 2.37, Аноним (37), 06:30, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    А как у них может получаться тащить его с собой, они что переписывают этот код на JS, или считают удобным как-то запускать яву из яваскрипта?
     
     
  • 3.62, КО (?), 17:22, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    GWT
     
  • 3.70, Аноним (-), 23:26, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    да, переносят свой мега-абстрактный код на JS,
    Фабрики там другую хрень, без понимания а нужна ли она в JS, в динамическом языке
     
     
  • 4.78, Crazy Alex (ok), 03:56, 19/06/2015 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Их нужность зависит не от языка, а больше от размеров проекта. В смысле - это устоявшийся, показавший совю применимость метод создания большого софта. Ка в плане написания так и способа думать о нём так, чтобы голова не взрывалась. И когда в браузер приходит что-то соответствующих объёмов - приходится всё это дело применять.

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

     
  • 2.79, Другой аноним (?), 09:25, 19/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Замечаю в последнее время как Джависты переходя на JS, тащят с собой
    > весь свой легаси-абстрактный-бред вроде DAO с кучей не делающего ничего кода

    Нет, не переходят, но добавляют в свой инструментарий ;-)
    Кхм, по моему DAO одна из самых естесственных вещей среди прочих паттернов, Вы так или иначе будете его использовать при работе с данными, а называть можете как угодно )))

     

  • 1.11, Аноним (-), 23:28, 17/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >>Поддержка абстракции массивов (Array comprehensions), дающих возможность создания нового массива на основе другого массива;

    Эту python-фичу в следующую версию планируют. ES7, правда её обещают выпустить гораздо оперативнее чем ES5 -> ES6, поживём увидим.

    >>This is an experimental technology, part of the Harmony (ECMAScript 7) proposal.

     
  • 1.14, Аноним (-), 00:13, 18/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что, целочисленных типов так и не ввели? Зря. В Lua вон уже есть.
     
     
  • 2.87, AlexYeCu (ok), 15:02, 21/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    >Что, целочисленных типов так и не ввели? Зря. В Lua вон уже есть.

    Разработчик LuaJIT сказал, что для новой версии Lua ничего делать не будет: лэнгвич форкд, все в лес. Так что уже неважно, чего там в lua есть: важно, что последними версиями пользоваться проблематично на текущий момент.

     

  • 1.15, Crazy Alex (ok), 01:07, 18/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    С такими map, для которых get/set надо писать, пусть они пройдут лесом, а дальше полем. Покосят травы, покурят и оставят IT кому-нибудь другому.
     
     
  • 2.16, Lain_13 (ok), 01:17, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Я что-то не понял щито тебя не устраивает? В обычных map тоже get/set есть и что?
    Или это ты так примера с ClearableWeakMap испугался? Так это пример как прикрутить сбоку то, что не сильно-то и нужно.
     
     
  • 3.20, Crazy Alex (ok), 01:57, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Меня бесит это убогое джавовское многословие. Нормальный вариант использовал бы квадратные скобки. Я в курсе, что в JS так пропертя JS-объекта адресуются - но по-моему это решаемый вопрос. А ещё лучше - если бы мапу не вводили вообще, а наделили её свойствами пустой объект, который {}. И для set сделали бы интерфейс как для булевой мапы, т.е. чтобы можно было писать if (mySet['x'])... А так - единственным преимуществом JS как языка (ну, кроме того, что в вебе ему альтернатив нет) была относительная компактность. И они её зачем-то гробят.
     
     
  • 4.32, Lain_13 (ok), 03:25, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    И как предлагаешь объявлять WeakMap если наделить пустой объект свойствами обычн... большой текст свёрнут, показать
     
     
  • 5.51, Crazy Alex (ok), 13:28, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да масса вариантов, как объявлять - один хрен это магия движка, а не библиотечные классы. Например, obj = WeakMap.transform(obj);

    Впрочем, в свете сегодняшней новости всё это мелочи. Недолго джаваскрипту жить осталось, чему я не передать как рад.

     
     
  • 6.55, Аноним (-), 13:56, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    а если историю про Dart вспомнить? подвижка конечно хорошая, но лишь бы до масс дошло
     
     
  • 7.74, Crazy Alex (ok), 03:26, 19/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Разница очень проста. Дарт - это был только гугл. Здесь - гугл, мозилла и майкрософт.
     
  • 3.21, _Vitaly_ (ok), 02:00, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +6 +/
    cинтакcиc не юзабельный
     
  • 3.26, Crazy Alex (ok), 02:32, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +3 +/
    О, там совсем круто - оно даже в JSON не экспортируется обычным JSON.stringify. Я уже представляю новую версию jquery, которая будет костылить преобразование, скармливая свой replacer... Ну вот неужели они вообще никак не задумывались о том, как оно будет применяться?
     
     
  • 4.34, Lain_13 (ok), 03:51, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А то, что WeakMap и WeakSet оперируют объектами и то, что у объектов могут быть приватные свойства, которые JSON.stringify всё одно потеряет, тебя не смущает? Оно не предназначено для экспорта в JSON. Более того, если тебя угораздит объявить WeakSet объектами, на которые никто более не ссылается (при обратной сборке из JSON именно это и случится ведь), то после первой же сборки мусора он у тебя станет пустым.
     
     
  • 5.50, Crazy Alex (ok), 13:24, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Конечно смущает. По уму - должен быть штатный механизм, позволяющий прибить к объекту (а не к сериализатору) логику сериализации.
     
     
  • 6.58, Lain_13 (ok), 16:00, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Штатного метода сериализации объектов не существует хотя бы потому, что они могут находиться в неопределённом состоянии, ожидая возврата данных извне, или состояние может зависеть от времени и возможно, что его нельзя просто поднять из снапшота, а нужна какая-то реинициализация. Т.е. корректный сериализатор/десериализатор может написать только сам автор объекта. Потому и решили не заморачиваться.

    Ну а в случае с WeakMap/WeakSet, как я уже говорил, восстановление из снапшота просто не имеет смысла. На объекты должны существовать ссылки извне, а иначе они будут автоматически выброшены на этапе сборки мусора.

     
     
  • 7.75, Crazy Alex (ok), 03:37, 19/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Дык, я о чём Именно автор объекта И этот сериализатор должен быть автоматом за... большой текст свёрнут, показать
     

  • 1.17, Jason (??), 01:32, 18/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Не очень понимаю, зачем нужны классы, если они и так де-факто присутствуют. Javascript же prototype-based уже. Чем class newClass{constructor()} удобнее, чем function Class(){}? Неужели только тем, что первый метод - буквальнее? Все равно расширять, добавлять методы и т.п. придется через someClass.prototype. Или у этих новых классов есть какие-то еще крутые фичи?
    Не понимаю зачем нарушать дзен функционального минимализма и превращать JS в монстра типа PHP.

    Помогите разобраться, чего я недопонял?

     
     
  • 2.19, Lain_13 (ok), 01:55, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Строго говоря смысла делать new func тоже нет.

    Можно (и даже нужно) писать так:

    let Polygon = {
      create: function(height, width) {
        let self = Object.create(this);
        self.name = 'Polygon';
        self.height = height;
        self.width = width;
        return self;
      },
      sayName: function() {
        return 'Hi, I am a ' + this.name + '.';
      }
    }

    let p = Polygon.create(300, 400);
    console.log(p.sayName());

    Это то, как изначально задумывалось работа с объектами в JS.
    А new func только проблемы создаёт. Особенно если случайно забыть написать new. При таком же подходе это просто невозможно.

     
     
     
    Часть нити удалена модератором

  • 4.35, Lain_13 (ok), 04:23, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Секта свидетелей жабы, ваши вызовы функций обросии жиром со всех сторон…

    А теперь создадим новый объект и расширим его, добавив функцию площади:

    let AreaPolygon = Object.create(Polygon);
    AreaPolygon.area = function(){return this.height * this.width};

    let p = AreaPolygon.create(300,400);
    console.log(p.sayName());
    console.log(p.area());

     
     
  • 5.45, Аноним (-), 11:52, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    ok.

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

    пример псевдокод:
    AreaPolygon () {
        sayName: function() {
            return "It's " + super().sayName() + " & AreaPolygon";
      }
    }

     
     
  • 6.57, Lain_13 (ok), 15:20, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > ok.
    > а как в вашем примере переопределить метод-функцию класса-объекта, при это вызвав этот
    > же метод родителя?

    Не уверен, что это корректный способ, но лично я сделал бы вот так:

    AreaPolygon.sayName = function() {
    return Polygon.sayName.call(this) + " My area is " + this.area() + " of square something."
    }

    Хотя, конечно, можно было бы сделать AreaPolygon.parent = Polygon и потом просто дёргать this.parent.sayName(). Зависит от того нужно ли тебе свойство parent или нет.

    Впрочем, с наследованием новых свойств от объекта-родителя наличие/отсутствие такого полня проблемы не создаёт:

    Polygon.setName = function(name) {this.name = name}
    p.setName('Rectangle'); // p тут объект класса AreaPolygon
    console.log(p.sayName())

     
     
  • 7.59, Аноним (-), 16:25, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    твой пример не работает, ну а трансляторы генерируют в два раза больше кода если... большой текст свёрнут, показать
     
     
  • 8.61, Lain_13 (ok), 16:52, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    У меня в консоли фокса так let Polygon create function height, width... большой текст свёрнут, показать
     
     
  • 9.64, Аноним (-), 17:55, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    var Polygon create function height, width let self Object create... большой текст свёрнут, показать
     
     
  • 10.68, Lain_13 (ok), 18:57, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Вот такое вот получилось var AreaPolygon Object create Polygon AreaPolygon ... текст свёрнут, показать
     
     
  • 11.80, Аноним (-), 11:38, 19/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    ага, интересно Единственное на сайте developer mozilla org ru docs Web JavaScri... большой текст свёрнут, показать
     
     
  • 12.82, Lain_13 (ok), 13:08, 19/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Надо будет запомнить Спасибо Кстати, вместо set и get можно писать про... большой текст свёрнут, показать
     
     
  • 13.83, Аноним (-), 15:16, 19/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    ок, благодарю полезный тред получился ... текст свёрнут, показать
     
  • 8.63, Lain_13 (ok), 17:39, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    А вот вариант твоего кода без классов var Creature create function name ... текст свёрнут, показать
     
     
  • 9.65, Аноним (-), 18:01, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    gt оверквотинг удален ага, не увидел сразу твой ответ, сам примерно так написа... текст свёрнут, показать
     
  • 6.71, Алконим (?), 02:27, 19/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    AreaPoligon.sayName=function(super) { return function() { return "It's" +super()+"& AreaPolygon"; }}(Polygon.sayName);
     
  • 2.22, Crazy Alex (ok), 02:06, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    навскидку:
    - нельзя вызвать напрямую, без new - частая и тупая ошибка с function Class.
    - геттеры/сеттеры там же
    - наследование через extends, так что prototype не при делах.
    Плюс всякие расширенные возможности вроде итераторов.

    Если коротко - то да, буквальнее. Всегда хорошо, когда синтаксис совпадает с семантикой, меньше голова мусором забивается.

     
  • 2.25, Jason (??), 02:13, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ребята, спасибо!

    P.S.: Про extends - действительно, напоминает монстра PHP.

     
     
  • 3.27, Crazy Alex (ok), 02:33, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Минимализм хорош в минималистичных программах, а когда у тебя кода столько, что минифицированным получается два мегабайта - то лучше когда как пишется, так и читается.
     
     
  • 4.43, Аноним (-), 10:36, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Я конечно понимаю что js применяют где попало и не совсем по назначению, но всё таки 2Мб. наводит на нехорошие мысли.

    p.s. С тем что лучше как пишется так и читается, полностью согласен :)

     
     
  • 5.52, Crazy Alex (ok), 13:30, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Посмотри, сколько весят какие-нибудь гуглодоки, или морда групвари. Да и на обычных сайтах бывает - особенно на чём-то вроде газет, где тянется куча стороннего кода - партнёры, реклама, трекеры и т.д. Просто если оно тащится не одновременно объём не слишком заметен, но в общем кодовая база, которая должна как-то совместно работать немаленькая.
     

  • 1.23, Crazy Alex (ok), 02:09, 18/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Что-то у меня сильное подозрение, что теперь они в седьмой версии смогут с чистой совестью задепрекейтить прототипы, так как их никто не будет использовать кроме пары упрямцев. У них было ровно два применения, насколько я видел - рискованные извращения с существующими объектами вроде того, что творил Prototype и, собственно, эмуляция классов. Или есть ещё какие-то примеры где оно действительно надо?
     
     
  • 2.28, Jason (??), 02:57, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Для этого нет никаких причин. Prototype- и Class based OOP - две разные парадигмы. Каждая из них имеет плюсы и минусы и будет использована умным программистом в соответствии с задачей. Если, конечно, он умеет пользоваться инструментом и руки растут откуда надо.

    Навскидку: http://programmers.stackexchange.com/questions/110936/what-are-the-advantages

    И как справедливо замечено по ссылке, "the main advantage of prototype-based OOP its that objects & "classes" can be extended at runtime".

    Еще:

    http://stackoverflow.com/questions/816071/prototype-based-vs-class-based-inhe
    http://stackoverflow.com/questions/879061/what-are-the-advantages-that-protot

     
     
  • 3.29, Crazy Alex (ok), 03:12, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ну, об этом "advantage" я упоминал - и в конце концов стало общепризнанным, что Prototype.js, который на этом построен - плохая штука. Как бы не в 99% случаев любые фокусы вроде "extended in runtime" - это поиск проблем в поддержке. И вот то, что в этом ответе перечисляется - как раз оно. Это аргументы хакера, который в одиночку колдует над хитрым кодом, понятным только ему, причём понятным полностью.

    Я так понимаю, что JS перерос прототипную модель. Когда тебе нужен сравнительно мелкий скрипт - можно написать какой угодно гениальный код. Но когда у тебя большое приложение или куча third party компонент (а сейчас на сайте десяток чужих библиотек подтянуть - норма, причём они постоянно меняются) - игры с прототипами становятся слишком рискованными.

     
     
  • 4.38, freehck (ok), 07:47, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Эдак Вы дойдёте до утверждения, что любое порождение процедуры ли, объекта или просто выполнение eval - моветон. Но это не так. Существуют задачи, решение которых существенно упрощается при таком подходе. Например, это задачи символьного исчисления, программирования AI.

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

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

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

     
     
  • 5.44, Аноним (-), 10:41, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Эдак Вы дойдёте до утверждения, что любое порождение процедуры ли, объекта или
    > просто выполнение eval - моветон. ...

    До того что нужно заменить js на java с ограниченным набором core библиотек.

     
     
  • 6.85, freehck (ok), 01:29, 20/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Эдак Вы дойдёте до утверждения, что любое порождение процедуры ли, объекта или
    >> просто выполнение eval - моветон. ...
    > До того что нужно заменить js на java с ограниченным набором core
    > библиотек.

    Ох, да делайте, что хотите с этой Вашей ненаглядной явой. Только мне не сватайте.

     
  • 5.53, Crazy Alex (ok), 13:40, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Вот насчёт "Существуют задачи, решение которых существенно упрощается при таком подходе. Например, это задачи символьного исчисления, программирования AI" - можно подробнее? Это, собственно, то, о чём я спрашивал - есть ли реальные применения, где прототипы таки дают хороший выигрыш?

    > Область применения порождает пользователей языка, а пользователи - требования к нему.

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

    И именно область применения поменялась, объёмы кода выросли, появилась необходимость в такой же поддержке, как и для "взрослых" приложений. И все требования, отсюда вытекающие.

    Ладно, я, кажется, погорячился с предсказанием - в свете сегодняшней новости скорее JS через пару лет в основном уйдёт из веба.

     
     
  • 6.84, freehck (ok), 01:27, 20/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, тут весь вопрос, выигрыш в чём именно Вас интересует В производительности -... большой текст свёрнут, показать
     
  • 5.72, Алконим (?), 02:34, 19/06/2015 [^] [^^] [^^^] [ответить]  
  • +/

    > Если бы все программисты могли бы быть хакерами, высококлассными it-специалистами, то сейчас
    > бы у нас было засилье лиспов и т.п.,

    JavaScript - это Lisp(Scheme) с синтаксисом похожим на Java.

    A company called Netscape was founded in 1994 and created one of the first web browsers. They recruited Eich in 1995, because they wanted him to create a programming language for that web browser. The lure for him was that he would be able to base the language on Scheme (a Lisp dialect). Scheme’s influence led to JavaScript having closures. Another influence was the prototype-based programming language Self which is responsible for JavaScript’s prototypal inheritance (some of the elegance of this approach is hidden by JavaScript’s muddled adoption of it). Next, Java got included in the browser. It quickly gained popularity and influenced Netscape’s decisions regarding JavaScript.

     
     
  • 6.86, freehck (ok), 01:37, 20/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    >> Если бы все программисты могли бы быть хакерами, высококлассными it-специалистами, то сейчас
    >> бы у нас было засилье лиспов и т.п.,
    > JavaScript - это Lisp(Scheme) с синтаксисом похожим на Java.

    Спасибо, не знал. Впрочем, если весь JS - это синтаксический сахар для того, чтобы быть похожим на C-подобные языки, типа Java; то я бы предпочёл осуществить преобразование JS в sexp-ы и уже напрямую с ними работать. Смотреть на Java-подобный код мне очень не удобно.

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

     
  • 5.73, Алконим (?), 02:37, 19/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Если бы все программисты могли бы быть хакерами, высококлассными it-специалистами, то сейчас
    > бы у нас было засилье лиспов и т.п., как наиболее мощных

    http://www.crockford.com/javascript/little.html

     
  • 4.67, _Vitaly_ (ok), 18:57, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ну на ходу перековыривать прототипы это действительно полный ахтунг. А вот растягивать ленивую инициализацию миксинов очень даже удобно. На классах все что связано с миксинами будет менее удобно делать.

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

     
     
  • 5.76, Crazy Alex (ok), 03:49, 19/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вот для больших проектов это отсутствие тормозов - лишний риск.

    Что до миксинов - да, объектную систему ввели хиленькую, а миксины чтобы в ней были - нужно либо множественное наследование либо их поддержка в явном виде. Лениво, впрочем, ни так, ни так не будет, хотя я не очень понимаю, зачем - но вполне возможно, что где-то и нужно.

     

  • 1.31, Аноним (-), 03:17, 18/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    > Например, в результате выполнения "var message = '1 + 1 = ${1 + 1}'" в переменную будет записана строка "1 + 1 = 2";

    Новый класс уязвимостей, javascript инъекции?

     
     
  • 2.39, Аноним (-), 08:46, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Новый? А XSS разве не javascript injection?
     

  • 1.36, Аноним (-), 05:46, 18/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Осталось подождать каких-то лет 15-20, что бы у большинства пользователей были браузеры которые поддерживают шестерку. А то ведь браузеры как правило обновляют только когда винду переустанавливают... Oh shit! IE8.. IE9, IE10, IE11!
     
     
  • 2.40, Аноним (-), 08:48, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вы из какого года? Chrome + firefox это уже большинство браузеров. А до поддержки ECMAScript 6 они сами обновятся.
     
     
  • 3.41, Аноним (-), 08:59, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Большинство - не все. В требованиях любого коммерческого продукта - поддержка IE как минимум 10. Это в лучшем случае. А по факту - практически везде нужно поддерживать IE8.
     
     
  • 4.47, й (?), 12:07, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Большинство - не все. В требованиях любого коммерческого продукта - поддержка IE
    > как минимум 10. Это в лучшем случае. А по факту -
    > практически везде нужно поддерживать IE8.

    девятка уже два года даже гуглом не поддерживается. восьмёрка -- три года.

    ну, нахрена сайту в 2015 году поддерживать устаревший веб-браузер, на котором я даже gmail запустить не могу?

    более того: нахрена такой браузер пользователям? вот они и ставят хром.

     
     
  • 5.48, й (?), 12:11, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +3 +/
    да и вообще ie 8-9 -- это windows xp, vista и необновлённая семёрка без сервис-пака. эти все три системы уже давно EOL. добро пожаловать в 2015 год.
     
     
  • 6.54, Аноним (-), 13:42, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Тем не менее их используют и отключив их поддержку можно нажить себе проблем.
     
     
  • 7.69, fi (ok), 19:10, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Смешной вы человек из каменного века :)  ишака вспомнили.

    Мы делаем так:
    < h1 > Данная версия браузера не поддерживается! Используйте браузер Firefox версии 17 и выше.< / h1 >

     
  • 5.66, Аноним (-), 18:54, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    За домашних пользователей можно не беспокоиться. Но проект над которым мы недавно работали - предназначен для врачей прежде всего, а у них в больницах еще много где стоят машины с ХР на борту и IE8. Потому что по какой-то таинственной причине администраторы больниц запрещают ставить сторонний софт. Примечание: я говорю не об этой стране. Как это не было бы удивительно - но в США, даже в той же Калифорнии, в больницах XP+IE - не редкость.
     
     
  • 6.77, Crazy Alex (ok), 03:51, 19/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, значит для специализированных применений новые фичи пока не подойдут. Делов-то.
     
  • 6.81, й (?), 13:06, 19/06/2015 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > а у них в больницах еще много где стоят машины с ХР на борту и IE8. Потому что по какой-то таинственной причине администраторы больниц запрещают ставить сторонний софт

    удачи им при следующем security-аудите. с такой полиси они его с треском провалят.

     
  • 2.42, kobezzza (?), 09:36, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    https://babeljs.io/
     
  • 2.49, Аноним (-), 12:37, 18/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Напишут интерпретатор ECMAScript 6 на ECMAScript 5 сейчас это модно...
     

  • 1.46, Аноним (-), 11:55, 18/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Фрактал ненужностей продолжает расти.
     
  • 1.56, Аноним (-), 14:48, 18/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Одно могу сказать - PHP явно не хуже JS/ES6.
     
     
  • 2.88, Кир (?), 12:13, 09/09/2015 [^] [^^] [^^^] [ответить]  
  • +/
    В смысле -- одинаково хреновые? Согласен.
     

  • 1.60, lucentcode (ok), 16:27, 18/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Отличная новость. Не знаю как в клиентском js, а для разработчиков под ноду классы, нейспейсы и прочие плюшки очень пригодятся.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру