Здравствуйте, Anton Batenev, Вы писали:
AB>А нельзя просто:
AB>
AB>class SomeClass<T>
AB>{
AB> public T Property1;
AB> public T Property2;
AB>}
AB>
Почему нельзя? Можно. Но это будут члены класса торчащие наружу. В общем случае такой подход считается моветоном. Ну и кроме того, для свойств можно определять скоуп аксессоров: public T Property1 { get; private set; }
Hi Sinclair
AV>>Надо было разработать Application server. Причем под несколько платформ и чтобы приложения (или их части) можно было писать на различных языках. S>Каких именно?
Я уже писал. На данный момент на этом сервере крутятся приложения написанные на .NET, Java, Python, Ruby и старые знакомые C/C++. Еще заказчик пробует Ocaml. Есть еще биндинг для Перла.
S>Неужели у вас серъезную долю рынка "частей приложений" занимают языки, с которых нет компиляции в .Net? S>Вообще, желание писать компоненты сервера приложений на неуправляемой платформе в 2009 году — это уже клиника.
А на чем ты предлагаешь писать сервер, который может работать взаимодействовать с кодом на любом языке? Тем более, что стоит учитывать, что проект начинался не в 2009 году, а в 2005.
AV>> Но даже если ограничиться только одной виндой, то на .NET все равно не получается вытянуть. Потому что получался бы двойной интероп. .NET->C->Other lang. S>Это место непонятно. Во-первых, непонятно, почему интероп "двойной". В дотнете интероп происходит только при unmanaged-вызове. Один раз. Либо ноль раз, если call target — менеджед.
ОК. Еще раз. Вот у тебя сервер на .NET. Тебе надо дернуть код написанный на Java или Питон. Какие переходы будут сделаны? Из .NET в unmanaged. И из unmanaged в Java или Питон. Так? Вот тебе и двойной интероп. В нашем случае только один переход между managed и unmanaged.
S>И не хватало бы скорости.
Да, скорости было бы в притык к требованиям. Проверяли. Да и с переносимостью кода между системами до сих пор не все так прекрасно как хотелось бы. Mono далеко не всегда спасает. Тем более в то время когда начинался проект.
AV>>А если добавить и другие платформы, то дело совсем плохо. Потому что даже Mono не спасал. S>С другими платформами вопрос достаточно тонкий. S>Поэтому сервера приложений сейчас в основном пишут на java.
И как у них с вызовами кода из других языков, которые не изпользуют JVM?
S>Если когда-нибудь MS решится всерьез профинансировать моно, то джаву это убъет.
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>>>1. Он слишком низкоуровневый. Почти такой же низкоуровневый для IL, каким является Си (без плюсов) для ассемблера. Есть мнение, что многим разработчикам, такая низкоуровневость только вредит. C>>oO Вы шутите? Скажите, что шутите... и не пугайте больше так.
KV>А что пугает?
Утверждение про низкоуровневость С#. Если С# низкоуровневый, то я даже и не знаю какой язык считать высокоуровневым. Разве что, упомянутый уже Пролог...
KV>>>3. Он мешает развиваться дальше. C>>Каким образом мешает-то? Наоборот, я уверен, многие про те же лямбды узнали только благодаря С#.
KV>На мой взгляд, по перечисленным в исходном сообщении причинам, он создает иллюзию отсутствия необходимости в дальнейшем развитии разработчика при том, что арсенал средств, предоставляемых шарпом не такой уж и богатый.
Любой полный по Тьюрингу язык может создавать такую иллюзию. И что с того?
KV>>>Те, кто в этой теме будет особо рьяно защищать шарп — помяните мое слово: пройдет 10 лет (хотя, скорее всего — и того меньше) и вы станете такими же бухтящими старперами (я не про возраст) коими сейчас являются некоторые из местных оголтелых плюсников. C>>10 лет назад я был "оголтелым плюсником"
KV>А какие лет 10 назад были альтернативы?
Джава.
KV>>>Ну вот собственно и все C>>Так а чего "слазить надо"? Я так и не понял...
KV>Да я видимо рановато обронил эту фразу, мне еще тяжело четко сформулировать свою т.з., при всей моей словоохотливости Последний год, я довольно много времени посвящал изучению различных средств, отсутствующих/отсутствовавших/неразвитых в шарпе. KV>Метапрограммирование, вывод типов,
С# 3, больше в С# 4.
KV>неизменяемые объекты,
С# 4
KV>динамическая типизация,
С# 4
KV>азы функционального программирования, и т.п.
Функциональные элементы были с самой первой версии и сильно развились с тех пор. Конечно многого еще нету, но не забывайте, что это все-таки императивный язык и его не так уж просто смешать с функциональщиной. Хотя F# в этом плане заметно дальше продвинулся.
KV>Столько средств, позволяющих действительно улучшить свой код, сделать его более эффективным, читаемым...
У каждого языка есть свои плюсы и минусы. С# это компромисс (и удачный) между рациональной функциональностью и объективной эффективностью. При всем при том он еще и массово распространен (в отличии от того же Nemerle или F#, к примеру). JIT архитектура позволяет делать очень интересные вещи (см. SpecSharp, Aspect#), сохраняя при этом производительность, присущую компиллируемым языкам и эффективный полноценный интероп с неуправляемым кодом.
Да, в следующей версии фреймворка появится DLR и дотнет наконец получит возможность выполнения интерпретируемых языков (*машет рукой Шеридану*)...
KV>Средств, о существовании которых, пару лет назад, я даже и не подозревал, считая что шарп полностью покрывает все мои потребности. И теперь, когда мне приходится писать или читать код на нем, я ощущаю неслабый дискомфорт от периодической нехватки/неразвитости в шарпе тех или иных языковых средств, с которыми я успел познакомиться. Я написал не так уж и много кода за последние несколько лет, по сравнению с профессиональными программерами, т.к. в силу своей специализации я все больше читаю, нежели пишу. Но сейчас я отчетливо вижу в своем старом коде места, которые я бы переписал на том же шарпе, куда более грамотно и качественно под влиянием других языков.
Естественно, С# не отменяет необходимости изучения других языков и даже в большей мере — парадигм программирования для саморазвития, как программиста. Мне, например, было очень интересно почитать про Erlang. Но при этом я понимаю, что С# таков, каков он есть в 3.0 с лихвой покрывает все мои потребности и даже более — я все еще не использую язык на все 100%, я более чем уверен в этом.
KV>А значит время на их изучение было потрачено не зря и об этом стоит рассказать здесь. Вдруг это поможет кому-нибудь еще открыть для себя новые горизонты развития?
Но я все еще не понимаю зачем "нужно слазить с С#", а главное — куда. Но да ладно, не берите в голову...
Здравствуйте, gandjustas, Вы писали:
G>.NET стандартизоват ISO? Я думал стандартизацией .NET ecma занимается.
C# и CLR/CLI стандартизованы в ECMA и ISO.
G>Да и стандартизовано там только язык — C#, рантайм — CLR и вроде как связанная с ней часть библиотеки, называемая CLI.
Об этом я и говорю.
C>>Так что почти любая программа на .NET на практике привязана к Windows. G>Вы так говорите как-будто mono не существует и Silverlight не запускается под маком.
Не существует и не запускается.
Официального Silverlight под Линукс нет, и никто не гарантирует, что версия Silverlight под Мак не исчезнет через полгода. Это называется "кроссплатформенность от MS".
G>Не надо выдавать желаемое за действительное.
Это реальность.
KV>Ну, чтобы не городить кучу if'ов вместо switch, например
Что-то я не понял примера. При чём здесь switch-то? Он и раньше был, пусть и в C# будет, не мешает. А вот зачем городить в C# что-то ещё кроме того, что уже есть в C++?
Здравствуйте, gandjustas, Вы писали:
G>>>>>Ага, FF уже научился использовать Accelerators C>>>>Зачем? G>>>Не поверите, затем что они работу в инете ускоряют. CC>>Гм. И каким образом? G>Банально меньше кликов и более быстрый доступ к нужной инфе.
How many steps does it take with your current browser to map an address, translate a word, or perform other routine tasks online? Until now it was likely a series of cutting and pasting information from one webpage to another. Now there's a better way. The new Accelerators in Internet Explorer 8 help you quickly perform your everyday browsing tasks without navigating to other websites to get things done. Simply highlight text from any webpage, and then click on the blue Accelerator icon that appears above your selection to obtain driving directions, translate and define words, email content to others, search with ease, and more. For example, with the "Map with Live Maps" Accelerator in Internet Explorer 8, you can get an in-place view of a map displayed directly on the page.
Зачем все это? В тех редких случаях, когда мне нужно взять кусок текста с одного сайта и использовать его на другом (что случается хорошо, если раз в месяц) гораздо проще сделать банальный копи-пейст, т.к. сайты все-равно будут открыты в разных закладках.
Зато конечно это ж, блин, так удобно, когда реклама моргает на каждом шагу, попапы выпрыгивают и прочая рекламная дрянь.
Вот скажите еще, раз в ие8 такой классный юзабилити... как мне его настроить, чтоб закладки открывались: 1) в три ряда, 2) чтоб загруженные на фоне подсвечивались, 3) чтоб новая вкладка, открываемая по клику по урлу средней кнопкой мыши, открывалась сразу за текущей вкладкой, а не где-то у черта на куличках?..
Здравствуйте, Константин Б., Вы писали:
КБ>Здравствуйте, Sinclair, Вы писали:
S>>Здравствуйте, Константин Б., Вы писали: КБ>>>Ага, понятно. В таких случаях лучше использовать Dictionary. S>>Ок, то есть вопрос пригодности кортежей для работы с данными можно считать закрытым, так?
КБ>Можно. Вообще тут больше обсуждался вопрос необходимости объектов и ORM.
Для динамических языков вообще мало разницы между словарями и объектами, в джаваскрипте например вообще такой разницы нету.
Здравствуйте, gandjustas, Вы писали:
G>Сила Моно состоит именно в десктопных приложениях, там где реально нужна кроссплатформенность. А для десктопа 100% фич .NET и не нужно, даже MS это понимает создавая .NET Client Profile (20 метров всего)
Кстати, а где Вы нашли этот самый профаил на 20 метров?
Здравствуйте, Кывт, Вы писали:
G>>А что вы удивляетесь. Такой подход среди "приплюснутых" программистов встречается очень часто. Понавыдумывают себе проблем и геройски их решают с помощью C++. А самые продвинутые в С++ даже не знают что эти проблемы уже решены кучей других способов кроме написания своего кроссплатформенного фреймворка.
К>Если ты такой умный, можешь просветишь нас, как правильно решать проблемы?
Могу, если вам нужна кроссплатформенность, то лучше смотреть в сторону веба, а не писать кроссплатформенный фреймворк на С++.
Здравствуйте, FirstStep, Вы писали:
VR>>в том-то и дело, с доведенными до ума ASP.NEt MVC, Azure Services, ADO.NEt Entity Framework, WCF (думаю, в течении этого года реально), дотнет(C#/F#) позволит предсказуемо качественно решать ВЕСЬ спектр задач для разработчиков (от простых сайтов до сложнейших систем)
FS>Ваша неправда про ВЕСЬ спектр. Простейший контрпример: программа-инсталлятор на C#,
Запускается бутстраппер на 277 кб, который скачивает все необходимое и ставит, затем через тот же COM-интероп цепляется дотнет сборка(и) и продолжается инсталляция.
Здравствуйте, Roman Odaisky, Вы писали:
L>>>Немного не так: он привязан к 95% установленным ОС. AV>>Позволю еще одно уточнение. К 95% установленных десктопных ОС.
RO>И то, это значило бы недооценить долю Мак ОС раза в два.
На нашем (стран СНГ) рынке даже переоценили, а не недооценили.
KV>Да я видимо рановато обронил эту фразу, мне еще тяжело четко сформулировать свою т.з., при всей моей словоохотливости Последний год, я довольно много времени посвящал изучению различных средств, отсутствующих/отсутствовавших/неразвитых в шарпе. Метапрограммирование, вывод типов, неизменяемые объекты, динамическая типизация, азы функционального программирования, и т.п. Столько средств, позволяющих действительно улучшить свой код, сделать его более эффективным, читаемым... Средств, о существовании которых, пару лет назад, я даже и не подозревал, считая что шарп полностью покрывает все мои потребности. И теперь, когда мне приходится писать или читать код на нем, я ощущаю неслабый дискомфорт от периодической нехватки/неразвитости в шарпе тех или иных языковых средств, с которыми я успел познакомиться. Я написал не так уж и много кода за последние несколько лет, по сравнению с профессиональными программерами, т.к. в силу своей специализации я все больше читаю, нежели пишу. Но сейчас я отчетливо вижу в своем старом коде места, которые я бы переписал на том же шарпе, куда более грамотно и качественно под влиянием других языков. А значит время на их изучение было потрачено не зря и об этом стоит рассказать здесь. Вдруг это поможет кому-нибудь еще открыть для себя новые горизонты развития?
ок, и как всё вышеописанное "покрывает" питон, раз уж не покрывет C# в связке с новым F#?
тем более. что тут http://rsdn.ru/forum/Default.aspx?mid=3319257&flat=0
Здравствуйте, Anton Batenev, Вы писали:
AB>А нельзя просто: AB>
AB>class SomeClass<T>
AB>{
AB> public T Property1;
AB> public T Property2;
AB>}
AB>
AB>?
Чем же это проще? Завтра понадобится при доступе к полю делать проверку или слать уведомление, будешь вынужден сделать поле свойством — тут-то у тебя бинарная совместимость и нарушится, придётся перекомпилировать клиенты твоего класса. Да и вообще, вне контекста Сишарпа, публичные поля — нарушение инкапсуляции.
Здравствуйте, shrecher, Вы писали:
L>>>>C# не требует VS. Если очень хочется можешь работать с обычными текстовыми файлами и компилировать через командную строку. Просто в студии это делать удобнее.
S>>>Да, но производительность написания кода резко упадет.
L>>Конечно упадет. До уровня производительность написания кода на питоне.
S>нифига. На Питоне и C#+VS пишется примерно с одной и тойже скоростью. Вот если из связки C# VS убрать VS, то все — труба, погрязнешь в рутине.
Вы вообще видели VS 2k8 + Resharper 4.1 связку? Явно не видели...
Как скорость может быть одинаковой, если нету ни мощных средств для рефакторинга, ни intellisense, ни удобных и быстрых средств для навигации по коду, ни средств для динамического анализа кода на соответствие определенным правилам, ни удобного отладчика, ни модуля для запуска модульных тестов, ни модуля для взаимодействия с системой контроля версий, ни модуля для дизайна схемы классов, ни модуля для дизайна форм, ни модуля для дизайна страниц, ни... много другого?
Здравствуйте, ambel-vlad, Вы писали:
AV>>>Точно? А то я, например, знаю проект, который ну никак не сделать на .NET. Причем не такой уж и сложный.
C>>Поделитесь знанием.
AV>Я уже как-то приводил его в пример. Но еще раз можно.
AV>Надо было разработать Application server. Причем под несколько платформ и чтобы приложения (или их части) можно было писать на различных языках. Но даже если ограничиться только одной виндой, то на .NET все равно не получается вытянуть. Потому что получался бы двойной интероп. .NET->C->Other lang. И не хватало бы скорости. А если добавить и другие платформы, то дело совсем плохо. Потому что даже Mono не спасал.
Сложно себе представить кому потребовался проект с ТАКИМИ требованиями... Ну да ладно, соглашусь, что дотнет для ТАКОГО не лучший выбор.
Здравствуйте, criosray, Вы писали:
C>Здравствуйте, Константин Б., Вы писали:
C>>>Какое уродство...
КБ>>Вы снова с нами В чем по вашему заключается уродство? )
C>В отвратительной читабельности кода, очевидно. Вы этого сами не замечаете?