Информация об изменениях

Сообщение Re[8]: Достаточно ли знать С без знания С++ для устройства н от 05.09.2014 0:23

Изменено 05.09.2014 0:24 eskimo82

C>>>Да ну? Почему atomics в С тогда взяли из С++? Точнее, они совместно работали.
E>>Ты ничего не путаеш ? Атомарные переменные пришли в С++ из Си. Например sig_atomic_t вообще древний тип из стандарта POSIX.
C>Нет, не путаю. RTFM стандарты.
C>Вот статьи с обзором: https://lwn.net/Articles/586838/ и https://lwn.net/Articles/588300/
C>Фактически, это кодификация разных барьерных intrinsinc'ов и CAS-операций, которые раньше делались расширениями компиляторов.
Стандарты разные бывают. Ко всему прочему есть де-факто стандарты.

C>>>Единственным крупным расхождением являются именованные поля в инициализаторах структур и мелочи типа variable-sized arrays.

E>>Не только.
C>А что ещё?
Много чего. Возврат структурных типов из функций, например.

A>>>>>- использует минимум возможностей языка и не способен писать выразительный, идиоматичный код

E>>>>В C99 есть такие возможности которые в C++ и не снились.
C>>>ЩИТО?
E>>Ага.
C>Я весь внимание. Можно список?
Ты можеш составить его сам.

E>>>>В любом языке есть небезопасные конструкции, даже в той же Java выстрелить себе в ногу гораздо проще и потом часами искать ошибку — Например, можно просто забыть создать экземпляр класса какой нибудь коллекции в конструкторе.

C>>>ЩИТО?
E>>Ага. И главное super вызывать не забывай.
C>Можно пример?
public calss AAA {
    public AAA( ... ) {
        //nodes = new IdentityHashMap();
    }

    public void selectAll(boolean tag) {
        for (Node node: nodes.values()) {
            node.select = tag;
        }
    }

    public void addNode(String id, Node node) {
        nodes.put(id, node);
    }

    IdentityHashMap<String, Node> nodes;
};


C>Вообще-то, super() выполняется автоматически.

Возможно.


E>>>>Элементы обобщенного програмирования в Си тоже можно неплохо применять, а частности — первые наброски Степановом того, что сейчас называется STL были сделаны на Си, довольно оригинальным способом.

C>>>Ага, через макросы.
E>>Работает и работает неплохо.
C>Плохо. Криво, без частичной специализации и без многих оптимизаций.
Никто не говорил что будут все фишки, а работает нормально и с хорошей оптимизацией.
C>>>Да ну? Почему atomics в С тогда взяли из С++? Точнее, они совместно работали.
E>>Ты ничего не путаеш ? Атомарные переменные пришли в С++ из Си. Например sig_atomic_t вообще древний тип из стандарта POSIX.
C>Нет, не путаю. RTFM стандарты.
C>Вот статьи с обзором: https://lwn.net/Articles/586838/ и https://lwn.net/Articles/588300/
C>Фактически, это кодификация разных барьерных intrinsinc'ов и CAS-операций, которые раньше делались расширениями компиляторов.
Стандарты разные бывают. Ко всему прочему есть де-факто стандарты.

C>>>Единственным крупным расхождением являются именованные поля в инициализаторах структур и мелочи типа variable-sized arrays.

E>>Не только.
C>А что ещё?
Много чего. Возврат структурных типов из функций, например.

A>>>>>- использует минимум возможностей языка и не способен писать выразительный, идиоматичный код

E>>>>В C99 есть такие возможности которые в C++ и не снились.
C>>>ЩИТО?
E>>Ага.
C>Я весь внимание. Можно список?
Ты можеш составить его сам.

E>>>>В любом языке есть небезопасные конструкции, даже в той же Java выстрелить себе в ногу гораздо проще и потом часами искать ошибку — Например, можно просто забыть создать экземпляр класса какой нибудь коллекции в конструкторе.

C>>>ЩИТО?
E>>Ага. И главное super вызывать не забывай.
C>Можно пример?
public class AAA {
    public AAA( ... ) {
        //nodes = new IdentityHashMap();
    }

    public void selectAll(boolean tag) {
        for (Node node: nodes.values()) {
            node.select = tag;
        }
    }

    public void addNode(String id, Node node) {
        nodes.put(id, node);
    }

    IdentityHashMap<String, Node> nodes;
};


C>Вообще-то, super() выполняется автоматически.

Возможно.


E>>>>Элементы обобщенного програмирования в Си тоже можно неплохо применять, а частности — первые наброски Степановом того, что сейчас называется STL были сделаны на Си, довольно оригинальным способом.

C>>>Ага, через макросы.
E>>Работает и работает неплохо.
C>Плохо. Криво, без частичной специализации и без многих оптимизаций.
Никто не говорил что будут все фишки, а работает нормально и с хорошей оптимизацией.