Лингвофорум

Лингвоблоги => Личные блоги => Блоги => Алексей Гринь => Тема начата: Алексей Гринь от октября 17, 2009, 13:43

Название: Имбецилы
Отправлено: Алексей Гринь от октября 17, 2009, 13:43
Нужно собрать в отдельную тему.

Имбецилы на http://www.linux.org.ru
Стоило мне упомянуть евреев (совершенно без злого умысла) как пост удалили (ну и пусть бы), так автоматически удалились ещё три совершено невинных поста по другой теме (про кириллицу) из того же треда. Имбецилы? Имбецилы.
Название: Имбецилы
Отправлено: Rōmānus от октября 17, 2009, 13:44
Цитата: Алексей Гринь от октября 17, 2009, 13:43
Стоило мне упомянуть евреев

А евреи каким-то образом относятся к Линуксу? Или у вас это "больное"?
Название: Имбецилы
Отправлено: Алексей Гринь от октября 17, 2009, 14:02
Тема была про еврея по национальности, не имею против евреев ничего. Но это не отменяет факта, что бот у них кривенький. Как и сам линупс :)
Название: Имбецилы
Отправлено: myst от октября 17, 2009, 14:06
Это ЛОР, детка. ;)
Название: Имбецилы
Отправлено: myst от октября 17, 2009, 14:08
Цитата: myst от сентября 29, 2009, 15:20
Цитата: Алексей Гринь от сентября 29, 2009, 15:11
Теперь всё работает, в том числе Компиз :) Писаю от счастья.
Ну ничего, скоро наешься убунты, ка́каться начнёшь. ;)
Цитата: Алексей Гринь от октября 17, 2009, 14:02
Как и сам линупс :)
Не прошло и месяца. ;D
Название: Имбецилы
Отправлено: Алексей Гринь от октября 17, 2009, 16:49
Не, винда кривее.
В конторе сегодня имел дело с ЭТИМ.
Фотошоп искрил сообщениями о рандомных Program Error, Тырнет Ыксплорер закрывался полчаса (ФФ или Оперы там не было), при закрытии ACDSee вообще завис весь десктоп, спас святой ребут. Не говоря уже о постоянно выскакивающих ошибках разных демоновсервисов и облюбленных народом быдлопрограмм типа СyberLink (который показал мне докучи всплывающее окошко "5$ for update"). И это всё при установленном касперском, разумеется. В моей Убунте из глюков только кривая мышка, надо xconf изучать-править, всё время в лом или нет времени.
В Майкрософт работают имбецилы? 100%. В Убунту Фаундэйшан (или как там) работают имбецилы? Немного.

По начальному сообщению — это я погорячился, тему, похоже, снесли :)
Название: Имбецилы
Отправлено: Алексей Гринь от октября 17, 2009, 16:53
Не по теме, зато по духу нашёл сегодня http://lleo.aha.ru/dnevnik/2008/09/01.html

На мгновение показавшийся мне имбецилом Каганов восстановил свою репутацию.
Название: Имбецилы
Отправлено: myst от октября 17, 2009, 17:43
Что же ты с бедными форточками делаешь-то, изверг? ;)
Название: Имбецилы
Отправлено: Алексей Гринь от октября 17, 2009, 17:49
Это не я, мне его такое дали :)
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 6, 2009, 17:05
Имбецилы на http://forum.altlinux.org/ (или у провайдера)

Т. к. я осознал, что Ubuntu не лишена имбецилии, я решил опробовать ALT Linux (просто потрогать). Перед этим я захожу на их форум, и что получаю:

ЦитироватьИзвините Гость, Вы забанены и не можете оставлять сообщения на форуме!
Создание нового ника после бана

Ну разве не имбецилы? Выделенное болдом как бы намекает, что "забаненным" оказался не только я...
Название: Имбецилы
Отправлено: myst от ноября 6, 2009, 17:08
Потрогай лучше Arch, но помни! Он для настоящих джедаев. ;)
Название: Имбецилы
Отправлено: Triton от ноября 6, 2009, 18:27
ALT Linux это у нас, кажется, поделка на основе Мандривы...
Имхо, лучше всего поставить Debian, настроить, и забыть остальные дистрибутивы как страшный сон.
Название: Имбецилы
Отправлено: myst от ноября 6, 2009, 19:50
Меня Arch прикалывает, но зачем они сэкономили на документации?! :wall:
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 6, 2009, 20:47
Цитата: myst от ноября  6, 2009, 19:50
Меня Arch прикалывает, но зачем они сэкономили на документации?! :wall:
Почитал я их вики, сблеванул. Столько орфографических ошибок я видел последний раз в школе.

Юзать операционку красноглазых школьников не хочется :)
Название: Имбецилы
Отправлено: myst от ноября 6, 2009, 20:49
Цитата: Алексей Гринь от ноября  6, 2009, 20:47
Юзать операционку красноглазых школьников не хочется :)
Нормально там всё.
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 6, 2009, 20:58
Лучге подскажите фреймовый невырвиглазный Window Manager. Замечтался о таком, шоб как бы рабочий стол имеет несколько фреймов (допустим, два а ля Norton/Volkov Commander/FAR), и в то же время чтобы можно было бы в любой момент времени один из фреймов развернуть на весь экран, и шоб не красноглазие в то же время (типа розовый/зелёный цвет везде в сеточку), а нормально шоб.

После Gnome Shell действительно понял, что система окон тупа и неудобна совсем (особенно когда окна перекрывают друг друга — ну какой от этого толк?).

Эх... :) А мне ведь больше и не надо...

Да, и шоб строка терминала была внизу легко доступная (опять как в том же FAR'е). Есть такое?
Название: Имбецилы
Отправлено: Bhudh от ноября 6, 2009, 21:08
Так RawonaM что-то похожее, помнится, хотел. Он наверняка знает.
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 8, 2009, 05:56
С++ - это чудо какое-то.

Допустим, есть такой определение (mycoolclass.h):

template <class T>
class MyCoolClass: public ParentClass<T>
{

public:

   // Переопределяемый методик.
   virtual void add(T item);
   
   // Конструкторчик.
   MyCoolClass();

};


И есть реализация (mycoolclass.cpp):


    // Методик.
    template <class T>
    void MyCoolClass<T>::add(T item)
    {
        // ...
    }

    // Конструкторчик.
    template <class T>
    MyCoolClass<T>::MyCoolClass()
    {
        // ...
    }

   
А в main.cpp есть вот так:

    MyCoolClass<int>* l = new MyCoolClass<int>();
    l->add(10);

   
Так это чучело мне пишет: undefined reference to `MyCoolClass<int>::MyCoolClass()', при том что на add не жалуется,
т.е. какбэ сам фаел подключён и линкуется (ибо он в том же файле, что и конструктор).

Вот это компилируется без проблем (правда, с сегментейшн фолтом):

    MyCoolClass<int>* l = 0;
    l->add(10);


Внимание, вопрос: кто имбецил?
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 8, 2009, 06:10
Будь рядом Страус-труп, с удовольствием бы дал лопатой по лицу.

После того, как я убрал из *.cpp реализацию конструктора, он вдруг вспомнил, что не может найти add. А-а-а
Название: Имбецилы
Отправлено: Triton от ноября 8, 2009, 07:53
А почему у вас тела методов шаблона в cpp вынесены, они ж как бы в h всю жизнь были.
Название: Имбецилы
Отправлено: Чайник777 от ноября 8, 2009, 15:20
Цитата: Алексей Гринь от ноября  8, 2009, 06:10
Будь рядом Страус-труп, с удовольствием бы дал лопатой по лицу.
доставило.
Название: Имбецилы
Отправлено: myst от ноября 8, 2009, 16:30
Цитата: Алексей Гринь от ноября  8, 2009, 06:10
Будь рядом Страус-труп, с удовольствием бы дал лопатой по лицу.
:??? Он тебе или ты ему?
Название: Имбецилы
Отправлено: Triton от ноября 8, 2009, 16:32
Цитата: myst от ноября  8, 2009, 16:30
Цитата: Алексей Гринь от ноября  8, 2009, 06:10
Будь рядом Страус-труп, с удовольствием бы дал лопатой по лицу.
:??? Он тебе или ты ему?
:o :green:
Название: Имбецилы
Отправлено: myst от ноября 8, 2009, 16:33
Цитата: Алексей Гринь от ноября  8, 2009, 05:56
А в main.cpp есть вот так:

    MyCoolClass<int>* l = new MyCoolClass<int>();
    l->add(10);

   
Так это чучело мне пишет: undefined reference to `MyCoolClass<int>::MyCoolClass()', при том что на add не жалуется,
т.е. какбэ сам фаел подключён и линкуется (ибо он в том же файле, что и конструктор).
Компилятор какбэ не телепат.
Название: Имбецилы
Отправлено: Bhudh от ноября 8, 2009, 17:48
Цитата: myst:??? Он тебе или ты ему?



:E:
Название: Имбецилы
Отправлено: Karakurt от ноября 8, 2009, 18:06
Цитата: myst от ноября  8, 2009, 16:33
Компилятор какбэ не телепат.
Вы не ответили на вопрос:
Цитата: Алексей Гринь от ноября  8, 2009, 05:56
Внимание, вопрос: кто имбецил?
;)
Название: Имбецилы
Отправлено: myst от ноября 8, 2009, 18:09
Цитата: Karakurt от ноября  8, 2009, 18:06
Цитата: myst от ноября  8, 2009, 16:33
Компилятор какбэ не телепат.
Вы не ответили на вопрос:
Цитата: Алексей Гринь от ноября  8, 2009, 05:56
Внимание, вопрос: кто имбецил?
;)
(http://upload.wikimedia.org/wikipedia/ru/thumb/8/82/%D0%AD%D0%BB%D1%8C%D0%B4%D0%B0%D1%80_%D0%96%D0%B8%D0%BD%D0%B4%D0%B0%D1%80%D1%91%D0%B2.jpg/180px-%D0%AD%D0%BB%D1%8C%D0%B4%D0%B0%D1%80_%D0%96%D0%B8%D0%BD%D0%B4%D0%B0%D1%80%D1%91%D0%B2.jpg): Не хотелось бы никого обижать...
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 9, 2009, 01:20
Ну так скажите, что исправить? Сильно заморачиваться тихим бредом датского имбецила не хочется.

Цитата: Triton от ноября  8, 2009, 07:53
А почему у вас тела методов шаблона в cpp вынесены, они ж как бы в h всю жизнь были.
В реализации каждого метода нужно писать каждый раз template <class T>, как имбецил. Мегакрутой c++ иначе не воткнёт (имбецил же).

Цитата: myst от ноября  8, 2009, 16:33
Компилятор какбэ не телепат.
Чо? Компилятор всё видит, ибо compile-time ошибок не выдаёт. Вопит линкер, который в том же файле видит метод add. Если пошутить, он внезапно перестаёт видеть add. Я пытаюсь понять, что я сделал не так... За ходом афазической мысли олигофренов очень сложно следить, но я пытаюсь осмыслить как-то, люблю психиатрию.
Название: Имбецилы
Отправлено: myst от ноября 9, 2009, 02:04
Цитата: Алексей Гринь от ноября  9, 2009, 01:20
Я пытаюсь понять, что я сделал не так...
Не удосужился прочитать учебник. Марш читать Страуса! (Поторопись, он уже идёт в сарай за лопатой... ;))
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 9, 2009, 02:07
Цитата: myst от ноября  9, 2009, 02:04
Не удосужился прочитать учебник. Марш читать Страуса! (Поторопись, он уже идёт в сарай за лопатой... ;))
Не-а, я делаю всё правильно. Имбецил тут, похоже, Code::Blocks. Потому что если в main.cpp вместо

   #include "MyCoolClass.h"

написать
 
   #include "ParentClass.cpp"
   #include "MyCoolClass.cpp"

всё компилится без проблем. Т.е. имбецил-КодеБлокс не подключает цппов. Не понимаю, из-за чего такое может быть. Все нужные файлы к проекту подключены.
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 9, 2009, 02:09
Только что КодеБлокс вылетел с Segmentation Fault. O shi~ :(
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 9, 2009, 02:22
И ведь что забавно, если делать то же, но в Plain C,  то всё происходит абсолютно беспроблемно. Отчего же, отчего же всё так в цэпопе костыльно и вкривь?
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 9, 2009, 02:59
Я плачу кровавыми слезами. Мы предположили, что имбецил — КодеБлокс, потому что почему-то не видит файлов реализации, а хедеры видит. Ок, для интересу я определил функции прямо в хедерах:

   virtual void add(T item) { }

Так теперь это чудо имбецилии пишет мне:

MySuperClass.cpp|7|error: redefinition of 'void MySuperClass<T>::add(T)'|
MySuperClass.h|20|error: 'virtual void MySuperClass<T>::add(T)' previously declared here|
||=== Build finished: 2 errors, 0 warnings ===|

Т. е. это чучело видит cpp, но не хочет линковать. Хм...

А если написать так:

   virtual void add(T item);

То это индиго мне пишет:

obj/Debug/main.o||In function `main':|
/main.cpp|5|undefined reference to `MySuperClass<int>::MySuperClass()'|
/main.cpp|7|undefined reference to `MySuperClass<int>::add(int)'|
||=== Build finished: 2 errors, 0 warnings ===|

Ололо, взаимоисключающие параграфы! То он мне пишет, что ничо не определено, то пишет, что дважды.
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 9, 2009, 03:46
Всё понял. Я ранее недооценивал уровень ущербности Сиплюса. Надо шаблоны реально писать в хедерах. Писец. Маразм крепчал.

Смысл выражения "через жопу" стал намного яснее теперь.
Название: Имбецилы
Отправлено: Triton от ноября 9, 2009, 08:37
Гринь, извините, но прежде чем называть кого-то имбецилом, не помешает прочитать инструкцию на пользуемый инструмент.
Шаблоны надо писать именно в хэдерах, потому что они по своей сути - макросы, подставляемые во время компиляции. Вынести их cpp не представляется возможным.

Таки да, ни Си, ни Си++ не имеют внятной поддержки модульности и раздельной компиляции, только костыль в виде хэдеров, что поделать, это не академический паскаль и не ада.  :donno:
Название: Имбецилы
Отправлено: myst от ноября 9, 2009, 13:33
Цитата: Triton от ноября  9, 2009, 08:37
Шаблоны надо писать именно в хэдерах, потому что они по своей сути - макросы, подставляемые во время компиляции. Вынести их cpp не представляется возможным.
Можно, но надо помнить: первое, выхлоп компилятора — машинный код, никаких шаблонов в объектных файлах уже нет; второе, компилятор создаёт только экземпляры шаблона, необходимые в данной единице компиляции. Если нужен экземпляр шаблона для другой единицы, надо сказать об этом компилятору. Так как это зело негибко, это почти не практикуется, и шаблоны хранят в заголовочниках.


И да, у Страуса в книге всё это есть. Так шта, read the fucking manual right now! ;)
Название: Имбецилы
Отправлено: Triton от ноября 9, 2009, 15:42
О том и речь. Так же как теоретически можно и вручную в cpp вписать объявления нужных внешних функций и описания типов данных, а практически они хранятся в h.
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 11, 2009, 12:49
Цитата: Triton от ноября  9, 2009, 08:37
Гринь, извините, но прежде чем называть кого-то имбецилом, не помешает прочитать инструкцию на пользуемый инструмент.
Не, когда используешь некий инструмент, 90% времени идёт руководствование ЗДРАВЫМ СМЫСЛОМ (некие общепринятые стандарты, интуитивность интерфейсов и т. д.), когда же в 10% ЗДРАВЫЙ СМЫСЛ отсутствует, нужно читать маны. Когда же у какого-то инструмента всё ровно наоборот — костылей больше, чем здравого смысла — то это уже херня на постном масле, а не «инструмент».

Цитата: Triton от ноября  9, 2009, 08:37
Шаблоны надо писать именно в хэдерах, потому что они по своей сути - макросы, подставляемые во время компиляции
Есть куча языков, в которых почему-то шаблоны (называемые чаще макросами) могут вполне нормально находиться в файле реализации.

Они идиоты: осилили раздельную компиляцию *.cpp-файлов в *.o файлы с последующей общей линковкой, но сделать что-то подобное с шаблонами не осилили, а ведь могли сделать формат *.tem, который бы тоже делался в некий объектный метакод, а потом линкером всё бы скреплялось. Ан нет, такого нету.

Шаблоны это самые обычные допотопные сишные макросы, только типизированные — и всё.

Цитата: Triton от ноября  9, 2009, 08:37
только костыль в виде хэдеров
Какой костыль? Хедеры это вообще-то элемент хорошей, годной архитектуры отделения интерфейса от реализации. Почему это круто — см. гугл.

С++ пытается занять нишу некоего высокоуровненого языка, а на деле оказывается самым обычным си со свистелками и перделками. Нафиг он нужен-то тогда? Поэтому я снова возвращаюсь к сяхе, попытка полюбить цэпэпэ не удалась. Извините, но блестеть кишками в файле интерфейса у всех на виду — это не моё.
Название: Имбецилы
Отправлено: myst от ноября 11, 2009, 13:33
Цитата: Алексей Гринь от ноября 11, 2009, 12:49
Они идиоты: осилили раздельную компиляцию *.cpp-файлов в *.o файлы с последующей общей линковкой, но сделать что-то подобное с шаблонами не осилили, а ведь могли сделать формат *.tem, который бы тоже делался в некий объектный метакод, а потом линкером всё бы скреплялось. Ан нет, такого нету.
Вот тебе статья на злобу дня (http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=52&rll=1).
А вот тебе прямая ссылка на компилер, который умеет раздельную компиляцию шаблонов: http://www.comeaucomputing.com/
Название: Имбецилы
Отправлено: myst от ноября 11, 2009, 13:34
Цитата: Алексей Гринь от ноября 11, 2009, 12:49
Хедеры это вообще-то элемент хорошей, годной архитектуры отделения интерфейса от реализации. Почему это круто — см. гугл.
Годной?! :o
Механическая вставка файла в файл препроцессором — это самый наикостыльнейший костыль. Как и препроцессор в целом...
Название: Имбецилы
Отправлено: myst от ноября 11, 2009, 13:38
Цитата: Алексей Гринь от ноября 11, 2009, 12:49
Поэтому я снова возвращаюсь к сяхе, попытка полюбить цэпэпэ не удалась.
О да! Си — это предел совершенства, когда нужно загубить несколько тысяч человеко-лет. (http://www.kolobok.us/smiles/madhouse/sarcastic.gif)
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 11, 2009, 13:54
Цитата: myst от ноября 11, 2009, 13:33
А вот тебе прямая ссылка на компилер, который умеет раздельную компиляцию шаблонов: http://www.comeaucomputing.com/
Что-такое про него слышал, но его покупать ещё надо :) И не знаю, насколько он совестим с gcc, а люблю расширения gcc.
И, кстати, что насчёт компиляции шаблонов в стандарте? Это как-то оговаривается, или implementation-dependent?

Цитата: myst от ноября 11, 2009, 13:38
О да! Си — это предел совершенства, когда нужно загубить несколько тысяч человеко-лет.
Неправда. Система исключений делается одним человеком за пару часов, система наследования, виртуальные методы и даже приведение типов с рантайм-проверкой при умелом подходе делаются одним человеком за рабочий день.
Я вчера исключения переписал с использованием ключевого слова __thread, открыл для себя эту прелесть C99 и gcc (gcc-то впереди планеты всей, там это давно было) :) До перехода на линукс юзал виндовые Tls*** :(
Один раз написал фреймворк — и юзай хоть до самой смерти, в чём проблема?

Цитата: myst от ноября 11, 2009, 13:34
Годной?! :o
Механическая вставка файла в файл препроцессором — это самый наикостыльнейший костыль. Как и препроцессор в целом...
Э-э. Я говорю, что отделение интерфейса от реализации — это круто. Я не говорю, что то, как это реализовано в Си, мегакруто. В цэпопе там вообще всё в кучу, ещё хуже. Тут надо вдуматься в значение слова "хедер": заголовок.
Вот СиШарпах всяких и Явах, чтобы поглядеть на интерфейс/контракт, нельзя нормально глянуть в код. Только на всякие IDE да RAD'ы можно полагаться, потому что тоже там всё в кучу. Контракт — отдельно, мухи — отдельно, господа!

Цитата: myst от ноября 11, 2009, 13:34
Механическая вставка файла в файл препроцессором — это самый наикостыльнейший костыль. Как и препроцессор в целом...
Так то же самое и делает СиПлюс. Та же механическая вставка, только типизированная (с проверкой типов аргументов макросов). Я же не в абсолютных величинах сравниваю (ясно, что в Си макросы кривые по сравнению с какой-нибудь Немерлей), а конкретно СиПлюс с СиКавай. И СиПлюс посасывает в таком сравнении
Название: Имбецилы
Отправлено: myst от ноября 11, 2009, 14:08
Цитата: Алексей Гринь от ноября 11, 2009, 13:54
И, кстати, что насчёт компиляции шаблонов в стандарте? Это как-то оговаривается, или implementation-dependent?
У меня нет стандарта. По-моему, жадные стандартизаторы его зажали.
Название: Имбецилы
Отправлено: myst от ноября 11, 2009, 14:12
Цитата: Алексей Гринь от ноября 11, 2009, 13:54
в чём проблема?
В том, что людям надо программный продукт делать, а не обработку исключений, наследование, виртуальные методы, ..., ну ты понял. :)
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 11, 2009, 14:25
Единственное, что меня огорчает в сишных макросах, так это отсутствие возможности макросом генерить другие макросы, напр. что-нибудь вроде так:

#define MAKE_MACRO(name, id, value)  #define name##id value

:(

Или, напр., const int satan = 666; не считается полноценной константой, и её нельзя в макросы лепить (в отличие от С++).

А так макросы классная штука, мне вот нонче надо было нагенерить разных функций по типу cfBox_* для всех примитивных типов, так это делалось так:

#define FOREACH_PRIM(macro) \
   macro(int) \
   macro(float) \
   macro(bool) \

   ...
etc. (сколь их там? небольше десятка. Этот добрый макрос написан раз и навсегда и используется много раз)

А затем:

#define HELPER(type) Object* cfBox_##type(type value);
   FOREACH_PRIM(HELPER)
#undef HELPER


И в том же духе.

Что равносильно СиПлюсовому:
template <class T>
Object* cfBox(T v);


С одним но: туто нету ограничения на type set. Или можно как-то по-другому? Потому что я не вкурил, как делать ограничения (по типу Сишарпового where)? Как я понял, никак нельзя, и типа тип выводится (type inference) по вызываемым методам и полям. А если полей вообще не вызывается? Как ограничить типы только для примитивных? Мне это надо!

И ещё повеселило: как реализовать специализацию шаблона для конкретного типа, да чтобы к нему подходили все наследуемые подклассы? И это типа высокоуровневый язык? На Си, блин, легче реализовать эмуляцию этой байды, чем попытаться понять, что курил Страуструп (и уж тем более читать его книжонки).

Макросы генерят быстрый, оптимизированный код за меня :) И никаких шаблонов не надо.

Цитироватьв чём проблема?
В том, что людям надо программный продукт делать, а не обработку исключений, наследование, виртуальные методы, ..., ну ты понял.
О да. Эти люди лучше потратят ВРЕМЯ и ДЕНЬГИ на обучение работников цпп-галлюцинациям (не удивлюсь, если к тому же цпп-программист стоит дороже, чем с-онли-программист), нежели они потратят ОДИН день и ОДНОГО адекватного человека на написание простого фреймворка, который реализует практически ВСЕ свистелки и перделки, за которые на цпп покупаются.
Название: Имбецилы
Отправлено: myst от ноября 11, 2009, 14:28
Хочешь мощных макр — бери CL.
Название: Имбецилы
Отправлено: Triton от ноября 11, 2009, 16:06
Цитата: myst от ноября 11, 2009, 13:34
Цитата: Алексей Гринь от ноября 11, 2009, 12:49
Хедеры это вообще-то элемент хорошей, годной архитектуры отделения интерфейса от реализации. Почему это круто — см. гугл.
Годной?! :o
Механическая вставка файла в файл препроцессором — это самый наикостыльнейший костыль. Как и препроцессор в целом...
+100.


Цитата: Алексей Гринь от ноября 11, 2009, 12:49
Шаблоны это самые обычные допотопные сишные макросы, только типизированные — и всё.
Цитата: Алексей Гринь от ноября 11, 2009, 12:49
Хедеры это вообще-то элемент хорошей, годной архитектуры отделения интерфейса от реализации.
Взаимоисключающие параграфы детектед.

Цитата: Алексей Гринь от
Они идиоты: осилили раздельную компиляцию *.cpp-файлов в *.o файлы с последующей общей линковкой, но сделать что-то подобное с шаблонами не осилили, а ведь могли сделать формат *.tem, который бы тоже делался в некий объектный метакод, а потом линкером всё бы скреплялось. Ан нет, такого нету.
Они это кто: Кернинган и Ричи, Страустрап, стандартизаторы ISO, разработчики компиляторов?.. К кому обращено ваше праведное негодование?


Если по уму, то Си и Си++ в чисто прикладных задачах давно пора закопать, и пользоваться нормальными языками, а системные или требовательные к производительности модули вполне хорошо пишутся и на чистом Си, Си++ там даже вреден. Честно говоря, не вижу никакой ниши для этого языка.
Глядя, например, на приложения на QT, компилирующиеся по 10-15 минут, хочется сделать с разработчиками библиотеки что-нибудь радикальное. Хотя они не виноваты, просто компилятор судорожно пытается прожевать метры кодов, полученные в ходе обработки "хорошей, годной архитектуры" заголовочных файлов, да еще при этом борясь с неоднозначностью грамматики Си++.
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 11, 2009, 17:32
»
Цитата: Triton от ноября 11, 2009, 16:06
ЦитироватьШаблоны это самые обычные допотопные сишные макросы, только типизированные — и всё.
Цитата: Алексей Гринь от Сегодня в 13:49
ЦитироватьХедеры это вообще-то элемент хорошей, годной архитектуры отделения интерфейса от реализации.
Взаимоисключающие параграфы детектед.
Человек, не отличающий понятия «хедер» от понятия «макрос», детектед.

Цитата: Triton от ноября 11, 2009, 16:06
Они это кто: Кернинган и Ричи, Страустрап, стандартизаторы ISO, разработчики компиляторов?.. К кому обращено ваше праведное негодование?
Если реализация шаблонов никак не оговорена в стандартах, то разработчики компиляторов. Comeau же умеет. А Кернинган и Ричи тут вообще причём?

Цитата: Triton от ноября 11, 2009, 16:06
Глядя, например, на приложения на QT, компилирующиеся по 10-15 минут, хочется сделать с разработчиками библиотеки что-нибудь радикальное.
Да-а, что самое забавное, ДВУХпроходные компиляторы зачастую компилируют быстрее, чем ОДНОпроходные сишные.

Цитата: Triton от ноября 11, 2009, 16:06
Глядя, например, на приложения на QT, компилирующиеся по 10-15 минут
А кто вас заставляет производить полную перекомпиляцию?
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 11, 2009, 17:52
Ещё вчера я вон, набыдлокодил макросы для быстрого протипирования классов (а то много ручной работы выходит).

/* 2934834 это TypeId, надо, к сожалению, самому генерить (хешем в питоне делаю) */
CF_CLASS(cfChild, cfParent, 2934834)
   CF_FIELD(int blabla)
   CF_FIELD(bool lala)

   CF_VIRT_METHODS(cfChild)
        CF_VIRT_METHOD(MSG_KILL_KENNY)
        {
             int fstArg = CF_NEXT_ARG();
             printf("%d\n", fstArg);
        }
        CF_END_VIRT_METHOD
   CF_VIRT_END_METHODS

  CF_CTOR(cfChild, cfParent, int blabla, int bla)
  {
       self->blabla = blabla; self->bla = bla;
  }
  CF_END_CTOR
   
CF_END_CLASS

/* Опа! Тут и наследование, и подсчёт ссылок и прочая и прочая уже готовое. Юзайте на здоровье! Макросы уже сгенерировали всё, что нужно: */
int main(void)
{
   cfChild* child = cfChild_Create();

   /* апкаст с рантайм-проверкой возможности приведения,
       иначе выкидывается исключение: */
   cfObject* parent = CF_CAST(child, cfObject);

   /* Посыл сообщения ака виртуальный метод. */
   CF_VIRT_CALL(parent, MSG_KILL_KENNY, 666);

   return 0;
}

О да, называйте меня садомазером :D
Название: Имбецилы
Отправлено: Triton от ноября 11, 2009, 18:21
Цитата: Алексей Гринь от ноября 11, 2009, 17:32
Человек, не отличающий понятия «хедер» от понятия «макрос», детектед.
Человек, не знающий, чем занимается команда cpp, детектед.


Цитата: Алексей Гринь от ноября 11, 2009, 17:32
А кто вас заставляет производить полную перекомпиляцию?
Там и частичной хватает выши крыши, чтобы начать оглядываться в поисках топора.

Цитата: Алексей Гринь от ноября 11, 2009, 17:32
ДВУХпроходные компиляторы
Хм, компиляторы чего?
Название: Имбецилы
Отправлено: Triton от ноября 11, 2009, 18:34
Цитата: Алексей Гринь от ноября 11, 2009, 17:52
Ещё вчера я вон, набыдлокодил макросы для быстрого протипирования классов (а то много ручной работы выходит).
Угу, Си и Си++ прямо таки замечательные языки: сначала программист пишет свою реализацию ООП, свой тип данных для строк, свой механизм управления памятью, свой RTTI... а потом берёт другой язык, и приступает таки к решению поставленной задачи.

Название: Имбецилы
Отправлено: arseniiv от ноября 11, 2009, 19:18
Я вам и говорю: Delphi, переделанный синтаксисом под Си! Мне бы такой язык жутко понравился. ;D Нет-нет, не пинайте меня. А можно ещё сделать другой язык.
Кстати, насколько быстро работает преобразователь текста вместе с компилятором? Свой собственный компилятор всё же не очень легко написать.
Название: Имбецилы
Отправлено: myst от ноября 11, 2009, 20:51
Цитата: Алексей Гринь от ноября 11, 2009, 17:32
Да-а, что самое забавное, ДВУХпроходные компиляторы зачастую компилируют быстрее, чем ОДНОпроходные сишные.
У тебя и пруфы есть? :eat:
Название: Имбецилы
Отправлено: myst от ноября 11, 2009, 20:53
Цитата: Алексей Гринь от ноября 11, 2009, 17:52
О да, называйте меня садомазером :D
As you wish. ;)
Название: Имбецилы
Отправлено: myst от ноября 11, 2009, 20:55
Цитата: arseniiv от ноября 11, 2009, 19:18
Кстати, насколько быстро работает преобразователь текста вместе с компилятором?
А?
Название: Имбецилы
Отправлено: arseniiv от ноября 11, 2009, 21:03
Ну, синтаксис вида си преобразуется к другому желаемому и тем компилятором обраба...
Название: Имбецилы
Отправлено: Triton от ноября 11, 2009, 21:06
Цитата: arseniiv от ноября 11, 2009, 19:18
Я вам и говорю: Delphi, переделанный синтаксисом под Си! Мне бы такой язык жутко понравился. ;D Нет-нет, не пинайте меня.
Object Pascal... увольте.) Для прикладных задач всегда Java, Ruby, Tcl...

Цитата: arseniiv от ноября 11, 2009, 19:18
А можно ещё сделать другой язык.
А можно сделать свою ОС... Да куда там - свою аппаратную платформу! Вот только зачем? :eat:
Есть конечно маньяки вроде меня, которым этот процесс интересен сам по себе...  :D

Цитата: arseniiv от ноября 11, 2009, 19:18
Свой собственный компилятор всё же не очень легко написать.
Таки достаточно легко.
Крайне сложно написать оптимизирующий компилятор.  ;)
Название: Имбецилы
Отправлено: myst от ноября 11, 2009, 21:09
Цитата: arseniiv от ноября 11, 2009, 21:03
Ну, синтаксис вида си преобразуется к другому желаемому и тем компилятором обраба...
Это компилятор и есть, трансляция не обязательно в машинный код делается.
Название: Имбецилы
Отправлено: myst от ноября 11, 2009, 21:13
Пока Гринь бороздит просторы препроцессора C, старики сражаются со змием окаянным, C++. Подробности (http://golang.org/). Реинкарнация Limbo, не иначе. :)
Название: Имбецилы
Отправлено: Triton от ноября 11, 2009, 21:15
Цитата: myst от ноября 11, 2009, 21:09
Цитата: arseniiv от ноября 11, 2009, 21:03
Ну, синтаксис вида си преобразуется к другому желаемому и тем компилятором обраба...
Это компилятор и есть, трансляция не обязательно в машинный код делается.
Студенты такой компилер на 3-м курсе пишут  :yes:
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 12, 2009, 23:15
Цитата: Triton от ноября 11, 2009, 18:34
Угу, Си и Си++ прямо таки замечательные языки: сначала программист пишет свою реализацию ООП, свой тип данных для строк, свой механизм управления памятью, свой RTTI... а потом берёт другой язык, и приступает таки к решению поставленной задачи.
А другие отчего-то или медленные, или памяти жрут немерено.

GNU костылит Vala, со стороны годный язычок, но не пробовал ещё. Из минусов — привязка к GTK, которая выльется в 8 МБ (ЕМНИП) балласта под Windows.

Цитата: myst от ноября 11, 2009, 21:13
Пока Гринь бороздит просторы препроцессора C, старики сражаются со змием окаянным, C++. Подробности. Реинкарнация Limbo, не иначе
ЛОР почитываем, в курсе. goto в списке «фич» веселит
Название: Имбецилы
Отправлено: Triton от ноября 13, 2009, 00:09
Как-то мы поменялись местами, теперь вы Си++ более защищаете, а я более на него нападаю.  :)

Цитата: Алексей Гринь от ноября 12, 2009, 23:15
А другие отчего-то или медленные, или памяти жрут немерено.
Медленные... А куда торопиться-то? ;) Посмотрите на приложения, которые у вас обычно запущены в системе — 99.9% процентов времени они проводят в ожидании порции данных из потока или сообщения от оконной подсистемы. Ну будут они на обработку данных тратить пусть даже в 10, в 20 раз больше времени — никто не заметит.
Бредовость идеи писать полноценное веб-приложение на Си очевидна всем, но в то же время идея писать на Си (пусть даже и приплюснутом) текстовый редактор, чат или графическую морду к чему угодно воспринимается нормально. Хотя по сути это вещи одного порядка.
Статически типизированный язык с эффективным оптимизирующим компилятором нужен только в определённых нишах: ядро ОС, драйвера, СУБД, медиакодеки, библиотеки сжатия или шифрования и т.п. В других случаях использование Си ничем не оправдано, кроме "писали по-старинке 20 лет, и дальше будем писать".
И то в своей нише Си хорош только там, где нужно уж совсем низкоуровневые и системные вещи писать, благодаря тому, что у него практически отсутствуют требования к runtime окружению. В более высокоуровневых областях уже играют роль внеязыковые факторы, а не мнимые преимущества самого языка.


Цитата: Алексей Гринь от ноября 12, 2009, 23:15
GNU костылит Vala, со стороны годный язычок, но не пробовал ещё. Из минусов — привязка к GTK, которая выльется в 8 МБ (ЕМНИП) балласта под Windows.
Заглянул в википедию:
Цитировать
Vala — язык программирования, предназначенный для прикладного и системного программирования на основе библиотек GLib Object System (GObject) рабочей среды GNOME/GTK+. Он был разработан Йюргом Биллетером и Раффаэле Сандрини.

Vala по своему синтаксису очень похож на C# и полностью реализует объектно-ориентированный подход. Программа на языке Vala транслируется в программу на языке C, которая в свою очередь компилируется в бинарный код целевой платформы со стандартными библиотеками C и GTK+ и выполняется со скоростью нативного приложения C.
"Язык... на основе библиотеки" и "транслируется в программу на языке C" - этапять, как говорится.
Сразу хочется спросить у авторов. Зачем оно такое? Какие проблемы, стоящие перед другими языками, оно решает? Какие имеет преимущества? Какую нишу планирует занять?
Или разработчикам просто хочется изобрести свой собственный С#, Java или Object Pascal?  :what:
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 13, 2009, 00:39
Чтобы сразу было всем понятно: я перфекционист (т.е. имбецил).

Цитата: Triton от ноября 13, 2009, 00:09
Медленные... А куда торопиться-то? ;)
Чисто российский менталитет. Сожрём то, что дадут, и не подавимся. Мне есть куда торопиться, да и не только мне: погуглите «Windows тормозит».

Цитата: Triton от ноября 13, 2009, 00:09
Бредовость идеи писать полноценное веб-приложение на Си очевидна всем
Мне не очевидна :) Расскажите подробнее.

Цитата: Triton от ноября 13, 2009, 00:09
"Язык... на основе библиотеки" и "транслируется в программу на языке C" - этапять, как говорится.
Я не телепат, ваших суеверий не знаю. Что не так?

"Язык... на основе библиотеки" — о да, язык с синтаксисом, но без словаря — это мегакруто! :)

"транслируется в программу на языке C" — поддерживаю на 100%. Вместо того, чтобы писать кривой компилятор или фронтенд под какой-то определённый, лучше всегда в промежуточный си курочить. А там уже и все бинарные оптимизации будут, и поддержка 100% платформ, и бесшовная соместимость с существующими 99.9% C-based API.

Цитата: Triton от ноября 13, 2009, 00:09
Или разработчикам просто хочется изобрести свой собственный С#, Java или Object Pascal?  :what:
Не, они тормозят. Валу специально делают для написания gtk-софта, работающего со скоростью си. Обычно его и пишут на си, но на си получается слишком много ручной писанины. А тут ещё автоматическая работа с памятью, но без сборщика мусора, а на основе подсчёта ссылок + выхода/невыхода из области видимости. Прямо как то, о чём я мечтал :)

Цитата: Triton от ноября 13, 2009, 00:09
Какие проблемы, стоящие перед другими языками, оно решает?
Скорость, родное понимание GTK, отсутствие рукоблудия.

Она мне импонирует потому, что в правильную сторону смотрят мужики. Авось от привязки к GTK освободятся и налисапедят своё. А без привязки к GTK это будет практически идеал :)
Название: Имбецилы
Отправлено: myst от ноября 13, 2009, 00:51
Цитата: Triton от ноября 13, 2009, 00:09
И то в своей нише Си хорош только там, где нужно уж совсем низкоуровневые и системные вещи писать
Кабы Си обладал совсем уж низкоуровневыми возможностями. ;)
Название: Имбецилы
Отправлено: myst от ноября 13, 2009, 00:52
Цитата: Алексей Гринь от ноября 13, 2009, 00:39
Не, они тормозят.
Object Pascal тормозит?
Название: Имбецилы
Отправлено: myst от ноября 13, 2009, 00:54
Цитата: myst от ноября 11, 2009, 20:51
Цитата: Алексей Гринь от ноября 11, 2009, 17:32
Да-а, что самое забавное, ДВУХпроходные компиляторы зачастую компилируют быстрее, чем ОДНОпроходные сишные.
У тебя и пруфы есть? :eat:
Вижу, пруфов таки нет. (http://kolobok.us/smiles/personal/beach.gif)
Название: Имбецилы
Отправлено: myst от ноября 13, 2009, 00:55
Только сейчас заметил. Это сишные компиляторы-то однопроходные? :o :o :o
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 13, 2009, 01:24
Цитата: myst от ноября 13, 2009, 00:55
Только сейчас заметил. Это сишные компиляторы-то однопроходные? :o :o :o
А зачем тогда forward declarations?
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 13, 2009, 01:29
Цитироватьstruct A
{
    struct B b;
};

struct B
{
    struct A a;
};

А теперь объясни, почему он пишет:

Цитироватьerror: field 'b' has incomplete type

В два прохода разрешение результирующего размера делается запросто.
Название: Имбецилы
Отправлено: Triton от ноября 13, 2009, 09:40
Цитата: Алексей Гринь от ноября 13, 2009, 01:29
Цитироватьstruct A
{
    struct B b;
};

struct B
{
    struct A a;
};
:uzhos:
Вы сами-то поняли, что написали?
Название: Имбецилы
Отправлено: Triton от ноября 13, 2009, 10:13
Цитата: Алексей Гринь от ноября 13, 2009, 00:39
Чисто российский менталитет. Сожрём то, что дадут, и не подавимся. Мне есть куда торопиться, да и не только мне: погуглите «Windows тормозит».
Тормознутость программы в наименьшей степени зависит от языка реализации. Если, скажем, в алгоритме стоит квадратичная зависимость времени работы или требуемой памяти от объема входных данных, то какой там будет дополнительно множитель - 1 или 20 - уже абсолютно без разницы.
Вон в Virtual Box открытие окна настроек тормозит по 5, а когда и по 10 секунд. В установщике Suse окно конфигурации тормозит как проклятое. Неужели в обоих случаях пайтон виноват? ;)

Цитата: Алексей Гринь от ноября 13, 2009, 00:39
"Язык... на основе библиотеки" — о да, язык с синтаксисом, но без словаря — это мегакруто! :)
Не так давно вы хвалили Си и порывались писать собственный ООП слой на макросах (изобретать синтаксис). В Си очень и очень маленький словарь стандартной библиотеки (а в freestanding варианте - и вовсе почти весь отсутствует).
В общем, опять взаимоисключающие параграфы.

Цитата: Алексей Гринь от ноября 13, 2009, 00:39
Не, они тормозят. Валу специально делают для написания gtk-софта, работающего со скоростью си. Обычно его и пишут на си, но на си получается слишком много ручной писанины. А тут ещё автоматическая работа с памятью, но без сборщика мусора, а на основе подсчёта ссылок + выхода/невыхода из области видимости. Прямо как то, о чём я мечтал :)
Знаете, сколько уже таких языков... Начиная от академически строго Cyclone, через простую как пень Java и "философский" D и заканчивая десятком поделок на основе dotNET.
Что мешает сделать gtk-биндинг для любого языка (собственно, они и есть для многих языков) и не изобретать велосипед?
Название: Имбецилы
Отправлено: Triton от ноября 13, 2009, 10:22
Цитата: myst от ноября 13, 2009, 00:51
Цитата: Triton от ноября 13, 2009, 00:09
И то в своей нише Си хорош только там, где нужно уж совсем низкоуровневые и системные вещи писать
Кабы Си обладал совсем уж низкоуровневыми возможностями. ;)
А каких именно не хватает, по вашему мнению?
Название: Имбецилы
Отправлено: Triton от ноября 13, 2009, 10:52
Цитата: Алексей Гринь от ноября 13, 2009, 01:24
Цитата: myst от ноября 13, 2009, 00:55
Только сейчас заметил. Это сишные компиляторы-то однопроходные? :o :o :o
А зачем тогда forward declarations?
forward declarations присутствуют by design. Если вы имеете ввиду многопроходный анализ семантики программы, то в Си++ этого добра выше крыши, благодаря неоднозначности грамматики. Даже имея перед собой полный набор классов и шаблонов, компилятор зачастую просто вынужден гадать на кофейной гуще, что за конструкция перед ним. И жутко тормозить.
http://yosefk.com/c  fqa/defective.html (http://yosefk.com/c++fqa/defective.html)


Название: Имбецилы
Отправлено: myst от ноября 13, 2009, 12:39
Цитата: Алексей Гринь от ноября 13, 2009, 01:24
А зачем тогда forward declarations?
...
Это ещё не значит, что они однопроходные. Назови конкретные компиляторы.
Название: Имбецилы
Отправлено: myst от ноября 13, 2009, 12:42
Цитата: Triton от ноября 13, 2009, 10:22
А каких именно не хватает, по вашему мнению?
http://lingvoforum.net/index.php/topic,20180.msg402247.html#msg402247
Обсуждение там как-то не заладилось. :)
Название: Имбецилы
Отправлено: Triton от ноября 13, 2009, 12:51
На мой взгляд, таки да, не хватает возможности явно указывать разрядность целочисленных типов. Также не хватает конкретных правил по преобразованию этих типов друг в друга и возможности средствами языка отслеживать арифметическое переполнение.
Что-то вроде int( 8 ), checked unsigned(32) и т.п.
Но это уже Ада получится. Жаль, что Ада не так распространена как Си, это очень достойный язык.
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 13, 2009, 13:36
Цитата: Triton от ноября 13, 2009, 12:51
и возможности средствами языка отслеживать арифметическое переполнение
Проверка задним числом — постфактум — в таких делах не уместна. Проверяйте заранее пределы. Средствами языка Си возможно всё.

Цитата: Triton от ноября 13, 2009, 09:40
Вы сами-то поняли, что написали?
?

Цитата: Triton от ноября 13, 2009, 10:13
Не так давно вы хвалили Си и порывались писать собственный ООП слой на макросах (изобретать синтаксис). В Си очень и очень маленький словарь стандартной библиотеки (а в freestanding варианте - и вовсе почти весь отсутствует).
В общем, опять взаимоисключающие параграфы.
Ой лол. Взаимоисключающим параграфом было бы, если бы библиотеки у Си не было вообще. А она есть.

Цитата: Triton от ноября 13, 2009, 10:13
Что мешает сделать gtk-биндинг для любого языка (собственно, они и есть для многих языков) и не изобретать велосипед?
Тем, что это рукоблудие. Vala — родной для gtk язык без оверхеда и без синтаксиса больного дисграфией имбецила. Биндинги — костыли и говно.
Название: Имбецилы
Отправлено: Triton от ноября 13, 2009, 13:56
Цитата: Алексей Гринь от ноября 13, 2009, 13:36
Цитата: Triton от ноября 13, 2009, 12:51
и возможности средствами языка отслеживать арифметическое переполнение
Проверка задним числом — постфактум — в таких делах не уместна. Проверяйте заранее пределы. Средствами языка Си возможно всё.
Давайте тогда уж и обращение по нулевому указателю средствами ОС не отслеживать, и деление на ноль оставлять как есть, и игнорировать запись данных в невыделенную страницу памяти. Будте последовательны. Это же тоже проверки задним числом, а средствами языка Си возможно всё.

Цитата: Алексей Гринь от ноября 13, 2009, 13:36
Цитата: Triton от ноября 13, 2009, 09:40
Вы сами-то поняли, что написали?
?
Значит не поняли...

Цитата: Алексей Гринь от ноября 13, 2009, 13:36
Тем, что это рукоблудие. Vala — родной для gtk язык без оверхеда и без синтаксиса больного дисграфией имбецила. Биндинги — костыли и говно.
Уровень аргументации вполне ясен, спасибо.
Название: Имбецилы
Отправлено: myst от ноября 13, 2009, 15:07
Контроль типов транслятором — это тоже проверка задним числом. :eat:
Даёшь полную свободу машинного кода и безошибочных кодеров! (http://kolobok.us/smiles/artists/mini/alyur_mini_01.gif)
Название: Имбецилы
Отправлено: myst от ноября 13, 2009, 15:09
Я питал надежды по поводу BitC, но кажется, там всё стухло. :'(
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 13, 2009, 15:48
Цитата: Triton от ноября 13, 2009, 13:56
Значит не поняли...
А вы поясните, если такой умный.

Цитата: Triton от ноября 13, 2009, 13:56
Давайте тогда уж и обращение по нулевому указателю средствами ОС не отслеживать, и деление на ноль оставлять как есть, и игнорировать запись данных в невыделенную страницу памяти. Будте последовательны. Это же тоже проверки задним числом, а средствами языка Си возможно всё.
Ололо, ОС как раз и написана на Си, так что вы опять фейлите. Всё это реализовно как раз средствами языка Си :D

Цитата: myst от ноября 13, 2009, 15:07
Контроль типов транслятором — это тоже проверка задним числом.
С фигов ли? Отличай compile-time-проверку от run-time-проверки. Транслятор балуется с compile-time, а это НИКАК не проверка задним числом. Более того, код вообще не запустится, если что не так: проверки не будет ВООБЩЕ. Вот run-time — проверка задним числом, да. Но как раз она Сяхой не поддерживается.
Название: Имбецилы
Отправлено: Triton от ноября 13, 2009, 16:12
Цитата: Алексей Гринь от ноября 13, 2009, 15:48
Цитата: Triton от ноября 13, 2009, 13:56
Значит не поняли...
А вы поясните, если такой умный.
Бесконечная рекурсия, всего и делов.


Цитата: Алексей Гринь от ноября 13, 2009, 15:48
Цитата: Triton от ноября 13, 2009, 13:56
Давайте тогда уж и обращение по нулевому указателю средствами ОС не отслеживать, и деление на ноль оставлять как есть, и игнорировать запись данных в невыделенную страницу памяти. Будте последовательны. Это же тоже проверки задним числом, а средствами языка Си возможно всё.
Ололо, ОС как раз и написана на Си, так что вы опять фейлите. Всё это реализовно как раз средствами языка Си :D
Гринь, спокойно, санитары уже выехали.  :D
Фейлите как раз вы, вы даже не понимаете, о чём я говорю.
Название: Имбецилы
Отправлено: myst от ноября 13, 2009, 16:17
Цитата: Алексей Гринь от ноября 13, 2009, 15:48
Ололо, ОС как раз и написана на Си, так что вы опять фейлите. Всё это реализовно как раз средствами языка Си :D
Которая?
Название: Имбецилы
Отправлено: myst от ноября 13, 2009, 16:22
Цитата: Алексей Гринь от ноября 13, 2009, 15:48
С фигов ли? Отличай compile-time-проверку от run-time-проверки. Транслятор балуется с compile-time, а это НИКАК не проверка задним числом.
Всё, что после написания кода,  задним числом. Грамотное проектирование, грамотное кодирование — 0 ошибок, так? д'Артаньяны же не ошибаются. ;)
Название: Имбецилы
Отправлено: Triton от ноября 13, 2009, 16:25
Цитироватьrun-time — проверка
Когда ваш файловый менеджер обнулит при переносе файл с вашими-очень-важными-данными, вместо того, чтобы свалиться по эксепшену; когда ваш сервер отдаст злоумышленникам все приватные данные (после банального переполнения буфера или же, например, в результате атаки на переполнения умножения в calloc), вместо того чтобы упасть и своим трупом закрыть проход врагу, вот тогда вы мне расскажете про ненужность автоматических проверок целочисленной арифметики.
Название: Имбецилы
Отправлено: myst от ноября 13, 2009, 16:27
Способность Си превращать салат в кровавое месиво уже не раз аукнулось на эти годы. Прав был старик Вирт, ох, прав...
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 13, 2009, 16:45
Цитата: Triton от ноября 13, 2009, 16:12
Цитировать
ЦитироватьЗначит не поняли...
А вы поясните, если такой умный.
Бесконечная рекурсия, всего и делов.
Ну, блин, введите в пример третью структуру, не то важно. Компилер останавливается сразу же, даже не войдя в рекурсию, потому что он не знает, какой это такой тип - struct B. Ему нужно делать пинка под зад, то бишь форвард-декларейшен. Будь он двухпроходным, вошёл бы в рекурсию, да так бы и написал, что рекурсия.

Цитата: Triton от ноября 13, 2009, 16:12
Гринь, спокойно, санитары уже выехали.  :D
Фейлите как раз вы, вы даже не понимаете, о чём я говорю.
Ну вы-то можете говорить о чём угодно, только вот делаете вы не по теме. Обсуждались ограничения си. Вы в пример приводите вещи, как раз в 99.9% случаев реализованные на си.

Цитата: Triton от ноября 13, 2009, 16:25
Когда ваш файловый менеджер обнулит при переносе файл с вашими-очень-важными-данными, вместо того, чтобы свалиться по эксепшену; когда ваш сервер отдаст злоумышленникам все приватные данные (после банального переполнения буфера или же, например, в результате атаки на переполнения умножения в calloc), вместо того чтобы упасть и своим трупом закрыть проход врагу, вот тогда вы мне расскажете про ненужность автоматических проверок целочисленной арифметики.
Атаки переполнения и умножения в calloc существуют как раз из-за нежелания делать предпроверку, о которой я благую весть несу. Наличие в мире такой вещи, как "исключения", никак на это не влияет.
Название: Имбецилы
Отправлено: Triton от ноября 13, 2009, 17:04
Цитата: Алексей Гринь от ноября 13, 2009, 16:45
Цитата: Triton от ноября 13, 2009, 16:12
Гринь, спокойно, санитары уже выехали.  :D
Фейлите как раз вы, вы даже не понимаете, о чём я говорю.
Ну вы-то можете говорить о чём угодно, только вот делаете вы не по теме. Обсуждались ограничения си. Вы в пример приводите вещи, как раз в 99.9% случаев реализованные на си.
Вы отличайте всё же палец от сами знаете чего. "Реализовано в языке" (как механизм с определённой семантикой) и "реализовано на языке" (как произвольный алгоритм) - это вещи разные совершенно.
Эти "вещи" реализованы аппаратурой процессора, ядром и принятой моделью исполнения процессов. А уж на чём они написаны - дело десятое. Хоть на басике, хоть в машинных кодах.
Когда программа делает *(int*)(NULL) = 123, то она прибивается операционной системой как глючная, а вовсе не потому, что такова семантика данной конструкций. По семантике это undefined behaviour, и с тем же успехом эта команда могла бы форматировать вам диск или менять разрешение на мониторе.

Цитата: Алексей Гринь от ноября 13, 2009, 16:45
Атаки переполнения и умножения в calloc существуют как раз из-за нежелания делать предпроверку, о которой я благую весть несу.
Атаки переполнения существуют потому, что выбранный язык реализации настолько беспомощен, что не может гарантировать ровным счётом ничего.
Попробуйте переписать тот же багнутый алгоритм на Оберон, а потом его хакнуть - успехов.
Название: Имбецилы
Отправлено: Triton от ноября 13, 2009, 17:31
Кстати fclose(NULL) согласно спецификации также обладает undefined behavior, и, надо сказать, в glibc этот behavior таки действительно undefined. (Во всяком случае, в версии glibc приблизительно трехлетней давности.) Ни проверок, ни игнорирования NULL, ни вызова abort()...
Одна единственная опечатка if (file == NULL) мне стоила почти недели отладки программы, которая работала "почти всегда" и падала в рандомном месте.
Тоже нерадивый программист в моём лице виноват?
Название: Имбецилы
Отправлено: myst от ноября 13, 2009, 18:08
Цитата: Triton от ноября 13, 2009, 17:04
Попробуйте переписать тот же багнутый алгоритм на Оберон, а потом его хакнуть - успехов.
Кстати, из Oberon'а можно было бы сделать очень неплохой системный язык... Но гигатонны кода на C...
Название: Имбецилы
Отправлено: myst от ноября 13, 2009, 18:11
Цитата: http://en.wikipedia.org/wiki/BitC
In April 2009, Shapiro - driving force behind both BitC and Coyotos.[2] - announced that he had accepted a position at Microsoft to work on the Midori project, and that after August 2009 he would not be working further on BitC[3].

BitC is no longer under active development.
Ну точно стух. :'(
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 13, 2009, 23:15
Цитата: Алексей Гринь от ноября 13, 2009, 16:45
Будь он двухпроходным, вошёл бы в рекурсию, да так бы и написал, что рекурсия.
В моновом Сишарпе, нопремер:
  Struct member `monostest.C.b' of type `monostest.B' causes a cycle in the struct layout(CS0523)

Цитата: Triton от ноября 13, 2009, 17:04
Эти "вещи" реализованы аппаратурой процессора, ядром и принятой моделью исполнения процессов.
Это, уважаемый, фелософея и димагогея. Любое 2 + 2 в итоге «реализованы аппаратурой процессора». Что вы хотите этим доказать?

Цитата: Triton от ноября 13, 2009, 17:04
Вы отличайте всё же палец от сами знаете чего. "Реализовано в языке" (как механизм с определённой семантикой) и "реализовано на языке" (как произвольный алгоритм) - это вещи разные совершенно.
Ухты, налицо путание семантики и синтаксиса. Если си синтаксически не понимает исключений, переполнений или ООПа, это не значит, что оно нереализуемо семантически.

С точки зрения семантики, разницы между

Цитироватьif(a == 0)
   fatal("Divide by zero!");
result = b / a;

и

Цитироватьtry
{
   result = b / a;
}
catch(DivideByZeroException e)
{
   fatal("Divide by zero!");
}

НЕТ.
То, что вы втираете, это синтаксис. Да, средствами синтаксиса не ничего такого не реализовано. Оно и правильно.

"Реализовано на языке", "реализовано в языке" - бла-бла-бла, эти постоянные бессмысленные категоризации никому не упёрлись.

ЦитироватьАтаки переполнения существуют потому, что выбранный язык реализации настолько беспомощен, что не может гарантировать ровным счётом ничего.
Вы, похоже, не поняли, придётся повторить: атаки переполнения существуют как раз из-за нерасторопности делать предпроверки. Неужели так сложно проверить длину буфера?

Цитата: Triton от ноября 13, 2009, 17:31
Тоже нерадивый программист в моём лице виноват?
Да, это ваша ошибка, а не си.
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 13, 2009, 23:34
ag@ag-laptop:~/Проекты/cf$ cat main.c
#include "core/cfException.h"
#include "core/cfInvalidCastException.h"
#include "core/cfObject.h"

int main(void)
{
    CF_TRY
    {
        cfObject* o = CF_BOX_BOOL(false);
        int i = CF_UNBOX_INT(o);
        printf("Triton is cool!!111\n");
    }
    CF_CATCH(e)
    {
        printf("There was an invalid statement, but I ignored it! :)\n");

        CF_CATCHED;
    }
    CF_END_TRY;

    return 0;
}
ag@ag-laptop:~/Проекты/cf$ cd ./bin/Debug
ag@ag-laptop:~/Проекты/cf/bin/Debug$ ./cf

There was an invalid statement, but I ignored it! :)
ag@ag-laptop:~/Проекты/cf/bin/Debug$
Название: Имбецилы
Отправлено: Алексей Гринь от ноября 13, 2009, 23:42
ЦитироватьCF_CATCHED
facepalm.bmp
Название: Имбецилы
Отправлено: Triton от ноября 14, 2009, 00:14
Ок, я буду на вашем языке разговаривать с вами.
Это ваша ошибка и проблема, что вы не понимаете (к примеру) всей глубины механизма шаблонов Си++, которые давно вкурило всё прогрессивное человечество. Учите матчасть и гуглите, гуглите.
Наше учение истинно потому что верно.
Название: Имбецилы
Отправлено: sknente от ноября 14, 2009, 03:44
Еще один спор ни о чем? Ням-ням.
Название: Имбецилы
Отправлено: myst от ноября 14, 2009, 13:57
Цитата: sknente от ноября 14, 2009, 03:44
Еще один спор ни о чем?
Предмет спора не имеет значения, важен процесс. ;)