Изменения

Перейти к: навигация, поиск

ECMAScript и все-все-все

99 байтов добавлено, 18:13, 10 октября 2016
м
Нет описания правки
http://3.bp.blogspot.com/_aWbNXEa3LP8/TFvQsof7IZI/AAAAAAAAA8U/NlSMwn-h2L0/s1600/script_kiddies_demotivator.jpeg
=== Холивар!!! @@ ===
* Шутки в сторону: тема серьёзная
*: {{gray|''но кто на них пишет-то?''}}
=== Все хотят одного @@ ===
* Типизация — не необходимость, как раньше, а лишь один из способов проверки
*: тайпчекер (частично) уже даже в PHP (+ Hack)
=== Проверки — хорошо, но @@ %% ===
http://demotivators.to/media/posters/327/414874_paranojya.jpg
== Синтаксис @@ %% ==
=== Perl @@ ===
<code-perl>
* Спецсимволы захватили мир
* Репутация «write-only»* Развитие , развитие умерло
=== PHP @@ ===
<code-php>
* Репутация г**нокода
=== Python @@ ===
<code-python>
* Пробелы меняют смысл?!!!!
=== Ruby @@ ===
<source lang="ruby">
* чем он лучше хотя бы питона?
=== Go @@ ===
<source lang="go">
* Что за смайлики <tt><nowiki>:= <- & *</nowiki></tt>? Где мои скобочки?
=== Erlang @@ ===
<source lang="erlang">
* Ой-ой-ой…
* Специфичен. Классов нет, есть процессы. Но сетевой, агада!
=== OCaml O_O @@ ===
<source lang="ocaml">
* ПОЛИЗ?!!!!
=== Lua @@ ===
<source lang="lua">
* Для полноты картины
=== JS @@ ===
<source lang="javascript">
</source>
=== Синтаксис JS @@ %% ===
Имхо вполне нейтральненько.
* 2008+: шустрота и современный период
=== Дремучий период @@ ===
1995—1997
* pre-AJAX: JSONP, невидимый iframe
=== Появление AJAX @@ ===
2004
* 2006 — jQuery
=== Современное развитие @@ ===
* 2008 — Google V8
*: {{gray|Ну, разве что bash…}}
=== Вычислительный [https://blog.famzah.net/2016/02/09/cpp-vs-python-vs-perl-vs-php-performance-benchmark-2016/ бенчмарк] @@ ===
* C++ (g++ 5.3.1) -O2 = 1.124s
* '''PHP 5.6 = 69s''' :))))) {{mag|ахаха, прекрати}}
=== Почему V8 такой быстрый? @@ ===
Потому, что 4-слойный JIT!
https://webkit.org/blog-files/ftl-jit/four_tier_performance.png
=== Ключевые слова о том, как это всё устроено @@ ===
* Какой бывает JIT?
* OSR (On-Stack Replace)
=== Отступление: PyPy @@ %% ===
Трассирующий JIT-компилятор для Python, очень медленный
http://gyazo.com/2c32601f8747c5e93becc08270fa5127.png
=== LLVM @@ ===
LLVM (http://llvm.org), ранее «Low Level Virtual Machine»
{{----}}
=== SSA @@ ===
Пример LLVM IR:
</pre>
=== V8 JIT @@ ===
* Первый раз функции запускаются в LLInt
*: {{green|&rarr; OSR в LLVM/B3 JIT}}
== Производительность = Производительность — итого @@ ===
* Итого, V8 — «смешанный» JIT
* &rArr; что же делать?..
=== Событийные машины! @@ %% ===
{{gray|("event loop")}}
=== Как вообще обрабатываются соединения клиентов? @@ ===
{{green|Все писали сетевой сервер на C? :)}}
*: ''«Проблема C10K» {{gray|(обработать 10000 соединений на 1 сервере)}}''
=== Событийная машина @@ ===
{{green|Неблокирующий ввод/вывод:}}
* '''всё в один поток''' {{gray|(или в несколько по числу ядер CPU)}}
=== Так работает Nginx… @@ %% ===
…и весь современный Web (фронтенды)
{{gray|(плюс zero-copy и раздача статики через sendfile())}}
=== А если пойти дальше? @@ ===
Кроме HTTP-запросов клиентов ещё есть:
{{mag|&rArr; Это и будет «событийная машина»}}
=== Событийные машины @@ ===
Почти везде опциональная сущность:
* Механизмы разные в разных ОС &rArr; '''libevent''', '''libev'''
=== Событийная машина node.js @@ ===
* Отличительная черта: '''вообще нет блокирующего I/O'''
* [http://blog.virtan.com/2012/07/million-rps-battle.html Million RPS Battle]
=== Можно писать и на префорке @@ %% ===
Но…

Навигация