Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];

Вниз

C++ vs C#   Найти похожие ветки 

 
Lang   (2007-11-25 11:42) [0]

Привет. Собираюсь изучать или с++ или с#. Киньте ссылку, где были бы толковые статьи о различии этих языков, а то на каждом форуме свое хвалят.
ps Просьба не удалять ветку, я не собираюсь разжигать споры, просто хучу почитать что-нить..


 
turbouser ©   (2007-11-25 11:48) [1]


>
> Lang   (25.11.07 11:42)
>  где были бы толковые статьи о различии этих языков

Это 2 абсолютно разных языка.
С тем же успехом можно perl с php сравнивать.

Лучше всего - изучай оба языка. И Delphi тоже :)


 
Zeqfreed ©   (2007-11-25 11:49) [2]

Я никак не могу понять, что значит «выучить язык». Ну точнее для меня это — ознакомиться с синтаксисом.

Знаешь синтаксис, ну и, возможно, интегрированные в язык типы данных — можешь написать программу. Библиотечные функции, классы и прочее познаются на опыте под конкретную задачу за минимальное время.

А вы что хотите?


 
Lang   (2007-11-25 11:54) [3]


> Лучше всего - изучай оба языка. И Delphi тоже :)

Спасибо, но уж как нибудь последовательно.хотя бы один...а то каша будет...


 
turbouser ©   (2007-11-25 11:58) [4]


> Lang   (25.11.07 11:54) [3]

Тогда начинай с C


 
Sergey Masloff   (2007-11-25 12:03) [5]

И с соответствующих конференций...


 
Kostafey ©   (2007-11-25 13:09) [6]

ИМХО начать с C/C++, потом и в C# проще будет и в Java.


 
Anatoly Podgoretsky ©   (2007-11-25 13:14) [7]

> Kostafey  (25.11.2007 13:09:06)  [6]

Не стоит тратить время и портить мозги.


 
SerJaNT ©   (2007-11-25 13:17) [8]

Да, пойди-ка лучше выпей пива


 
boa_kaa ©   (2007-11-25 13:27) [9]

Если бы я сейчас выбирал, с чего начинать, выбрал бы Delphi или C# (именно в такой последовательности). Только с литературой нельзя прогадать.

Почему не с C# первоначально? Сборка мусора мозги замусорит. Сначала за собой прибираться нужно научиться.

Насчет Java - не знаю ничего, кроме того, что три подхода делал, ниасилил :) Как увижу getCount, setCount, что значит свойство, так читать дальше не хоцца :(

Начинать с C++ - пытаться учиться плавать с кирпичом на шее: выплывешь - крутой пловец, а нет...

Начинать c C - неизвестно, как потом усвоишь ООП.

--------------------

Все вышесказанное - чистой имхо


 
Kostafey ©   (2007-11-25 13:35) [10]

> [7] Anatoly Podgoretsky ©   (25.11.07 13:14)
> Не стоит тратить время и портить мозги.

Это в смысле Delphi форэва, или в смысле лучше
сразу специализироваться на одном языке и глубоко
его изучить, или в смысле "по тебе метла плачет"? :)


> [9] boa_kaa ©   (25.11.07 13:27)
Как увижу getCount, setCount, что значит
> свойство, так читать дальше не хоцца :(

Просто надо привыкнуть :)


 
boa_kaa ©   (2007-11-25 13:36) [11]


> Просто надо привыкнуть :)

смысла не вижу. Qt круче :)


 
Anatoly Podgoretsky ©   (2007-11-25 13:39) [12]

> Kostafey  (25.11.2007 13:35:10)  [10]

Это в смысле нет нужды изучать С++, только потеря времени и порча мозгов, тяжело потом будет переучиваться на Си решетка.


 
Kostafey ©   (2007-11-25 13:47) [13]

> [12] Anatoly Podgoretsky ©   (25.11.07 13:39)
> Это в смысле нет нужды изучать С++, только потеря времени
> и порча мозгов, тяжело потом будет переучиваться на Си решетка.

Отчасти соглашусь.
Столько книжек по C++ прочитал, а на практике
(если не считать учебных программок) так его и не применил.

Что до тяжелого переучивания - вряд ли.
Когда учатся кататься на трехколесном велосипеде -
пересесть на двухколоесный - сложнее, падаешь часто,
а вот наоборот - пожалуйста.


> [11] boa_kaa ©   (25.11.07 13:36)
> смысла не вижу. Qt круче :)

Обзоры читал, сам не пользовал.
Спорить просто не хочу. :)


 
Anatoly Podgoretsky ©   (2007-11-25 13:49) [14]

> Kostafey  (25.11.2007 13:47:13)  [13]

С++ не, кроме Си подобного синтаксиса, не имеет ничего общего, это совсем другой язык. Это с Ява или Дельфи легко переходить - это подобные языки, но не с С++ и тем более с С


 
Kostafey ©   (2007-11-25 14:02) [15]

> [14] Anatoly Podgoretsky ©   (25.11.07 13:49)

Да кто спорит?
Просто в С++ работа с памятью оч. наглядна.
Если разобраться с этим в С++, то т.к. в С# таких заморочек нет,
ну или почти нет, будет еще проще, ну и плюс, как было сказано,
С-подобный синтаксис.


 
Anatoly Podgoretsky ©   (2007-11-25 14:06) [16]

> Kostafey  (25.11.2007 14:02:15)  [15]

У Явы тоже СИ подобный синтаксис. А про работу с указателями лучше забыть. А уж такие штука как указатель, на указатель, на указатель лучше и не знать.


 
Kostafey ©   (2007-11-25 14:09) [17]

> [16] Anatoly Podgoretsky ©   (25.11.07 14:06)
> У Явы тоже СИ подобный синтаксис. А про работу с указателями
> лучше забыть. А уж такие штука как указатель, на указатель,
> на указатель лучше и не знать.

:)
Не, лучше указатель на массив указателей на функции, возвращающие
и принимающие в качестве параметров по указателю :))


 
boa_kaa ©   (2007-11-25 22:23) [18]


> Kostafey ©   (25.11.07 14:02) [15]
> > [14] Anatoly Podgoretsky ©   (25.11.07 13:49)
>
> Да кто спорит?
> Просто в С++ работа с памятью оч. наглядна.
> Если разобраться с этим в С++, то т.к. в С# таких заморочек
> нет,
> ну или почти нет, будет еще проще, ну и плюс, как было сказано,
>
> С-подобный синтаксис.

У C# своих заморочек хватает и без указателей. Взять хотя бы boxing/unboxing автоматом. Если не разберешься сразу - багу можно сутками искать.

Зато если понимаешь, что когда делается, можно создавать код, который будет если и медленнее приплюснутого, то ненамного. При несравнимо более человечной среде разработки (я о MS VIsual Studio 2005). Ибо даже Qt дает очень сильную разминку пальцам при минимуме получаемого результата.


 
kaif   (2007-11-25 22:29) [19]

Праильные холивары звучат так:

Object Pascal vs C++
Java  vs  .NET+C#

Я лично (на сегодня) для себя выбрал Delphi для Windows-приложений и ASP.NET+C# для интранет-приложений.


 
Petr V. Abramov ©   (2007-11-25 22:34) [20]

> boa_kaa ©   (25.11.07 22:23) [18]
> Взять хотя бы boxing/unboxing автоматом.
ты че ругаешься :)))
можно поподробней?


 
boa_kaa ©   (2007-11-25 23:13) [21]


> Petr V. Abramov ©   (25.11.07 22:34) [20]

Самый безобидный пример:
public struct Point2D
{
public int x, y;
public void SetPoint(int ax, int ay)
{
x = ax; y = ay;
}
}

...

Point2D p;
p.SetPoint(1, 2);

object obj = p;

(Point2D)obj.SetPoint(3, 3);

что будет в p?


 
ferr   (2007-11-25 23:23) [22]

> [21] boa_kaa ©   (25.11.07 23:13)

музыкальный инструмент.


 
Petr V. Abramov ©   (2007-11-25 23:51) [23]

> boa_kaa ©   (25.11.07 23:13) [21]
> ferr   (25.11.07 23:23) [22]
музыкальных ниструментов с нецензурными названиями не знаю :)
а что там будет?
с смысле, в объекте пэ? :)))


> Point2D p;
> p.SetPoint(1, 2);
>
> object obj = p;
>
> (Point2D)obj.SetPoint(3, 3);


где находится?


 
DiamondShark ©   (2007-11-26 00:25) [24]


> музыкальных ниструментов с нецензурными названиями не знаю
> :)

Балалайка.


 
Petr V. Abramov ©   (2007-11-26 00:56) [25]

> DiamondShark ©   (26.11.07 00:25) [24]
мандолина.

P.S.
интересен ответ на [23]


 
boa_kaa ©   (2007-11-26 01:08) [26]


> Petr V. Abramov ©   (26.11.07 00:56) [25]
> > DiamondShark ©   (26.11.07 00:25) [24]
> мандолина.
>
> P.S.
> интересен ответ на [23]

Домашнее задание :) Читаем Рихтера и обалдеваем 8)


 
boa_kaa ©   (2007-11-26 01:19) [27]

Пересмотрел [21]. Там бяка совсем неправильная:
Point2D p; должен превратиться в Point2D p = new Point2D();

Чёт я совсем уже...


 
Иа   (2007-11-26 09:52) [28]


> Point2D p;
> p.SetPoint(1, 2);
>
> object obj = p;
>
> (Point2D)obj.SetPoint(3, 3);
>
> что будет в p?


Неглядя в Рихтера будет 1, 2. Я лично давным-давно избавился от зуда использовать struct без очень сильной необходимости. Как раз из-за подобных приколов. Кстати, на практике это ловится достаточно быстро.


 
Mystic ©   (2007-11-26 10:59) [29]

> Знаешь синтаксис, ну и, возможно, интегрированные в язык
> типы данных — можешь написать программу. Библиотечные функции,
>  классы и прочее познаются на опыте под конкретную задачу
> за минимальное время.


Синтаксис C++ знаете? Тогда разберитесь в следующем коде?

template <bool condition> struct STATIC_ASSERTION_FAILURE;
template <> struct STATIC_ASSERTION_FAILURE<true> { enum { value = 1 }; };

template<int value> struct static_assert_test{};

#define static_assert(condition)                             \
 typedef                                                    \
   ::static_assert_test                                     \
     <                                                      \
       sizeof                                               \
         (                                                  \
           ::STATIC_ASSERTION_FAILURE                       \
             <                                              \
               static_cast<bool>(condition)                 \
             >                                              \
         )                                                  \
     >                                                      \
 dummy_static_assert_typedef                                \

#endif

template <class T>
 class Default_Allocator
{
 static T* allocate() { return new T(); }
 static void deallocate (T* obj) { delete obj; }
};  

template <class T, Size block_count>
 class Blocklist
{
 private:
   Blocklist* next;
   T elements[block_count];
     
 public:
   Blocklist();
   ...
};

template <class T, Size size>
 struct Blocklist_By_Total_Size
{
 static const Size block_count  = 1 + (size - sizeof(Blocklist<T, 1>)) / sizeof(T);
 typedef Blocklist<T, block_count, empty, Allocator> type;
 static_assert(sizeof(type) <= size);
};


 
Zeqfreed ©   (2007-11-26 11:54) [30]

> Mystic ©   (26.11.07 10:59) [29]

При компиляции static_assert с false в качестве параметра будет выдаваться ошибка из-за неполного типа. Если condition будет true, то ошибки не будет, т.к. для true определена спецификация шаблона, которая генерирует законченный тип.

С шаблонами для аллокатора и списка все совсем просто. Default_Allocator использует встроенные в язык конструкции для выделения и освобождения памяти. На основе шаблона Blocklist можно генерировать классы для хранения и, видимо, обработки block_count штук экземпляров конкретного типа.

Blocklist_By_Total_Size по всей видимости определяет структуру, в которой поле block_count содержит кол-во элементов типа, которые смогут быть умещены в size байт памяти с учетом памяти под экземпляр Blocklist. Также из шаблона определяется уточненный тип Blocklist, который способен вместить вычисленное кол-во элементов, и выполняется статическая проверка, что памяти действительно хватит.

Возможно, где-то я понял что-то не точно, но примерно за полчаса я, как мне кажется, более-менее разобрался с кодом. Хотя, писать свой и разбираться в чужом это две разных задачи. А вообще, брать на слабо — некрасиво ;)


 
Mystic ©   (2007-11-26 12:44) [31]

> Zeqfreed ©   (26.11.07 11:54) [30]

Вообще-то распределение памяти я хотел вырезать, но... кое-что осталось. Это просто к тому, что в случае языка C++ мало знать синтаксис, может понадобится знать стандарт. И чтобы овладеть всеми тонкостями только языка нужно время.

Вот в данном случае данный пример не учитывает выравнивания, которое может быть сразу за элементами массива. Чтобы это учесть, можно изменить алгоритм расчета размера структуры так, чтобы она помещалась в отведенное пространство: вычислить размер без выравнивания, а потом рекурсивно уменьшать его на единицу до тех пор, пока не достигнем нужного размера...

Так что тут вопрос не только в синтаксисе языка :)


 
Cell Zeqfreed   (2007-11-26 13:01) [32]

Ну я с заданием то справился? :)


 
Mystic ©   (2007-11-26 13:05) [33]

В общем все правильно. Хотя об этом можно догадаться из названий :)


 
DiamondShark ©   (2007-11-26 14:07) [34]


> Как раз из-за подобных приколов.

Прикол был, когда твой папа тебя делал.

Представь на месте структуры int, и подумай, как он должен себя вести.
Особенно интересен случай, когда забоксеный int создан из литерала.

Потом вспомни, что структ от инта (как вообще от любого value type) абсолютно ничем (кроме размера) не отличается, и удавись.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.044 c
4-1181046695
nirvan
2007-06-05 16:31
2007.12.23
Считать текст с блокнота


15-1195700635
Slider007
2007-11-22 06:03
2007.12.23
С днем рождения ! 22 ноября 2007 четверг


15-1195899223
Tirael
2007-11-24 13:13
2007.12.23
есть ли какие нибудь роботы для скачивания файлов?


2-1195943414
Бэтман
2007-11-25 01:30
2007.12.23
Вопрос по компоненту RadioGroup


9-1164018658
Ярослав Ерёменко
2006-11-20 13:30
2007.12.23
Алгоритм отрисовки тайлов методом альфа-блендинга





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский