Ознакомившись с доводами относительно причин популярности java
стало совсем непонятно как C# стал так популярен?
Ну меня только одна версия, простой и бесплатный компилятор(на 2001 год) с набором ado.net и Winforms, плюс IDE.
В остальном явных преимуществ не видно.
Здравствуйте, vaa, Вы писали:
vaa>Ознакомившись с доводами относительно причин популярности java vaa>стало совсем непонятно как C# стал так популярен?
Причина популярности C#, заключается преимущественно в популярности платформы .NET, сам по себе язык не очень интересен.
.NET в отличие от Java изначально не гнался за мультиплатформенностью, поэтому существенно выигрывал в плане производительности и обширному наличию библиотек (пускай и прибитых местами гвоздями к Windows), при этом пропагандировал мультиязыковость, в итоге много кто сначала переполз на VB.NET/J#/MC++, а потом и на C#.
Также немалый вклад для популяризации (как платформы) внёс удобный inter-оп с "внешним миром" (DllImport и т.п.)
Здравствуйте, 4058, Вы писали:
4>.NET в отличие от Java изначально не гнался за мультиплатформенностью, поэтому существенно выигрывал в плане производительности и обширному наличию библиотек (
насчет производительности спорно. может в 2001 году так и было. хотя скорее это из-за печально известного гуя джавы.
он действительно был слабоват. ну и холодный старт больное место сложного приложения на джава.
ну а по кол-ву бесплатных библиотек тут джава на порядок лучше.
Здравствуйте, 4058, Вы писали:
4>Причина популярности C#, заключается преимущественно в популярности платформы .NET, сам по себе язык не очень интересен.
Не могу согласиться. Язык, конечно, твёрдо стоит ногами в платформе, но он интересен именно как язык.
Неспроста Java вышла из комы и начала развиваться как язык именно под влиянием C#.
И до сих пор при прочих равных Шарп как язык выигрывает у той же Java с разгромным счётом.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, vaa, Вы писали:
vaa>Здравствуйте, 4058, Вы писали:
4>>.NET в отличие от Java изначально не гнался за мультиплатформенностью, поэтому существенно выигрывал в плане производительности и обширному наличию библиотек (
vaa>насчет производительности спорно. может в 2001 году так и было. vaa>хотя скорее это из-за печально известного гуя джавы.
Не только, у Java в целом производительность была ниже (сейчас уже не знаю), т.к. изначально делалась ставка на мультиплатформенность.
vaa>он действительно был слабоват. ну и холодный старт больное место сложного приложения на джава.
Холодный старт больное место для любого крупного приложения если присутствует JIT-компиляция.
vaa>ну а по кол-ву бесплатных библиотек тут джава на порядок лучше.
Стоит учитывать не только кол-во, но и качество. Многие полезные лайбы обычно оперативно портируются с Java на .NET, например: iText -> iTextSharp, Bouncy Castle, POI -> NPOI ...
P.S. Ну и как язык, C# изначально можно было рассматривать как Java "на стеройдах".
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, 4058, Вы писали:
4>>Причина популярности C#, заключается преимущественно в популярности платформы .NET, сам по себе язык не очень интересен. S>Не могу согласиться. Язык, конечно, твёрдо стоит ногами в платформе, но он интересен именно как язык. S>Неспроста Java вышла из комы и начала развиваться как язык именно под влиянием C#.
Я говорю о том, что популярность C# во многом обусловлена его платформой, если бы на старте это был просто язык, со скудным набором лайб, шансов на успех было-бы существенно меньше.
S>И до сих пор при прочих равных Шарп как язык выигрывает у той же Java с разгромным счётом.
Здравствуйте, vaa, Вы писали:
vaa>насчет производительности спорно. может в 2001 году так и было. хотя скорее это из-за печально известного гуя джавы.
Жаба догонит шарп по произоводительности, когда там появятся ValueType'ы — без них даже элементарынми GUID'ами куча засирается. Full GC в жабе — это боль. Собственно проблема в том, что производительность GC сильно зависит от кол-ва живых объектов. Да и отсутствие всяких Point, Vector3 и т.д. не добавляют производительности — без них всякие гуёвые задачи — грусть/тоска.
Собственно
А)
struct Point {public int X, Y}
void A(ref Point point) {}
Б)
class Point {public int X, Y}
void A(Point point) {}
А и Б — семантически почти одно и тоже, но при этом очень-очень разные вещи по производительности. На тысяче точек это слабо заметно, но если точек миллион, то жабе становится очень грустно. С гуидами тоже самое.
Ещё жабе сильно поможет добавление unsafe кода.
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, Философ, Вы писали:
Ф>А и Б — семантически почти одно и тоже, но при этом очень-очень разные вещи по производительности. На тысяче точек это слабо заметно, но если точек миллион, то жабе становится очень грустно. С гуидами тоже самое.
Ну, джава гордица своим JIT и ескейп-анализом. Он, предположительно, должен спасать от просада производительности с Point.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, vaa, Вы писали:
vaa>Ознакомившись с доводами относительно причин популярности java vaa>стало совсем непонятно как C# стал так популярен? vaa>Ну меня только одна версия, простой и бесплатный компилятор(на 2001 год) с набором ado.net и Winforms, плюс IDE. vaa>В остальном явных преимуществ не видно.
Я думаю, что из-за платформы .NET, как самый основной для нее язык. Я понимаю, что .NET вроде как мультиязычный и тем не менее, C# — это самый родной все же для нее язык, не считая своего ассемблера, конечно. При этом в .NET ниже порог вхождения (по крайней мере был ниже) по сравнению с Java. Ну и сам язык был достаточно простой и неплохо спроектированный, можно сказать даже с учетом Java, а также успеха Delphi, так как главный архитектор Хейлсберг в свое время создавал Delphi.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Философ, Вы писали:
Ф>>А и Б — семантически почти одно и тоже, но при этом очень-очень разные вещи по производительности. На тысяче точек это слабо заметно, но если точек миллион, то жабе становится очень грустно. С гуидами тоже самое. S>Ну, джава гордица своим JIT и ескейп-анализом. Он, предположительно, должен спасать от просада производительности с Point.
Имею некоторый опыт с Java 8 — не бог весь что, но другого нам не завезли (не знаю почему). Иногда ескейп-анализ работает. Добавляешь буквально несколько строк уже не работает. Да и само написание подразумевает, что у тебя где-то есть набор Point'ов, а значит в жабе они обязательно будут в куче лежать, в месте с описателем типа рядом сданными, а в шарпе они вполне могут лежать на стеке, или даже в неуправляемой памяти.
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, Философ, Вы писали:
Ф>Имею некоторый опыт с Java 8 — не бог весь что, но другого нам не завезли (не знаю почему). Иногда ескейп-анализ работает. Добавляешь буквально несколько строк уже не работает.
В дотнете схожая проблема, хоть и не в таком масштабе. Любое лишнее движение и здравствуй боксинг. Там, правда, сей факт можно отследить статически, но глазами это сделать порой совсем непросто.
Здравствуйте, vaa, Вы писали:
vaa>Ознакомившись с доводами относительно причин популярности java vaa>стало совсем непонятно как C# стал так популярен? vaa>Ну меня только одна версия, простой и бесплатный компилятор(на 2001 год) с набором ado.net и Winforms, плюс IDE. vaa>В остальном явных преимуществ не видно.
Популярность у .NET и C# появилась не сразу, а росла постепенно
1) Во времена .NET 1.0 основными драйверами популярности были: WinForms — визуальный дизайнер формочек аля делфи, и практически насильное пересаживание программистов VB на VB.NET
2) Когда вышел .NET 2.0 основным драйвером популярности стал WebForms. Microsoft активно продвигал идею, что приложения в вебе можно собирать как приложения на десктопе, и у многих это даже получалось.
3) А потом появился .NET 3.5 и C# 3.0 в котором появилось функциональное программирование Linq и C# в один момент переплюнул все существующие на тот момент языки, кроме того linq настолько упростил работу с данными, что создание корпоративных приложений стало довольно простой задачей.
4) Следующий удар — async в C# 5.0 и .NET 4.5, с этого момента преимущество C# как языка стало неоспоримым, все языки начали копировать фичи из C#, но развитие тормозилось прибитым к Windows .NET FW
5) После долгих мучений с платформой и компилятором появились .NET 3.1 и C# 8, которые стали первым по-настоящему кроссплатформенным релизом. Язык C# собрал все возможности современных языков — интерполированные строки, индексы и слайсы, паттерн-матчинг, а также получил возможности оптимизации программ за счет выделения памяти в стеке, а не в куче.
На сейчас все языки пытаются стать похожими на C#.
G>4) Следующий удар — async в C# 5.0 и .NET 4.5, с этого момента преимущество C# как языка стало неоспоримым, все языки начали копировать фичи из C#, но развитие тормозилось прибитым к Windows .NET FW
Я немножко ревьюил код чуваков, которые к нам устраивались. Не видел ни одного человека, который бы понимал как работают async/awate. Людей мы нанимали тем ненемее а потом я правил баги и вызванивал одного чувака, чтобы рассказать что он сделал не так. Притом там категорическое непонимание того что это такое. И кстати, разбирать дампы с дедлоками после async'ов — это пипец! Оно не упрощает жизнь, оно её усложняет.
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>В дотнете схожая проблема, хоть и не в таком масштабе. Любое лишнее движение и здравствуй боксинг. Там, правда, сей факт можно отследить статически, но глазами это сделать порой совсем непросто.
фишка в том, что такие места МОЖНО отследить статически.
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, Философ, Вы писали:
Ф>Здравствуйте, gandjustas, Вы писали:
G>>4) Следующий удар — async в C# 5.0 и .NET 4.5, с этого момента преимущество C# как языка стало неоспоримым, все языки начали копировать фичи из C#, но развитие тормозилось прибитым к Windows .NET FW
Ф>Я немножко ревьюил код чуваков, которые к нам устраивались. Не видел ни одного человека, который бы понимал как работают async/awate.
Я на собеседовании спрашиваю. Кто не понимает совсем — не берем.
Ф> Оно не упрощает жизнь, оно её усложняет.
По сравнению с чем?
Я врукопашную писал state machine для IAsyncResult во времена .NET 2.0 и готов поспорить что async\await сильно упрощает жизнь.
Вообще любая асинхронщина с async\await сильно проще чем эквивалентный асинхронный код без этих операторов.
Здравствуйте, gandjustas, Вы писали:
G>Я на собеседовании спрашиваю. Кто не понимает совсем — не берем.
А смысл!? Тех кто хорошо понимает что это такое исчезающе мало, при этом среди тех кто не понимает достаточно людей способных решать задачи и разобраться в существующем.
Ф>> Оно не упрощает жизнь, оно её усложняет. G>По сравнению с чем?
По сравнению с рукопашной асинхронщиной.
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, Философ, Вы писали:
Ф>Здравствуйте, gandjustas, Вы писали:
G>>Я на собеседовании спрашиваю. Кто не понимает совсем — не берем.
Ф>А смысл!? Тех кто хорошо понимает что это такое исчезающе мало, при этом среди тех кто не понимает достаточно людей способных решать задачи и разобраться в существующем.
А вы денег платите и будет достаточно.
Ф>>> Оно не упрощает жизнь, оно её усложняет. G>>По сравнению с чем? Ф>По сравнению с рукопашной асинхронщиной.
Видимо вы ни разу не занимались рукопашной асинхронщиной.
Здравствуйте, gandjustas, Вы писали:
G>>>По сравнению с чем? Ф>>По сравнению с рукопашной асинхронщиной. G>Видимо вы ни разу не занимались рукопашной асинхронщиной.
Скажем так, я никогда не видел ничего сложно в том, чтобы напихать задач в тредпул и подождать их завершения. С появлением TPL это стало несколько удобнее, особенно из-за того что таски стало очень удобно Join'ить между собой. У меня никогда не возникало проблем с тем чтобы одновременно забрать данные из БД и дождаться результата WebRequest'а. Даже отсутствие тасок до 4-го дотнета.
Сложности появились в дотнете 4.5 вместе со словом await. Разобраться в том, что просиходит в принесённом дампе стало крайне сложно.
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, vaa, Вы писали:
vaa> Ознакомившись с доводами относительно причин популярности java vaa> стало совсем непонятно как C# стал так популярен? vaa> Ну меня только одна версия, простой и бесплатный компилятор(на 2001 год) с набором ado.net и Winforms, плюс IDE. vaa> В остальном явных преимуществ не видно.
Все очень просто. Мода и тренды. Еще "крутость". Поясню. Сделали язык на платформе, под которую легко писать с название созвучным с языком на котором "круто" писать (да, это я про C/C++). Все.
з.ы. в подтверждение своего тезиса скажу, что даже тут уже дотнечики жалуются на падающую популярность и набирающий обороты JS (будь он проклят). В смысле, это очередная итерация — еще проще и тоже круто (ну, сайты же)
Здравствуйте, Философ, Вы писали:
Ф>Я немножко ревьюил код чуваков, которые к нам устраивались. Не видел ни одного человека, который бы понимал как работают async/awate. Людей мы нанимали тем ненемее а потом я правил баги и вызванивал одного чувака, чтобы рассказать что он сделал не так. Притом там категорическое непонимание того что это такое. И кстати, разбирать дампы с дедлоками после async'ов — это пипец! Оно не упрощает жизнь, оно её усложняет.
Когда те же люди пишут без async/await, дедлоки плодятся сами собой, а порой разобраться вообще шансов нет, только переписать.