juan_gandhi: (Default)
Juan-Carlos Gandhi ([personal profile] juan_gandhi) wrote2008-05-14 12:56 pm

dynamic vs static

Я не собираюсь вступать в эту нонешнюю дискуссию. Просто хочу заметить, что речь идёт о "гарвардской архитектуре" супротив "архитектуры фон Неймана".

В первой данные отделены от кода, и задача программиста состоит в том, чтобы состыковать, хоть и через посредников, данные и код, который их обрабатывает; вот и приходится катать всякие конфигурации, эксэмэли, ентити бинзы; всё для того, чтобы уберечь код от данных. Тогда код можно статически проверить и отлить в бронзе. Чтоб не сломался.

Во второй что данные, что код, без разницы; код - это вид данных, а данные могут на определённом уровне интерпретироваться как код, или строить код, который эти данные сынтепретирует (как, помню, была какая-то база, которая строила классы для доступа прямо при открытии таблицы: взял таблицу - вот и классы загрузились; естественно, что динамически.

Ну а так, наверное, стоит почитать, конечно: Егге устраивает разгром в столице статической типизации

[identity profile] itman.livejournal.com 2008-05-14 08:28 pm (UTC)(link)
Чего-то я не понял как Джава "make uses of multicores" while "c++ doesn't". Что это за интересное такое заявление?

[identity profile] anton-solovyev.livejournal.com 2008-05-14 08:53 pm (UTC)(link)
Долго думал чем мне не нравится Python (vs Java).

Решил, что я -- neat freak и код на Python получается сравнительно messy, а Java enforces some discipline. Perl -- еще хуже.

А, вот еще как можно сравнивать языки: качество стандартных библиотек. С Питоном все время нарываешься на то, что нажал чуть посильнее и оно ползет по швам. Java терпит куда больше abuse. Все время лезет в голову сравнение велосипеда с грузовиком.

[identity profile] faceted-jacinth.livejournal.com 2008-05-14 09:06 pm (UTC)(link)
Егге, по-моему, не видит леса за деревьями. В смысле, несмотря на какбэ критическую установку, всё равно воспринимает язык как данное, а стандартные метафоры -- как непреложные правила (в смысле: я ж могу на чистом С и объекты делать, и динамическую типизацию, никто мне не запретит, потому что эскейпы обязаны быть). И, да, судит о статической типизации по наиболее упёртым представителям, которые пытаются запретить эскейпы.

Я сейчас к одной своей проге простенький скриптовый язык приделываю и у меня всякие полуоформленные мысли в связи с этим появляются. Например: существует заговор: тайное общество поклонников динамически типизированных языков называет "dynamic scope" "lexical scope"-ом, чтобы никто не задумался случайно. Ведь когда пишешь интерпретируемый язык, он натурально получается динамически типизированным и с динамическим scope, это baseline, а чтобы получить lexical (static!) scope нужно приложить неслабые усилия, причём централизованно. Но необходимо, и в том же питоне, кстати говоря, все вызовы обычных функций можно отрезолвить в адреса на этапе компиляции (да они наверное и резолвятся), удивительно если подумать, не правда ли?

Вот эта параллель меня как-то настораживает. Не обязательно же ведь требовать строгой типизации, достаточно уметь её вычислять, и это умение вроде бы должно быть таким же импрувментом, как и умение делать static scope, ну, если оставлены удобные эскейпы.

[identity profile] ivan-gandhi.livejournal.com 2008-05-14 09:48 pm (UTC)(link)
А, это вот о чём. JVM справляется с этим без участия человека; thread запустил, а он уж куда-нибудь попадёт. И доступ к переменным организован, с самого начала, правильным образом.

[identity profile] ivan-gandhi.livejournal.com 2008-05-14 09:50 pm (UTC)(link)
Да это верно, конечно. У питона есть ещё такое странное свойство, что на нём надо уметь хорошо писать, чтобы получался читабельный код; а на джаве, как на бейсике, каждый второй идиот может накропать что-то работающее. Правда, этот идиот потом тебя же будет учить правильному стилю; вот тут-то и засада.

[identity profile] ivan-gandhi.livejournal.com 2008-05-14 09:51 pm (UTC)(link)
Ну ведь Стиви, как он ни пыжся, а всё равно остаётся сельским механизатором. Желающим всех научить законам физики.

[identity profile] itman.livejournal.com 2008-05-14 09:56 pm (UTC)(link)
Ну а плюсовый тред не туда попадет?
PS: а что такое правильный доступ к переменным?

[identity profile] ivan-gandhi.livejournal.com 2008-05-14 10:26 pm (UTC)(link)
Правильный доступ - это обеспечение синхронизации.

[identity profile] ex-zadoff59.livejournal.com 2008-05-14 11:01 pm (UTC)(link)
кури мутексы чтоли

[identity profile] ivan-gandhi.livejournal.com 2008-05-14 11:10 pm (UTC)(link)
Щас разбежался. Слишком мелкая вещь для джавного программиста.
nine_k: A stream of colors expanding from brain (Default)

[personal profile] nine_k 2008-05-14 11:46 pm (UTC)(link)
Messy? Ужос, ужос. После аккуратного, краткого питоновского кода на многократно более длинный и излишне детальный явский код мне смотреть напряжно.
(А приходится: сопрягаю то и другое.)

[identity profile] itman.livejournal.com 2008-05-14 11:51 pm (UTC)(link)
Я не очень понимаю, как все это сказывается на производительности. Средства синхронизации и треды в плюсах имеются, я верю, что JVM может выжимать какие-то проценты доппроизводительности из многоядерного процессора, но я не верю
а) Просто интерпретируемая Джава (без JIT) быстрее плюсов
б) Даже Джаве с JIT на самом деле довольно непросто догнать плюсы, потому как расходы на компиляцию на месте нужно компенсировать за счет множества обращений
в) Автоматическую сборку мусора пока еще не отменял
г) Ну, и наконец в Джаве нет (или уже есть)? inline кода и C++-like шаблонов.
По модулю всех этих утверждений, с трудом верится, что нонче Джава быстрее плюсов.
nine_k: A stream of colors expanding from brain (Default)

[personal profile] nine_k 2008-05-14 11:52 pm (UTC)(link)
> в том же питоне, кстати говоря, все вызовы обычных функций можно отрезолвить в адреса на этапе компиляции

Вынужден вас разочаровать. Нету там никакого этапа компиляции. Все операторы (в т.ч. class и def) исполняются в runtime. Можно на ходу добавить к классу или конкретному объекту какие угодно новые методы, а старые нагло удалить. Поэтому резолвится всё в момент вызова.

Такая же точно картина в javascript и smalltalk.

Потому с этими штуками так удобно играться интерактивно и так трудно писать к ним осмысленны
nine_k: A stream of colors expanding from brain (Default)

[personal profile] nine_k 2008-05-14 11:52 pm (UTC)(link)
...осмысленный JIT.

[identity profile] ivan-gandhi.livejournal.com 2008-05-14 11:55 pm (UTC)(link)
Кто б возражал. Я просто видел этот ужас. И сам, хм, одно время занимался переводами с питона на джаву. И видел как пишет Алекс Мартелли. Это стихи.

[identity profile] anton-solovyev.livejournal.com 2008-05-15 12:01 am (UTC)(link)
Я думаю, это оттого, что к питоновскому коду требования ниже. Там тебе и глобальный лок внутри самого Питона, и все коллекции синхронизированы и всерьез эти программы (и библиотеки) никто за пределами коротких скриптов не проверял...

[identity profile] cema.livejournal.com 2008-05-15 12:24 am (UTC)(link)
Скобку закрой. :-)
nine_k: A stream of colors expanding from brain (Default)

[personal profile] nine_k 2008-05-15 12:27 am (UTC)(link)
Всерьёз не проверял? Настолько не проверял, что почему-то Google AppEngine из всех языков поддерживает именно питон? :)

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

[identity profile] anton-solovyev.livejournal.com 2008-05-15 12:43 am (UTC)(link)
В широте использования сомнений нет, на Питоне тут стоим.

Однако, например, при попытке всерьез использовать что-то типа xmlrpclib или SimpleXMLRPCServer оно начинает позорно трещать по швам.

Деталей не помню, но осадочек остался.

[identity profile] relyef.livejournal.com 2008-05-15 12:44 am (UTC)(link)
Сейчас Вы скажете, что Java поддерживает threads affinity :)

[identity profile] trurle.livejournal.com 2008-05-15 05:16 am (UTC)(link)
Аккуратность кода не измеряется в байтах.

[identity profile] mikkim08.livejournal.com 2008-05-15 05:32 am (UTC)(link)
И видел как пишет Алекс Мартелли. Это стихи.

А например ? (люблю красивый код смотреть)

[identity profile] cmm.livejournal.com 2008-05-15 07:45 am (UTC)(link)
существует заговор: тайное общество поклонников динамически типизированных языков называет "dynamic scope" "lexical scope"-ом, чтобы никто не задумался случайно.

ну вот давайте я задумаюсь.
подумал, подумал.
нет, всё правильно.

Ведь когда пишешь интерпретируемый язык, он натурально получается динамически типизированным и с динамическим scope, это baseline, а чтобы получить lexical (static!) scope нужно приложить неслабые усилия, причём централизованно.

что такое "интерпретируемый язык"?  каким образом динамический скоп легче лексического?  какие такие страшные "централизованные усилия"?
(зачем придумывать ещё один недоязык?)

one cannot, в натуре, rightly comprehend the kind of confusion etc.

[identity profile] faceted-jacinth.livejournal.com 2008-05-15 08:35 am (UTC)(link)
i = 1
def a():
    print i
    i = 2
a()

Where is your God now?

[identity profile] faceted-jacinth.livejournal.com 2008-05-15 08:38 am (UTC)(link)
Ну, это помимо того очевидного факта, что обычный CPython таки компилит питон в байткод, сохраняя его в файликах с расширением ".pyc", так что моё утверждение что имена _обычных_ функций (не методов, а обычных функций) могут быть отрезолвлены в адреса на этапе компиляции остаётся не только истинным, но и абсолютно корректным.

Page 1 of 4