Есть впечатление, что чем более повышается уровень программирования, тем больше самоограничений мы на себя накладываем. В Agda, вроде, вообще ограничение уже математическое (она же Тьюринг-неполная?).
Но вот есть ли за корреляцией уровня абстрагирования программирования и его scale причинно-следственная связь, неясно.
Наиболее популярный ответ немного хромает, например:
> There is no modularization system; there are no classes, interfaces, or even namespaces. These elements are in other languages to help organize large codebases.
> The inheritance system -- prototype inheritance -- is both weak and poorly understood. It is by no means obvious how to correctly build prototypes for deep hierarchies (a captain is a kind of pirate, a pirate is a kind of person, a person is a kind of thing...) in out-of-the-box JavaScript. — даже хардкорные ООПшники какбы уже давно согласились, что при любом сомнении лучше предпочитать агрегацию наследованию.
> There is no encapsulation whatsoever; every property of every object is yielded up to the for-in construct, and is modifiable at will by any part of the program. — снова фигня: замыкания обеспечивают нужную инкапсуляцию, а зачем ограничивать доступ к полям структур, неясно.
Я о том, что странно, когда в структуре одни данные закрыты, а другие нет. Контекст в JS все-таки замыканиями структурируется, а не зависимостью от классов.
>а зачем ограничивать доступ к полям структур, неясно.
Скорее всего, имеется в виду доступ к полям прототипа, там, где это не нужно. Например, при обходе циклом for in. Признаться, на практике никогда не имел с этим проблем, хотя книжки советуют проверять hasOwnProperty.
no subject
Date: 2014-01-28 09:00 am (UTC)Но вот есть ли за корреляцией уровня абстрагирования программирования и его scale причинно-следственная связь, неясно.
Наиболее популярный ответ немного хромает, например:
> There is no modularization system; there are no classes, interfaces, or even namespaces. These elements are in other languages to help organize large codebases.
> The inheritance system -- prototype inheritance -- is both weak and poorly understood. It is by no means obvious how to correctly build prototypes for deep hierarchies (a captain is a kind of pirate, a pirate is a kind of person, a person is a kind of thing...) in out-of-the-box JavaScript.
— даже хардкорные ООПшники какбы уже давно согласились, что при любом сомнении лучше предпочитать агрегацию наследованию.
> There is no encapsulation whatsoever; every property of every object is yielded up to the for-in construct, and is modifiable at will by any part of the program.
— снова фигня: замыкания обеспечивают нужную инкапсуляцию, а зачем ограничивать доступ к полям структур, неясно.
no subject
Date: 2014-01-28 09:31 am (UTC)чтобы не появилась зависимость от детали реализации.
no subject
Date: 2014-01-28 12:32 pm (UTC)no subject
Date: 2014-01-28 09:36 am (UTC)Скорее всего, имеется в виду доступ к полям прототипа, там, где это не нужно. Например, при обходе циклом for in. Признаться, на практике никогда не имел с этим проблем, хотя книжки советуют проверять hasOwnProperty.