Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> недостатки JavaScript, предлагаю собрать коллекцию :) 
:(
    Опции темы
Alx
Дата 9.2.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



ну вот. предлагаю собрать коллекцию всех уязвимостей в JavaScript.
цель - вовсе не повредничать и обидеть программистов, а совсем наоборот.
сейчас мы все грани революции в web-программирование. я о том, что уже назвали web 2.0.
в скором времени JavaScript будет играть чуть- ли не решающую роль в разработке веб-страниц и тем более веб-приложений.
на мой взгяд, он к этому ещё не совсем готов.
предлагаю нам всем собраться и найти всё то, чего нам не хватает в JS.
затем мы сможем делать всё что угодно с нашим архивом: наивно отсылать разработчикам, писать плагины к браузерам, писать грамотные библиотеки с обходом лагов, и т.п. что в голову взбредёт.
мы будем знать свои проблемы.

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

ну вот.

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

предлагаю также собирать уязвимости и в HTML, а особенно по улучшению работы с веб-формами. такие как: добавление новых, ранее не сущесвовавших полей, улучшение работы с уже существующими и т.д.

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

итак, начну.
первое, что приходит в голову:
хотелось бы
1. цикл с возможностью задания паузы между единичными выполнениями, который мог бы возвращать результат после каждого из своих выполнений
как обходим: используем в качестве цикла функцию, в которой указываем счетчик и вызываем её с помощью setTimeout() или setInterval().
Добавлено @ 17:54
1. HTML: <SELECT> с возможностью ввода текста + подбор из опций соотвутствующих записей.
Добавлено @ 17:56
так же предлагаю договорится, что сюда НЕ пишем только то, что одинаково правильно функционирует в трех браузерах - MSIE, Firefox и Opera.

Это сообщение отредактировал(а) Alx - 9.2.2006, 17:51


--------------------
PM MAIL WWW ICQ   Вверх
12345c
Дата 9.2.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Это называется не уязвимости, а недостатки или баги (или-или).

3. Медленное быстродействие как в вычислениях, так и в доступе к объектам.

4. Утечка памяти в анонимных функциях в ie.

5. неуклюжесть в определении свойств - margin - border - padding и очень оригинальное определение width c учётом этих свойств.

6. и там - и там - одни враги.

А давай потом организуем W3C 2.0, в котором этот список будет руководством к действию. Будем мировую моду определять, чем плохо?

По 1-му: здесь 2 подхода к описанию программ. Первый: сопрограммы - процесс описан в виде цикла с паузами. Это то же, что вместо пауз будут запросы на обмен с соседними процессами. Второй: пишем всё как программы, которые в идеале стремятся к нулевому времени исполнения. В JS реализован 2-й, а в других языках непоследовательно - элементы 1-го - паузы, например. Поэтому загвоздка не в паузах, а в чистом 1-м подходе - нигде не писать в стиле сопрогамм. Язык с сопрограммами - будет совсем другой язык.

По 2-му пункту (select, точнее, combo-box): с ним чаще вспоминается не отсутствие комбобокса, а особые функции добавления/убирания опций. В своё время их было сложно реализовать в общем порядке, сделали специальные add(). А в IE до сих пор все стили неприменимы к объекту select.

В общем - недостатков - сотни, их как раз хватит на нашу плодотворную работу в комитете W3C 2.0 в течение пары-тройки лет smile


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
Aliance
Дата 9.2.2006, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Скудная работа с картинками
Практически отсутсвие работы с файлами
Open-source
Кроссбраузерность
PM MAIL WWW ICQ Skype   Вверх
Alx
Дата 9.2.2006, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



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

а с w3c это ты классно придумал smile


--------------------
PM MAIL WWW ICQ   Вверх
12345c
Дата 10.2.2006, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Этого на толстую книгу хватит. Которые почти так и пишутся (Гудман - библия) - свойство - применимость в версиях и с какой версии. Пройтись по форумам - таких данных много наберётся, и работы много. Я тоже подумывал над тем, как это всё систематизировать, чтобы росла коллективная база знаний. Но не текстовая - книги писать некому, а некий движок IDE с контекстными подсказками. Пишешь метод в одном стиле - тебе подсказки совместимых подобных методов. Как бы туда ещё включить наводящие ключевые слова? Типа. сохранение в файл - > FileSystemObject


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
regis
Дата 10.2.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: нет
Всего: 7



Давайте, давайте больше недостатков. Я их в свою статью вставлю ;)

(Хотя, по моему, весь JS-это один большой недостаток... но это мое ИМХО)

По поводу отсутствия delay (или чего-то в этом роде): это, по-моему, вполне намеренная фича. Скрипт не должен захватывать управление (по кр. мере, на продолжительное время) -- соответственно, весь тайминг может быть реализуем только через setTimeout() / setInterval().

По поводу отсутствия работы с файлами: безопасность. Вы представьте, что будет, если любой скрипт на любом сайте сможет с вашими системными файлами работать? smile

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


--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Zeroglif
Дата 10.2.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(regis @ 10.2.2006, 13:27 Найти цитируемый пост)
По поводу быстродействия (вернее, медленнодействия): а чего еще ждать от языка, в котором все (включая даже числа) является объектами?


Откуда такая уверенность? smile
PM MAIL WWW   Вверх
Innuendo
Дата 11.2.2006, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 24.12.2005
Где: Молдова

Репутация: 2
Всего: 6



А эти недостатки будут услышаны людьми свыше? smile

Я напишу не недостаток языка, а такую штуку:
так как пишем мы это дело в блокноте (ну или другом редакторе) возникают часто проблемы с кодом, и их бы проследить, а такой возможности нету. То есть Отладка программы... (Debug вроде называется). Может я конечно ошибаюсь- в некоторых редакторах это есть, ноя не видел...
А то иногда в циклах путаешься (когда они громоздкие) а следиьт одними alert'ами не удобно smile


--------------------
=)
PM MAIL ICQ Jabber   Вверх
Alx
Дата 11.2.2006, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



Innuendo,
ну, может, просто смотреть на какой строке ошибка и исправлять?
а то ведь с дебагером и писать не интересно...


--------------------
PM MAIL WWW ICQ   Вверх
Innuendo
Дата 11.2.2006, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 24.12.2005
Где: Молдова

Репутация: 2
Всего: 6



Alx,
ну не знаю... очнеь часто пишет строку, а ты понимаешь что это только при каком-то условии цикла...
всё равно видеть все ходы цикла гораздо удобнее smile


--------------------
=)
PM MAIL ICQ Jabber   Вверх
sergejzr
Дата 12.2.2006, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 10
Всего: 360



Берёшь Firefox, ставишь плагин venkman и вот тебе полноценный дибагер smile
Добавлено @ 00:11
Цитата(Alx @ 11.2.2006, 20:36 Найти цитируемый пост)
а то ведь с дебагером и писать не интересно...

Саня, ты прикалываешься smile))) Не интересно, когда 10 строк, а если 20 кБ кода, то с распечаткой с ума сойти можно.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Alx
Дата 12.2.2006, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



ну не наю)))
я как-то всю жизнь пока обходился...) smile


--------------------
PM MAIL WWW ICQ   Вверх
Innuendo
Дата 12.2.2006, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 24.12.2005
Где: Молдова

Репутация: 2
Всего: 6



Цитата(Alx @ 12.2.2006, 01:08 Найти цитируемый пост)
ну не наю)))
я как-то всю жизнь пока обходился...)

можн и дальше обходится.. зато с ней можно скэономить время поиска ошибки.


--------------------
=)
PM MAIL ICQ Jabber   Вверх
Sardar
Дата 12.2.2006, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(Alx @ 9.2.2006, 16:45 Найти цитируемый пост)
1. цикл с возможностью задания паузы между единичными выполнениями, который мог бы возвращать результат после каждого из своих выполнений
как обходим: используем в качестве цикла функцию, в которой указываем счетчик и вызываем её с помощью

Очень хочеться поддержки многозадачности, что то типа:
Код
//код что должен выполняться паралельно с переодическими задержками и т.п.
var t = Thread.create(func);
t.run(); //сразу же выходим из вызова и продолжаем выполнение
alert('OK');

function func() {
  //здесь код что работает паралельно с другими потоками
  //значит его можно блочить без проблем =)
  alert('step 1');
  Thread.sleep(2*1000); //спим 2 секунды
  alert('step 2');
}

Возникнет масса проблем с синхронизацией, для решения можно ввести synchronized ключевое слово. Dead lock'и можно отследить, хотя если копнуть глубже можно найти кск другие скрипты поддерживающие треды решили сии проблемы. В любом случе множество тредов просто необходимо в AJAX приложениях, уже сейчас сам XMLHttpRequest и его события отрабатываються в отдельном треде.

Цитата(Alx @ 9.2.2006, 16:45 Найти цитируемый пост)
1. HTML: <SELECT> с возможностью ввода текста + подбор из опций соотвутствующих записей.

Это не задача JS, а компонент браузера. Стили, разметку, фичи, всё это к JS не приписываем, язык только управляет этими обьектами smile

Цитата(12345c @ 9.2.2006, 17:35 Найти цитируемый пост)
5. неуклюжесть в определении свойств - margin - border - padding и очень оригинальное определение width c учётом этих свойств.

В смысле? В CSS стилях названия содержат '-' что являеться оператором в JS, потому именование типа backgroundColor ИМXО очень даже подходящее. Если ты о формате общих свойств border, margin и т.д., то это не к JS, а к спецификации CSS smile

Цитата(Aliance @ 9.2.2006, 20:59 Найти цитируемый пост)
Скудная работа с картинками

Это опять же браузерный обьект smile Мозилла(Gecko) и Safari имеют canvas, очень даже удобно рисовать. Xотя когдабраузеры начнут свободно понимать SVG и подключат API к JS, то можно будет из JS работать с SVG примитивами, вот это будет действительно "Флешевая анимация" smile

От себя добавлю:
  • скудный язык, приходиться много работать с DOM коллекциями, а удобных итераторов нет. Самая плохая реализация for in тоже в JS, т.к. не удобно, перечисляет всё, что правильно для JS, т.к. у обьектов и методы и поля это одно и тоже.
  • нет хороших коллекций, всё что имеем это массивы и обьекты. Обьекты наследуют прототип Object, так что даже пустой обьект полон всего, отсюда понимаем почему for in не удобно. Требуеться словарь (ключь=>значение), множества, кортежи и другое.
  • нет человеческого API у существующих коллекций, в языке где в основе лежат closures пользуем for(var i; i<length; i++) для перебора, а с ключами вообще лажа. Вообще это позорно... smile
  • нет пространств имён/пакетов/модулей или любого другого механизма контроля видимости кода. Сейчас ещё не актуально, но в будущем может понадобиться. Сюда хорошо бы дополнить загрузку кода с сервера (только с домена страницы) нормальным API, а не создаванием скриптов в ручную, что не везде работает, да и "грязно"
В целом язык уже не молод, но ещё сырой на текущее время, а учитывая что вводиться он везде и повсеместно (вернее ECMA Script или pure JS без браузерного API), то требуеться под шумок его расширить smile JS 2.0 ИМXО лажа, полная. Не хочу видеть видеть классы в языке без типов, это провал, притянуто за уши под моду. Читаем Fortress и traits, почти это реализовано уже в JS, осталось ввести контроль импорта окружения в функции, так что бы не приходилось "извращаться" делая "приватные" переменные. Xотя текущие подходы извратами не нахожу. Xочеться что бы JS начал по своей гибкости напоминать Python smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Destruction
Дата 12.2.2006, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 12.2.2006

Репутация: нет
Всего: нет



Цитата(Zeroglif @ 10.2.2006, 14:42)
Цитата(regis @  10.2.2006,  13:27 Найти цитируемый пост)
По поводу быстродействия (вернее, медленнодействия): а чего еще ждать от языка, в котором все (включая даже числа) является объектами?


Откуда такая уверенность? smile

Код

<script>
alert(Number('123').constructor);
alert(Number('123').constructor.constructor);
</script>


Это сообщение отредактировал(а) Destruction - 12.2.2006, 21:28
PM MAIL   Вверх
Alx
Дата 12.2.2006, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



ну конечно, если создать объект числа, то число будет объектом...


--------------------
PM MAIL WWW ICQ   Вверх
Sardar
Дата 12.2.2006, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Destruction, и что пример должен показать? Обернул ты строку в Number обьект, во второй строке опросил конструктор у конструктора, т.е. у функции (Function обьект). В JS есть оьекты и примитивы, строки, числа, это всё примитивы. Xотя new String, new Number и т.д. это обьекты. Особенно сбивает с толку такой приём smile
Код
var a=new Boolean(false);
alert(a);
if(a) alert("Не должно появиться!"); //но появиться =)



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Innuendo
Дата 12.2.2006, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 24.12.2005
Где: Молдова

Репутация: 2
Всего: 6



Sardar,
а вот получается что условия типа if (a) проверяют на наличие переменной, а не на то что, она равна false, true или 0,1 ?


--------------------
=)
PM MAIL ICQ Jabber   Вверх
Alx
Дата 12.2.2006, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



Innuendo,
нет, тут всё сложнее. на наличие не перемнных, а объектов.
кода
Код

<script>
var a = false;
alert(a);
if(a) alert("Не должно появиться!"); // и не появится
</script>

работат "правильно".

а также

Код

<script>
var a = new Boolean(false);
alert(a);
if(a == true) alert("Не должно появиться!"); // тоже не появится
</script>


Это сообщение отредактировал(а) Alx - 12.2.2006, 22:24


--------------------
PM MAIL WWW ICQ   Вверх
Zeroglif
Дата 12.2.2006, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(Innuendo @ 12.2.2006, 22:12 Найти цитируемый пост)
а вот получается что условия типа if (a) проверяют на наличие переменной, а не на то что, она равна false, true или 0,1 ?


Наличие переменной не при чём. Всё работает по строгой логике для if (см. Ecma-262, 12.5), выражение в скобках вычисляется и приводится к типу Boolean (см. Ecma-262, 9.2). Соответственно, приведение к этому типу объекта new Boolean(false) даст true.
PM MAIL WWW   Вверх
Sardar
Дата 12.2.2006, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(Innuendo @ 12.2.2006, 21:12 Найти цитируемый пост)
if (a) проверяют на наличие переменной, а не на то что, она равна false, true или 0,1

Существование обьекта это true, null это false, не важно состояние обьекта (в примере содержи false).


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
regis
Дата 13.2.2006, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: нет
Всего: 7



@ Sardar & Alx:

в том и проблема, что даже самые обычные числа являются объектами (класса Number). Скажем, они имеют уйму методов (вроде toString). Все это есть в документации. Попробуйте у себя в браузере выполнить

Код

alert ((2*2).toString());


например...

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Destruction
Дата 13.2.2006, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 12.2.2006

Репутация: нет
Всего: нет



Примерно это я хотел показать указывая наличие контруктора, но использовал неудачный пример.

Код

<script>
alert((123).constructor);
</script>


Это сообщение отредактировал(а) Destruction - 13.2.2006, 11:48
PM MAIL   Вверх
Sardar
Дата 13.2.2006, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



regis & Destruction, Нет, это называеться autoboxing, проиходит динамически когда ты обращаешся с примитивом как с обьектом, но значение всё равно не оборачиваеться в обьект.

Код
var a=(3+1);
alert(a.constructor);
a.test = 90;
alert(a.test);

b = new Number(3+1);
alert(b.constructor);
b.test = 90;
alert(b.test);

Number.prototype.bla = 80;
alert(a.bla);


Обьекты почти всегда в скриптах выполнены на как хештаблицы, реже деревья. Т.е. обьект это набор пар ключь=>значение + сылка на прототип (опять же обьект). Держать хештаблицу для каждого значения весьма накладно (интересно как порешали в Ruby, где действительно всё это обьекты?), потому и существуют примитивы, что "имеют" ссылку только на прототип Number. Числа обычно храняться прямо в структуре "универсального значения", обычно в union. Фактически никаких ссылок нет, все числа при обращении с ними как с обьектами обращаються к прототипу Number.

Когда мы пишем:
Код
alert((3+4).constructor.toString());

Происходит следующее, по шагам:
  • сложить, результат на стек
  • найти поле constructor, это примитив число, значит обращаемся к нативному обьекту Number
  • найти у обьекта Number (помним что это функция, т.е. обьект) поле toString, если поле это обьект-функция, то вызываем, иначе кидаем исключение
Опустил детали конкретного движка, вычисления могут быть традиционно на стеке (Java, C#), а могут быть в "регистрах" (Parrot (Perl6)). В целом видим что примитивы это всё таки очень лёгкие "существа" в отличии от полноценных обьектов. Все примитивы не мутируемы, чем и отличаються от ссылочных значений. Только строки исключение, они не мутируемы, но ссылочные, что бы не копировать их по чём зря в памяти smile

Надеюсь обьяснил, кончаем офтоп, по вопроссам внутренней работы JS создаём новую тему smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Destruction
Дата 13.2.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 12.2.2006

Репутация: нет
Всего: нет



бл... пойду умные книжки читать.. - половину ваще не понял.

Это сообщение отредактировал(а) Destruction - 13.2.2006, 15:21
PM MAIL   Вверх
Zeroglif
Дата 13.2.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(Sardar @ 13.2.2006, 12:17 Найти цитируемый пост)
Надеюсь обьяснил, кончаем офтоп, по вопроссам внутренней работы JS создаём новую тему


Перевёл разговор про примитивы сюда - http://forum.vingrad.ru/index.php?showtopic=83710
PM MAIL WWW   Вверх
Lixil
Дата 14.2.2006, 18:53 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вот недостатки, которые сразу пришли в голову:
1. Нет статических переменных.
2. Нет ООП (фичи с prototype, this и т.д. не считаются)
3. Нет инклуда других скриптов.
4. Нет аргументов по умолчанию у функций (пляски с .arguments не веселят)

Это так, недостатки самого языка. Недостатки всей платформы (если можно так выразиться) упираются в кроссбраузерность.

ИМХО ^
  Вверх
Alx
Дата 14.2.2006, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



что ты подразумеваешь под статичными переменными и ООП?
JavaScript даже слишком ОО...
инклуд есть, чуть-чуть изворотливый, но в общем совсем не сложный
а вот 4 дейчаствительно большой недостаток, кстати, как пример, именно вот такие недостатки я и хотел собрать, то есть не пространные, а конкретные и обидные.


--------------------
PM MAIL WWW ICQ   Вверх
Sardar
Дата 15.2.2006, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(Lixil @ 14.2.2006, 17:53 Найти цитируемый пост)
4. Нет аргументов по умолчанию у функций (пляски с .arguments не веселят)

Как представлю такой синтаксис в JS
Код
function test() {
  var ret="";
  
  return function() {
    (arguments[0:3] + [90, "test", somevar]).map(
      function(key, value) {
        ret += "%s => %s\n" % (key, value); //ну это совсем Python =)
      }
     );
     return ret;
  };
}

var a=test("arg 1", 100, ["arg N", "bla", 343], "must be ignored");
alert(a());
// 0 => arg 1
// 1 => 100
// 2 => [ arg N, bla, 343 ]

Ещё бы вызов с именованными аргументами:
Код
function test(arg1, arg2, arg3="def val") {
  var ret="";
  arguments[:].map(function(k, v){ret+="%s => %s\n" % (k, v);});
  alert(ret);
}

test("val 1", arg3="my val", arg2=90);
//arg1 => val 1
//arg2 => 90
//arg3 => my val

Да... красиво было бы smile
Добавлено @ 01:45
А вообще долго тащился smile
Код
#это Ruby, жаль подсветки нет

3.times {
  puts "Cool!"
}

# Cool!
# Cool!
# Cool!
# => 3



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Sardar
Дата 17.2.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Кто пользовал XMLHttpRequest знает что его onreadystatechange исполняеться в отдельном треде. JS не многопоточная среда, все setTimeout, события и прочее исполняеться друг за дргугом, модальное окно alert останавливает исполнение. Раз нет многопоточности, значит нет проблем с синхронизацией, концепция проста и удобна.

В результате "второго треда" от XMLHttpRequest гармония нарушаеться, т.к. средств синхронизации нет приходиться надеяться что "основной тред" и тот что от XMLHttpRequest не возьмуться работать с одной нодой. Хотя шанс на это мал, но всё таки не приятна такая не ясность.

Настоящая трабла возникает в поведении JS обьектов, судя по всему они копируються в новый тред. Попробуйте создать обьект (назововём А), очертить closure которой будет "виден" обьект, отдать полученный closure на onreadystatechange обьекта XMLHttpRequest. В closure измените какое нибудь свойство обьекта А, сразу же убедитесь что свойство изменилось. Напишите кнопку что будет опрашивать изменяемое свойство А. Запускаем, видим что поле обьекта А изменяеться, затем жмём кнопку, удивляемся почему поле того же обьекта А не изменилось.

Обьяснение фокусу пока одно - JS обьект передаваемый в "новый тред" копируеться, обработчик события работает с копией в "новом треде", из него видим что поле изменяеться. События кнопки работают в "основном треде", замечаем что "оригинальная копия" обьекта не изменяеться.

Вечером отправлю полезный код, где сей эффект проявляеться. Хорошо если я не прав и кто нибудь найдёт ошибку, а то не приятна эта магия...


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Sardar
Дата 18.2.2006, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Код с эффектом копирования обьектов между тредами здесь:
http://forum.vingrad.ru/index.php?showtopi...st&p=648667


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
regis
Дата 26.2.2006, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: нет
Всего: 7



Дискуссия была интересная, и по ее итогам родился серьезный вопрос. Кто-нибудь из посетителей форума реально хочет поучаствовать в разработке и тестировании нового скрипт-языка? Уточню, впрочем, что к JavaScript он относится очень отдаленно -- значительно больше он поход на Perl и LISP.

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Alx
Дата 26.2.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



regis,
кто он? его что - уже кто-то разрабатывает?

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


--------------------
PM MAIL WWW ICQ   Вверх
Sardar
Дата 26.2.2006, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(Alx @ 26.2.2006, 13:31 Найти цитируемый пост)
а вот расширить JavaScript каким-либо образом

Как ты себе это представляешь? Почти у всех браузеров своя реализация JS, со своим особым API, расширить это не реально, да и пользоваться не будет.

regis, давно планы вынашиваю , сделать язык похожий по мощам на Python, но с C подобным синтаксисом. Язык общего назначения, "полу-скриптовый", т.е. как в .Net JIT компиляция с кешем и статистикой заложена в дизайн движка. Чем больше изучаю питон и расширения к нему, тем больше убеждаюсь н сколько мощен движок, хотя почистить его от эволюционного мусора стоило бы smile

Открывай топ здесь. Дай название топу подобное "Идеальный скриптовый язык, каким его видим?". Соберём опыт воедино.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
regis
Дата 27.2.2006, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: нет
Всего: 7



@Alx: да, разрабатывают (и не "кто-то", а я сам ;) ). Более того, простой интерпретатор этого языка уже вполне работает (хотя баги еще ловить и ловить...)

@Sardar: рад буду обменяться опытом (хотя с питоном я знаком довольно плохо).
Где-то через недельку-другую попробую выложить то, что наработал, и тогда открою тему.

По поводу расширения JavaScript: Alx, наверное, имел в виду подключаемые извне модули с "родным" кодом? Впрочем, мне тоже не вполне понятно, зачем это нужно, и, главное, кто этим будет пользоваться...


Это сообщение отредактировал(а) regis - 27.2.2006, 15:25
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Alx
Дата 27.2.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



Sardar, regis,
честно говоря, я не задумывался, как это будет осуществляться, но мне показалось, что это легче, чем писать новый язык... smile


--------------------
PM MAIL WWW ICQ   Вверх
Alx
Дата 18.3.2006, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



кстати обзывание параметров по умолчанию делается очень просто с помощью || или ?.

покажу наглядный пример, где мне их пришлось даже комбинировать:

функцию можно вызывать 3-мя способами:

Код

rand() // возвращает Math.random() , число от 0 до 1
rand(max) // возвращает дробное число от 0 до max (вкл.)
rand(min,max) // возвращает дробное число от min до max (вкл.)


а вот функция:

Код

function rand(mn,mx)
{   var rnd = Math.random();
    var min = (mx ? (mn || 0) : 0); // если P2 есть, то P1 (или 0, если P1 нет). иначе - также 0.
    var max = mx-1 || (mn ? mn-1 : 0); // если P2 есть, то P2. иначе - если есть P1, то P1, если нет - 0.
    if (max == 0) return rnd;
    return ((rnd * (max - min + 1)) % (max - min + 1) + min);
}



--------------------
PM MAIL WWW ICQ   Вверх
12345c
Дата 28.3.2006, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Свежий пример "недостатка" от большого ума, наверное. IE и FF имеют свойство "подскролливать" ползунок окна, если они посчитают, что появившийся в окне слой того заслуживает. Алгоритма и возможности его отмены, естественно, никакого. Пришлось перехитрить - подождать маленькое время, а потом установить скролл по-своему (в задаче с подкруткой окна в область демонстрации слоя.

--------------------------------

Невозможно выделить selection в IE в слое, расположенном ниже конца документа (иначе, как через Select All).

Это сообщение отредактировал(а) 12345c - 29.3.2006, 03:03
PM WWW   Вверх
S.A.P.
Дата 29.3.2006, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 8
Всего: 71



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

Это сообщение отредактировал(а) S.A.P. - 29.3.2006, 07:30
PM MAIL   Вверх
Sardar
Дата 29.3.2006, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(S.A.P. @ 29.3.2006, 06:28 Найти цитируемый пост)
может что - то недопонял, но не придумал как передать переменную по ссылке

Если это примитив, то оберни в обьект, все обьекты передаються по ссылке. Естественно это не указатель как в C/C++, т.е. не разрушающая ссылка, что есть безопасный и хороший подход к программингу. "Опасные" ссылки в новых языках по моему уже не появляються, слишком не предсказуемое поведение проги можно нагородить.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
mus
Дата 3.8.2006, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 22.5.2005

Репутация: нет
Всего: 1



Отсутствие (по крайней мере в книге Гудмана) конструкции elseif - вот это действительно страшно!!! =)
Шутим... =)
PM MAIL   Вверх
JSman
Дата 4.8.2006, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 10.7.2006

Репутация: нет
Всего: 4



чтобы передать переменную по ссылке, она должна быть объектом, а именно иметь тип Object. а для соэдания экземпляра некоторые объекты имеют метод типа createInstance() и тп
а говоря о регулярных выражениях, готов поспорить. просто строка поиска бывает  требует дополнительной обработки (например при поиске символа "а" в строке из юникода или в hex'e и тп.). ну Перл в этом вопросе рулит, даже по скорости
PM ICQ   Вверх
Sardar
Дата 4.8.2006, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(JSman @  4.8.2006,  17:56 Найти цитируемый пост)
чтобы передать переменную по ссылке, она должна быть объектом, а именно иметь тип Object.

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

Цитата(JSman @  4.8.2006,  17:56 Найти цитируемый пост)
требует дополнительной обработки (например при поиске символа "а" в строке из юникода или в hex'e и тп.).

Не правда, приведи пример.

Цитата(JSman @  4.8.2006,  17:56 Найти цитируемый пост)
ну Перл в этом вопросе рулит, даже по скорости 

Не совсем правда, реги в JS железной либой реализованны, быстрые, но тут уж вопрос как либу разработчики браузера прикрутили. В любом случае микросекундой больше/меньше - юзер не заметит.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
S.A.P.
Дата 5.8.2006, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 8
Всего: 71



Цитата(JSman @  4.8.2006,  18:56 Найти цитируемый пост)
а говоря о регулярных выражениях, готов поспорить

Рекурсивные шаблоны, соответствие/несоответствие с залядыванием назад, условные подмаски и много еще чего. Всего этого в JS - нет.

С переносами в обрабатываемой строке тоже не всё гладко.

Так что тут и спорить не о чем  smile .

Это сообщение отредактировал(а) S.A.P. - 5.8.2006, 09:24
PM MAIL   Вверх
JSman
Дата 5.8.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 10.7.2006

Репутация: нет
Всего: 4



Цитата(S.A.P. @  5.8.2006,  09:23 Найти цитируемый пост)
Так что тут и спорить не о чем  


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


Цитата(Sardar @  4.8.2006,  19:26 Найти цитируемый пост)
Не правда, приведи пример

символ в формате ASCII  не найдешь в строке Юникод.
также есть проблема с локализацией.
допустим есть текст на греческом.
поиск идет с игнорированием регистра. большая ГАММА и маленькая ГАММА - разные вещи для регулярных выражений. не говорю о китайском.
ты должен обработать строку таким образом, чтобы она понимала язык.
Майкрософт решит эту проблему с помощью XML и JSCRIPT.NET. 

если не очень ясно написал, то дай знать. просто времени не было....
PM ICQ   Вверх
Sardar
Дата 5.8.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(JSman @  5.8.2006,  11:49 Найти цитируемый пост)
символ в формате ASCII  не найдешь в строке Юникод.

Выражение не имеет смысла, т.к. все строки в JS (в памяти) в юникоде, для этого при чтении сорцов и нужно указывать кодировку (по дефолту равна кодировке страницы). Символы ASCII (латинский алфавит) входит в юникод и нормально там ищеться, другое дело что этот символ может иметь совсем другой числовой код в юникоде. Приведи пример кода, т.к. то что ты сказал физически не возможно, когда исходник будет разобран парсером все строковые константы будут в памяти в юнкикоде, и только через String.fromCharCode можно получить "левый символ" (указываешь числовой код своей кодировки, а функция принимает юникод, нужна таблица трансформации, так в любом языке). Приведи код где проблема провяляеться.

Цитата(JSman @  5.8.2006,  11:49 Найти цитируемый пост)
большая ГАММА и маленькая ГАММА - разные вещи для регулярных выражений. не говорю о китайском.

Реги отдельной либой реализованы, у разных браузеров разными либами. Для всех языков есть таблица упорядочивания (collating rules), она определена в локале, в ней могут быть ошибки, но для юникогда по моему все правила заданы жёстко. Убедись что проблема появляеться во всех браузерах. Приведи код где проблема проявляеться.

Цитата(S.A.P. @  5.8.2006,  08:23 Найти цитируемый пост)
Рекурсивные шаблоны, соответствие/несоответствие с залядыванием назад, условные подмаски и много еще чего. Всего этого в JS - нет.

Да, реги конечно уже отстают. Пинать нужно ECMA, вместо того что бы заставить стандартом реализовать сегодняшние потребности, они написали стандарт который вобрал в себя мимимум возможностей со всех платформ (автоматом со всеми браузерами совместим, только кому нужна такая ограниченность? Это не единственный кривой стандарт ECMA, глянуть на тот же Eiffel... оторваны от народа их деяния...  smile ). С выходом JS 2 возможности может быть расширят.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
JSman
Дата 6.8.2006, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 10.7.2006

Репутация: нет
Всего: 4



Цитата(Sardar @  5.8.2006,  17:36 Найти цитируемый пост)
Символы ASCII (латинский алфавит) входит в юникод и нормально там ищеться, другое дело что этот символ может иметь совсем другой числовой код в юникоде


какая латиница??? латиница всегда имеет код меньше 128, а проблема заключается в сопоставлении ASCII с Юникодом не латиницей. русская буква в ASCII находится с 128 до 256 (уточнения не в тему), а в Юникоде за 1000. даже таблицы это доказывают. и ничего не сопоставляется. это косяк...
более того, некоторые алфавиты не укладываются в 128 символов (азиатские). они по ASCII представляют собой 2хбайтный код. и реализовать поиск, сопоставляя 2хбайтный код юникодам, довольно трудоемкая задача. и на сегодняшний день наиболее удачно решил только перл.
надо проверить для русской кодировки, может че-то будет, но для азиатской - мёртво...

Цитата(Sardar @  5.8.2006,  17:36 Найти цитируемый пост)
когда исходник будет разобран парсером все строковые константы будут в памяти в юнкикоде

не факт.(особенно ослик). в книге фридла эта проблема прекрасно описана. строки в юникоде - это только как объекты, а в ASCII - простые строки.


Цитата(Sardar @  5.8.2006,  17:36 Найти цитируемый пост)
Для всех языков есть таблица упорядочивания (collating rules), она определена в локале,

далекооо не все языки упорядочены в локале и с ними как раз проблема. даже если ты грек, то не факт, что регэксп найдет, что нужно.

эта проблема с локализацией (а именно сопоставление ASCII с Unicode) она пока не решена нигде.. лишь перл близок, а остальные пока ппппп..

Добавлено @ 02:12 
а код напишу
PM ICQ   Вверх
Sardar
Дата 6.8.2006, 03:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(JSman @  6.8.2006,  01:10 Найти цитируемый пост)
и ничего не сопоставляется. это косяк...

А как получить такой символ в JS? Допустим:
Код
var a="ю";
alert(a);
alert(a.charCodeAt(0));


Если сохранить исходник как win-1251, то редактор сгенерит для ю верный код в win-1251. Браузер загрузит страницу, а с ней и скрипт в win-1251, затем он сконвертирует все символы (включая саму страницу, DOM дерево только в юникоде) в юникод, т.е. в перемнной a будет лежат строка с одним символом имеющим код 'ю' в юникоде, и совершенно до лампочки разработчику скрипта должно быть какой это код на самом деле smile

Естественно если ты попытаешся воссоздать символ через String.fromCharCode(code), и передашь код 'ю' в win-1251 (>128, < 256), то ты получишь один из латинских символов с акцентом, т.к. в юникоде под твоим заданным кодом лежит именно этот символ. И JS абсолютно по барабануы какую кодировку ты имел в виду, принимаеться только юникод (что логично) и любое необходимое перекодирование ты должен выполнить сам. Другое дело как ты получил эти коды? Вбил сам? Любым другим путём ты будешь получать готовые строки... ну если только ты сам не делаешь жизнь сложнее, и не принимаешь данные от сервера в кодах символов smile

Цитата(JSman @  6.8.2006,  01:10 Найти цитируемый пост)
они по ASCII представляют собой 2хбайтный код. и реализовать поиск, сопоставляя 2хбайтный код юникодам, довольно трудоемкая задача. и на сегодняшний день наиболее удачно решил только перл.

Абсолютно не трудоёкая это задача (естественно таблицы символовм с доступом по индексу делать глупо, всё таки (2^18) памяти захаваем, но это уже детали), гораздо трудоёмкая задача работать с UTF-8 в памяти, в прямом смысле держат UTF-8 байтами в памяти, ибо сложно эффективно узнать длину всей строки или просто произвольный символ.
Резюмирую: с  UCS-2 работать также просто, как и с ASCII. Сложно работать если длина символва в байтах варьируеться, как например в UTF-8. Но такая кривизна необходима если язык не поддерживает юникод нативно, например PHP.

Цитата(JSman @  6.8.2006,  01:10 Найти цитируемый пост)
а в ASCII - простые строки.

Выбрасывай эту книгу, датирована вероятно 98 годом. Современные браузеры, как и современные оси все на юникоде, всегда. Другое дело что при записи пользуються кодировками или UTF-8 для меньших размеров, или перекодирывают в что нибудь если "целевая сущность" юнкод не поддерживает (консоль например).
Резюмирую: любые строки и сам документ любой браузер держит в юникоде. Исключаем старый нетскейп и вообще браузеры датированные до 2000.

Цитата(JSman @  6.8.2006,  01:10 Найти цитируемый пост)
то не факт, что регэксп найдет, что нужно.

Реги не имеют никакой инфы от том как упорядочивать символы, это декларация паттерна. Я как человек увлекающийся формальными грамматиками,  включая реализацией регов, отвечу: сравнение символов всегда была прерогатива платформы (оси), ни одна либа сама строки не сравнивает, ибо локализаиця это огромный труд, совершенно отдельный от реализации регов (и вообще либ для работы с текстом, кроме перекодировщиков и сортировщиков естественно). Реализуя реги ты просто доверяешь системе строить:
  • ряд символов (range) типа [в-я]
  • сравнение в <> я
  • определение что есть буква, цифра и т.д.
На основе третьего строяться такие мета-символы как .(любой символ кроме перевода строки) и подобное.
Резюмирую: если сравнение строк глючит - глючит локаль твоей системы, либо во всём виновата кривизна рук разработчика либы. JS здесь никаким боком, прикрути эту либу к любому другому языку, будет тот же эффект.

Цитата(JSman @  6.8.2006,  01:10 Найти цитируемый пост)
эта проблема с локализацией (а именно сопоставление ASCII с Unicode) она пока не решена нигде.. лишь перл близок, а остальные пока ппппп..

Я пояснил почему это не так (почему это выражение вообще не имеет смысла). Также замечу что помимо самой реговой либы есть PCRE стандарт, позволяющий писать совместимые с перлом либы. В принципе идееентично должно работать, тут уж от собственного понимания что есть 1-байтные кодировки, что юнкод, а что локализация и где это соприкасаеться. Рулят у перла 6 его вшитые контекстно-свободные грамматики, по мощи превосходящие всё что могут позволить реги сейчас smile


M
Sardar
ИМХО пошёл флуд, если разрастёмся, то срежу в отдельную тему.



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
JSman
Дата 8.8.2006, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 10.7.2006

Репутация: нет
Всего: 4



Sardar ты был прав!  smile 
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1896 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.