Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 12.10.2012, 21:24
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Я писал в общем, больше про организацию кода, нежели про быстродействие.

Но что касается скорости, то падение конечно весьма существенное.
я попробую донести мысль.
Сразу дико извиняюсь не писал на ассембле со времён доса ))

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

возьмём пример на js
a=a+b;

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

mov eax,a ;//Перемещаем в eax, значение из a
mov edx,b ;//Перемещаем в edx значение из b
add eax,edx ;//складываем значения


А если нетипизированы то что делать ?
процессор то только с регистрами умеет операции выполнять, а про нетепизированные переменные он слыхом неслыхивал

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

//в al- значение символизирующее тип обоих переменных (пусть для простоты примера он общий для обоих переменных)
// если тип =1 тогда перейдём к метке sumvar
cmp al, 1
jz sum_var

// если тип =2 тогда перейдём к метке sumstring
cmp al, 2
jz sum_var

//подпрограмма сложения целых чисел
sumvar:

jmp next_step

//подпрограмма сложения строк
sumstring:

jmp next_step

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

Последний раз редактировалось DjDiablo, 12.10.2012 в 21:42.
Ответить с цитированием
  #32 (permalink)  
Старый 12.10.2012, 21:32
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от FINoM
Каждый язык имеет свои недостатки, яваскрипт в том числе. Но полностью переделывать язык (отсутствие поддержки литералов объектов без кавычек, совершенно другие имена методов...) — глупо.
если уж переделывать, то почему не привести все в порядок?
Ответить с цитированием
  #33 (permalink)  
Старый 12.10.2012, 21:32
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

monolithed,
Увы, незна ни CoffeeScript, ни LiveScript. JSа хватаем по самые уши Но TypeScript интересно. Когда буду писать для win8, тогда наверно и попробую.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #34 (permalink)  
Старый 12.10.2012, 21:34
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от FINoM
Взяли бы, да новые версии ES реализовали (если я не ошибаюсь, там где-то были статические типы).
Идея как раз в том и состоит, чтобы поломать совместимость и при этом получить некоторые бонусы.
Ответить с цитированием
  #35 (permalink)  
Старый 12.10.2012, 21:35
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от x-yuri
если уж переделывать, то почему не привести все в порядок?
А что не так-то? Разве так удобнее
x = {
  'a':1,
  'b':2
}


чем
x = {
  a:1,
  b:2
}
?
Да и методы зачем переписали? Имена классов? Что с ними не так?
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #36 (permalink)  
Старый 12.10.2012, 22:01
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Несколько примеров отсюда:
http://synonym.dartlang.org/
console.log('Level completed.'); → print('Level completed.');

Зачем? Ну то ладно.

Якобы ничего → final name = 'Bob';

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

new Array(); → new List();
a.push('donut'); → a.add('donut');

Зачем?

a.pop() → a.removeLast()

Да, это выглядит несколько логичнее, но, опять же, зачем?

numbers.sort(function(a, b) {
  return a - b;
});


numbers.sort((a, b) => a - b);

Молодцы, конечно, но это есть в ES (не помню, какой версии). Запилите, вместо того, чтоб херней страдать.

new Object(); → new Map();

Тот же вопрос.

var periodic = {
  gold: 'AU',
  silver: 'AG'
};
var periodic = {
  'gold': 'AU',
  'silver': 'AG'
};


var periodic = {
  'gold' : 'AU',
  'silver' : 'AG'
};

Идиотизм.

periodic.gold // == 'AU'
periodic['gold'] // == 'AU'


periodic['gold']

Не меньший идиотизм. Вообще нифига не удобно.

Якобы ничего → var fruits = new Set();

Set есть в ES, его поддерживает FF, он же легко реализуется ручками.

var queue = []; → var queue = new Queue();

И че это? Оптимизированные списки типа как в Прологе?

...
Тут еще масса негодования.

Дарт масдай. ES должен развиваться и реализовываться в Хроме, там и остальные потянутся (мелкософт, если мне не изменяет память, обосрала Дарт и не будет его поддерживать).
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #37 (permalink)  
Старый 12.10.2012, 22:08
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Цитата:
Дарт масдай. ES должен развиваться и реализовываться в Хроме, там и остальные потянутся (мелкософт, если мне не изменяет память, обосрала Дарт и не будет его поддерживать).
В TC39 состоит не только Mozilla, но и Microsoft, Apple, Opera и Google. Они развивают его. V8, один из первых кто поддерживает большинство эксперементальных фишек, не считая конечно SpiderMonkey.

Дарт конечно тоже не очень люблю, но глупо говорить, что ES никто не поддерживает и он не развивается в Хроме.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #38 (permalink)  
Старый 12.10.2012, 22:31
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Nekromancer
Дарт конечно тоже не очень люблю, но глупо говорить, что ES никто не поддерживает и он не развивается в Хроме.
Он настолько медленно реализовывается, что я прям хочу спать.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #39 (permalink)  
Старый 12.10.2012, 22:53
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

Сообщение от x-yuri
это какая-то статическая типизация времени выполнения
конечно, потому и "эмуляция") но главное - автоматическое приведение типа, про которое забывают апологеты "статической типизации". а заниматься ручным кастингом типов на каждом углу - то ещё удовольствие
__________________
.ня
Ответить с цитированием
  #40 (permalink)  
Старый 12.10.2012, 23:41
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

FINoM, ответ на часть твоих вопросов я уже приводил:
Сообщение от x-yuri
если уж переделывать, то почему не привести все в порядок?
Например, касательно add/removeLast для массивов. На остальные - производительность.

Сообщение от FINoM
А что не так-то? Разве так удобнее: x = {'a': 1, 'b': 2} чем x = {a: 1, b: 2}
Нет, ты здесь не угадал, речь не о приведении в порядок.

P.S. Мысли теряются на фоне эмоций. Чего ты так разнервничался?

Сообщение от tenshi
а заниматься ручным кастингом типов на каждом углу - то ещё удовольствие
а зачем им вообще заниматься?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск