Программирование на C#

Serge

Ословед
Програмирование на языке C#


C# (C Sharp, произносится си-шарп) — объектно-ориентированный язык программирования, разработанный в 1999—2000 годах в компании Microsoft как основной язык разработки приложений для CLR платформы Microsoft .NET Framework.


Подробнее о .Net Framework можно узнать в этой теме http://city.is74.ru/forum/index.php?
 
Последнее редактирование:

    Atheist

    очки: 13
    Нет комментариев

    PHOENIX_DIVUS

    очки: 37
    Нет комментариев

Crammer

Ословед
Вопрос, чем С# отличается от С++ ? Какие у него приемущества и недостатки относительно С++ ?
 
Ш

Штурман

Вопрос, чем С# отличается от С++ ? Какие у него приемущества и недостатки относительно С++ ?

1. C# не поддерживает функциональную парадигму и лишен множества небезопасных средств C++.
2. Приемущество C# в библиотеке классов FCL, большей безопасности (за счет исключения некоторых свойств и конструкций) и интерпретируемость (совместно с CTS и CLS обеспечивающие совместную работу с другими языками)... недостатки, как и всегда, связаны с достоинствами - интерпретируемость, уменьшает быстродействие... обрезанность, уменьшает мощность языка... а FCL связывает c .NET Framework.
 
На C++ программы работают быстрее и эффективнее.

Но для большенства задачь это не имеет значение и выбирается С# как язык, разработка на котором в разы быстрее. А вообще товарищу Crammer74 нужно дать по шее за разжигательство межнациональной розни. Не знаешь что такое — иди изучай манускрипты.
 
Ш

Штурман

есть противоположное мнение. :shuffle: программы на C# работают быстрее на 5-10% за счет учета железной конфигурации машины при компиляции. впрочем на современных компьютерах эта разница практически неуловима и не имеет значения. ссылку на статистику не приведу, не упомню уже где видел.

один из несомненных минусов - .Net программы с "окошками" бешено жрут память. :cry2:

Вы хочете сказать, что Intel C++ Compiler или Intel Fortran Compiler хуже оптимизируют код к платформе?...

Сайт сравнения производительности компиляторов разных языков:
http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=csharp&lang2=gpp
Разница для startup в 20 раз выглядит очень печально(((
http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=csharp&lang2=java
а с Java уже более интересно(да и проигрыш regex-dna связан с медленным foreach)... но это Mono, думаю MS csc/clr будут быстрее.

И еще Programming Languages that are Loved:
http://bluebones.net/2004/04/programming-languages-that-are-loved/
 

Serge

Ословед
я неоднократно сталкивался с различными тестами на профильных форумах: в конечном итоге все сводилось к необходимости оптимизации кода C# для получения результатов сравнимых с C++. А стартап естественно медленнее в силу архитектуры .Net.

ЗЫ: Mono имеет довольно отдаленное отношение к MS версии .Net, на котором пишется наверное 99,9% .Net приложений.
 
Ш

Штурман

я неоднократно сталкивался с различными тестами на профильных форумах: в конечном итоге все сводилось к необходимости оптимизации кода C# для получения результатов сравнимых с C++. А стартап естественно медленнее в силу архитектуры .Net.

ЗЫ: Mono имеет довольно отдаленное отношение к MS версии .Net, на котором пишется наверное 99,9% .Net приложений.

Завтра отойду от пива и постараюсь переписать свою квалификационную работы с Fortran-а 95 на C#... хотя из-за обильного использования векторизации, FORALL и WHERE это будет сложная задача.

Статья в тему:
http://www.gotdotnet.ru/LearnDotNet/CSharp/513899.aspx
 
статья интересная, но почитайте комменты...

Для тебя идиотские доводы в пользу ненужности оптимизации и в пользу того, что С# — производительный язык — одно и то же? Нет ощущения путаницы мягкого с теплым?
 

Serge

Ословед
Для тебя идиотские доводы в пользу ненужности оптимизации и в пользу того, что С# — производительный язык — одно и то же? Нет ощущения путаницы мягкого с теплым?
вообще-то в комментах есть критика методик и кода автора статьи...

вот еще интересная полемика :D
http://www.gotdotnet.ru/Forums/Common/305240.aspx

Резюмирую: при грамотном программировании C# и C++ могут работать на равных, но у C# иногда появляется преимущество в быстродействии за счет автоматической оптимизации JIT под конкретное железо.

ЗЫ: давно собираюсь устроить подобное тестирование, но пока подходящей современной машинки нет.
 
чем вы сейчас и занимаетесь )

Приходится. Serge высказывает свое мнение о производительности, которое в корни противоречит здравому смыслу. Он наверняка сам не тестирол, только в книжке прочел, где это постулируется. На самом деле достаточно посмотреть на асамблерный фрейм вызова процедуры под 64-х битным фреймворком, что бы понять что дотНет и производительность — вещи не совместимые. Я вполне понимаю, на сколько хорош и удобен С#, но почему то многие делают какие то странные выводы из этого удобства.
 

    piGa

    очки: -4
    Вот тебе мой ответ!

Serge

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

Давай займемся этим вместе ;)

Вот в перемешку асемблерный код и код C#, такой, какой он выдается в оке дебага. Опции проекта — релиз.
Код:
        private void button1_Click(object sender, EventArgs e)
        {
            colorDialog1.ShowDialog();
[COLOR="DarkOrchid"]00000000  push        edi  
00000001  push        esi  
00000002  sub         esp,24h 
00000005  xor         eax,eax 
00000007  mov         dword ptr [esp+0Ch],eax 
0000000b  mov         dword ptr [esp+1Ch],eax 
0000000f  mov         dword ptr [esp],edx 
00000012  mov         esi,ecx 
00000014  cmp         dword ptr ds:[00918C5Ch],0 
0000001b  je          00000022 
0000001d  call        79440E96 [/COLOR]
00000022  mov         ecx,dword ptr [esi+00000144h] 
00000028  cmp         dword ptr [ecx],ecx 
0000002a  call        7AA20978 
0000002f  nop              
            if (colorDialog1.Color == Color.Blue)
00000030  mov         ecx,dword ptr [esi+00000144h] 
00000036  lea         edx,[esp+4] 
0000003a  cmp         dword ptr [ecx],ecx 
0000003c  call        7AA209F0 
00000041  lea         ecx,[esp+14h] 
00000045  call        7A1C06F8 
0000004a  lea         eax,[esp+4] 
0000004e  push        dword ptr [eax+0Ch] 
00000051  push        dword ptr [eax+8] 
00000054  push        dword ptr [eax+4] 
00000057  push        dword ptr [eax] 
00000059  lea         eax,[esp+24h] 
0000005d  push        dword ptr [eax+0Ch] 
00000060  push        dword ptr [eax+8] 
00000063  push        dword ptr [eax+4] 
00000066  push        dword ptr [eax] 
00000068  call        7A1AA164 
0000006d  mov         edi,eax 
0000006f  test        edi,edi 
00000071  je          0000007F 
                MessageBox.Show("Синий!");
00000073  mov         ecx,dword ptr ds:[02273084h] 
00000079  call        7A61D820 
0000007e  nop              
        }
[COLOR="Purple"]0000007f  nop              
00000080  add         esp,24h 
00000083  pop         esi  
00000084  pop         edi  
00000085  ret         4 [/COLOR]
Фиолетовым я выделил фрейм функции.

Посмотрим теперь код, сгенерированные дельфи:
Код:
Unit1.pas.27:procedure TForm1.Button1Click(Sender: TObject);
Unit1.pas.28: begin
[COLOR="Purple"]00458794  push    ebx
00458795  mov     ebx,eax[/COLOR]
Unit1.pas.29: ColorDialog1.Execute;
00458797  mov     eax,[ebx+$00000360]
0045879D  mov     edx,[eax]
0045879F  call    dword ptr [edx+$3c]
Unit1.pas.30: if ColorDialog1.Color = clBlue then
004587A2  mov     eax,[ebx+$00000360]
004587A8  cmp     [eax+$60],$00ff0000
004587AF  jnz     $004587bb
Unit1.pas.31: ShowMessage('Синий!');
004587B1  mov     eax,$004587c8
004587B6  call    ShowMessage
Unit1.pas.32: end;
[COLOR="#800080"]004587BB  pop     ebx
004587BC  ret [/COLOR]
Фиолетовым я выделил фрейм функции.

Стоит ли обяснять что это значит? Не понимаю, как данный вызов можно соптимизмровать, что бы он стал быстрее на заявленные 5-10%. Я конечно понимаю, в данном примере производительность не нужна, но я больше хотел показать во что выливается обыкновенный if и вызов функции на дотнете. На платформе 64х все еще печальнее, примерно в 2 раза.

ЗЫ. Ты хоть раз видел в асамблерном листинге дотнета хоть одну инструкцию MMX или подобную? Я честно — не смотрел, просто интересно насчет всемогущей отпимизации под процессор.
 

Serge

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

gureedo

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