Сортировка в Swift 2.0 Демо-ссылка , изменение синтаксиса из «sorted (myArray, {})» на «myArray.sort ({})». Расширяемый протокол.
let myArray = ["Step 6", "Step 12", "Step 10"]
let sortedArray = myArray.sort({ x, y in
return x.localizedStandardCompare(y) == NSComparisonResult.OrderedAscending
})
dump(sortedArray)
Согласно эта статья уже возможно реализовать поточную обработку JavaScript.
JavaScript не поддерживает многопоточность, потому что интерпретатор JavaScript в браузере является единственным потоком (AFAIK). Даже Google Chrome не позволит единственной сети page’s JavaScript, выполненный одновременно, потому что это вызвало бы крупные проблемы параллелизма в существующих веб-страницах. Весь Chrome делает разделить несколько компонентов (различные вкладки, плагины, и так далее) в отдельные процессы, но я can’t воображаю единственную страницу, имеющую больше чем один поток JavaScript.
можно однако использовать, как был предложен, setTimeout
для разрешения своего рода планирования и “fake” параллелизма. Это заставляет браузер восстанавливать управление потоком рендеринга и запускать код JavaScript, предоставленный setTimeout
после данного количества миллисекунд. Это очень полезно, если Вы хотите позволить область просмотра (что Вы видите) обновляться при выполнении операций на нем. Просто цикличное выполнение через, например, координаты и обновление элемента соответственно просто позволят Вам видеть запуск и конечные положения и ничто промежуточное.
Мы пользуемся библиотекой абстракции в JavaScript, который позволяет нам создавать процессы и потоки, которыми все управляет тот же интерпретатор JavaScript. Это позволяет нам выполнять действия следующим образом:
, Это позволяет некоторую форму планирования и фальсифицирует параллелизм, запуск и остановку потоков, и так далее, но это не будет истинная многопоточность. Я don’t думают, что это будет когда-либо реализовываться на самом языке, начиная с истинной многопоточности, только полезен, если браузер может выполнить единственную многопоточную страницу (или даже больше чем одно ядро), и трудности, там путь, больше, чем дополнительные возможности.
Для будущего JavaScript, проверьте это: https://developer.mozilla.org/presentations/xtech2006/javascript /
Насколько я услышал, что Google Chrome будет иметь многопоточный JavaScript, таким образом, это будет "ток реализации" проблема.
Это - реализации, который не поддерживает многопоточность. В настоящее время Google Gears позволяет использовать некоторую форму параллелизма путем выполнения внешних процессов, но это об этом.
новый Google браузера, как предполагается, выпускает сегодня (Google Chrome), выполняет некоторый код параллельно путем разделения его в процессе.
базовый язык, конечно, может иметь ту же поддержку как, сказать Java, но поддерживать для чего-то как параллелизм Erlang, нигде не около горизонта.
Так же, как матовый сказанный b вопрос не очень ясен. Предположение, что Вы спрашиваете о поддержке многопоточности на языке: потому что это не необходимо для 99,999% приложений, работающих в браузере в настоящее время. При реальной необходимости в нем существуют обходные решения (как использование window.setTimeout).
В общей многопоточности очень, очень, очень, очень, очень, очень трудно (я говорил, что это твердо?) для разбираний, если Вы не вставляете дополнительные ограничения (как использование только неизменных данных).
Вы имеете в виду, почему язык не поддерживает многопоточность или почему не делают механизмы JavaScript в браузерах поддерживают многопоточность?
ответ на первый вопрос - то, что JavaScript в браузере предназначен, чтобы быть выполненным в песочнице и способом machine/OS-independent, добавить, что поддержка многопоточности усложнила бы язык и связала бы язык слишком тесно с ОС.
Традиционно, JS был предназначен, если коротко, быстро рабочие части кода. Если у Вас было основное продолжение вычислений, Вы сделали это на сервере - идея приложения JS+HTML , которое работало в Вашем браузере в течение долгих промежутков времени, делая нетривиальные вещи, было абсурдно.
, Конечно, теперь у нас есть это. Но, потребуется немного для браузеров для наверстывания - большинство из них было разработано на основе однопоточной модели и изменения, которое не легко. Google Gears обходит много потенциальных проблем путем требования, чтобы фоновое выполнение было изолировано - никакое изменение DOM (так как это не ориентировано на многопотоковое исполнение), никакие объекты доступа, созданные основным потоком (так же). В то время как строгий, это, вероятно, будет самым практическим дизайном для ближайшего будущего, и потому что это упрощает дизайн браузера, и потому что это снижает риск, вовлеченный в разрешение неопытных кодеров JS, бездельничают с потоками...
, Почему это - причина не реализовать многопоточность в JavaScript? Программисты могут сделать то, что они хотят с инструментами, которые они имеют.
Таким образом, давайте не давать им инструменты, которые так легки к неправильное употребление что любой веб-сайт i открытых концов, разрушающих мой браузер. Наивная реализация этого принесла бы Вам прямо в территорию, которая вызвала MS столько головных болей во время разработки IE7: дополнительные авторы играли быстро и свободный с моделью потоков, приводящей к скрытым ошибкам, которые стали очевидными когда объектные жизненные циклы, измененные на основном потоке. ПЛОХО. Если Вы пишете многопоточные дополнения ActiveX для IE, я предполагаю, что он идет с территорией; не означает, что это должно пойти дальше, чем это.
Я не знаю объяснения для этого решения, но я знаю, что можно моделировать некоторые преимущества многопоточного программирования с помощью setTimeout. Можно дать иллюзию нескольких процессов, делающих вещи одновременно, хотя в действительности, все происходит в одном потоке.
Просто имеют Вашу функцию, делают определенную работу, и затем называют что-то как:
setTimeout(function () {
... do the rest of the work...
}, 0);
И любые другие вещи, которые нуждаются в выполнении (как обновления UI, изображения с анимацией, и т.д.) произойдет, когда они получают шанс.
Без надлежащей языковой поддержки для синхронизации потоков даже не имеет смысла пробовать новые реализации. Существующие сложные приложения JS (например, любые, использующие ExtJS), скорее всего, неожиданно завершат работу, но без ключевого слова synchronized
или чего-то подобного было бы также очень сложно или даже невозможно написать новые программы, которые ведут себя правильно.
Многопоточность JavaScript (с некоторыми ограничениями) здесь. Google внедрил воркеры для Gears, и они включены в HTML5. Большинство браузеров уже добавили поддержку этой функции.
Потоковая безопасность данных гарантируется, потому что все данные, передаваемые работнику / от рабочего, сериализуются / копируются.
Для получения дополнительной информации прочтите: