Форум: "Прочее";
Текущий архив: 2008.07.13;
Скачать: [xml.tar.bz2];
ВнизКак писать на С++, а не на Дельфи? Найти похожие ветки
← →
palva © (2008-05-30 21:49) [120]ketmar © (30.05.08 21:36) [119]
> засим беседу с palva завершаю ввиду того, что оппонент сам
> не знает, что хочет сказать.
Я вам не оппонировал, я вас информировал. В частности о совместимости языков.
Все что я хотел сказать, я сказал.
@!!ex © (30.05.08 21:27) [118]
>> Вопрос единственный - ну и что?
> То, что С++ компилятор не совместим на 100% с С.
Это понятно. Правда я говорил нечто иное.
← →
ketmar © (2008-05-30 21:56) [121]>Правда я говорил нечто иное.
в качестве иллюстрации: «если переименовать файл, то компилятор создаст идентичный код». когда оппоненту продемонстрировали, что кода не будет не то, что идентичного, а и вовсе никакого — пошли увёртки. ща телеграфирую нашим на Марс — они рано мозговых слизней выпустили, я ещё команды не давал.
---
Understanding is not required. Only obedience.
← →
guav © (2008-05-30 21:59) [122]> [115] ketmar © (30.05.08 21:01)
> а цпп, вроде, позиционировался и как «защищённый».
Равзе ?
Понятно, что он не менее и не более "защищённый" чем С.
> его шаблоны и недобны
удобны/не удобны по сравнению с чем ?
по сравнению с ничем и копипастом вручную - удобнее.
по стравнению с макросами - удобнее.
> и не дают норамльного контроля типов
Дают, когда он потребуется.
> не обязаны быть частью компилятора — это таки препроцессор
А как же SFINAE ? А как компилятор находит ошибки в шаблонах, которые ни разу не истанциированы ? А зачем употребления кейворда typename, когда зависимое имя есть тип. Нет, шаблоны - это неотъемлимая часть языка, и обрабатываются они компилятором а не препроцессором.
> это фигня. нет ничего хуже, чем два очень похожих, но разных
> языка.
Не вижу сильно боьшой проблемы, особенно с учётом того что у разных языков есть версии и диалекты.
← →
palva © (2008-05-30 22:04) [123]
> когда оппоненту продемонстрировали, что кода не будет не
> то, что идентичного, а и вовсе никакого — пошли увёртки.
>
Какие увертки, когда я оказался прав. Вы еще раз прочитайте пост, который вы выборочно цитировали, и подумайте немного. Попытайтесь отбросить сны про слизняков.
← →
ketmar © (2008-05-30 22:08) [124]>[122] guav © (2008-05-30 21:59:00)
>Понятно, что он не менее и не более «защищённый» чем С.
не понятно. отчего тогда [116]? не от попытки ли сделать «более защищённым»?
>удобны/не удобны по сравнению с чем ?
с generics из oo2c.
>шаблоны — это неотъемлимая часть языка, и обрабатываются они
>компилятором а не препроцессором.
чем они там обрабатываются — это дело компилятора. по-сути, в современных компиляторах и нет отдельной стадии препроцессинга. а вот чем должны по стандарту… тут я на всякий случай промолчу. не помню. возможно, лажанулся.
>Не вижу сильно боьшой проблемы
это значит лишь, что ты или феноменально внимателен и скрупулёзен, или никогда не делал ничего серьёзного на двух «очень похожих, но разных» языках.
---
Understanding is not required. Only obedience.
← →
ketmar © (2008-05-30 22:11) [125]>Просто обычно компилятор даже не может различить, на каком языке код.
>По расширению файла, конечно, можно понять. Но если переименовать
>файл, то компилятор создаст идентичный код.
я сделал именно описываемое. даже если файл назвать «a.c», всё равно g++ его не компилирует. тебе так сложно признать, что ты спорол чушь, ЧСВ мешает?
---
Understanding is not required. Only obedience.
← →
palva © (2008-05-30 22:25) [126]
> тебе так сложно признать, что ты спорол чушь, ЧСВ мешает?
Вообще-то я всегда признаю, если я спорол чушь. Вот то, что вы из меня процитировали, отбросив все остальное, это действительно чушь. ЧСВ - еще одно непонятное слово...
← →
ketmar © (2008-05-30 22:32) [127]>[126] palva © (2008-05-30 22:25:00)
и какие такие слова я выкинул из цитаты, которые кардинально меняют её смысл? если бы они были, ты бы их радостно привёл и показал, что я не прав, как показал тебе я, что не прав ты — конкретным примером. но таких нет, а признаваться в ошибке неохота — отсюда рассуждения плана «если бы у бабушки был хрен, она была бы дедушкой, а если у неё хрен воображаемый, да представим, что это раньше был дедушка, а потом хрен отрезали…»
клиника.
---
Understanding is not required. Only obedience.
← →
guav © (2008-05-30 22:37) [128]> [124] ketmar © (30.05.08 22:08)
> отчего тогда [116]? не от попытки ли сделать «более защищённым»?
Я думал, это связано с тем, что в С++ более сложные неявные преобразования типов (копирующие конструкторы, операторы преобразования), больше фич зависящих от типизации (к разрешению перегрузок добавляется инстанциирование/специаизация шаблонов и перегрузка операторов), что вынудило повысить строгость системы типов (и в последствии даже улучшить контроль над преобразованиями (*_cast, explicit) ).
> >удобны/не удобны по сравнению с чем ?
> с generics из oo2c.
Не видел.
Лениво искать, можешь показать.
они такиже же как в дотнете ?
> а вот чем должны по стандарту… тут я на всякий случай промолчу
Если попытаться сделать шаблоны препроцессором отдельным от компилятора, то SFINAE сломается. Сколько хитрого бустовского кода при этом пострадает - не знаю, но подозреваю что много.
> никогда не делал ничего серьёзного на двух «очень похожих,
> но разных» языках.
Действительно. С код к С++ проекту прикручивал, да. Но зачем самому писать на С, когда есть С++ мне не понятно. Других случаев совместого использования похожих языков у меня не было.
← →
ketmar © (2008-05-30 22:43) [129]>[128] guav © (2008-05-30 22:37:00)
>Я думал, это связано с тем, что в С++ более сложные неявные
>преобразования типов
ну скажи мне, какого ангела char * не совместим с void *, а? вот какое такое преобразование типа этому мешает? я тупой, до меня не доходит. честно.
>они такиже же как в дотнете ?
не знаю, с вротнетом не работал, лениво смотреть. %-) вот цитата из stdlib"ы oo2c:
TYPE
Entry(K: Key; V: Value) = RECORD
(**Invariant for entries: When in use, @ofield{key} is not @code{NIL} and not
@ovar{dummy}. When not in use, @ofield{key} is either @code{NIL} or
@ovar{dummy}. A dummy key value cannot be replaced by @code{NIL}, since
otherwise other keys may be lost. *)
hash: Hash;
(**The hash value of the object stored in @ofield{key}. This is computed
once, at the time the object is added to the dictionary. *)
key: K;
(**Key object. For an unused slot, this is either @code{NIL} or
@ovar{dummy}. Use @oproc{IsSet} to determine if a given key is part of
a valid item. *)
value: V;
END;
Table(K: Key; V: Value) = POINTER TO ARRAY OF Entry(K, V);
Item*(K: Key; V: Value) = RECORD
key*: K;
value*: V;
END;
ItemArrayPtr*(K: Key; V: Value) = POINTER TO ARRAY OF Item(K, V);
>Но зачем самому писать на С, когда есть С++ мне не понятно
например, потому, что часть проекта — библиотека, которая должна использоваться как в цпп, так и в ansi c.
---
Understanding is not required. Only obedience.
← →
ketmar © (2008-05-30 22:47) [130]а, и уточнение генерика:
dict-: Dictionary.Dictionary(STRING, ArrayList.ArrayList(STRING));
Dictionary описан примерно так же, как Entry.
---
Understanding is not required. Only obedience.
← →
palva © (2008-05-30 22:54) [131]ketmar © (30.05.08 22:32) [127]
А почему про бабушку и дедушку в кавычках? Это тоже, типа, из меня цитата? :)
Бросьте! Я думаю, вы прекрасно понимаете что подразумевают, когда говорят о совместимости языков. И тыкать вас в те слова которые вы пропустили при цитировании не нужно. Просто большинство сишников через эти несовместимости давно прошли. И у них на тех местах, где у вас набитые шишки, уже привычные мозоли.
← →
guav © (2008-05-30 23:45) [132]> [129] ketmar © (30.05.08 22:43)
> ну скажи мне, какого ангела char * не совместим с void *,
> а? вот какое такое преобразование типа этому мешает?
Неявные преобразования в С++ - штука сильно хрупкая. Если из void* можно сделать char*, то здесь выполнение идёт по другому пути:const size_t blockSize = 4096;
struct binaryblockwrapper
{
binaryblockwrapper(void*, size_t = blockSize){} // accepts any data
};
struct superstring
{
superstring(char*){} // accepts NULL terminated string.
superstring(binaryblockwrapper){}
};
int _tmain(int argc, _TCHAR* argv[])
{
void *p = malloc(blockSize);
//...
superstring s(p);
return 0;
}
> вот цитата из stdlib"ы oo2c:
Entry(K: Key; V: Value) = RECORD
?
> Item*(K: Key; V: Value) = RECORD
?
← →
ketmar © (2008-05-30 23:57) [133]>[131] palva © (2008-05-30 22:54:00)
слив защитан.
>[132] guav © (2008-05-30 23:45:00)
>Если из void* можно сделать char*, то здесь выполнение идёт по другому
>пути:
убедил. перегрузка вообще идиотизм, и твой код отлично показывает, почему. %-)
>Entry(K: Key ; V : Value ) = RECORD
ограничение на допустимые типы, не обязательное. пример не особо удачный, но демонстрирует. просто взял первое, что под руку попалось, давно не писал на oo2c, ничего не завалялось другого.
>> Item * (K: Key; V: Value) = RECORD
звезда — это «export», модуль экспортирует идентификатор. Оберон потому что.
---
Understanding is not required. Only obedience.
← →
guav © (2008-05-31 00:22) [134]> [133] ketmar © (30.05.08 23:57)
> ограничение на допустимые типы, не обязательное.
Ага. Ну так в C++ шаблонах можно его прикручивать через шаблонное метапрограммирование, а кроме того в C++0x обещают concepts.
Вот как было бы в С++ : Если ключ не может быть хеширован, то для типа K не будет найдена специализация хеш-функции. Если значение не имеет семантику значения, то ни сможет быть инстанциирован сам хешмэп.
Т.е. concepts C++0x или то как их делают сейчас скорее нужно для более юзер-френдли ошибки компиляции, чем для предотвращения компиляции бреда.
Далее, какие преимущества у этих generics перед шаблонами ?
Если они как дотнетовские генерики - т.е. не могут быть специализированы, параметризируются только типами и подставление осуществляется в рантайме - то есть как преимущества, так и недостатки.
← →
ketmar © (2008-05-31 01:24) [135]>[134] guav © (2008-05-31 00:22:00)
>Далее, какие преимущества у этих generics перед шаблонами ?
прежде всего — вменяемый синтаксис, а не иероглифобредятина. этого достаточно. %-)
---
Understanding is not required. Only obedience.
← →
guav © (2008-05-31 01:51) [136]> [135] ketmar © (31.05.08 01:24)
Угловые скобки хуже круглых ? Имхо наоборот, угловые не путаются с функциями и приведениями.
← →
ketmar © (2008-05-31 02:54) [137]>[136] guav © (2008-05-31 01:51:00)
>Имхо наоборот, угловые не путаются с функциями и приведениями.
в Обероне и круглые не путаются. вообще, о синтаксисе цпп я могу много ругательств написать, но мне уже лень. %-)
---
Understanding is not required. Only obedience.
Страницы: 1 2 3 4 вся ветка
Форум: "Прочее";
Текущий архив: 2008.07.13;
Скачать: [xml.tar.bz2];
Память: 0.76 MB
Время: 0.017 c