Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.13;
Скачать: CL | DM;

Вниз

Как писать на С++, а не на Дельфи?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.79 MB
Время: 0.03 c
15-1211874057
Tualatin
2008-05-27 11:40
2008.07.13
ресурсы (да они самые)


15-1212246350
miklenew
2008-05-31 19:05
2008.07.13
Как получить экземпляр класса зная его handle


15-1211889596
map
2008-05-27 15:59
2008.07.13
Какрта в программе


15-1211809617
Альф
2008-05-26 17:46
2008.07.13
Инсталятор с возможностью тихой установки


15-1211975218
SergP
2008-05-28 15:46
2008.07.13
test