Подробности о новом языке программирования Google Dart (Dash)

    Пару дней назад Сеть облетела новость, что Google собирается представить в октябре 2011 года новый язык веб-программирования Dart. К сожалению, никакой дополнительной информации на эту тему не было. Однако в архиве ньюс-группы com.googlegroups.google-caja-discuss сохранилось письмо с заголовком “Future of Javascript doc from our internal JavaScript Summit”, датированное 16 ноября 2010 года, которое даёт хоть какое-то представление о том, что такое Dash (там упоминается именно такое название). Письмо составлено по результатам внутреннего совещания ведущих разработчиков Google на тему развития клиентских языков веб-программирования.

    Если вкратце, то Google разрабатывает Dash в качестве замены/альтернативы Javascript. На совещании разработчики сошлись во мнении, что Javascript обладает «фундаментальными» изъянами, которые невозможно исправить путём эволюционного развития.

    Есть два варианта решения проблемы. Первый — попытка исправить те недостатки Javacript, какие возможно (проект Harmony). Эта работа займёт годы и в любом случае не будет на 100% успешной, потому что фундаментальные изъяны и исторический багаж всё равно останутся.

    Второй вариант, параллельно с первым, — создание нового языка программирования Dash, который сохранит динамическую природу Javascript, но обеспечит лучшую производительность и будет пригоден для использования в больших проектах. При этом Google обеспечит открытость языка и будет способствовать его поддержке другими браузерами. Вдобавок, разработчики получат кросс-компилятор, так что Dash-код может быть переведён в Javascript для браузеров, которые не поддерживают Dash нативно.

    Второй вариант более рискованный, зато в случае успеха он обеспечивает настоящий прорыв.

    Google не имеет права делать ставку только на второй вариант, потому что в случае провала лидерские позиции Google в Сети будут серьёзно подорваны, а процесс развития Javascript затормозится. Так что планируется одновременное продвижение обоих вариантов. Первый является подстраховкой на случай провала второго. Проект Harmony будет активно продвигаться компанией Google, так же как и Dash.

    Dash — это революционный вариант. Язык программирования, который может полностью заменить Javascript. Он разработан с учётом трёх главных целей:
    • Производительность. Виртуальные машины на Dash не будут иметь тех проблем с производительностью, которые есть у всех машин EcmaScript.
    • Удобство разработки. Будет сохранена динамическая, лёгкая в освоении, не требующая компиляции природа Javascript, которая сделала веб-платформу абсолютным лидером среди программистов-любителей.
    • Поддержка редакторов кода и дополнительных инструментов. Dash спроектирован таким образом, чтобы было легче использовать дополнительные инструменты для больших серьёзных проектов, которые требуют поддержки, в том числе таких функций как рефакторинг и поиск мест вызова функций. В то же время Dash не будет требовать обязательного использования редактора кода для эффективного программирования, так что обычный разработчик вполне может быть доволен работой в текстовом редакторе.
    Dash также должен обеспечивать максимальную безопасность там, где эта задача не конфликтует с тремя главными.

    Предполагается, что поддержка Dash будет встроена во все браузеры как основной нативный клиентский язык (вместо Javascript), он также будет использоваться на серверах фронт-енда, а также в кросс-компиляторах.

    Разработкой языка Dash занимается известный программист Ларс Бак (Lars Bak) и его группа разработчиков в датском офисе. Дополнительный инструментарий создаёт команда Брюса Джонсона (Bruce Johnson) в Атланте, а поддержку уровня Web Inspector для Dash и Harmony делает Павел Фельдман (Pavel Feldman) с разработчиками из офиса Google в Санкт-Петербурге.

    В ноябре 2010 года предполагалось, что первые фрагменты поддержки Dash в браузере Chrome появятся в течение года. Для остальных браузеров будет выпущен кросс-компилятор, а нативная поддержка у них появится гораздо позже, ждать придётся вплоть до нескольких лет. Ларс Бак пообещал «мило побеседовать» с разработчиками других браузеров о языке Dash, и если продукт получится очень качественный, то они сами захотят как можно быстрее внедрить его поддержку.
    Support the author
    Share post

    Comments 173

      +7
      Интересно, что имеется в виду, когда эти люди упоминают «проблемы с производительностью, которые есть у всех машин EcmaScript», и как они намерены преодолеть их в самóй конструкции нового компьютерного языка.

      Отменят замыкания?

      Отменят доступность по умолчанию всех глобальных переменных?
        +2
        Замыкания и области видимости можно делать по-разному. В Go есть замыкания, но он работает шустрее EcmaScript. Для оптимизации важнее хорошая система типов, а не отсутсвие замыканий.
          0
          Судя по этому тексту, с типами ничего не случится.
            +6
            Где вы это увидели? Динамическая типизация вполне может быть сильной и даже строгой.
          0
          Замыкания и глобальные переменные — это далеко не главные проблемы javascript. Duck typing и first-class функции со словарями и кодом внутри — куда как более серьёзные препятствия для ускорения.
          +1
          Прощай, Goole Closure
            0
            Он просто станет поддерживать Dash
            –24
            Круто. Теперь Google и язык программирования написали. Я с каждым днем все больше удивляюсь этой компании…
              –20
              Еще забыл сказать: сразу понял что статью написал ализар)
                +18
                По секрету — это не первый язык от гугла.
                  +6
                  Go уже 2 года как бы.
                    +3
                    Так-то был еще Noop — улучшенная Java и Unladen Swallow — ускорение для Python. Google просто пытается оптимизировать используемые языки, хотя на данный момент получается слабовато.
                    –9
                    Спасибо. Не знал. А руки погуглить не дотянулись.
                      +3
                      Прикиньте, а МС целую программную пратформу выпустили :)
                        +2
                        А язык какой придумали?
                          +4
                          C#
                            +4
                            F#
                              +1
                              кстати, F# — реализация языка OCaml поверх .NET
                            • UFO just landed and posted this here
                                0
                                Язык не поворачивается языком сие назвать.
                                –1
                                F#
                                  0
                                  MSIL
                              +4
                              Чует моё сердце — не взлетит. Слишком уж большая популярность у JS.
                                +25
                                Существует мнение, что она такова, в том числе, и из-за того, что это единственный вариант для использования в браузере.
                                  0
                                  У Fx есть возможность писать на python. У IE на VisualBasic. У Chrome на C++(???)…
                                    +5
                                    Нужен универсальный инструмент для большинства популярных браузеров. Кроме JS на данный момент ничего нет.
                                      0
                                      Action Script )
                                      0
                                      Haxe?
                                      +1
                                      А можно чуть подробнее об этом? Поверхностное гугление говорит лишь о наличие каких-то плагинов. Речь о них?
                                        0
                                          0
                                          Там написано, что для программирования на Python нужно самому пересобирать платформу Mozilla (например, как сделано в продуктах Komodo).

                                          Ни о каком программировании на Python в Firefox или Thunderbird (то есть, по определению, в официальных сборках) и речи быть не может, потому что по умолчанию никакого Питона в платформу Мозиллы не вкомпилируется.
                                            0
                                            Ну… Пересобирать необязательно. НЯП, XPCOM вполне можно активировать используя плагины.
                                            К тому же у них были вполне конкретные планы. Насколько я помню в какие то ночные сборки были собраны с вкраплением подержки питона.
                                        +2
                                        На VBScript, а не Visual Basic.
                                          0
                                          Опссс…
                                      0
                                      GWT взлетило, а по сути перекомпиляция Java в Javascript. Если Dash будет поддерживаться специальным модулем для известных серверов (Apache, Tomcat,… ), перекомпиляцией в Javascript и будет поддерживаться несколькими браузерами Firefox, Chrome, Safari.

                                      То еще как взлетит, конечно если результат будет виден. А для результата потребуется действительно быстродействие и модули разработки под IDE, чтобы осуществлять рефакторинг, дебаг, профилирование и т.п.

                                      Задачка, конечно, сложная.
                                        +4
                                        >Если Dash будет поддерживаться специальным модулем для известных серверов (Apache, Tomcat,… )

                                        Вы о чем вообще?
                                          –3
                                          Конечно Apache тут не при чем, я поторопился, нужен просто модуль на сервере или в момент компиляции проекта, который будет транслировать имеющийся Dash в Javascript. И сервер должен по имени User-Agent или другим признакам отдавать Javascript для браузеров, которые не поддерживают Dash.
                                          Ну примерно так, ведь всем понятно, что всякий, кто и начнет использовать Dash задастся вопросом, как поддерживать браузеры без Dash.
                                            +3
                                            Компиляция на сервере — это сильно :)
                                              –1
                                              а что, вместо обфускации и минимизации, прямо отдавать байткод

                                              DOM структура документа серверу известна, можно компилировать из любого языка прямо в байткод и грузить в вирт. машину браузера. И пиши себе, хочешь — на Javascript, хочешь на Python, хоть C++ :)
                                                +2
                                                if (Math.random() < 0.5) {
                                                  document.write('<b>DOM-1</b>');
                                                }
                                                else {
                                                  document.write('<i>DOM-2</>');
                                                }
                                                

                                                Сообщите мне DOM-структуру на клиенте, пожалуйста:)
                                                  –3
                                                  Легко. Через ajax отправляю на сервер DOM структуру и получаю соответствующий код. :)

                                                  Вы наверное считаете себя очень остроумным, однако я имел в виду, что в момент компиляции скрипта на сервере DOM-структура документа, куда встраивается скрипт, известна, потому что отдаётся тем же сервером (в широком смысле).
                                                  Что там происходит на клиенте после отправки, никакой скрипт, отправленный клиенту, узнать не сможет. Возможно только динамическое определение ситуации, но это очевидно и тривиально.

                                                  Поэтому нет никакой разницы, что отправлять — human-readable код на интерпретируемом языке высокого уровня или machine-readable байткод для исполнения в виртуальной машине. Тем более что JIT компиляторы сейчас везде.
                                                    +4
                                                    Разница в том, что сервера будут пыхтеть больше и падать от нагрузки, в том случае когда вы не сможете отдавать данные из кэша.
                                                    Возьмите любую социальную сеть, куча народу, каждая страница получается уникальной, структуру не закэшить, скриптов заранее не набилдить.
                                                    Будем собирать при каждом запросе?
                                                      –3
                                                      Вы ж не думаете, что сейчас подобные скрипты отдаются индивидуальные для каждого пользователя?
                                                      0
                                                      Я вообще всегда считал что основная «фишка» javascript'а в том что он выполняется у клиента. Я отстал от жизни?
                                                        +1
                                                        Выполняться он в любом случае будет у клиента, а компилироваться может и на сервере. Например, библиотеку а-ля jquery.js можно скомпилировать один раз на сервере и отдавать в байткоде тысячам клиентов, экономя их процессорное время. Вместо этого каждый раз у тысяч клиентов происходит одинаковая работа — JIT-компилятор загружает листинг текстового кода, делает свою работу, выдаёт некий бинарный набор символов, который загружается в виртуальную машину, которая затем начинает его исполнять. Можно сразу грузить бинарные данные, экономя массу времени и электричества :)
                                                        Правда, желательно иметь некий механизм верификации, чтобы в процессе передачи данных по сети не произошла подмена, но это уже технические детали реализации. Можно по https устанавливать соединение или передавать hash-код, хотя считать хеши тоже затратная операция…
                                                  0
                                                  съело
                                                  < script type=«application/bin-js» src=«script.bjs» />
                                              0
                                              Пока будет требоваться кросскомпиляция выигрыша в производительности не получится. Т.е. по настоящему преимущество в производительности получиться только когда все основные браузеры станут поддерживать его нативно. Таким образом, производительность никак не повлияет на его популярность.

                                              Стобы Dart/Dash взлетел он должен быть лучшим языком чем JS, причём заметно лучшим, при этом оставаясь простым.
                                                0
                                                >> Чтобы Dart/Dash взлетел он должен быть лучшим языком чем JS

                                                тут даже велосипед не надо изобретать, взять лучшее из существующих языков. Даже не лучшее, а стандартное. Хотя бы ООП нормальный реализовали бы — уже хорошо будет.

                                                А еще лучше сделать клиент-серверный язык. Вот это был бы прорыв.
                                                  +5
                                                  В js нормальный ООП если убрать new. Просто необычный. И он проще, т.к. выпадает такой элемент как классы. Поэтому для легкого языка прототипное ООП — преимущество.
                                                    –3
                                                    У меня некоторый диссонанс от вашего «ООП без классов». Поясните как это возможно, если в ООП центральное понятие — это класс.
                                                    • UFO just landed and posted this here
                                                        –5
                                                        >>А в ООП (как собственно следует из названия) центральное понятие это объект

                                                        Вы ООП по названию изучали? В классических реализациях вроде C++ или smalltalk или даже Delphi — центральное понятие это именно класс. Объект — это экземпляр класса.

                                                        Что касается прототипного программирования, да, в этой концепции есть ряд интересных моментов, тем не менее подавляющее большинство популярных языков реализуют именно класс-ориентированных подход. Почему бы?
                                                        • UFO just landed and posted this here
                                                            –2
                                                            >>популярность в мире программирования не имеет ничего общего с удобством/интуитивностью/качеством etc.

                                                            Эти понятия субъективны, в отличие от популярности. Мне, например, больше нравится реализация ООП в Delphi, хотя я прекрасно понимаю, что по возможностям она проигрывает С++ Т.н. ООП в JS мне лично неудобен и непонятен интуитивно. И все примеры кода на JS в том что я понимаю под качеством очень далеки от идеала, к которому близок тот же С++.

                                                            >>Взять например язык Io(который не так далеко ушел от Smalltalk'a)
                                                            Вы еще brainfuck вспомните. Кто кроме горстки энтузиастов пишет на этом вашем Ио? Smalltalk вообще язык экспериментальный, никаких серьезных проектов на нем никто не пишет. К слову, smalltalk исповедует именно класс-ориентированный подход.
                                                              +1
                                                              > Smalltalk вообще язык экспериментальный, никаких серьезных проектов на нем никто не пишет.

                                                              Ну, только Сименсы, БМВ и трейдерски компании с Wallstreet ;)

                                                              Реализация ООП в С++ весьма и весьма далека от идеала даже в «ООП в стиле С++»
                                                            –1
                                                            Так в Smalltalk класс — это объект, который служит шаблоном для создания экземпляров. И любой объект может в динамике создать новый класс… JavaScript в этом плане очень близок Smalltalk. Они оба — prototype based языки.

                                                            А привычная Вам система классов, как в Delphi, C++ или Java — попытка оптимизации, при чём относительно громоздкая и неуклюжая. Ну, есть же у нас теперь пример того же Go, где всё сделано намного изящнее.
                                                      +3
                                                      «Когда я придумывал ООП, я точно не имел в виду С++» © Алан Кей. Не надо называть С++ классической реализацией ООП. От этого котята мрут стаями.

                                                      И да, в Смолтолке классы — совсем не те классы, что в С++. Например, так как все — объект, классы тоже объекты. Ну и т.п.
                                                        –3
                                                        Я и не предлагаю С++ брать за основу. Можно взять C#. Но то что сейчас есть в JS — это бледная тень ООП.
                                                          +4
                                                          ООП в C# ничем не отличается от ООП в C++, Java и Delphi. У них — один и тот же подход к реализации ООП.

                                                          То, что есть в JS, — это не «бледная тень ООП», а просто другой способ реализации ООП. Если вам известен толькоо один подход, не значит, что не существует других, или что другие — это «бледные тени» ;)
                                                            –3
                                                            >>ООП в C# ничем не отличается от ООП в C++, Java и Delphi

                                                            С точки зрения JS наверное не отличается. Но есть ряд нюансов и довольно принципиальных. Как множественное наследование, например.

                                                            >>это не «бледная тень ООП», а просто другой способ реализации ООП
                                                            Ладно, каюсь, смотрю на ООП через призму С++, Delphi и прочих представителей классово-ориентированного подхода. Надо восполнить пробел.
                                                          • UFO just landed and posted this here
                                                              0
                                                              Не. Вот в Haskell классы — это как раз совсем не ООП. Это именно классы типов.
                                                              • UFO just landed and posted this here
                                                                  0
                                                                  А при чём тут Си++? В Haskell классы — это вообще не ООП. В чистых функциональных языках не бывает объектов. Классы типов — это именно классы типов, которые используются для контроля и поиска реализаций функций. Максимум, их можно рассматривать, как интерфейсы… Но объектов в Haskell нет, и быть не может, потому что объекты — это сущности с состояними.
                                                                  • UFO just landed and posted this here
                                                    0
                                                    Если действительно хороший язык получится и напишут, например, интерпретатор_на_javascript-e/plugin/activex для совместимости, то почему бы и нет)
                                                      +6
                                                      А ещё три года назад в Google решили создать свой браузер, когда рынок уже был поделен. Ничего, остальные подвинулись.
                                                      +3
                                                      Я думаю, что стоит упомянуть, что это всего лишь одна из догадок каким будет новый язык. Нигде ещё не было опубликовано каким именно он будет. Один из популярных вариантов, что это будет язык Newspeak, компилируемый в JavaScript, либо исполняемый нативно в браузере. Это следует из того, кто будет выступать с докладом этого языка в понедельник: один из докладчиков — автор Newspeak, а второй занимается V8 JavaScript Engine.
                                                        0
                                                        Вообще-то опубликовано. В оригнальной версии этого текста есть ссылки на некие Google-doc'и в которых больше подробностей. Но к ним доступ закрыт.
                                                        +2
                                                        Я так понимаю, что все эти подробности взяты из этой «утечки»: markmail.org/message/uro3jtoitlmq6x7t
                                                          +8
                                                          главное, чтобы разработчик был бородат :)
                                                          (по мотивам)
                                                          +34
                                                          почему-то у меня первая ассоциация с


                                                          я очень сомневаюсь, что в осле в ближайшее десятилетие окажется поддержка этого языка. а в этом случае я не вижу в нём никаких серьёзных плюсов относительно CoffeeScript. все равно будем компилить в JS.
                                                            +7
                                                            CoffeScript — это всего лишь синтаксический сахар для JavaScript. Когда вы пишите на CoffeScript, то думаете в терминах JavaScript. Когда вы пишете на Dart, то думаете в терминах Dart. Ожидается, что там будут объекты и сообщения между ними, инкапсуляция, система типизации и ещё куча отличий от JavaScript. Может быть это и будет компилироваться в JavaScript, но язык будет совсем другим.
                                                              +5
                                                              > Когда вы пишете на Dart, то думаете в терминах Dart
                                                              я боюсь, что преждевременно делать такие смелые выводы, ещё не увидев язык. В CoffeeScript тоже есть классы, инкапсуляция и типизация, но они тоже сделаны в виде синтаксического сахара к JS и на его же возможностях.
                                                              • UFO just landed and posted this here
                                                                  –1
                                                                  можете посмотреть официальный мануал jashkenas.github.com/coffee-script/ в разделе Classes, Inheritance, and Super
                                                                  • UFO just landed and posted this here
                                                                      –2
                                                                      а что, по-вашему, есть типизация?
                                                                      • UFO just landed and posted this here
                                                                          –1
                                                                          я уже привык, что когда говорят про убогость типизации в JS, это обычно означает убогость её прототипной модели. а типизация в классическом её понимании — вот тебе String, вот тебе Integer, всё как у людей.
                                                                          • UFO just landed and posted this here
                                                                              –3
                                                                              под инкапсуляцией в CoffeeScript я имел в виду:
                                                                              1) все скрипты запускаются всегда в (function(){… }).call(this). Это не совсем инкапсуляция, но довольно полезно для неё
                                                                              2) не помню, ввели они это в master, или нет (мне ни разу не пригождалось), но в нём делали такую вещь, как Class Executable Body. С помощью него можно сделать подобие private-методов.
                                                                                +3
                                                                                Если не использовать общепринятые термины по своему усмотрению, люди начнут понимать тебя.
                                                                                  0
                                                                                  уважаемый, что во втором пункте не относится к инкапсуляции?
                                                              0
                                                              В JS будем компилить для старых браузеров. Т.е. например в chrome будет использоваться нативная версия, которая (по идее) должна работать существенно быстрее.
                                                                –1
                                                                но ведь всё равно будем компилировать. а тут вполне логичный вывод: если все браузеры поддерживают JS и только хром будет поддерживать Dash, то не проще ли сразу ориентироваться на компилированный JS?
                                                                во всяком случае меня сейчас скорость JS вполне устраивает.
                                                                  +2
                                                                  Возможно, dash будет пригоден для выполнения ресурсоемких задач. JS работает достаточно быстро на тех задачах, которые сейчас решаются с его помощью. Но, например, сложну обработку графики/видео на нем сделать и не пытаются.
                                                                  Кроме того, вполне возможно что оперативно подтянется firefox. Что даст уже более половины пользователей. А IE… ну, его пользователям не привыкать к тормозам)
                                                                    +2
                                                                    я боюсь, что гугл как раз уходит от концепции ресурсоёмких задач на клиенте. вспомните хотя бы Chrome OS.

                                                                    ну а FF… кто его знает. с ними вероятность, что они подхватят инициативу — 50%/50%.
                                                                      –2
                                                                        0
                                                                        Невозможно от нее уходить, так как чем тоньше клиент, тем больше зависимость от качества канала связи, все события клиента на сервере обрабатывать?! Тогда нам нужно что-то посерьезней REST.
                                                                      +1
                                                                      если все браузеры поддерживают JS и только хром будет поддерживать Dash, то не проще ли сразу ориентироваться на компилированный JS?

                                                                      А если
                                                                      все браузеры, кроме IE, поддерживают Dash, то не проще ли сразу ориентироваться на Dash и компилировать его в JS для совместимости?

                                                                      Конечно, это при условии, что Dash действительно будет того стоить. Пока ничего не ясно.
                                                                        +2
                                                                        знаете, возможно это мы с вами поймём, что

                                                                        если все браузеры, кроме IE, поддерживают Dash, то не проще ли сразу ориентироваться на Dash и компилировать его в JS для совместимости?


                                                                        а наши работодатели и коллеги скорее всего не очень. к примеру, я не вижу повсеместного использования border-radius, box-shadow и background: gradient вместо старых-добрых png, хотя их и поддерживают все кроме IE6-7.
                                                                          0
                                                                          ie8 тоже не поддерживает :(
                                                                            0
                                                                            Сравнение некорректно. Если есть возможность в IE как бы включить поддержку недостающей технологии, то этим пользуются, если нет, то всё равно париться и уже не имеет смысл использовать border-radius для остальных браузеров.
                                                                              0
                                                                              во-первых, ie7-js.googlecode.com/

                                                                              а во-вторых, я говорил не о любой возможности использования, а конкретно о возможности использования его без компиляции в JS. проще говоря: зачем мне держать на сервере две версии одного скрипта (на Dash и он же компилированный в JS), если в нормальных браузерах разница производительности в них не заметна, а не нормальные браузеры чистый Dash вообще не поддерживают?

                                                                              и да, сразу отмечу: я не имею в виду тяжёлые JS-приложения, в которых сейчас заметен недостаток производительности. но не считая игр, я за последний месяц таких просто не встречал, поэтому и пропускаю их.
                                                                      +13
                                                                      Недавно перевели:
                                                                      image
                                                                        +1
                                                                        неужели ваш английский настолько плох, что нужен перевод?
                                                                          +17
                                                                          Мой английских уж точно позволяет мне читать комиксы.
                                                                          Тем не менее, я думаю, что здесь есть некоторое количество людей, у которых не очень с английским. Именно для таких людей я и выложил перевод.
                                                                            0
                                                                            какой вы альтруист однако
                                                                            +4
                                                                            К сожалению еще есть такие люди :(… так что спасибо Noobster.
                                                                          • UFO just landed and posted this here
                                                                              +2
                                                                              «К счастью, с зарядками проблема была решена, теперь у нас у всех стандартизированные mini-USB. Или micro-USB? Чёрт.»
                                                                          +4
                                                                          Ну здорово. Только вот компиляция в JS вряд ли сильно поможет в борьбе за производительность. А в остальном пока что фреймворки справляются. Мне больше верится в развитие браузеров в сторону поддержки фреймворков. Интеграция в движок если не всего функционала, то критичных к производительности вещей и как следствие повышение производительности.
                                                                            +3
                                                                            Почему же? Если недоступные фишки Дэша будет заменены JS-реализациями, а все остальное почти 1 в 1 транслировано в JS?

                                                                            Ведь у Google есть очень большой опыт в подобной затее — это GWT. Большинство конструкций Java почти напрямую переводится в JS (ведь GWT работает не с байткодом, а именно с исходниками), что дает практически ту же производительность что и написание сразу JS.

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

                                                                            Хотя лично мне вот одну бы штуку — вместо function(x) { return x*x; } такой же как в C# синтаксис — x => x*x и цены небыло бы. Ну и async.
                                                                              +3
                                                                              посмотрите CofeeScript. в нём нормальная конструкция
                                                                              (x) -> x*x
                                                                                0
                                                                                Да я его смотрел, и много раз.

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

                                                                                А мне нужно просто чуток подсахаренный JS, c включенным «use strict» :)
                                                                                +1
                                                                                Замена и трансляция не даст прироста. Ну не бывает так, чтобы наворачиванием еще одного слоя повышалась производительность. Разве что там будут какие-то суровые оптимизации, но мне это представить сложно.
                                                                                Прирост можно получить только поддержкой со стороны браузера, переложение критичных вещей на браузер (а он там уже может и видеокарту задействовать и много других недоступных инструментов) и в этом месте будет профит. А если что-то транслировать в js, то как оно может быть быстрее js?
                                                                                  +4
                                                                                  Очень простой пример то, что есть в GWT что делает некоторые вещи с его использованием быстрее чем напрямую писать на JS (я это как-то на своих докладов по GWT рассказывал) — это то, что он для каждого броузера делает свою версию приложения, идеально «заточенного» под этот броузер.

                                                                                  Т.е. вот возьмем jQuery — там уйма «если ие, то… если фф то ...», а GWT просто просто бутстрапером определит что за броузер, что за язык у пользователя, и отдаст заточенную под комбинацию броузера-язык версию приложения.

                                                                                  И отсутствием ифов и подстановкой строк (не надо искать локализированную версию строки — для русского будет код alert(«привет»), а для англ — alert(«hello»), и достигается большая производительность, если сравнивать с написанием подобного функционала «руками».

                                                                                  А достигается это именно с помощью того, что оно при «компиляции» анализирует, транслирует и подставляет то что нужно.
                                                                                    0
                                                                                    Я вас понял.
                                                                                    Да, если подстраиваться под окружение — можно выдурить прирост. Но тоже самое ведь можно сделать и сейчас? Определить на серверной стороне браузер и отдать нужный файл.
                                                                                    Облегчение компиляции — да, было бы здорово. Но думаю и это не так сложно реализовать. Не тянет на отдельный «новый язык».
                                                                                      0
                                                                                      Думаю, такая заточка — это не киллинг-фича новой задумки, так же как и в GWT. Просто приятная плюшка.

                                                                                      Ждем официальной полной инфы — тогда будем обсуждать.
                                                                              +9
                                                                              Главный критический изъян JavaScript — он сделан не в Google.

                                                                              Просто для справки. В своё время шли разговоры о том, чтобы сделать нативную поддержку ActionScript 3 в FireFox.
                                                                                0
                                                                                какой смысл ActionScript без флеша?
                                                                                  0
                                                                                  смысл в том, что через AS3 пришел бы революционный стандарт EcmaScript 4 с его нововведениями.
                                                                                    0
                                                                                    Нет в Ecmascript 4 ничего революционного. ЕМНИП — только попытка сделать из JS очередной C++/Java
                                                                                    • UFO just landed and posted this here
                                                                                        0
                                                                                        А, значит память подвела. Помнится, один из предполагаемых стандартов упорно запихивал в JS OOП в стиле C++/Java/C#
                                                                                        0
                                                                                        а чем Вам не нравится ООП в стиле C++/Java/C#?
                                                                                        даже конкретизирую вопрос: чем ООП на классах хуже ООП на прототипах?
                                                                                          0
                                                                                          Почему вы решили, что мне не нравится ООП в стиле C++/Java/C#? ;)

                                                                                          Я просто говорю, что есть разные способы реализации ООП ;)
                                                                                            +1
                                                                                            ок:)
                                                                                            просто под революционным имел ввиду по сравнению с EcmaScript 3.
                                                                                              +2
                                                                                              А, стоп :) Я понял, что неправильно понял, в какой ветке нахожусь :)

                                                                                              Против ООП в стиле С++ и проч. я ничего не имею. Я против того, чтобы его насильно запихивали в язык, в котором ООП уже есть, пусть оно и не такое, как в С++ и иже с ним :)
                                                                                                +1
                                                                                                Понятно;) Согласен с Вами насчет насильного запихивания, однако в последнее время многие вендоры стараются делать все и вся именно на JS. Взять хотя бы Google с Chrome OS и HP с WebOS. При текущей ситуации создание и далее поддержка, скажем, млн. строк кода на JS станет гораздо труднее и неповоротливее, чем сейчас.
                                                                                                  0
                                                                                                  Согласен. Для этого JS'у нужны:
                                                                                                  — модульность
                                                                                                  — правка существующих проблем
                                                                                                  — убрать semicolon insertion
                                                                                                  — ввести строгую типизацию
                                                                                                  — починить, наконец for(property in object))

                                                                                                  Это уже будет хорошо :)
                                                                                                    0
                                                                                                    Поддерживаю полностью) Именно на такого рода проблемы указывал автор IronJS в своем блоге.
                                                                                      –1
                                                                                      Google говорит, что JavaScript не достаточно мощный для разработки крупных приложений, им нужен язык со статической типизацией и т.д.
                                                                                      Что в этом плане может дать ActionScript:
                                                                                      1. Статическая типизация;
                                                                                      2. Нормальное ООП: соответствующий синтаксис, области видимости, зависимости, интерфейсы и т.д.;
                                                                                      3. Язык основан на EcmaScript, т.е. должен быть прост в изучении для людей с опытом работы на JavaScript;
                                                                                      4. У языка уже есть сообщество: Adobe и флэш-разработчики. Кроме того, уже есть открытый компилятор и среды для разработки (открытые в том числе). Плюс у Mozilla есть некоторый опыт внедрения;
                                                                                      5. Различные плюшки: стандарт E4X, кстати, реализованный Mozilla в SpiderMonkey, векторы и т.д.
                                                                                        +3
                                                                                        В JS нормальное ООП, просто другое. Не надо на всё надевать одну шапку. И да, ООП — не серебряная пуля. Большие проекты и на Erlang пишутся, и на Haskell. Но в целом я с вами согласен, AS3 крутая штука. Только тут надо понимать, что нужно просто обновить JS до следующего стандарта ES. И снова: а надо ли? ExtJS4 неплохо себя чувствует, а что-то мощнее в браузере вряд ли нужно. Google проблему из воздуха делает, им хочется Web OS и анально огородиться, а взлетит ли оно неизвестно.
                                                                                          –1
                                                                                          1. В JavaScript реализовано прототипное программирование, которое сильно отличается от классического Java-стиля.
                                                                                          2. В остальном полностью согласен. JavaScript прекрасно справляется с тем, для чего был создан — создание интерактивности на web-страницах. Зачем создавать из него универсальный комбайн, не понятно. Но если уж так хочется, то можно использовать давно существующие языки.
                                                                                    –1
                                                                                    Гугл специально пытается перенести пользовательский софт в среду веб-браузера по следующим причинам:
                                                                                    — во первых, это создаст очередной ажиотаж разработки софта в НОВОЙ экосистеме. Причем она должна быть НЕ СОВМЕСТИМОЙ с уже созданным софтом под хост-ось (так и будет). И пусть меня называют параноиком, но я четко вижу что в случае с Линукс хостом, который все свободные разработчики хотели бы видеть не в 2% а в 100% железа, это приведет к переписыванию уже существующего под Линукс софта в рамках новой экосистемы. Так же, как уже сегодня идет активное дуплицирование Линуксового софта в Андройде — НОВОЙ экосистеме, которая намеренно сделана НЕ СОВМЕСТИМОЙ со свободным софтом Линукс, т.е. с подавляющим большинством СПО, которое создано на сегодняшний день.
                                                                                    А успех такого переписывания под новую экосистему будет за счет пропаганды Гугла (одной из самых сильных на рынке сегодня) и разыгрывания карты под названием «открытое ПО», которой Гугл хочет переманить опенсорс разработчиков к себе. Это очень грязная игра капиталистов против «социалистического» СПО…
                                                                                    — во вторых, это позволит перенести личные пользовательские данные в сферу сетевых сервисов, т.к. ПО написанное в браузере будет в основном передавать данные через сеть (для анализа и социального инжиниринга). Опять же, СПО сообщество сегодня способно решить большинство задач, которые стоят перед среднестатистическим пользователем. Но! Ввиду пропаганды Гугла, ввиду громадных ресурсов разработки на стороне Гугла, ввиду переманивания разработчков «открытостью», темпы развития Гугловского софта быстро опередят старания независимых сообществ и хомячки подсядут на веб-браузер. Инициатива будет перехвачена. А дальше хозяин — барин…
                                                                                    — в третьих (опять же ИМХО, без доказательств и вызова к полемике), учитывая участие команды ответственной за создание Java c ее виртуальной машиной, можно предположить что число заложенных бомб для «санкционированного взлома» пользовательского софта (поэтому Линукс сообщество и выпиливает Java из систем «чувствительных» ко взлому) в новоиспеченном Dart будет не меньшее. Благо Homeland Security Act позволяет… И конечно же софт будет «открытым», ибо серьезные кодеры, которые знают что к чему в Java, ее просто обходят стороной вежливо прикрываясь «тормозами виртуальной машины»…
                                                                                      +3
                                                                                      Простите, dart — это язык. Не реализация. Более того, ни из чего не следует, что google будет реализовывать его под что-то кроме chrome.
                                                                                        +1
                                                                                        Гугл специально пытается перенести пользовательский софт в среду веб-браузера по следующим причинам:
                                                                                        — во первых, это создаст очередной ажиотаж разработки софта в НОВОЙ экосистеме.
                                                                                        — во вторых, это позволит перенести личные пользовательские данные в сферу сетевых сервисов,
                                                                                        — в третьих (опять же ИМХО, без доказательств и вызова к полемике), учитывая участие команды ответственной за создание Java c ее виртуальной машиной, можно предположить что число заложенных бомб для «санкционированного взлома» пользовательского софта (поэтому Линукс сообщество и выпиливает Java из систем «чувствительных» ко взлому) в новоиспеченном Dart будет не меньшее.

                                                                                        А в-нулевых, потому что перенос пользовательского софта «в среду веб-браузера» — это единственный на данный момент рабочий механизм монетизации труда программистов. Коробочный софт умер, а Google, как первым осознавший и это, и работоспособные альтернативы компьютерному софту, пытается… нет, даже не «захватить новый рынок», а скорее помочь рынку развиться и повзрослей как можно быстрее
                                                                                          0
                                                                                          а в-минус-первых, главная цель гугла: забаррикадировать свой поисковый бизнес с сопутствующими сервисами от любого рода нападок.
                                                                                          а любого рода нападки возможны только со стороны всех софтверных компаний с более большим возрастом на рынке (читаем MS между строк).
                                                                                          поэтому лучше унести землю из-под их ног. ведь лучшая защита — это атака. тому подтверждение Docs, GMail, Chrome, Android.
                                                                                            –1
                                                                                            Коробочный софт умер? Куча компаний, начиная с MS и apple недоуменно смотрят на Ваш комментарий.
                                                                                              +1
                                                                                              К слову, вы ведь в курсе, что с июня в России доступен Microsoft Office 365? Microsoft Office, работающий «в браузере», как SaaS. Я бы не назвал подобные действия Microsoft «недоумением». Скорее, попыткой угнаться за временным лидером.
                                                                                                –1
                                                                                                Ну да, доступен. Только вот смерть коробочного софта — даже близко не стоит.
                                                                                              0
                                                                                              > а Google, как первым осознавший и это, и работоспособные альтернативы компьютерному софту

                                                                                              Далеко не они первые. Но даже у них не получается нормально все это дело толкнуть. Проблема даже не в JS vs. Dart. Проблема в том, что нельзя даже сдалеть нормальные табы со сложным контентом без того, чтобы браузер не начинал стонать на reflow и redraw. То есть проблема не в языке, а в DOM'е.
                                                                                              +1
                                                                                              А можно подробней про «бомбы» в JVM?
                                                                                                0
                                                                                                +3
                                                                                                Google нашел «фатальный недостаток» в JavaScript?) У меня такое ощущение, что Google встал на ту же тропу, на которую встал Microsoft во время браузерных войн с Netscape. Впрочем, Microsoft тогда победили…
                                                                                                  +1
                                                                                                  Мне кажется, что если дело будет стоящее, то в firefox это будет включено. От кого бы не следовала инициатива. Почему-то я верю, что там смотрят не на источник инициативы, а на суть нововведений.

                                                                                                  Ну а у microsoft своя дорожка.
                                                                                                    –1
                                                                                                    скорее всего этот «фатальный недостаток» — отсутствие строгой типизации, из-за чего скорость работы любой программы, скомпиленной JIT или AOT компилятором, будет всегда медленнее.
                                                                                                      +4
                                                                                                      > скорость работы любой программы, скомпиленной JIT или AOT компилятором, будет всегда медленнее

                                                                                                      нет. не любой и не всегда. JIT-компиляторы опирающиеся на type feedback в той или иной его форме (трассировка, inline cache) способны для горячих мест порождать достаточно чистый код, сравнимый с тем, что дают компиляторы для более строго типизированных языков типа C++ или Java.
                                                                                                        0
                                                                                                        однако, type feedback JIT-компилятор способен на это лишь либо после нескольких вызовов участка кода, либо после исполнения кода (при профайлинге, например).
                                                                                                        и как Вы уже написали
                                                                                                        способны для горячих мест порождать достаточно чистый код, сравнимый с тем, что дают компиляторы для более строго типизированных языков типа C++ или Java.

                                                                                                        т.е. почти, но не лучше и быстрее.
                                                                                                          +5
                                                                                                          > однако, type feedback JIT-компилятор способен на это лишь либо после нескольких вызовов участка кода

                                                                                                          да, это так… и что?

                                                                                                          > т.е. почти, но не лучше и быстрее.

                                                                                                          «почти» достаточно часто означает «быстрее не переписывая функцию не получится»

                                                                                                          вот посмотрите не график: attractivechaos.github.com/plb/plb-lang.png

                                                                                                          LuaJIT2 для кода перемножения двух матриц (в лоб, вложенные циклы) дает код который на 0.1s оказывается быстрее того, что дает GCC. JavaScript версия на V8 оказывается как Java. (если в V8 сделать array bounds check elimination, и убрать interruption check на обратной дуге цикла необходимый для поддержки отладчика, то он LuaJIT догонит)

                                                                                                          И код (особенно у LuaJIT2, который bounds checkи не вставляет для ffi массивов и не обязан поддерживать прерывание циклов в отличие от V8) получается ну ровно такой как вы руками напишите на ассемблере. Временные floating point значения на xmm регистрах, инварианты циклов вынесены и т.д.

                                                                                                          С Sudoku ситуация менее приятная, но опять же V8 быстрее, чем Mono оказывается, которая вообще-то исполняет более строго типизированный байткод. Впрочем я код Sudoku не смотрел, может там есть какие-то низко висящие фрукты для оптимизации.

                                                                                                            0
                                                                                                            ну ffi в LuaJIT2 делается руками — это ничуть не заслуга компилятора, а делать при этом bounds check — было бы совсем неправильно — ведь уже будет известен размер массива, и не придется динамически расширять сам массив.
                                                                                                              0
                                                                                                              И код (особенно у LuaJIT2, который bounds checkи не вставляет для ffi массивов и не обязан поддерживать прерывание циклов в отличие от V8) получается ну ровно такой как вы руками напишите на ассемблере. Временные floating point значения на xmm регистрах, инварианты циклов вынесены и т.д.
                                                                                                                0
                                                                                                                а это честь и хвала компилятору Lua.

                                                                                                                в коде sudoku я тоже не копался, но для mono, чувствую, надо провести оптимизации. и еще, это случайно не mono ниже версии 2.8, т.к. в последних версиях используется новый GC.
                                                                                                                  0
                                                                                                                  > Временные floating point значения на xmm регистрах, инварианты циклов вынесены и т.д.

                                                                                                                  Это было про оба компилятора: и про V8 и LuaJIT2 ;-) Код практически один в один.
                                                                                                                    0
                                                                                                                    понятно:)
                                                                                                                0
                                                                                                                Руками, но при этом строгой типизации как таковой нету.

                                                                                                                А про bounds check я заикнулся к тому, что bounds check elimination даст примерно тот же эффект.
                                                                                                                  0
                                                                                                                  однако, мы говорим про сами языки и их компиляторы как таковые. а все делать руками и изощряться там, где обычно это и не ожидается, для достижения максимальной производительности, то это не приведет нас к
                                                                                                                  Удобство разработки. Будет сохранена динамическая, лёгкая в освоении, не требующая компиляции природа Javascript, которая сделала веб-платформу абсолютным лидером среди программистов-любителей.

                                                                                                                  что никак не вяжется с просмотром сгенерированного ассемблерного кода и т.д.
                                                                                                                  представьте, чтобы каждый JS-программист разбирался в таких тонкостях, да еще и для каждого браузера отдельно.
                                                                                                      +15
                                                                                                      Гугл сделал свой ActiveX, теперь гугл сделает свой VBScript.

                                                                                                      История движется по спирали
                                                                                                        0
                                                                                                        Единственное отличие это СПО
                                                                                                          0
                                                                                                          98.5% людей плевать на это отличие. Я их понимаю и полностью разделяю их мнение.
                                                                                                        0
                                                                                                        Производительность. Виртуальные машины на Dash не будут иметь тех проблем с производительностью, которые есть у всех машин EcmaScript.

                                                                                                        значит будет строгая типизация
                                                                                                          –1
                                                                                                          … отправилось чуть раньше…
                                                                                                          Dash спроектирован таким образом, чтобы было легче использовать дополнительные инструменты для больших серьёзных проектов, которые требуют поддержки, в том числе таких функций как рефакторинг и поиск мест вызова функций.
                                                                                                            0
                                                                                                            значит введут понятие метаданных, как в .NET, например.
                                                                                                            +2
                                                                                                            Что-то мне подсказывает, что этот язык — как новый джейпег для фотографов и прочих людей — т.е. вроде как меньше, только все на херу вертели все новые стандарты данных, когда есть старые и работающие.
                                                                                                              0
                                                                                                              Интересно, что может убедить сотни тысяч программистов — не энтузиастов изучать новый язык вместо джаваскрипта?
                                                                                                                +2
                                                                                                                Для профессионала нет проблемы изучить новый язык. Прочитать мануал — пара часов. Освоить среду разработки — пара дней. Сильная типизация и повышение производительности — бесценно
                                                                                                                  +1
                                                                                                                  Наработать шаблоны программирования языка, научиться обходить изъяны его дизайна, написать необходимые модули — годы.
                                                                                                                    +1
                                                                                                                    Гугл сможет. Android SDK тому пример.
                                                                                                                      +1
                                                                                                                      Под андроид ломанулась писать многочисленная когорта J2ME-шников. И уж назвать саму Java каким-то новым языком язык не повернется, ну да, новые библиотеки, новый обвес, новая архитектура приложений, но это все нестрашно.
                                                                                                                +1
                                                                                                                «I’m sure this new language for web browsers will be as big a succes as the previous new languages for web browsers.» Thijs van der Vossen
                                                                                                                  –1
                                                                                                                  Делали бы сразу клиент-серверный язык. Вот это был бы прорыв.

                                                                                                                  То что не вышло у Microsoft (ASP.NET+Silverlight вроде как неплохо задумано, но реализовано как всегда, и никто не юзает), вполне может получится у гугла, я верю.
                                                                                                                    +2
                                                                                                                    Node.js юзает googl-овский V8 JavaScript. Если V8 будет поддерживать Dash то Node.js автоматически будет его поддерживать…
                                                                                                                  • UFO just landed and posted this here
                                                                                                                    • UFO just landed and posted this here
                                                                                                                      • UFO just landed and posted this here
                                                                                                                          0
                                                                                                                          import document, console
                                                                                                                          from collections import Counter
                                                                                                                          
                                                                                                                          id_counter = Counter(document.getElementsBySelector('[id]'))
                                                                                                                          id_repeated = [(k, id_counter[k]) for k in id_counter if id_counter[k]>1]
                                                                                                                          for id, count in id_repeated:
                                                                                                                              console.log("Error: ID '%s' is repeated %d times!" % (id,count))
                                                                                                                            0
                                                                                                                            Пора себя по рукам бить за такое обращение со словарем =(
                                                                                                                            id_repeated = [item for item in id_counter.items() if item[1] > 1]
                                                                                                                      0
                                                                                                                      странно, что офис в Дании. Там очень дорогая рабочая сила, неужели самая квалифицированная?
                                                                                                                        0
                                                                                                                        Ясно — и тут лишь спекуляции сплетнями. Идея видно не ахти, раз прибегают к маркетингу подобного рода: типа взболтать, и когда всё перемешается — представить освободителя, пришедшего в лучах славы, и при отсутствии психологического отторжения нового. А так будет, поскольку к тому времени в мозгу уже должен будет созреть образ идеального языка программирования, и ему имя — Dart, πлять!

                                                                                                                        Only users with full accounts can post comments. Log in, please.