birdwatcher: (Mr. Twister)
[personal profile] birdwatcher
{"PI": 3.14159, "PI": 5.0}
Кто читал книгу "Дизайн и эволюция языка Джаваскрипт", там объясняется, почему вот это - валидный JSON? Какая от этого может быть польза, кроме вреда?

Date: 2015-04-11 12:03 pm (UTC)
From: [identity profile] jsn.livejournal.com
Нет, совершенно. Более того, это типа общее место.

Date: 2015-04-11 12:19 pm (UTC)
From: [identity profile] birdwatcher.livejournal.com
Как же это может быть? Парсер все равно должен развернуть всю структуру и каждый атом положить на свое место. И при этом у него не хватает сил посмотреть, что на данном месте уже что-то лежит? Одну JNZ инструкцию сэкономили?

Date: 2015-04-11 12:36 pm (UTC)
From: [identity profile] jsn.livejournal.com
Парсер может быть stream, при этом он ничего не разворачивает, только выдает a sequence of events (ну, однобитный стек он может держать для валидации, но это совсем не "разворачивает"). Вот пример парсера (http://zserge.com/jsmn.html), который хоть и как бы разворачивает, но делает это без e.g. malloc-ов и ничего не зная о таких стурктурах данных, как hash и set.

Date: 2015-04-11 12:47 pm (UTC)
From: [identity profile] birdwatcher.livejournal.com
Хм, про него говорят, что он вообще ошибки не детектирует. Jsmn is missing [...] but instead is designed to be robust (it should work fine even with erroneous data). Т.е. он и так уже нестандартный. Если бы мой пример в стандарте был заявлен как erroneous, на качестве jsmn это бы не сказалось.

Date: 2015-04-11 01:03 pm (UTC)
From: [identity profile] jsn.livejournal.com
Ну да, so what? На качестве валидирующих парсеров с архитектурами такого типа сказалось бы очевидным образом.

Date: 2015-04-11 01:10 pm (UTC)
From: [identity profile] birdwatcher.livejournal.com
Ну, интересно, есть в результате, или нет. Обычно, когда в стандарте какая-то на первый взгляд шокирующая глупость, то можно получить объяснение вида "к сожалению, иначе широко распространенный X сломался бы".