dynamic vs static
May. 14th, 2008 12:56 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Я не собираюсь вступать в эту нонешнюю дискуссию. Просто хочу заметить, что речь идёт о "гарвардской архитектуре" супротив "архитектуры фон Неймана".
В первой данные отделены от кода, и задача программиста состоит в том, чтобы состыковать, хоть и через посредников, данные и код, который их обрабатывает; вот и приходится катать всякие конфигурации, эксэмэли, ентити бинзы; всё для того, чтобы уберечь код от данных. Тогда код можно статически проверить и отлить в бронзе. Чтоб не сломался.
Во второй что данные, что код, без разницы; код - это вид данных, а данные могут на определённом уровне интерпретироваться как код, или строить код, который эти данные сынтепретирует (как, помню, была какая-то база, которая строила классы для доступа прямо при открытии таблицы: взял таблицу - вот и классы загрузились; естественно, что динамически.
Ну а так, наверное, стоит почитать, конечно: Егге устраивает разгром в столице статической типизации
В первой данные отделены от кода, и задача программиста состоит в том, чтобы состыковать, хоть и через посредников, данные и код, который их обрабатывает; вот и приходится катать всякие конфигурации, эксэмэли, ентити бинзы; всё для того, чтобы уберечь код от данных. Тогда код можно статически проверить и отлить в бронзе. Чтоб не сломался.
Во второй что данные, что код, без разницы; код - это вид данных, а данные могут на определённом уровне интерпретироваться как код, или строить код, который эти данные сынтепретирует (как, помню, была какая-то база, которая строила классы для доступа прямо при открытии таблицы: взял таблицу - вот и классы загрузились; естественно, что динамически.
Ну а так, наверное, стоит почитать, конечно: Егге устраивает разгром в столице статической типизации
no subject
Date: 2008-05-15 07:45 am (UTC)ну вот давайте я задумаюсь.
подумал, подумал.
нет, всё правильно.
что такое "интерпретируемый язык"? каким образом динамический скоп легче лексического? какие такие страшные "централизованные усилия"?
(зачем придумывать ещё один недоязык?)
one cannot, в натуре, rightly comprehend the kind of confusion etc.
no subject
Date: 2008-05-15 09:12 am (UTC)Под компиляцией я понимаю обработку кода без его исполнения.
Понятно, что совсем без компиляции обойтись тяжело, то же определение функции присваивает её тело куда-нибудь без исполнения, плюс conditional operators явным образом должны читать но не исполнять код в неисполняемой ветке, в этом как бы их смысл, но вопрос в том, насколько много вещей делается в процессе компиляции (которая, конечно, не обязана быть выделена в отдельный этап).
Так вот, dynamic scope получается совершенно естественно: у нас есть один словарь, в котором хранятся значения символов. Определение функции создаёт там символ [имя функции] и запихивает в него тело функции (про параметры пока не думаем), "i = 1" создаёт (или использует текущий) символ i, в котором оказывается объект инт, равный 1, и так далее.
Но при этом (я буду использовать питоновский синтаксис) такой код:
должен печатать 2. Потому что словарь один на всех. Более того, если всё действительно так просто, то а() может изменить i, которую нам бы хотелось считать локальной переменной b(), определение функции с тем же именем как у определённой в каком-нибудь чужом модуле приводит к удивительным результатам и так далее. Dynamic scope плохой!
А дальше начинаются "страшные централизованные усилия". Можно сделать shadowing, но он всех проблем не решает (тот код по-прежнему будет печатать 2, лямбды работать не будут вообще, потому что не будут лексическими замыканиями) и добавляет свои. Следовательно, нужно делать нормальный static scope: для каждой штуки, обладающей лексическим контекстом (функции, например) либо этот контекст сохранять явно и восстанавливать при вызове, прям весь словарь, либо находить все символы, которые при использовании будут обращаться к контексту и честно компилировать их, то есть заменять на fully qualified обращения, можно сразу по адресам. Как-то так, я этого ещё не делал.
(зачем придумывать ещё один недоязык?) -- вот именно за этим, чтобы увидеть, как некоторые привычные вещи оказываются весьма нетривиальными.
no subject
Date: 2008-05-15 09:32 am (UTC)в принятой терминологии это называется global scope. dynamic scope — это когда можно аккуратно подставлять новое значение глобальной переменной на время выполнения делающей это функции. как в емаксе, скажем. отсюда и слово "dynamic", поскольку scope как бы контролируется программой во время выполнения.
язык — это такая бамажка, спецификация (пусть даже чисто абстрактная и выведенная пост-фактум из единственной кривой реализации, как в большинстве современный нам "скриптовых" недоязыков). а компилировать можно практически всё что угодно, хотя некоторые языки и делают некоторые фишки компиляции малопрактичными (например, Питон. то есть там можно спекулятивно резолвить (потенциально-)глобальные имена во время компиляции, скажем, но вряд ли стоит. но можно).
я Вам страшный вещь скажу: если иметь на старте голую железку, так даже распечатать букву "а" на экран покажется весьма нетривиальным. :)
а теория и практика компиляции языков с lexical scope — это, по сравнению с теми пчёлами, сто раз пройденная неинтересная фигня.
примирить lexical scope с отсутствием хотя бы чего-то типа перловского "my" — это больно, да. но это чисто питоновская фигня, я к чему. если бы Гуидо не был (во времена создания Питона, во всяком случае) позорным неучем, то бабушки были бы дедушками etc.
no subject
Date: 2008-05-15 09:54 am (UTC)Про спецификацию: она, конечно, бумажка и всё такое, но в ней есть места, которые могут быть интерпретированы вполне однозначно как требование определённой степени компиляции. Например: я выше в ответ
Кстати, Гвидо в момент создания питона уже семь лет был master of science и имел опыт языкотворчества.
no subject
Date: 2008-05-15 10:52 am (UTC)удивительно, правда?
Lisp rules, all other programming languages sucks
Date: 2008-05-18 05:32 pm (UTC)Я тут подумал - как же нам всем остальным повезло что создатели XML не выбрали для него скобочную нотацию. Мысль о том что мы явно живем не в худшем из миров, отчасти примиряет с.
Re: Lisp rules, all other programming languages sucks
Date: 2008-05-18 05:38 pm (UTC)Re: Lisp rules, all other programming languages sucks
Date: 2008-05-18 07:10 pm (UTC)Re: Lisp rules, all other programming languages sucks
Date: 2008-05-18 07:11 pm (UTC)Re: Lisp rules, all other programming languages sucks
Date: 2008-05-18 07:21 pm (UTC)да, точно, про благостность закрывающих тагов я где-то читал.
правда, Грэм вряд ли писал что-то подобное даже после того как сошёл с ума.
Re: Lisp rules, all other programming languages sucks
Date: 2008-05-18 07:36 pm (UTC)Re: Lisp rules, all other programming languages sucks
Date: 2008-05-18 07:51 pm (UTC)совсем человек халтурно писать стал, по-моему.
Re: Lisp rules, all other programming languages sucks
Date: 2008-05-18 07:59 pm (UTC)Re: Lisp rules, all other programming languages sucks
Date: 2008-05-18 06:38 pm (UTC)(в английском языке не следует добавлять 's' к глаголам третьего лица множественного числа, только единственного. в прошлый раз я счёл это опечаткой).
Re: Lisp rules, all other programming languages sucks
Date: 2008-05-18 06:44 pm (UTC)А лисп тут совсем ни при чем, разумеется.
Re: Lisp rules, all other programming languages sucks
Date: 2008-05-18 07:02 pm (UTC)если Вам кажется что причём, то я весь уши.