Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Обсуждений тред (https://javascript.ru/forum/offtopic/47364-obsuzhdenijj-tred.html)

Safort 05.01.2015 19:55

Ruslan_xDD,
так трансляторы в помощь)

kobezzza 05.01.2015 21:02

Ruslan_xDD, в простом Object в качестве ключа может выступать только строка, а в Map или Set любое значение, включая объекты и это просто ну мега круто, юзаю уже больше года - не нарадуюсь.

Например, на сервере (в ноде), нужно добавлять авторизованных юзеров в специальную таблицу и иметь быстрый способ проверки:

// WeakMap выбран потому, чтобы при разрыве соединения клиента с сервером,
// оно автоматически удалилось бы и из map
var map = new WeakMap(); 

createServer(function (req, res) {
  ...

  // req - это специальный объект-подключения юзера, экземпляр класс ReadStream
  var user = map.get(req);

  if (!user ) {
    map.set(req, {
      sessionId: ...,
      ...
    });
  }
});


Цитата:

Даже если понадобится, то вряд ли заюзаю, ибо поддержка браузерами пока что плохая, и это ещё на несколько лет затянется.
Сейчас абсолютно все актуальные браузеры поддерживают: Map, WeakMap, Set (а вот WeakSet есть не везде), на ноде также в режиме --harmony всё работает.

Для фич вроде let или arrow function давно использую транслятор и сейчас абсолютно все мои разработки на ES6, а ES5 хочу забыть как страшный сон.

https://github.com/6to5/6to5

***

Конечно, многие вещи можно было делать и в ES5/3, и кажется зачем учить новое если есть старое, но это не правильный подход, ибо ES6 позволяет делать вещи объективно лучше и проще, а чтобы понять "зачем эти фичи", то нужно просто начать их использовать и понимание придёт.

ruslan_mart 06.01.2015 06:20

kobezzza, это всё очень интересно, заюзаю как-нибудь, когда время придёт. :)

Слушай, а как трансляторы работают? Ведь если я напишу let в старом браузере, то это будет ошибка. Полагаю, трансляторы просто парсят скрипты, заменяя let на var и т.д.? А то я в этом пока не очень понимаю. :-? Или транслятор - это вообще не то, о чём я подумал?

Safort 06.01.2015 08:24

Ruslan_xDD,
а на вопрос отвечает Safort из команды знатоков


Цитата:

Слушай, а как трансляторы работают? Ведь если я напишу let в старом браузере, то это будет ошибка. Полагаю, трансляторы просто парсят скрипты, заменяя let на var и т.д.?
Да, трансляторы парсят твой ES6 и хитрым(иногда не очень) образом заменяют на более громоздкие конструкции из ES5(если это возможно, конечно).

kobezzza 06.01.2015 10:34

Ruslan_xDD, как уже сказал выше Safort, то трансляторы парсят твой код, а затем преобразуют его в ES5/3. По такому же принципу работают TypeScript, CoffeeScript и т.д.

https://6to5.org/repl.html - тут можно поиграться, например,

function foo() {
  var a = 1;
  
  if (a) {
    let a = 2;
    let b = () => this;
  }
}


Превратится в

function foo() {
  var _this = this;
  var a = 1;

  if (a) {
    var _a = 2;
    var b = function () {
      return _this;
    };
  }
}

melky 06.01.2015 11:02

Цитата:

Сообщение от Ruslan_xDD
kobezzza, это всё очень интересно, заюзаю как-нибудь, когда время придёт.

:lol: новая жизнь с понедельника)


... я уже перестал с нового года кофе пить так же... *глоток кофе*

ruslan_mart 06.01.2015 11:10

kobezzza, очень хочу поизучать CoffeeScript, но пока не очень понимаю, он только в Node.js? На клиенте можно? Если да, то как его подключать? А то гугл не даёт точных ответов, поэтому не могу вникнуть. :-?

kobezzza 06.01.2015 11:14

Цитата:

kobezzza, очень хочу поизучать CoffeeScript, но пока не очень понимаю, он только в Node.js? На клиенте можно? Если да, то как его подключать? А то гугл не даёт точных ответов, поэтому не могу вникнуть.
Можно, трансляторы подключатся по принципу:

1) Ты пишешь код на языке А;
2) Затем вызываешь транслятор и сохраняешь результат, который уже и используешь.

Для автоматизациии процесса трансляции можно использовать FileWatcher-ы в IDE или системы сборки, например, Gulp или Grunt.

http://www.youtube.com/watch?v=TspTo...ature=youtu.be - это видео я сделал для своего языка Snakeskin, но принцип одинаков для всех транслируемых языков.

ruslan_mart 06.01.2015 11:18

kobezzza, всё-таки значит я не так понимал, спасибо. :)

Я думал, что работает по такому принципу:

В хейдере подключаем, допустим, coffee:

<script src="CoffeeScript.js></script>


Потом на странице где нибудь пишем скрипт:

<script type="text/coffeescript">
   код
</script>


И он на ходу парсится и эвалится в JS.

Спасибо за разъяснения, теперь более-менее понятно, что такое трансляторы. :)

kobezzza 06.01.2015 11:23

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


Часовой пояс GMT +3, время: 11:08.