Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
6-1190105366
ocean
2007-09-18 12:49
2008.07.13
Как успокоить брандмауэр?


15-1212048925
123-ий
2008-05-29 12:15
2008.07.13
Нередактируемый документ (Web)


15-1211922730
Германн
2008-05-28 01:12
2008.07.13
Вопрос про возможности ноутбуков


2-1213532252
WebSQLNeederrr
2008-06-15 16:17
2008.07.13
Как узнать количество картинок в документе TWebBrowser?


15-1211813808
БарЛог
2008-05-26 18:56
2008.07.13
php. случайный элемент числового множества





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский