Лингвофорум

Общий раздел => Наука и техника => Компьютеры => Тема начата: Karakurt от октября 8, 2010, 10:01

Название: Java vs C#
Отправлено: Karakurt от октября 8, 2010, 10:01
В чем отличия, чем лучше заняться?
Название: Java vs C#
Отправлено: myst от октября 8, 2010, 10:22
С какой целью хотите заняться?
Название: Java vs C#
Отправлено: Karakurt от октября 8, 2010, 10:24
Найти работу.
Название: Java vs C#
Отправлено: myst от октября 8, 2010, 11:20
Тогда в первую очередь узнайте, какие программисты требуются в Вашем регионе и их оклады.
Название: Java vs C#
Отправлено: Karakurt от октября 8, 2010, 11:45
А у вас как? А фрилансером? Спрос на что больше?
Название: Java vs C#
Отправлено: Flos от октября 8, 2010, 11:57
Цитата: myst от октября  8, 2010, 11:20
Тогда в первую очередь узнайте, какие программисты требуются в Вашем регионе и их оклады.

+1

Вы инструмент хотите сравнить,а надо сравнивать работу.
Название: Java vs C#
Отправлено: myst от октября 8, 2010, 12:51
Цитата: Karakurt от октября  8, 2010, 11:45
А у вас как?
Не в курсе, я же не программистом работаю. Года три назад были вакансии на сиплюсплюсников с окладом в районе сотки.

Цитата: Karakurt от октября  8, 2010, 11:45
А фрилансером?
Это не профессия. :)
Название: Java vs C#
Отправлено: Karakurt от октября 8, 2010, 15:19
Цитата: myst от октября  8, 2010, 12:51
не программист
а кто еси не секрет?
Название: Java vs C#
Отправлено: myst от октября 8, 2010, 15:29
Цитата: Karakurt от октября  8, 2010, 15:19
а кто еси не секрет?
Переводчик же. :)
Название: Java vs C#
Отправлено: Nekto от октября 9, 2010, 22:45
Больше всего требуются 1С-ники.  8-) Во всяком случае раньше.
1С - это самое тупое и самое востребованное. Гуманитариям - самое оно.  ;)
А в Омерике, не знаю правда ли, до сих пор востребованы кобольщики.  :uzhos:
Название: Java vs C#
Отправлено: RawonaM от октября 9, 2010, 23:41
Цитата: Nekto от октября  9, 2010, 22:45
Больше всего требуются 1С-ники.  8-) Во всяком случае раньше.
1С - это самое тупое и самое востребованное. Гуманитариям - самое оно.  ;)
Стопроцентов, это как раз хотел сказать.

При чем тут вообще язык? Что вы хотите программировать-то? Гуи или алгоритмы? Вы математик или лингвист?
Название: Java vs C#
Отправлено: Karakurt от октября 10, 2010, 00:01
Я математик. А есть разница что кодить - гуи или алг.?
Название: Java vs C#
Отправлено: RawonaM от октября 10, 2010, 00:28
Цитата: Karakurt от октября 10, 2010, 00:01
Я математик. А есть разница что кодить - гуи или алг.?
Естественно. Это разные вообще задачи.
Если математик, то вам пофиг какой язык, вас должны на конкретные задачи взять, там уже на каком языке проекты будут, такой и будете учить в процессе. Я так это понимаю.
На мой взгляд перспективнее С#. С другой стороны, на фрилансерство лучше веб осваивать имхо (PHP, JavaScript).

Сам я вообще не совсем из этой области, хотя хотел бы в нее попасть. Но просто в компании моей общаюсь с этими людьми :)
Название: Java vs C#
Отправлено: Karakurt от октября 10, 2010, 08:17
Всем спасибо.
Название: Java vs C#
Отправлено: myst от октября 10, 2010, 08:50
Цитата: Nekto от октября  9, 2010, 22:45
Больше всего требуются 1С-ники.  8-)
Мы здесь про программистов говорим. Не мешайте.
Название: Java vs C#
Отправлено: myst от октября 10, 2010, 08:52
Цитата: RawonaM от октября 10, 2010, 00:28
На мой взгляд перспективнее С#.
Чем Жаба, ты пошутил, что ли? :o
Название: Java vs C#
Отправлено: Чайник777 от октября 13, 2010, 08:37
Цитата: myst от октября 10, 2010, 08:52
Цитата: RawonaM от октября 10, 2010, 00:28
На мой взгляд перспективнее С#.
Чем Жаба, ты пошутил, что ли? :o
А разве не разработчики джавы в спешке напихали в неё новых костылей, чтобы она могла соперничать с C#?
Название: Java vs C#
Отправлено: Karakurt от октября 13, 2010, 08:50
Что за костыли?  F# - еще круче? :)
Название: Java vs C#
Отправлено: myst от октября 13, 2010, 11:18
Цитата: Чайник777 от октября 13, 2010, 08:37
А разве не разработчики джавы в спешке напихали в неё новых костылей, чтобы она могла соперничать с C#?
Соперничать сильно улыбнуло. Расскажите, пожалуйста, для соперничества с C# в какой области индустрии программного обеспечения это было сделано? Кстати, а где, кроме поделок для Windows, применяется .NET?
Название: Java vs C#
Отправлено: myst от октября 13, 2010, 11:20
Цитата: Karakurt от октября 13, 2010, 08:50
Что за костыли?  F# - еще круче? :)
Языки — дело пятое. Надо оценивать платформу целиком.
Название: Java vs C#
Отправлено: Dims от октября 14, 2010, 11:04
Цитата: Karakurt от октября  8, 2010, 10:01
В чем отличия, чем лучше заняться?
Языки похожи и по синтаксису и по логике. Начать можно с любого, а потом освоить другой. Если нет предметных предпочтений, то я бы рекомендовал начать с C#.

Отличия приблизительно в следующем. Во-первых, Джава изначально не привязана к фирме изготовителю платформы (к Сану и его продукции). Джавная программа может работать и на Линуксе и на Виндовсе (для C# тоже уже есть Моно, но мне кажется, она может не всё и распространена недостаточно). Во-вторых, Джава старше и потому в ней изначально не были предусмотрены некоторые возможности, которые добавлялись впоследствии и не всегда удачно. Зато на Джаве написано больше программ и библиотек и некоторые сферы прочно закрепились за ней. В-третьих, C# задуман так, чтоб на него было легко портировать программы с других языков -- поэтому в нём собрано много разнообразных возможностей, соответствующих разным концепциям разных языков, а Джава, наоборот, основана на принципе экономии-- из неё по максимуму выброшено всё "ненужное" (хотя множественного наследования нет ни там, ни там :) ).

Конечно, есть множество мелких конкретных различий, которые будут выясняться по ходу.
Название: Java vs C#
Отправлено: myst от октября 14, 2010, 11:12
Ему не жаст фо фан надо, он работать хочет.
Название: Java vs C#
Отправлено: Dims от октября 14, 2010, 11:13
Цитата: Чайник777 от октября 13, 2010, 08:37
А разве не разработчики джавы в спешке напихали в неё новых костылей, чтобы она могла соперничать с C#?
Всё всегда начинается с красивой идеи, а потом туда начинают запихиваться костыли. В .НЕТ тоже постоянно впихивают что-то новое. Я думаю, источником вдохновения служат всякие научные разработки языков, типа ОКамл, а потом коммерсанты пихают в свои разработки то, что они предполагают, будет наиболее практически востребовано...
Название: Java vs C#
Отправлено: Dims от октября 14, 2010, 11:14
Цитата: myst от октября 14, 2010, 11:12
Ему не жаст фо фан надо, он работать хочет.
Я как раз работаю фриласером и использую эти два языка.
Название: Java vs C#
Отправлено: Dims от октября 14, 2010, 11:15
Цитата: myst от октября 13, 2010, 11:18
Кстати, а где, кроме поделок для Windows, применяется .NET?
"Поделки для Виндоуз" -- очень востребованный продукт во фрилансе.
Название: Java vs C#
Отправлено: Dims от октября 14, 2010, 11:26
Цитата: Karakurt от октября 13, 2010, 08:50
Что за костыли?  F# - еще круче? :)
Главный "костыль" -- это "дженериксы" -- параметризованные классы, приблизительно соответствующие "шаблонам" Си++. В Джаве их изначально не было, а потом, когда они были введены, то были сделаны лишь на уровне синтаксиса языка -- после компилляции они не существуют. В Сишарпе дженериксы реализованы лучше. Но, мне кажется, в Джаве они всё же появились раньше, хотя я не очень внимательно слежу за этой конкуренцией...

Коллекции, конечно, в джаве появились раньше, но были непрарамтрическими. Форыч -- не помню, у кого раньше появился. Причём в джаве его назвали так же, как и обычный оператор цикла -- for (только синтаксис другой), а в сишарпе сделали специальное слово -- foreach...
Название: Java vs C#
Отправлено: Karakurt от октября 14, 2010, 11:49
Спасибо, а вы только эти два языка используете или еще что? Что скажете о питоне, хаскеле? Что лучше подойдет для скажем программы переводчика?
Название: Java vs C#
Отправлено: myst от октября 14, 2010, 11:50
Цитата: Dims от октября 14, 2010, 11:14
Я как раз работаю фриласером и использую эти два языка.
Кстати, расскажите, что собой представляет фрилансовое кодерство. Я думал, дикие кодеры истреблены аутсорсинговыми контроками.

Цитата: Dims от октября 14, 2010, 11:15
"Поделки для Виндоуз" -- очень востребованный продукт во фрилансе.
Какие поделки в ходу на фрилансовом рынке?
Название: Java vs C#
Отправлено: Dims от октября 14, 2010, 12:06
Я не только эти два языка использую, но вот Питон и Хаскель -- нет. Скрипты по мелочи править приходилось, но полностью писать -- не писал.

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

Думаю, что нужно поискать в интернете то, что уже написано на эту тему -- потому что всё равно придётся использовать готовые наработки (с нуля писать нельзя) -- и уже выбирать язык в соответствии с тем, что лучше совместимо с этими наработками и конечными требованиями.

В сишарп, кстати, имеются "лямбда выражения", то есть, анонимные функции, которые формулируются прямо в тексте: (wiki/en) C_Sharp_syntax#Lambda_expressions (http://en.wikipedia.org/wiki/C_Sharp_syntax#Lambda_expressions). Это "дань" функциональным языкам...
Название: Java vs C#
Отправлено: Dims от октября 14, 2010, 12:11
Цитата: myst от октября 14, 2010, 11:50
Кстати, расскажите, что собой представляет фрилансовое кодерство. Я думал, дикие кодеры истреблены аутсорсинговыми контроками.
Я не знаю, я целостной картины не имею. У меня в конечном итоге получилось несколько постоянных заказчиков, один из которых постоянно заказывает мне грабберы сайтов на C#. Может быть, когда эти заказчики иссякнут, то я больше никого найти и не смогу? Не знаю, пока всё нормально (сказал выпавший с девятого этажа, пролетая пятый).

Кстати, я заметил, что сейчас фриланс биржи предлагают услуги по организации фриласн-команд. Думаю, что можно и к команде примкнуть, либо организовать команду...
Название: Java vs C#
Отправлено: myst от октября 14, 2010, 12:26
А как происходит взаимодействие с заказчиками? Программы сопровождать надо, или сдал — получил деньги — забыл? По деньгам как, хотя бы ориентировочно? Вы договариваетесь о цене по каждой программе отдельно или есть какие-то общие тарифы и т. п.? Ценообразование на основе чего?
Название: Java vs C#
Отправлено: Dims от октября 14, 2010, 12:53
Есть специальные сервера -- фриланс-сервера, где заказчики публикуют задания, а исполнители -- свои резюме, скилы и т.п. Обычно на этих сайтах идёт аукцион на понижение -- то есть, исполнители соревнуются кто дешевле и быстрее выполнит задание. Естественно, если явно указать нереально-низкую цену, то заказчик может не поверить в серьёзность намерений. Но поначалу неизбежно приходится демпинговать, потому что наиболее важный критерий -- это количество ранее выполненных заказов и отзывы по ним. Сейчас сайты предлагают тарификацию и по времени -- заказчик для контроля получает скриншоты вашего экрана в течении того времени, когда вы ставите галочку, что находитесь в процессе выполнения задания. Но я так не работал, я уже напрямую работаю. У меня выходит примерно среднерыночная московская программистская зарплата. Из минусов -- необходимость самому себя контролировать (расслабился, залез потрещать на форуме -- не заработал), кроме того, отсутствуют оплачиваемые отпуска, больничные и так далее. Кроме того, работаю дома -- мешаю домашним, а они -- мне. Из преимуществ -- возможность работать в любой точке земного шара (где есть интернет) и независимость...
Название: Java vs C#
Отправлено: myst от октября 14, 2010, 13:08
Цитата: Dims от октября 14, 2010, 12:53
У меня выходит примерно среднерыночная московская программистская зарплата.
А по времени как? Сколько часов в месяц выходит?

Сколько времени на разработку дают?

Цитата: Dims от октября 14, 2010, 12:53
Из минусов -- необходимость самому себя контролировать (расслабился, залез потрещать на форуме -- не заработал), кроме того, отсутствуют оплачиваемые отпуска, больничные и так далее. Кроме того, работаю дома -- мешаю домашним, а они -- мне. Из преимуществ -- возможность работать в любой точке земного шара (где есть интернет) и независимость...
Ну, это общефрилансовые качества. :)
Название: Java vs C#
Отправлено: Phersu от октября 14, 2010, 17:44
Цитата: Dims от октября 14, 2010, 11:04
для C# тоже уже есть Моно, но мне кажется, она может не всё и распространена недостаточно
Мне уже это надоело слышать. Кто-то один раз её попробовал в 2005-ом году, и в 2010 продолжает повторять про недостаточно распространена и может не всё.

Что значит недостаточно распространена?

ОСи:

Linux
Mac OS X, iPhone OS
Sun Solaris
BSD - OpenBSD, FreeBSD, NetBSD
Microsoft Windows
Nintendo Wii
Sony PlayStation 3

Процессоры:
s390, s390x (32 and 64 bits)
SPARC (32)
PowerPC
x86
x86-64: AMD64 and EM64T
IA64 Itanium2 (64 bit)
ARM: little and big endian
Alpha
MIPS
HPPA
(для этого всего есть под джиттеру)

Во многие линуксовые дистры включена по умолчанию.
Моно давно уже продакшн-реди.

6 октября вот выпустили версию 2.8 со новым сборщиком мусора, правда, под Линукс только пока.
Моно активнейшим образом развивается.

Насчёт совместимости с мс.нет - порядка 99% (всякие убогие WPF я не имею в виду — там это won't support). Для оставшегося 1% есть собственные инструменты для решения (по сути лучше писать под моно на линуксе, а потом "портировать" на Виндос на мс.нет — тогда совместимость 100%)

Плюс у моно есть некоторые штуки, которых нет в мс.нет.
Название: Java vs C#
Отправлено: myst от октября 14, 2010, 17:55
Цитата: Phersu от октября 14, 2010, 17:44
Моно давно уже продакшн-реди.
Does the production know about this? :eat:
Название: Java vs C#
Отправлено: Phersu от октября 14, 2010, 18:02
Кстати, моно можно использовать автономно — с помощью встроенной утилиты mkbundle. Тогда рантайм не нужен (вся программа будет состоять из main.exe, mono.dll - и пары glib-зависимых либ (эту зависимость убрали в 2.8) - пара МБ, если ещё сжать upx'ом). При этом весь CIL-код остаётся, и в силе весь джиттинг, рефлексия, дженерики и т.п. (а вот под айФон они умеют полную статическую компиляцию). Правда, mkbundle в версии 2.6.4 сломали (в 2.6.1 было ок), а дальше не смотрел.
Мне это вот больше всего нравится, т.к. жутко бесят зависимости в 100 мегабайт и йопля пользователей с их установкой (у подруги например что-то полетело в реестре виндовс и дотнет отказывался устанавливаться и переустанавливаться) — ненавижу технарей и их лень (статич. компиляция рулит — щас, чай, не 1980-ый год с 3 килобайтами ЗУ, можно и не экономить). К тому же можно перекомпилировать ядро с более минималистичными настройками.
Спрашивайте свои ответы.

Цитата: myst от октября 14, 2010, 17:55
ЦитироватьМоно давно уже продакшн-реди.
Does the production know about this? :eat:
Yes, it does. В инете всё больше и больше success stories от разных компаний :)
Название: Java vs C#
Отправлено: myst от октября 14, 2010, 18:22
Верно говоришь, статическая сборка — добро.
Название: Java vs C#
Отправлено: Dims от октября 19, 2010, 13:49
Цитата: Phersu от октября 14, 2010, 17:44
Насчёт совместимости с мс.нет - порядка 99% (всякие убогие WPF я не имею в виду — там это won't support).
Вот подобные высказывания полностью обесценивают Вашу точку зрения.
Название: Java vs C#
Отправлено: Алексей Гринь от октября 19, 2010, 15:12
Цитата: Dims от октября 19, 2010, 13:49
Вот подобные высказывания полностью обесценивают Вашу точку зрения.
Почему?
Название: Java vs C#
Отправлено: myst от октября 19, 2010, 15:22
Цитата: Алексей Гринь от октября 19, 2010, 15:12
Почему?
Наверное, потому, что 99% — это слегка преувеличил. :)
Название: Java vs C#
Отправлено: Алексей Гринь от октября 19, 2010, 22:42
Цитата: myst от октября 19, 2010, 15:22
Наверное, потому, что 99% — это слегка преувеличил. :)
Ну напирмер 99% это профиль 2.0
3.0 не весь

Мне кажется, 2.0 это state of the art, а дальше уже пошли всякие маркетоидные приблуды
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 18, 2010, 09:53
C# прекрасен тем, что у него есть такие штуки типа valuetype classes и stackalloc. Т.е. можно писать код, который будет примерно одинаково быстр на всех VM'ах. А вот в жабке если тебе попадётся VM с хреновым аллокатором (напр. Бёма), то усё. Что если например у нас 3d-програмко, которая в один фрейм создаёт тысячи векторов, матриц и просто точек? Где-то будет жутко тормозить, а где-то летать. Разве ли это называется портабельность? :D
Название: Java vs C#
Отправлено: myst от декабря 18, 2010, 10:36
Ты опять углубляешься в гипотезы. А по факту я вижу Жабу во всех щелях, но не вижу дотНета нигде, кроме Винды. Моно — это, конечно, хорошо, но как-то уж больно неофициально. Завтра Мигель уйдёт в монастырь, и нет никакой гарантии, что оно не рипнется тут же.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 18, 2010, 11:51
Цитата: myst от декабря 18, 2010, 10:36
А по факту я вижу Жабу во всех щелях, но не вижу дотНета нигде, кроме Винды
У дотнета и жабы, хоть они выглядят на первый взгляд одинаково, разные ниши. Дотнет это персоналки и близко к человеку (а Винда это 80% десктопов), а жаба это сервера/прочий унылый ынтырпрайз и близко к машине/сухим данным. Ты видимо плаваешь в нише жабы только. Мне вот сервера в куй не упёрлись. Я вот больше заинтересован в софте, который общается с человеком в прямом, так сказать, эфире (геймдев, формочке и проч.) И тут, мне кажется, дотнет имеет куда больше преимуществ.

Цитата: myst от декабря 18, 2010, 10:36
Завтра Мигель уйдёт в монастырь, и нет никакой гарантии, что оно не рипнется тут же.
Так же можно сказать — завтра Oracle обанкротится, и нет никакой гарантии, что оно не рипнется тут же. «Ты опять углубляешься в гипотезы». Среди активных разрабов mono тридцать человек, и Мигель там в принципе давно мало чё решает — всё крутится само собой потихоньку. Он там типа Ассанжа, короче.
Название: Java vs C#
Отправлено: myst от декабря 18, 2010, 12:15
Цитата: Алексей Гринь от декабря 18, 2010, 11:51
У дотнета и жабы, хоть они выглядят на первый взгляд одинаково, разные ниши. Дотнет это персоналки и близко к человеку (а Винда это 80% десктопов), а жаба это сервера/прочий унылый ынтырпрайз и близко к машине/сухим данным. Ты видимо плаваешь в нише жабы только. Мне вот сервера в куй не упёрлись. Я вот больше заинтересован в софте, который общается с человеком в прямом, так сказать, эфире (геймдев, формочке и проч.) И тут, мне кажется, дотнет имеет куда больше преимуществ.
То есть андроиды всякие — это сервера/прочий унылый ынтырпрайз? ;)

Цитата: Алексей Гринь от декабря 18, 2010, 11:51
Так же можно сказать — завтра Oracle обанкротится, и нет никакой гарантии, что оно не рипнется тут же.
За Жабой стоит ещё куча корпораций, IBM например. Ну, и Google с недавних пор.

Цитата: Алексей Гринь от декабря 18, 2010, 11:51
Среди активных разрабов mono тридцать человек, и Мигель там в принципе давно мало чё решает — всё крутится само собой потихоньку.
Понимаешь, одно дело, когда проект развивают жастфофанщики, и совсем другое, когда мегакорпорации.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 18, 2010, 16:59
Цитата: myst от декабря 18, 2010, 12:15
То есть андроиды всякие — это сервера/прочий унылый ынтырпрайз? ;)
На андроиде нету жабы. Андроид не может запустить жабовый байткод. Там только интерфейс библиотек жабовый. А в моно с помощью ikvm можно запустить не просто интерфейс, но и сам жабовый байткод. С другой стороны жаба запустить код .NET без кучи нехилых хаков не в состоянии, т.к. как виртуальная машина мелка. Есть только коммерческие костыли.

Цитата: myst от декабря 18, 2010, 12:15
ЦитироватьСреди активных разрабов mono тридцать человек, и Мигель там в принципе давно мало чё решает — всё крутится само собой потихоньку.
Понимаешь, одно дело, когда проект развивают жастфофанщики, и совсем другое, когда мегакорпорации.
С какой стати жастфофан, моной всерьёз занимается Novell; большинство из тех 30 человек — сотрудники Novell, которые работают над моно full-time; с недавних пор за проектом пристально смотрит и MS. Напр. MS открыли пару либ под свободной лицензией, и моно в свой дистрибутив их включила.

Цитата: myst от декабря 18, 2010, 12:15
ЦитироватьТак же можно сказать — завтра Oracle обанкротится, и нет никакой гарантии, что оно не рипнется тут же.
За Жабой стоит ещё куча корпораций, IBM например. Ну, и Google с недавних пор.
По-моему, Гугл в своих проектах использует чаще вообще с++ + питон, чем жабу. Про далвик см. выше.
А ИБМ не корпорация, а фигня на постном масле.
Название: Java vs C#
Отправлено: myst от декабря 18, 2010, 17:19
Цитата: Алексей Гринь от декабря 18, 2010, 16:59
На андроиде нету жабы. Андроид не может запустить жабовый байткод. Там только интерфейс библиотек жабовый.
Так есть там жаба или нет?

Цитата: Алексей Гринь от декабря 18, 2010, 16:59
С какой стати жастфофан, моной всерьёз занимается Novell; большинство из тех 30 человек — сотрудники Novell, которые работают над моно full-time; с недавних пор за проектом пристально смотрит и MS. Напр. MS открыли пару либ под свободной лицензией, и моно в свой дистрибутив их включила.
По сравнению с корпоративной поддержкой Жабы это просто крохи.

Цитата: Алексей Гринь от декабря 18, 2010, 16:59
По-моему, Гугл в своих проектах использует чаще вообще с++ + питон, чем жабу.
Это в каких, особенно Питон?

Цитата: Алексей Гринь от декабря 18, 2010, 16:59
А ИБМ не корпорация, а фигня на постном масле.
Хренасе ты сказанул. :o
Если IBM — фигня, то что тогда Microsoft и Novell?
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 19, 2010, 16:43
Цитата: myst от декабря 18, 2010, 17:19
ЦитироватьНа андроиде нету жабы. Андроид не может запустить жабовый байткод. Там только интерфейс библиотек жабовый.
Так есть там жаба или нет?
Интерфейс жабовых библиотек не есть жаба... Тем более что и то там совместимость порядка 75% всего + много своих костылей.

Цитата: myst от декабря 18, 2010, 17:19
ЦитироватьПо-моему, Гугл в своих проектах использует чаще вообще с++ + питон, чем жабу.
Это в каких, особенно Питон?
С++ — низкоуровневый кодообезьянний код, а питон — вся логика вокруг него. Вроде так.

Цитата: myst от декабря 18, 2010, 17:19
ЦитироватьА ИБМ не корпорация, а фигня на постном масле.
Хренасе ты сказанул. :o
Если IBM — фигня, то что тогда Microsoft и Novell?
Ну IBM скуксены сильно. По крайней мере я много слышал, что софт у них хреновый весьма, индусский.
Название: Java vs C#
Отправлено: myst от декабря 19, 2010, 16:56
Цитата: Алексей Гринь от декабря 19, 2010, 16:43
Интерфейс жабовых библиотек не есть жаба... Тем более что и то там совместимость порядка 75% всего + много своих костылей.
Кроме андроида, есть ещё смарткарты всякие, телевизоры, блуреи и прочие микроволновые печи. Там жаба тоже урезанная, но жаба.

Цитата: Алексей Гринь от декабря 19, 2010, 16:43
С++ — низкоуровневый кодообезьянний код, а питон — вся логика вокруг него. Вроде так.
Так что за проекты-то?

Цитата: Алексей Гринь от декабря 19, 2010, 16:43
Ну IBM скуксены сильно. По крайней мере я много слышал, что софт у них хреновый весьма, индусский.
В этой скуксеной конторке работников >300 000. У Микрософта <90 000. Novell на этом фоне вообще чапочная компашка.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 19, 2010, 20:05
Цитата: myst от декабря 19, 2010, 16:56
В этой скуксеной конторке работников >300 000. У Микрософта <90 000. Novell на этом фоне вообще чапочная компашка.
Целый индусский город задействован, ок. Не в количестве сотрудников дело, а в степении влияния, доходах, и т.п. IBM полный ноль в софте, при том что пытается давать консультации в этой сфере. У Microsoft же сотрудников в четыре раза меньше, а чистый профит был больше, чем у IBM (2008 г.). Ну вот когда последний раз человеческое существо пользовалось софтом от IBM? Хз. Я же с поделиями Microsoft имею дело постоянно. Так что мнение IBM в этом плане совершенно ничё не значит. Novell же в мире Линупсей второй после Red Hat'а...

Цитата: myst от декабря 19, 2010, 16:56
ЦитироватьИнтерфейс жабовых библиотек не есть жаба... Тем более что и то там совместимость порядка 75% всего + много своих костылей.
Кроме андроида, есть ещё смарткарты всякие, телевизоры, блуреи и прочие микроволновые печи. Там жаба тоже урезанная, но жаба.
Только это уже не имеет отношения к вышеобозначенной идее... Я ведь не говорил, что жаба вообще не используется. Поскрести по сусекам всегда можно :)
Название: Java vs C#
Отправлено: myst от декабря 19, 2010, 20:17
Цитата: Алексей Гринь от декабря 19, 2010, 20:05
Целый индусский город задействован, ок. Не в количестве сотрудников дело, а в степении влияния, доходах, и т.п. IBM полный ноль в софте, при том что пытается давать консультации в этой сфере.
Да у них целый зоопарк софта. И да, на жабе. А это значит, что они жабу не бросят. И жаба-машина у них своя тоже есть, если что.

Цитата: Алексей Гринь от декабря 19, 2010, 20:05
У Microsoft же сотрудников в четыре раза меньше, а чистый профит был больше, чем у IBM (2008 г.). Ну вот когда последний раз человеческое существо пользовалось софтом от IBM? Хз. Я же с поделиями Microsoft имею дело постоянно. Так что мнение IBM в этом плане совершенно ничё не значит.
IBM не занимается софтом для домохозяек. Мнение Microsoft в мире мейнфреймов и вообще крупных корпоративных решений тоже 0.

Цитата: Алексей Гринь от декабря 19, 2010, 20:05
Novell же в мире Линупсей второй после Red Hat'а...
Это очень сильный аргумент, да. Кстати, Novell недавно продали. Бимеры  тоже вовсю используют Линупс в своих небольших монстрах.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 19, 2010, 20:31
Цитата: myst от декабря 19, 2010, 20:17
Да у них целый зоопарк софта. И да, на жабе. А это значит, что они жабу не бросят. И жаба-машина у них своя тоже есть, если что.
Цитата: myst от декабря 19, 2010, 20:17
IBM не занимается софтом для домохозяек. Мнение Microsoft в мире мейнфреймов и вообще крупных корпоративных решений тоже 0.
Ну причём здесь мейнфреймы, если я говорил про человеко-направленный софт (и именно не серверный и не корпотивный) изначала. В чём суть наезда на моночку, я не понимаю.

Цитата: myst от декабря 19, 2010, 20:17
Кстати, Novell недавно продали
Фигня. А Sun продали Oracle'у и чаго? А до Novell'а mono'й занималась Ximian, которую Novell и купил. И чё-то java и mono на плаву до сих пор. Ах да, они же community-driven, и кто ими владеет — в принципе пофигу.
Название: Java vs C#
Отправлено: Alone Coder от декабря 19, 2010, 20:35
Цитата: myst от декабря 19, 2010, 16:56
Цитата: Алексей Гринь от Сегодня в 17:43
ЦитироватьНу IBM скуксены сильно. По крайней мере я много слышал, что софт у них хреновый весьма, индусский.
В этой скуксеной конторке работников >300 000.
Ни о чём не говорит. В Нинтендо 4000, а бабла срубают всего втрое меньше.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 19, 2010, 20:46
Я читал у кого-то умного, что у всякой корпорации есть критический максимум (или лучше сказать минимум? :??? ) количества работников, когда увеличение числа, наоборот, начинает уменьшать продуктивность, качество и т.д. — в основном из-за того что начинают брать кого угодно и вводить должности по любому поводу, общее слежение за работой на разных уровнях кардинально усложняется — в общем, сродни разбуханию бюрократического аппарата во власти. Так что такое большое количество сотрудников это скорее признак упадка...
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 19, 2010, 20:48
Цитата: Alone Coder от декабря 19, 2010, 20:35
В Нинтендо 4000, а бабла срубают всего втрое меньше.
Что у японцев в Нинтендо поставлено на автоматический робоконвеер, у ИБМ вручную собирают несовершеннолетние индусы в трущобах Мумбая :D Вот и накапливается 400 тыс. человек.
Название: Java vs C#
Отправлено: myst от декабря 19, 2010, 20:51
Цитата: Alone Coder от декабря 19, 2010, 20:35
Ни о чём не говорит. В Нинтендо 4000, а бабла срубают всего втрое меньше.
Чистая прибыль — это ещё не всё. Ресурсы у IBM огромные. Это и высококлассные специалисты разных областей, и готовые технологии, и НИОКР. Они вкладывают в исследования огого, а не тупо рубят бабло на родителях юных бездельников.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 19, 2010, 20:54
Цитата: myst от декабря 19, 2010, 20:51
Это и высококлассные специалисты разных областей и готовые технологии
Хаха. Хреновые там специалисты. В общей массе. А не в общей массе спецы есть везде.
Название: Java vs C#
Отправлено: myst от декабря 19, 2010, 21:04
Цитата: Алексей Гринь от декабря 19, 2010, 20:54
Хаха. Хреновые там специалисты. В общей массе. А не в общей массе спецы есть везде.
А ты-то откуда знаешь, хреновые они или нет?
Название: Java vs C#
Отправлено: myst от декабря 19, 2010, 21:09
А чоэта нинтендовцы юзают бимерские процессоры, сделанные вручную индусами с трущобах Бомбея? :eat:
Название: Java vs C#
Отправлено: Alone Coder от декабря 19, 2010, 21:36
Есть закон Паркинсона: каждый сотрудник стремится завести себе подчинённых, чтобы снять с себя часть работы. Однако в результате скорость работы снижается.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 20, 2010, 00:36
Боже, храни моно. Клепаю програмку. Под MS.NET запускаю — ничего не выдаёт, пустой экран. Вариантов источника проблемы — мульон. Только я начал горевать, что впереди ночь боли и слёз, как сообразил запустить оно же, но под mono. И — о чудо — на экран всё-таки что-то выдаётся, только messed up. А это, значит, что проблема в P/Invoke, а не в логике. Круг поиска ошибки куда более сужен...
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 22, 2010, 21:45
Таки полезность valuetype objects в .NET не пустые слова. Автору порта физического движка Bullet на Java пришлось велосипедить хак под названием JStackAlloc, т.к. расчёт физики выделяет так много векторов и матриц, что сборщик мусора лихорадит (а хвалёный escape analysis работает в редких случаях и пригоден только для хелловорлдов). Жабка-какашка не пригодна для серьёзного использования.
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 10:10
Откуда такая ненависть к величайшему творению Гослинга? :eat:
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 12:35
Оттуда, что у любителей творения Гослинга такая ненависть к величайшему творению Мигеля :)
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 12:59
Так не ненависть же. Просто объективность. :)
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 13:04
Цитата: myst от декабря 23, 2010, 12:59
Просто объективность. :)
Там объективностью не пахнет. По крайней мере, не видел. Моно в глаза не видели (или видели последний раз в 2003 г.), и единственный аргумент «не нужно» (и «это делают агенты MS, бида-бида»). На что у меня есть ответ «Линукс ещё больше не нужен» :)
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 13:16
Не ну́жно просто смотреть на моно как на яву. Ну́жно вспомнить, что под линуксами есть большой сонм кривых ненужных недоязыков типа питона, руби, фрипаскали и проч., которые плодятся каждый день и все как один уродливы и тормозны. В этом плане моно держит твёрдое второе место после явы. Или сразу ненужно́ всё кроме явы — питоны всякие, лазарусы — или всё-таки всё нужно́ (и в этом суть опенсорса — используй что хочешь; не нравится — не используй), в том числе моно.

Ведь только к моно такая ненависть, хотя она лучше многих других продуктов. Причины две:
1) команда моно-таки немного отдалена от прочего красноглазого опенсорсного мальчишества (они больше занимаются делом, чем треплют языком как сумасшедший коммунист Столлман, который за всю жизнь осилил написать только программу-блокнот) и имеет косвенное отношение к MS;
2) они делают своё дело хорошо и успешно.

Отсюда и ненависть, что красноглазые дественники надрачивают на клавиатуру тут в поте лица, понимаешь (напр. парни из проекта dotGNU), а тут появляется с либеральными взглядами Мигель (не ненавидящий Microsoft, как положену по уставу) и делает всё намного красивее и правильнее :) Ср. состояние проектов mono и dotGNU.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 14:34
Сравнивать питон и решетку как минимум некорректно. Задачи разные.

Потихоньку в решетку добавляют нужные элементы, которые давно искаропки есть в языках типа питона и т.п. Ни туплов нормальных, словари дебильные и прочее-прочее в с-шарпе не делает его таким уж привлекательным для повседневных задач.
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 15:01
Было бы здо́рово, если бы Микрософт официально сделал .NET многоплатформным, но он не хочет этого делать, и это не к добру. Ты же понимаешь, что Mono в роли догоняющего, как ни крути. Это весьма вероятно может привести к полной потере совместимости. Ты же сам говорил, что Mono уже не до конца совместим с .NET'ом. Безрадостно всё это. А сам Шарп, конечно, послаще Жабы, тут сомнений нет. От одного угрёбищного сравнения строк в Жабе str1.equals(str2) я чуть в осадок не выпал.
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 15:03
Цитата: RawonaM от декабря 23, 2010, 14:34
Ни туплов нормальных, словари дебильные и прочее-прочее в с-шарпе не делает его таким уж привлекательным для повседневных задач.
Что за туплы, что не так со словарями?
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 15:07
Это принцип Жабы такой. Ни перегрузки операторов, ни хрена вообще. Минимализм короче.
Ведь при существующей перегрузке, когда ты пишешь ==, кто знает, это перегруженный оператор или что вообще он вызывает? А так четко видно, какая функция задействована.

То же самое пропертиз в ц-диезе. С одной стороны, классная штука. С другой стороны, легко злоупотребить так, что ни хрена в коде не поймешь. Написал p.prop = фигня, там может его присвоитель компьютер убивает. Прозрачности нет.

Короче, нет в мире совершенства :)
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 15:08
Цитата: RawonaM от декабря 23, 2010, 14:34
Сравнивать питон и решетку как минимум некорректно. Задачи разные.
Так и не надо сравнивать решётку с явой, в этом мой пойнт. Это тоже не корректно и тоже задачи разные.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 15:08
Цитата: myst от декабря 23, 2010, 15:03
Что за туплы, что не так со словарями?
Ну дык вот же добавляют потихоньку сладкую жизнь:
http://msdn.microsoft.com/en-us/library/system.tuple.aspx

Со словарями все не так. Не гибкие и длинно писать Dictionary...
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 15:09
Цитата: Алексей Гринь от декабря 23, 2010, 15:08
ЦитироватьСравнивать питон и решетку как минимум некорректно. Задачи разные.
Так и не надо сравнивать решётку с явой, в этом мой пойнт. Это тоже не корректно и тоже задачи разные.
Почему это? жаба и решетка совершенно для одинаковых целей и задач.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 15:10
Цитата: myst от декабря 23, 2010, 15:01
Было бы здо́рово, если бы Микрософт официально сделал .NET многоплатформным, но он не хочет этого делать, и это не к добру.
Очень даже понятно, почему он не хочет официально это делать.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 15:15
Цитата: RawonaM от декабря 23, 2010, 15:07
Это принцип Жабы такой. Ни перегрузки операторов, ни хрена вообще. Минимализм короче.
Фигня всё это. После того как вышла решётка, жаберы с большим удовольствием ввели enumerations, generics, foreach, annotations, autoboxing, params, и проч. Минимализм это красивая байка из старых добрых времён. Жаба нифига не минималистична, а неподъёмна, как мамонт. Они бы и рады сделать == для строк, но мешают требования по совместимости.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 15:16
Цитата: RawonaM от декабря 23, 2010, 15:09
ЦитироватьТак и не надо сравнивать решётку с явой, в этом мой пойнт. Это тоже не корректно и тоже задачи разные.
Почему это? жаба и решетка совершенно для одинаковых целей и задач.
Ну-ну. Решётка это десктопные приложения (и вот уже геймдев для xbox) для людей, а жаба это сервера и энтерпрайз. Разные цели. Или скажи тогда, в чём разность целей питона и .NET
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 15:21
Цитата: myst от декабря 23, 2010, 15:01
Было бы здо́рово, если бы Микрософт официально сделал .NET многоплатформным, но он не хочет этого делать, и это не к добру. Ты же понимаешь, что Mono в роли догоняющего, как ни крути
Также можно сказать, что все не-sun'овские Java VM в роли догоняющих. И чего?

Цитата: myst от декабря 23, 2010, 15:01
Это весьма вероятно может привести к полной потере совместимости. Ты же сам говорил, что Mono уже не до конца совместим с .NET'ом. Безрадостно всё это.
Вы опять все пытаетесь равняться на жабу. Mono реализует не .NET, а стандарт ECMA CLR (у явы вообще ничего не стандартизировано никак). Они (mono team) вообще не обязаны делать что-либо совместимым с .NET. Однако это у них первостепенная задача.

Цитата: RawonaM от декабря 23, 2010, 15:10
ЦитироватьБыло бы здо́рово, если бы Микрософт официально сделал .NET многоплатформным, но он не хочет этого делать, и это не к добру.
Очень даже понятно, почему он не хочет официально это делать.
Они просто не заинтересованы сами делать это, т.к. кому надо забесплатно возиться с чем-то, когда у самих ещё целый вагон платформ, которые нужно поддерживать. Чай, мы не Столлман, который только и умеет что потрясать кулаками и брезжить слюной. Но эта простая незаинтересованность воспринимается многими как некий вид атаки.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 15:29
У java главной целью стоит кроссплатформенность, а у CLR — безопасный механизм межязыкового исполнения. Поэтому Microsoft не заинтересован в кроссплатформенности, т.к. она не является для CLR главной целью. Кроссплатформенность это приятное дополнение. Вообще кроссплатформенность это один из инструментов, а не святая цель, но красноглазикам это не объяснить.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 15:32
Цитата: Алексей Гринь от декабря 23, 2010, 15:16
Или скажи тогда, в чём разность целей питона и .NET
:o Питон — интерпретируемый язык. Надо с NLTK работать че-нить с корпусом сделать, взял и сделал. Или хотя бы зашел в коммандную строку, набрал чтось типа for line = open("~/dict.txt").readlines(): if line bla-bla: print line

Скока у тебя займет проект в сшарпе замутить? Вообще разные вещи, ты что.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 15:32
Цитата: RawonaM от декабря 23, 2010, 15:07
То же самое пропертиз в ц-диезе. С одной стороны, классная штука. С другой стороны, легко злоупотребить так, что ни хрена в коде не поймешь. Написал p.prop = фигня, там может его присвоитель компьютер убивает. Прозрачности нет.
Свойства обалденно хороши во время отладки. Можно приостановить исполнение и посмотреть значения свойств (они будут вычисляться дебаггером налету). А в яве можно посмотреть значения, которые возвращают методы getXXX? Наверняка нужно вводить писать что-то вроде "tmpvar = getXXX()", которое ещё хрен знает как автоматически стриппить в релизе, т.к. нет conditional compilation.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 15:33
Цитата: RawonaM от декабря 23, 2010, 15:32
ЦитироватьИли скажи тогда, в чём разность целей питона и .NET
:o Питон — интерпретируемый язык.
Лол, с какой стати интерпретируемость или скорость являются целью? Java, C# и C++ приблизительно близки по скорости. Что, у них одна цель теперь? Бред.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 15:34
Цитата: RawonaM от декабря 23, 2010, 15:32
Скока у тебя займет проект в сшарпе замутить? Вообще разные вещи, ты что.
mono's C# interactive shell

http://www.mono-project.com/CsharpRepl

(http://www.mono-project.com/files/9/9c/Xbyhja.png)

Вся критика от незнания. К тому же C# это только один язык на базе mono, на mono можно запустить любой любой другой язык, в том числе и динамический (как и в яве, в принципе). Не надо смешивать .NET и C#.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 15:37
Цитата: Алексей Гринь от декабря 23, 2010, 15:32
Свойства обалденно хороши во время отладки.
И не только. Но вводить в язык средства отладки — бред. Для отладки нужно делать отладчик хороший.
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 15:37
Цитата: RawonaM от декабря 23, 2010, 15:07
Это принцип Жабы такой. Ни перегрузки операторов, ни хрена вообще. Минимализм короче.
Ведь при существующей перегрузке, когда ты пишешь ==, кто знает, это перегруженный оператор или что вообще он вызывает? А так четко видно, какая функция задействована.
Какая, если функции перегружать как раз таки можно? ;)
И вообще, почему из Жабы не удалили все операторы, раз они такие гадкие? :eat:
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 15:38
Цитата: myst от декабря 23, 2010, 15:37
Какая, если функции перегружать как раз таки можно? ;)
А вот в С-шарпе нельзя. Бесит :(
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 15:39
Цитата: RawonaM от декабря 23, 2010, 15:07
Написал p.prop = фигня, там может его присвоитель компьютер убивает.
То есть если написать p.setProp(фигня), убийство компьютера переносится легче?
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 15:40
Цитата: RawonaM от декабря 23, 2010, 15:38
Цитата: myst от декабря 23, 2010, 15:37
Какая, если функции перегружать как раз таки можно? ;)
А вот в С-шарпе нельзя. Бесит :(
:o
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 15:41
Цитата: RawonaM от декабря 23, 2010, 15:37
ЦитироватьСвойства обалденно хороши во время отладки.
И не только. Но вводить в язык средства отладки — бред.
Это не основная цель свойств, а приятное дополнение. Свойства это действительно совершенно отдельная ООП-сущность, как и события, например. Конечно, можно полностью эмулировать их, как это делается в Яве, но... ООП ведь можно эмулировать и на чистом Си, и в ассемблере. Смысл высокоуровневых языков в сведению повторяющихся действий к нулю; уничтожению постоянных переизобретений колеса. Думаю, в яве свойств не было не из-за каких-то высоких целей, а просто потому что в языках, с которыми Гослинг до этого работал, их не было.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 15:41
Гринь, да не сравнимо это. Хотя бы срезы типа a[5:25:2], вместо вызова функции — как жизнь упрощает.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 15:43
Цитата: myst от декабря 23, 2010, 15:40
Цитата: RawonaM от декабря 23, 2010, 15:38
Цитата: myst от декабря 23, 2010, 15:37
Какая, если функции перегружать как раз таки можно? ;)
А вот в С-шарпе нельзя. Бесит :(
:o
Тьфу, я имел в виду опциональные параметры нельзя. Бесит :(

Цитата: myst от декабря 23, 2010, 15:39
ЦитироватьНаписал p.prop = фигня, там может его присвоитель компьютер убивает.
То есть если написать p.setProp(фигня), убийство компьютера переносится легче?
Да, ты знаешь, что ты вызываешь функцию, а не просто что-то присваиваешь.
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 15:44
Цитата: RawonaM от декабря 23, 2010, 15:08
Ну дык вот же добавляют потихоньку сладкую жизнь:
http://msdn.microsoft.com/en-us/library/system.tuple.aspx
Это векторы, что ли? И в чём хау-ноу?

Цитата: RawonaM от декабря 23, 2010, 15:08
длинно писать Dictionary...
Улыбнул.

Цитата: Алексей Гринь от декабря 23, 2010, 15:21
Также можно сказать, что все не-sun'овские Java VM в роли догоняющих. И чего?
Дык, не в машине дело, но в платформе.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 15:45
Цитата: myst от декабря 23, 2010, 15:37
И вообще, почему из Жабы не удалили все операторы, раз они такие гадкие?
Согласнен. Знак плюса перегружен для целых и для вещественных. Нехорошо. Нужно сделать как в ОКАМЛЕ (ЕМНИП), ввести знак ./ А то ведь вдруг при вызове 1.0f + 2.0f я хотел вызвать плюс, складывающий целые числа?
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 15:47
Цитата: Алексей Гринь от декабря 23, 2010, 15:45
А то ведь вдруг при вызове 1.0f + 2.0f я хотел вызвать плюс, складывающий целые числа?
А вот с делением не все так гладко. Интеджер или дробь. Хрен поймешь, че вызывается. Думать надо. :)
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 15:47
Цитата: RawonaM от декабря 23, 2010, 15:43
Да, ты знаешь, что ты вызываешь функцию, а не просто что-то присваиваешь.
Что значит просто присваиваешь? И то и другое — операция. У операции есть последствия, и их следует знать, прежде чем её применять. Это отмазкой копальхит. :)
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 15:49
Цитата: RawonaM от декабря 23, 2010, 15:47
А вот с делением не все так гладко. Интеджер или дробь. Хрен поймешь, че вызывается. Думать надо. :)
Неявное приведение типов, не? :eat:
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 15:50
Хех В Visual Studio я только пишу "Di", как мне среда предлагает слово Dictionary. Я жму пробел и слово вставляется. Три нажатия на клавишу. Практически для всех свойств и классов Intellisense попадают в точку в 95% случаев (он запоминает самые часто используемые слова). Т.е. то, что в питоне вшили редактор в язык (т.е. маленькие идентификаторы) - это хорошо, а то что в сишарп вшили возможность поддержки дебагером (свойства) - это плохо. Ну-ну...
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 15:53
Цитата: myst от декабря 23, 2010, 15:47
ЦитироватьДа, ты знаешь, что ты вызываешь функцию, а не просто что-то присваиваешь.
Что значит просто присваиваешь? И то и другое — операция. У операции есть последствия, и их следует знать, прежде чем её применять. Это отмазкой копальхит. :)
Ну вот, теперь надо думать, присваешь ты переменной или свойству, если свойству, то там имплицитно может быть еще 150 действий быть.

Цитата: Алексей Гринь от декабря 23, 2010, 15:50
Хех В Visual Studio я только пишу "Di", как мне среда предлагает слово Dictionary.
Мне тоже предлагает. Но написано-то все-равно длинно остается.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 15:53
Цитата: myst от декабря 23, 2010, 15:39
ЦитироватьНаписал p.prop = фигня, там может его присвоитель компьютер убивает.
То есть если написать p.setProp(фигня), убийство компьютера переносится легче?
Согласен, семантически в яве сеттеры это те же шарповы свойства, т.е. также предлагается, что они работают быстро. Всякий может туда поставить Thread.sleep и ничего.

Цитата: RawonaM от декабря 23, 2010, 15:43
Тьфу, я имел в виду опциональные параметры нельзя. Бесит :(
Ввели в .NET 4, моно давно поддерживает, ещё в с начала 2010 г., вроде.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 15:54
Цитата: RawonaM от декабря 23, 2010, 15:53
ЦитироватьХех В Visual Studio я только пишу "Di", как мне среда предлагает слово Dictionary.
Мне тоже предлагает. Но написано-то все-равно длинно остается.
И чаво?
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 15:56
Ладно, ушёл.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 15:57
Цитата: Алексей Гринь от декабря 23, 2010, 15:54
Цитировать
ЦитироватьХех В Visual Studio я только пишу "Di", как мне среда предлагает слово Dictionary.
Мне тоже предлагает. Но написано-то все-равно длинно остается.
И чаво?
И длинно читать. Сложнее на вид воспринимается, дольше понимать. И писать длинно, если интерактивно. Туда ВС не встроишь.
Чего спорить с явными преимуществами? Питон не тягается с с-шарпом по скорости выполнения, за это экономит время программисту.

Цитата: Алексей Гринь от декабря 23, 2010, 15:53
ЦитироватьТьфу, я имел в виду опциональные параметры нельзя. Бесит :(
Ввели в .NET 4, моно давно поддерживает, ещё в с начала 2010 г., вроде.
Знаю, что ввели, но мы работаем на 3.5. Все это поэтапное добавление бесит. Нельзя сразу сделать нормальный язык? Неужто не ясно, что перегружать функцию ради опциональных параметров — бред.
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 15:58
Цитата: RawonaM от декабря 23, 2010, 15:53
Ну вот, теперь надо думать, присваешь ты переменной или свойству, если свойству, то там имплицитно может быть еще 150 действий быть.
Как ты это можешь перепутать?
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 15:59
Цитата: myst от декабря 23, 2010, 15:58
ЦитироватьНу вот, теперь надо думать, присваешь ты переменной или свойству, если свойству, то там имплицитно может быть еще 150 действий быть.
Как ты это можешь перепутать?
Хм... А ты ясновидящий? Что тут написано: Test.b = 2; ? Проперти или мембер? :)
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 16:00
Цитата: RawonaM от декабря 23, 2010, 15:57
И длинно читать. Сложнее на вид воспринимается, дольше понимать.
:o Ты хочешь сказать, что птичий язык аббревиатур читать легче?

Цитата: RawonaM от декабря 23, 2010, 15:57
Чего спорить с явными преимуществами? Питон не тягается с с-шарпом по скорости выполнения, за это экономит время программисту.
Write-only софт не нужен.
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 16:02
Цитата: RawonaM от декабря 23, 2010, 15:59
Хм... А ты ясновидящий? Что тут написано: Test.b = 2; ? Проперти или мембер? :)
Кто такой мембер? Ты же переменную со свойством собрался спутать? :what:
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 16:03
Цитата: RawonaM от декабря 23, 2010, 15:53
ЦитироватьЧто значит просто присваиваешь? И то и другое — операция. У операции есть последствия, и их следует знать, прежде чем её применять. Это отмазкой копальхит. :)
Ну вот, теперь надо думать, присваешь ты переменной или свойству, если свойству, то там имплицитно может быть еще 150 действий быть.
p.s. Дело в том, что в дотнете не используют публичные поля вообще. Это моветон. Т.е. если ты вызываешь нечто, похожее на поле, извне определения класса, то это определённо свойство. Внутри определения класса конечно ты должен знать что и как быстро вызывается. Свойства по гайдлайну должны быть очень быстрыми, не больше пары строк. Так же и в яве в setProp (который, например, наследован от родителя и по спецификации ожидается быстрота) кто-то может поставить длинное вычисление в пять минут.
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 16:05
Цитата: Алексей Гринь от декабря 23, 2010, 16:03
p.s. Дело в том, что в дотнете не используют публичные поля вообще. Это моветон.
В Жабе та же фигня, только нормального синтаксиса нет.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 16:06
Цитата: myst от декабря 23, 2010, 16:02
ЦитироватьХм... А ты ясновидящий? Что тут написано: Test.b = 2; ? Проперти или мембер? :)
Кто такой мембер? Ты же переменную со свойством собрался спутать? :what:
А какая разница, мембер или переменная? Ну на тебе переменную:
class bla
{
...
void T()
{
...
b = 2;
}
}

Переменная или свойство?
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 16:08
Цитата: myst от декабря 23, 2010, 16:00
ЦитироватьЧего спорить с явными преимуществами? Питон не тягается с с-шарпом по скорости выполнения, за это экономит время программисту.
Write-only софт не нужен.
Зачем врайт-онли? Короче, ниче вы не понимаете :)
На питоне я не буду гуи строить, но если мне надо че-то простенькое с текстом сделать, я уж лучше питоном воспользуюсь.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 16:12
Цитата: Алексей Гринь от декабря 23, 2010, 16:03
p.s. Дело в том, что в дотнете не используют публичные поля вообще. Это моветон. Т.е. если ты вызываешь нечто, похожее на поле, извне определения класса, то это определённо свойство.
Это кстати тупость. Ужасно бесит код типа:

class C
{
private int _a;
public int a
{
set { _a = value; }
get { return _a; }
}
}


И в чем глубокий смысло? Где инкапсуляция и прочие прелести?
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 16:14
Цитата: RawonaM от декабря 23, 2010, 16:06
class bla
{
...
void T()
{
...
b = 2;
}
}

Переменная или свойство?
В твоём примере это может быть всё что угодно: идентификатор типа, метода, пространства имён,...
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 16:16
Цитата: RawonaM от декабря 23, 2010, 16:08
Зачем врайт-онли? Короче, ниче вы не понимаете :)
Я уже столько наелся птичьего кода. У меня аллергия. :)

Цитата: RawonaM от декабря 23, 2010, 16:08
На питоне я не буду гуи строить, но если мне надо че-то простенькое с текстом сделать, я уж лучше питоном воспользуюсь.
А что он умеет такого делать с текстом?
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 16:17
Цитата: RawonaM от декабря 23, 2010, 16:12
class C
{
private int _a;
public int a
{
set { _a = value; }
get { return _a; }
}
}
Как, разве это до сих пор обязательно?
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 16:20
Цитата: myst от декабря 23, 2010, 16:14
В твоём примере это может быть всё что угодно: идентификатор типа, метода, пространства имён,...
Чёё?!

Цитата: myst от декабря 23, 2010, 16:16
ЦитироватьНа питоне я не буду гуи строить, но если мне надо че-то простенькое с текстом сделать, я уж лучше питоном воспользуюсь.
А что он умеет такого делать с текстом?
Все что в с-шарпе делается мульёнами строк. Еще мне нравится сетовая математическая нотация: [w for w in mydict if "ax" in w]. Делает жизнь прекраснее :)
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 16:20
Цитата: myst от декабря 23, 2010, 16:17
Как, разве это до сих пор обязательно?
Не понял...
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 17:14
Цитата: RawonaM от декабря 23, 2010, 16:20
Чёё?!
Вот-вот, чёё такое b, где объявление? :)

Цитата: RawonaM от декабря 23, 2010, 16:20
Не понял...
int a{get;set;}
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 19:59
Цитата: RawonaM от декабря 23, 2010, 15:57
Цитировать
Цитировать
ЦитироватьХех В Visual Studio я только пишу "Di", как мне среда предлагает слово Dictionary.
Мне тоже предлагает. Но написано-то все-равно длинно остается.
И чаво?
И длинно читать. Сложнее на вид воспринимается, дольше понимать. И писать длинно, если интерактивно. Туда ВС не встроишь.
Чего спорить с явными преимуществами? Питон не тягается с с-шарпом по скорости выполнения, за это экономит время программисту.
Согласно исследованием, глаз при чтении передвигается скачками от 1 до 20 знаков, хотя в среднем это около 10 знаков, а время затрачивается на каждый блок от 100 мс до 500 мс, в среднем 200 мс. Думаю, разница в сотню миллисекунд компенсируется временем на расшифровку аббревиатур типа dic_ht_sr_pr и листание обратно к первому определению, чтобы понять, что это вообще.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 20:00
Цитата: Алексей Гринь от декабря 23, 2010, 15:56
Знаю, что ввели, но мы работаем на 3.5. Все это поэтапное добавление бесит. Нельзя сразу сделать нормальный язык?
Всё и сразу? А что питон не могли сделать сразу таким, какой он в версии 3000? Неужто хитрые планы ван Россума по выдою из хомячков денег? Нет, коммерческий софт развивается по тем же схемам, что и опенсорс. Нет предела совершенству - какую-то версию в какой-то момент надо уже выпускать, т.к. совершенствоваться можно долго и по сути бесконечно, а продукт нужно выставлять на обозрение уже сейчас.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 20:03
Цитата: RawonaM от декабря 23, 2010, 15:57
Неужто не ясно, что перегружать функцию ради опциональных параметров — бред.
Забавно, что Хейлсберг как-то называл опциональные параметры перегрузкой для бедных. И надо ж тебе поди ж ты, сишарп оказался бедным языком :)
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 20:14
Хочется инкапсуляции? На геттеры и сеттеры можно разные модификаторы вешать. Привожу пример из жизни C# 3:

Цитироватьpublic SceneManager SceneManager { get; protected set; }

Эта одна строка является аналогом явового:

Цитироватьprivate SceneManager sceneMgr;
protected void setSceneManager(SceneManager sceneMgr) { this.sceneMgr = sceneMgr; }
public SceneManager getSceneManager() { return this.sceneMgr; }

Это определено в интерфейсе. Т.е. с точки зрения интерфейса мы менеджер сцены можем только читать. Но потомки-реализации интерфейса могут это свойство и менять. Простые поля, например, нельзя определять в интерфейсе (в яве, вроде, тоже). Зато свойства можно, т.к. это те же методы внутри.
Поэтому их можно сделать также виртуальным или абстрактным.

Цитата: myst от декабря 23, 2010, 16:17
ЦитироватьА что он умеет такого делать с текстом?
Все что в с-шарпе делается мульёнами строк. Еще мне нравится сетовая математическая нотация: [w for w in mydict if "ax" in w].
Всё это давно возможно и в C# посредством linq, например.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 20:26
Цитата: RawonaM от декабря 23, 2010, 16:06
class bla
{
...
void T()
{
...
b = 2;
}
}

Переменная или свойство?
Свойств, пишущихся с маленькой буквы, не бывает :) (иначе это плохая практика) Здесь b это определённо или поле класса, или переменная, определённая в функции. Но это не проблема C# per se. Чтобы различать, я предпочитаю делать явное this.b для полей.
Название: Java vs C#
Отправлено: myst от декабря 23, 2010, 22:12
На самом деле пример совершенно надуманный, так как автор по-любому знает, что пишет, а читатель, если к этому моменту ещё не знает, то должен посмотреть определение, иначе дальнейший код ему будет непонятен. То есть как ни крути, проблемы нет.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 22:37
Цитата: myst от декабря 23, 2010, 22:12
На самом деле пример совершенно надуманный, так как автор по-любому знает, что пишет, а читатель, если к этому моменту ещё не знает, то должен посмотреть определение, иначе дальнейший код ему будет непонятен. То есть как ни крути, проблемы нет.
Автор может не помнить, если писал этот код пять лет назад, так же как и читатель не может ходить и смотреть сеттеры всех пропертиз. А проблем вообще никогда никаких нет, вопрос потраченного времени.

Цитата: myst от декабря 23, 2010, 17:14
ЦитироватьНе понял...
int a{get;set;}
И нах это надо, если можно просто int a?
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 22:39
Цитата: Алексей Гринь от декабря 23, 2010, 20:26
Свойств, пишущихся с маленькой буквы, не бывает :) (иначе это плохая практика) Здесь b это определённо или поле класса, или переменная, определённая в функции. Но это не проблема C# per se. Чтобы различать, я предпочитаю делать явное this.b для полей.
У всех свои предпочтения и язык дает возможность разных вариантам, что создает потенциальное злоупотребление и недопонимание.

Все проблемы вообще надуманные и их никогда нет, если придерживаться строгих правил и все четко помнить наизусть. ИРЛ ситуация не такая, особенно когда над кодом работаешь возвращаясь к нему раз в несколько месяцев и код вообще не твой.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 22:44
Чё-то Равонам умалчивает тот факт, что в Питоне есть такое понятие, как дескрипторы. Т.е. в питоне this.x = 10 тоже на самом деле может быть вызовом функции. И самый сок в том, что это непросто определить, т.к. весь язык построен на скрытых хаках. А в C# явно видно, что перед нами свойство, т.е. если боишься, то всегда можно закешировать его.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 22:48
А разве я был против пропертизов? Я только указал на возможные их недостатки, которые иногда могут забрать в два раза больше времени, чем экономится на пропертизах вообще.

А вообще мне они очень даже нравятся.

Питон и сшарп некорректно сравнивать, как их можно вообще в одной строке писать-то..

Самый скрытохакный язык — Жабаскрипт.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 22:51
Цитата: RawonaM от декабря 23, 2010, 22:39
У всех свои предпочтения и язык дает возможность разных вариантам, что создает потенциальное злоупотребление и недопонимание.
Это неприменимо для C#. Нужно писать по установлённым порядкам: имена публичных членов с большой буквы, приватных — с маленькой. Приватные свойства не имеют смысла, т.к. свойства существуют только ради красоты интерфейса, поэтому свойства всегда с большой буквы. Иначе засмеют.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 22:54
Цитата: RawonaM от декабря 23, 2010, 22:48
только указал на возможные их недостатки, которые иногда могут забрать в два раза больше времени, чем экономится на пропертизах вообще.
Я не понял, где ты указывал на их недостатки. Даже в яве и в питоне и в си мало кто использует поля для публичного интерфейса. Делают функции-обёртки (в си — макросы) вокруг полей. Сам-то класс может работать со своими полями напрямую. Свойства созданы чисто для интерфейса, и там я никаких недостатков не вижу. Конечно, если с какого-то перепугу использовать приватные свойства, то можно запутаться.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 22:56
Цитата: Алексей Гринь от декабря 23, 2010, 22:51
ЦитироватьУ всех свои предпочтения и язык дает возможность разных вариантам, что создает потенциальное злоупотребление и недопонимание.
Это неприменимо для C#. Нужно писать по установлённым порядкам: имена публичных членов с большой буквы, приватных — с маленькой. Приватные свойства не имеют смысла, т.к. свойства существуют только ради красоты интерфейса, поэтому свойства всегда с большой буквы. Иначе засмеют.
Засмеют — не аргумент. Во-первых, как отличить публичный член от проперти — не ясно, даже если придерживаться правил. Во-вторых, чего ж тогда эти порядки не встроены в язык? "Нужно писать так, а то засмеют" — это детсад. Если язык позволяет вариации, значит каждая компания может решить использовать это по-своему.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 22:57
Цитата: Алексей Гринь от декабря 23, 2010, 22:54
Я не понял, где ты указывал на их недостатки.
Ну что ж делать, не можем мы на 100% друг друга понимать. Значит проехали :)
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 23:00
Цитата: Алексей Гринь от декабря 23, 2010, 22:54
Свойства созданы чисто для интерфейса,
Ещё для избежания проблем с versioning.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 23:04
Цитата: RawonaM от декабря 23, 2010, 22:56
Во-первых, как отличить приватный член от проперти — не ясно, даже если придерживаться правил.
Не понял. Если придерживаться правил, то свойство будет с большой буквы, а поле — с маленькой. Так и отличать.

Цитата: RawonaM от декабря 23, 2010, 22:56
"Нужно писать так, а то засмеют" — это детсад.
Ну это я утрировал. Пишут ведь не по гайдлайнам только студенты первого курса или полные мудаки. Логично, что засмеют. Писать-то нужно не потому, что засмеют, а потому что чтобы избежать как раз проблемы с тем, поле перед нами или опушка.

Цитата: RawonaM от декабря 23, 2010, 22:56
Если язык позволяет вариации, значит каждая компания может решить использовать это по-своему.
Если язык позволяет выстрелить себе в ногу, это не повод стрелять себе в ногу.
Я не видел ещё, чтобы кто-либо серьёзный писал на C# по иным гайдлайнам, чем установлено.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 23:08
Цитата: Алексей Гринь от декабря 23, 2010, 23:04
ЦитироватьВо-первых, как отличить приватный член от проперти — не ясно, даже если придерживаться правил.
Не понял. Если придерживаться правил, то свойство будет с большой буквы, а поле — с маленькой. Так и отличать.
Я очепятался, уже там исправил. Публичный член.

Цитата: Алексей Гринь от декабря 23, 2010, 23:04
ЦитироватьЕсли язык позволяет вариации, значит каждая компания может решить использовать это по-своему.
Если язык позволяет выстрелить себе в ногу, это не повод стрелять себе в ногу.
Повод еще как. Иначе можно вернуться к бестипным языкам и вообще ниче не проверять, если че-то не так сделал ССЗБ — и досвидания. Языки должны быть максимально удобными и экономить время, а не заставлять думать, какой тут капкан может быть.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 23:09
Цитата: Алексей Гринь от декабря 23, 2010, 23:04
Я не видел ещё, чтобы кто-либо серьёзный писал на C# по иным гайдлайнам, чем установлено.
Напрашивается вывод, что правила должны быть встроены в язык.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 23:11
И вообще, имхо самой банальной вещи в пропертях не хватает: индексаторов. Где-то читал, что в С-шарпе их убрали намеренно, хотя в васике и прочих дотнетах есть. Может в четверке уже одумались?
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 23:21
Цитата: RawonaM от декабря 23, 2010, 23:08
Цитировать
ЦитироватьВо-первых, как отличить приватный член от проперти — не ясно, даже если придерживаться правил.
Не понял. Если придерживаться правил, то свойство будет с большой буквы, а поле — с маленькой. Так и отличать.
Я очепятался, уже там исправил. Публичный член.
Терминология странная. Публичное свойство и есть публичный член. Имеется в виду поле? Как я уже сказал, в .NET публичные поля не рекомендуется использовать. Они допустимы разве что при P/Invoke при описании unmanaged structs, т.к. там инкапсуляция не нужна.
Во-первых, публичные поля не рекомендуются из-за возможных проблем с versioning, потому что логика может поменяться (напр., нужно полученный результат как-то изменить), а код везде (в том числе клиентский, если у нас библиотека) использует напрямую поле. Это ломание API.
Во-вторых, зачем вообще отличать поля от свойств? По гайдлайнам свойство должно производить гарантированно быструю операцию, т.е. оверхеда никакого не должно быть. Напр. поэтому в базовой библиотеке классов Object имеет метод GetHashCode, а не свойство HashCode, т.к. неизвестно сколько долго будет браться хеш, если переопределять метод в дочерних классах. Бояться, что а вдруг свойство будет думать минуту — это паранойя, которая на практике имеет мало смысла (с профайлером проблему легко найти).
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 23:22
Цитата: RawonaM от декабря 23, 2010, 23:09
ЦитироватьЯ не видел ещё, чтобы кто-либо серьёзный писал на C# по иным гайдлайнам, чем установлено.
Напрашивается вывод, что правила должны быть встроены в язык.
Может, так и есть. Не читал стандарт C#'овский. Но вообще это правила общие для .NET'а, хотя и допустимо использовать собственные конвенции, напр. как это есть в F# (там много чисто OCAML-овых функций_в_известном_стиле). Вообще в .NET'е есть ещё такая штука, как CLS compliance. Её можно нарушать, а можно не нарушать — смотря какие цели. Там поумнее всё сделано всё-таки, чем в жабке, и не так всё лоботомично.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 23:25
Цитата: RawonaM от декабря 23, 2010, 23:11
И вообще, имхо самой банальной вещи в пропертях не хватает: индексаторов. Где-то читал, что в С-шарпе их убрали намеренно, хотя в васике и прочих дотнетах есть.
Ну они редко когда нужны, а если нужны, то легко эмулируются аггрегацией.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 23:30
Цитата: Алексей Гринь от декабря 23, 2010, 23:21
Во-вторых, зачем вообще отличать поля от свойств?
Чтобы знать, вызывается функция или просто присваивается значение. С этого же все началось.
Впрочем, с точки зрения инкапсуляции этого не надо знать. Но когда разбираешь код класса какого-нибудь, нужно думать, вот тут присваивается проперти — а вдруг его сеттер делает какие-то действия?..
Если сеттеры и геттеры никогда ничего не делают помимо присвоения, то они вообще не нужны.

Цитата: Алексей Гринь от декабря 23, 2010, 23:21
Во-первых, публичные поля не рекомендуются из-за возможных проблем с versioning, потому что логика может поменяться (напр., нужно полученный результат как-то изменить), а код везде (в том числе клиентский, если у нас библиотека) использует напрямую поле. Это ломание API.
Так в сегодняшней реализации публичные поля используется так же, как и пропертиз. Завтра че-то изменится — замени на проперти если надо, ничего менять в существующих кодах не надо, даже и перекомпилировать не надо.

Впрочем, если на сегодня проперти определяется одной строкой и не отличается от переменной, а переменная создается имплицитно, то они вообще не отличаются.

Короче получается так: с одной стороны это удобно и юзфул, с другой стороны юзать их нужно в хирургических перчатках. Чтобы сделать ридонли поля проперти не обязательно было вводить.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 23:36
Цитата: Алексей Гринь от декабря 23, 2010, 23:22
Там поумнее всё сделано всё-таки, чем в жабке, и не так всё лоботомично.
C этим согласен полюбэ.

Цитата: Алексей Гринь от декабря 23, 2010, 23:25
ЦитироватьИ вообще, имхо самой банальной вещи в пропертях не хватает: индексаторов. Где-то читал, что в С-шарпе их убрали намеренно, хотя в васике и прочих дотнетах есть.
Ну они редко когда нужны, а если нужны, то легко эмулируются аггрегацией.
Это как понять — легко? Мне нужно простую вещь сделать, а теперь эмуляцию строить...
Даю пример, буквально сегодня ломал голову. Я в С-диезе новичок, может че-то дельное подскажешь, чем просто языками трепать :)
Например, есть приватный массив допустим string a[]. Мне нужна пропертя, которая выдаст по индексу n — a[n][0]. Как это легко сделать? Получается, что если в лоб, то надо выдавать целый массив первых караткеров из того массива.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 23:38
Геттеры и сеттеры отлично инлайнятся, если кто-то озабочен оверхедом на установку стекфрейма при вызове скрытого метода.
Название: Java vs C#
Отправлено: RawonaM от декабря 23, 2010, 23:41
Цитата: Алексей Гринь от декабря 23, 2010, 23:38
Геттеры и сеттеры отлично инлайнятся, если кто-то озабочен оверхедом на установку стекфрейма при вызове скрытого метода.
Овергедом я не озабочен, это вообще отдельный вопрос. Я озабочен их надобностью.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 23, 2010, 23:51
Цитата: RawonaM от декабря 23, 2010, 23:30
Но когда разбираешь код класса какого-нибудь, нужно думать, вот тут присваивается проперти — а вдруг его сеттер делает какие-то действия?..
В таком случае (внутри класса) если имя идентификатора с заглавной буквы — то метод вызывается, если со строчной — то просто ставится поле.

Вообще конечно есть такая фигня, что геттеры и сеттеры у некоторых имеют слишком много побочных эффектов. Порицаю. Однако это не проблема C# совсем, а вообще всех языков.

Цитата: RawonaM от декабря 23, 2010, 23:30
Впрочем, с точки зрения инкапсуляции этого не надо знать.
В том-то и дело. Как раз-таки публичные поля — это выставление кишок на показ. В некоторых ООП-языка х (ЕМНИП, objc, smalltalk) публичные поля вообще запрещены. Не понятно об чём с пор: геттеры и сеттеры признаются негодными, т.к. не позволяют писать плохой код. Очень жаль!

Цитата: RawonaM от декабря 23, 2010, 23:30
Завтра че-то изменится — замени на проперти если надо, ничего менять в существующих кодах не надо, даже и перекомпилировать не надо.
Хм. Перекомпилировать надо, т.к. вызов свойства это вызов внутреннего метода get_XXX. Сделано это потому как некоторые языки не имеют категория свойства. На уровне байткода вызов поля это байткодина ldfld, а вызов свойства это байткодина calli.

Цитата: RawonaM от декабря 23, 2010, 23:30
Чтобы сделать ридонли поля проперти не обязательно было вводить.
Дык есть и ридонли-поля. Только проперти делают гораздо больше: 1) возможность объявления в интерфейсах 2) возможность переопределения в дочерних классах 3) возможность изменения поведения без ломания API 4) просто визуально красота. Куда лучше x.Prop += 1; чем x.setProp(x.getProp() + 1);

Цитата: RawonaM от декабря 23, 2010, 23:30
Если сеттеры и геттеры никогда ничего не делают помимо присвоения, то они вообще не нужны.
Свойства могу ткуда бльше, чем просто присвоение, см. выше. Но даже если они ничё это не делают конкретно сейчас, они могут понадобиться потом, да и вообще ортогональность и максимализм рулят.

Цитата: RawonaM от декабря 23, 2010, 23:36
Например, есть приватный массив допустим string a[]. Мне нужна пропертя, которая выдаст по индексу n — a[n][0]. Как это легко сделать?
Чё-то не понял, что нужно.
Название: Java vs C#
Отправлено: RawonaM от декабря 24, 2010, 00:06
Цитата: Алексей Гринь от декабря 23, 2010, 23:51
ЦитироватьВпрочем, с точки зрения инкапсуляции этого не надо знать.
В том-то и дело. Как раз-таки публичные поля — это выставление кишок на показ. В некоторых ООП-языка х (ЕМНИП, objc) публичные поля вообще запрещены. Не понятно об чём с пор: геттеры и сеттеры признаются негодными, т.к. не позволяют писать плохой код. Очень жаль!
Чем отличается публичное поле от public int a{ get; set; }?
Упрощаю парадокс: у сеттерах/геттерах возможно сделать все, но делать этого нельзя, кроме того, что делают эти дефолтные.

Цитата: Алексей Гринь от декабря 23, 2010, 23:51
ЦитироватьНапример, есть приватный массив допустим string a[]. Мне нужна пропертя, которая выдаст по индексу n — a[n][0]. Как это легко сделать?
Чё-то не понял, что нужно.
Помечтаем о суппорте индексов:
class C
{
private string a[];
public char A0[index]
{
   get { return a[index][0] }
}

void dummy()
{
char c = a[2][0];
char d = A0[2];
}
}


В итоге с и d должны быть равны.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 24, 2010, 00:21
Цитата: RawonaM от декабря 24, 2010, 00:06
Чем отличается публичное поле от public int a{ get; set; }?
Тем, что свойство public int Count { get; set; } может быть реализицией интерфейса

interface ICountable
{
    public int Count { get; set; }
}


Цитата: RawonaM от декабря 24, 2010, 00:06
но делать этого нельзя, кроме того, что делают эти дефолтные.
С чего хоть. Всё что угодно можно делать.

Пример из мира матриц:

        public Vector3 Scale
        {
            get
            {
                return new Vector3(this.M00, this.M11, this.M22);
            }
            set
            {
                this.M00 = value.X;
                this.M11 = value.Y;
                this.M22 = value.Z;
            }
        }


Цитата: RawonaM от декабря 24, 2010, 00:06
Помечтаем о суппорте индексов:
Это малость нетривиально, поэтому надо методом GetFirstChar.
Если сильно приспичит, то можно эмулировать созданием вспомогательного класса что-то вроде

Цитироватьpublic struct StringIndexer
{
    private string[] strs;
    internal StringIndexer(string[] strs) { this.strs = strs; }

   public char this[int index] { get { return strs[index][0]; } }
}

...

public StringIndexer A0
{
   get { return new StringIndexer(this.a); }
}

...

char d = A0[2];

В Winforms таким методом сделано определённое число классов с именованным индексатором (то есть реально возвращаются специальные объекты). По-моему, это не очень сложно, учитывая нераспространённость такого случая.
Название: Java vs C#
Отправлено: RawonaM от декабря 24, 2010, 00:29
Цитата: Алексей Гринь от декабря 24, 2010, 00:21
ЦитироватьПомечтаем о суппорте индексов:
Это малость нетривиально, поэтому надо методом GetFirstChar.
Если сильно приспичит, то можно эмулировать созданием вспомогательного класса что-то вроде
Ж*** короче. Понятно, что классом можно сэмулировать, но мне это ни к селу ни к городу вообще.

Цитата: Алексей Гринь от декабря 24, 2010, 00:21
По-моему, это не очень сложно, учитывая нераспространённость такого случая.
Случай это не то чтобы нераспространенный, он вообще постоянно нужен. Без него проперти неполноценные ни разу. Если я хочу вернуть значение как функция от индекса, а не массив вернуть. Фигня в общем нездоровая.

Цитата: Алексей Гринь от декабря 24, 2010, 00:21
Цитироватьно делать этого нельзя, кроме того, что делают эти дефолтные.
С чего хоть. Всё что угодно можно делать.

Пример из мира матриц:
Вот, наделал там, а кто-то читает код и ниче не понимает, потому что куча операций имплицитно делаются. Следовательно, нельзя делать все что захочешь в функциях доступа.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 24, 2010, 00:45
Цитата: RawonaM от декабря 24, 2010, 00:29
Ж*** короче.
Да чё хоть жопа. Там класс вспомогательный аж 4 полноценных строчки. Напоминаю, что в яве просто тупо описать поле, поставить один бессмысленный сеттер и один бессмысленный геттер это уже 3 строчки.

Цитата: RawonaM от декабря 24, 2010, 00:29
Случай это не то чтобы нераспространенный, он вообще постоянно нужен. Без него проперти неполноценные ни разу. Если я хочу вернуть значение как функция от индекса, а не массив вернуть. Фигня в общем нездоровая.
Спорно.

Цитата: RawonaM от декабря 24, 2010, 00:29
Вот, наделал там, а кто-то читает код и ниче не понимает, потому что куча операций имплицитно делаются.
Всегда есть комментарии.
Название: Java vs C#
Отправлено: myst от декабря 24, 2010, 08:39
Цитата: RawonaM от декабря 23, 2010, 22:37
Автор может не помнить, если писал этот код пять лет назад, так же как и читатель не может ходить и смотреть сеттеры всех пропертиз. А проблем вообще никогда никаких нет, вопрос потраченного времени.
Тебе так и так придётся смотреть определение b и тратить на это время. Я вариант с ясновидением не рассматриваю, возможно, зря... :eat:

Цитата: RawonaM от декабря 23, 2010, 22:37
И нах это надо, если можно просто int a?
А как компилятор будет свойства от переменных отличать?

Цитата: RawonaM от декабря 23, 2010, 22:39
Все проблемы вообще надуманные и их никогда нет, если придерживаться строгих правил и все четко помнить наизусть. ИРЛ ситуация не такая, особенно когда над кодом работаешь возвращаясь к нему раз в несколько месяцев и код вообще не твой.
В таком режиме птичий код, напичканный сокращениями, вообще противопоказан. Это не ты его выше рекламировал? ;)
Название: Java vs C#
Отправлено: myst от декабря 24, 2010, 08:56
Цитата: RawonaM от декабря 23, 2010, 22:48
Я только указал на возможные их недостатки, которые иногда могут забрать в два раза больше времени, чем экономится на пропертизах вообще.
Ты так и не привёл убедительных примеров.

Цитата: RawonaM от декабря 23, 2010, 22:48
Самый скрытохакный язык — Жабаскрипт.
?

Цитата: RawonaM от декабря 23, 2010, 22:56
Во-первых, как отличить публичный член от проперти — не ясно, даже если придерживаться правил.
Это совершенно не нужно. Свойство — это дополнительное средство отделения интерфейса от реализации. Тебя вообще не должно волновать, просто там присваивание или непросто. Все эти ахи-охи по поводу накладных расходов называется преждевременная пессимизация — один из смертных грехов программирования.
Название: Java vs C#
Отправлено: myst от декабря 24, 2010, 09:06
Цитата: RawonaM от декабря 24, 2010, 00:29
Вот, наделал там, а кто-то читает код и ниче не понимает, потому что куча операций имплицитно делаются. Следовательно, нельзя делать все что захочешь в функциях доступа.
Опять двадцать пять. То есть документацию не читаем, код не читаем, логику не понимаем, пишем сами чего не знаем?
Название: Java vs C#
Отправлено: myst от декабря 24, 2010, 09:20
Цитата: RawonaM от декабря 23, 2010, 23:36
Например, есть приватный массив допустим string a[]. Мне нужна пропертя, которая выдаст по индексу n — a[n][0]. Как это легко сделать? Получается, что если в лоб, то надо выдавать целый массив первых караткеров из того массива.
Чё-то я спросонья не пойму, а в чём проблема?

using System;
class test1
{
public test1(int size){strings = new string[size];}
private string[] strings;
public string this[int i]
{
get{return strings[i];}
set{strings[i] = value;}
}
}

class test
{
public static void Main(string[] args)
{
test1 a = new test1(5);
a[1] = "hello";
Console.WriteLine(a[1][3]);
}
}
Название: Java vs C#
Отправлено: Тайльнемер от декабря 24, 2010, 10:18
Цитата: myst от декабря 24, 2010, 09:20
Чё-то я спросонья не пойму, а в чём проблема?
Проснитесь и перечитайте Равонама.
Название: Java vs C#
Отправлено: myst от декабря 24, 2010, 11:04
Проснулся, перечитал. Ему надо a.prop, которая будет вертать a.strings
  • , да?
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 24, 2010, 14:26
Цитата: Алексей Гринь от декабря 23, 2010, 23:51
вызов свойства это байткодина calli.
call

Цитата: Алексей Гринь от декабря 24, 2010, 00:21
Тем, что свойство public int Count { get; set; } может быть реализицией интерфейса

interface ICountable
{
    public int Count { get; set; }
}

Цитироватьinterface ICountable
{
    int Count { get; set; }
}

Всё-таки, думаю, именованные свойства в C# видимо не просто так не включили — видимо, не так часто используются, к тому же вспомогательными классами как-то гибче... А в VB.NET они есть только потому что (ЕМНИП) в VB6 были, вот и всё...

Всё-таки, мне кажется, получение первого чара строки n это не простое взятие свойства, а скорее функция.
Название: Java vs C#
Отправлено: злой от декабря 25, 2010, 18:43
Цитата: Алексей Гринь от декабря 23, 2010, 13:16
сумасшедший коммунист Столлман, который за всю жизнь осилил написать только программу-блокнот

Здравствуйте пожалуйста. GDB, конечно же, Алексей Гринь напейсал.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 25, 2010, 19:13
ЦитироватьПервоначально написан Ричардом Столлмэном в 1988 году. С 1990 до 1993 гг. поддерживался Джоном Джилмором, во время его работы в компании Cygnus Solutions.

Целых два года писал, дойдя до версии 0.0.01 alpha, которая умела аж написать имя лицензии, с которой написана и имя автора! Молодец! А Линус до сих пор лично отслеживает все добавления в ядро. В то время как Столлмян кляузничает и борется с мельницами.
Название: Java vs C#
Отправлено: myst от декабря 25, 2010, 19:48
Цитата: Алексей Гринь от декабря 25, 2010, 19:13
А Линус до сих пор лично отслеживает все добавления в ядро.
То есть сам тоже уже не пишет? :eat:
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 25, 2010, 20:01
Пишет. Не помню как было давно, но успехом пользовалась новость, что он переписал кое-чё на си, и получилось быстрее, чем существующая оптимизированная версия на ассемблере.

Про Столлмана сложно что-то такое вспомнить. Он больше юрист и политик, чем программист.
Название: Java vs C#
Отправлено: myst от декабря 25, 2010, 21:25
Цитата: Алексей Гринь от декабря 25, 2010, 20:01
Пишет. Не помню как было давно, но успехом пользовалась новость, что он переписал кое-чё на си, и получилось быстрее, чем существующая оптимизированная версия на ассемблере.
Осенью он костыль на коленке слепил для программ, которые неправильно используют memcpy. У него звук из-за этого пердел или что-то в этом роде.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 25, 2010, 21:55
Цитата: myst от декабря 25, 2010, 21:25
которые неправильно используют memcpy
Это ж как можно им неправильно пользоваться-то? Только если overlapped-память. Но ведь каждый ПТУшник знает, что нужно использовать memmove! Такие вот люди в опенсорсе.
Название: Java vs C#
Отправлено: myst от декабря 26, 2010, 09:13
Цитата: Алексей Гринь от декабря 25, 2010, 21:55
Это ж как можно им неправильно пользоваться-то? Только если overlapped-память. Но ведь каждый ПТУшник знает, что нужно использовать memmove! Такие вот люди в опенсорсе.
Ещё одно подтверждение того, что каждый ПТУшник знает недостаточная защита от ошибок. И это не последняя ягодка C, колоццо и колоццо предстоит долгие годы. Вирт был прав на 200%, все эти undefined behaviours добром не кончаются, доказано C. :) И не надо про бидлокодеров мне рассказывать. :negozhe:
Кстати, я точно уже не помню, но вроде у флэша такая же фигня, или даже именно в нём у Линуса звук и пердел. :)
Название: Java vs C#
Отправлено: Alone Coder от декабря 26, 2010, 09:16
Много багов из-за путаницы signed/unsigned - довольно трудно без тайпкаста угадать, какого типа конкретный промежуточный результат. Если бы вместо "знаковых типов" были "знаковые операции" (что в реальности и происходит), было бы куда проще.
Название: Java vs C#
Отправлено: myst от декабря 26, 2010, 10:05
Цитата: Alone Coder от декабря 26, 2010, 09:16
Много багов из-за путаницы signed/unsigned - довольно трудно без тайпкаста угадать, какого типа конкретный промежуточный результат.
О таком смешении предупреждает компилятор.
Название: Java vs C#
Отправлено: Alone Coder от декабря 26, 2010, 10:08
Не всегда. Например, читаем из потока байты, а используем как знаковые числа. У моего друга был такой случай. Никакой компилятор не угадает, как должно быть.
Название: Java vs C#
Отправлено: myst от декабря 26, 2010, 10:17
Входные данные программы вообще не дело компилятора. Пример не из того тазика.
Название: Java vs C#
Отправлено: Alone Coder от декабря 26, 2010, 10:36
Получается, что мы при программировании мы пытаемся описывать знаковые/беззнаковые операции в терминах знаковых/безнаковых чисел, а потом компилятор делает обратную операцию. ЗАЧЕМ?
Название: Java vs C#
Отправлено: myst от декабря 26, 2010, 10:39
Цитата: Alone Coder от декабря 26, 2010, 10:36
Получается, что мы при программировании мы пытаемся описывать знаковые/беззнаковые операции в терминах знаковых/безнаковых чисел, а потом компилятор делает обратную операцию. ЗАЧЕМ?
Какую обратную операцию он делает? :o
Название: Java vs C#
Отправлено: myst от декабря 26, 2010, 10:40
Вирт, как известно, вообще радикально решил эту проблему: убрал беззнаковые целые как класс.
Название: Java vs C#
Отправлено: Alone Coder от декабря 26, 2010, 10:42
В зависимости от типов операндов вставляет знаковые и беззнаковые операции.

Язык без беззнаковых целых - это нелепо. Как через них делать широкие типы? Как должны работать сдвиги и пр.?
Название: Java vs C#
Отправлено: myst от декабря 26, 2010, 11:01
Цитата: Alone Coder от декабря 26, 2010, 10:42
В зависимости от типов операндов вставляет знаковые и беззнаковые операции.
И где здесь обратная операция?

Я не пойму, Вы предлагаете, отменить типизацию данных, что ли?

Цитата: Alone Coder от декабря 26, 2010, 10:42
Язык без беззнаковых целых - это нелепо.
Расскажите об этом Вирту.

Цитата: Alone Coder от декабря 26, 2010, 10:42
Как через них делать широкие типы?
Что это? Зачем оно нужно?

Цитата: Alone Coder от декабря 26, 2010, 10:42
Как должны работать сдвиги и пр.?
man Oberon
Название: Java vs C#
Отправлено: Alone Coder от декабря 26, 2010, 11:39
Цитата: myst от декабря 26, 2010, 11:01
Я не пойму, Вы предлагаете, отменить типизацию данных, что ли?
Я предлагаю всего лишь указывать знаковость не в типе данных, а в самой операции.
Название: Java vs C#
Отправлено: RawonaM от декабря 26, 2010, 12:42
Вот, решил тут было воспользоваться автопропертями. А у них, как оказалось, невозможно выставить начальное значение! Когда этот язык доведут до ума, диез этот?  >(
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 26, 2010, 13:18
Цитата: myst от декабря 26, 2010, 11:01
ЦитироватьЯзык без беззнаковых целых - это нелепо.
Расскажите об этом Вирту.
Это не тому ли, у которого из придуманных языков популярен только один, и то среди школьников? :) Ну да, школьникам беззнаковые не пригодятся.

У беззнаковых профит в том, что не нужно проверять нижнюю границу на выход за пределы диапазона...
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 26, 2010, 13:22
Цитата: RawonaM от декабря 26, 2010, 12:42
Вот, решил тут было воспользоваться автопропертями. А у них, как оказалось, невозможно выставить начальное значение!
В конструкторе поставить религия мешает?
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 26, 2010, 13:42
Цитата: RawonaM от декабря 26, 2010, 12:42
Вот, решил тут было воспользоваться автопропертями. А у них, как оказалось, невозможно выставить начальное значение! Когда этот язык доведут до ума, диез этот?
Вообще это логично, и уже доведено до ума. Если сразу после указания проперти ставить знак равенства и дефолтное значение, то встаёт вопрос: при приравнивании компилятор должен ставить значение сразу в поле (что невозможно в случае неавтоматических пропертей), или задействовать механизм пропертей (т.е. с вызовом метода)? Это во-первых. А во-вторых, если верно второе, то задействование механизма пропертей это же вызов метода, а это есть конструкция с побочными эффектами, и в таком виде ставить небезопасно — прочие поля ещё не гарантируются быть установленными, а мы можем на них, неинициализированные, надеяться. Поэтому Хейлсберг принудил проставлять значение в конструкторе, где последовательность прозрачна.
Название: Java vs C#
Отправлено: RawonaM от декабря 26, 2010, 13:48
Цитата: Алексей Гринь от декабря 26, 2010, 13:22
ЦитироватьВот, решил тут было воспользоваться автопропертями. А у них, как оказалось, невозможно выставить начальное значение!
В конструкторе поставить религия мешает?
И какой в этом глубокий смысл? А отказаться от пропертиз вообще религия мешает? Конструктор где находится, а проперти где.
Я предпочел создать вместо автопроперти нормальую проперти и вместо имплицитного поля эксплицитное с инициализацией, зато сразу видно, что происходит.
Название: Java vs C#
Отправлено: RawonaM от декабря 26, 2010, 13:50
Цитата: Алексей Гринь от декабря 26, 2010, 13:42
Вообще это логично, и уже доведено до ума.
Не считаю. Как и с индексатором. В васике есть индексаторы, хоть бери и на васик переходи.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 26, 2010, 13:53
Цитата: RawonaM от декабря 26, 2010, 13:50
ЦитироватьВообще это логично, и уже доведено до ума.
Не считаю.
Аргументы будут? Уж думаю у Хейлсберга опыта в языко- и компиляторостроении побольше будет.

Цитата: RawonaM от декабря 26, 2010, 13:48
Конструктор где находится, а проперти где.
И чего? В реальной жизни больше половины полей объекта ставится в конструкторе — и ничего. Никто не жалуется. А тут вдруг бида. Я вообще для приличия всегда все значения стараюсь ставить только в конструкторе. А то одно инициализировано в одном месте, другое — в другом, хрен поймёшь. Это ли разве лучше?
Название: Java vs C#
Отправлено: myst от декабря 26, 2010, 14:06
Цитата: Alone Coder от декабря 26, 2010, 11:39
Я предлагаю всего лишь указывать знаковость не в типе данных, а в самой операции.
Это типа «Итак, мы изнасиловали переменную a, как будто она беззнаковая; а сейчас мы будем её насиловать, как будто она знаковая»? :eat:
Название: Java vs C#
Отправлено: Alone Coder от декабря 26, 2010, 14:10
Да. Между прочим, в C уже есть как минимум два случая двойного насилования: char/int8 и int/boolean.
Название: Java vs C#
Отправлено: myst от декабря 26, 2010, 14:11
Цитата: Алексей Гринь от декабря 26, 2010, 13:18
Это не тому ли, у которого из придуманных языков популярен только один, и то среди школьников? :)
Поэтому продолжаем кушать кактус за обе щеки. Думаешь, у C сюрпризы? ;)

Цитата: Алексей Гринь от декабря 26, 2010, 13:18
У беззнаковых профит в том, что не нужно проверять нижнюю границу на выход за пределы диапазона...
Угу, особенно когда диапазон — [10;15], например.
Название: Java vs C#
Отправлено: myst от декабря 26, 2010, 14:11
Цитата: Alone Coder от декабря 26, 2010, 14:10
Да.
То есть типизация летит к чёртовой матери?
Название: Java vs C#
Отправлено: myst от декабря 26, 2010, 14:14
Цитата: Alone Coder от декабря 26, 2010, 14:10
Между прочим, в C уже есть как минимум два случая двойного насилования: char/int8 и int/boolean.
Этот язык вообще для насильников, но в чём двойность?
Название: Java vs C#
Отправлено: Alone Coder от декабря 26, 2010, 14:14
Типизация определяет ширину. Остальное от лукавого.
Название: Java vs C#
Отправлено: myst от декабря 26, 2010, 14:16
Цитата: Alone Coder от декабря 26, 2010, 14:14
Типизация определяет ширину. Остальное от лукавого.
А длину она не определяет случаем или, там, вес?
Название: Java vs C#
Отправлено: Alone Coder от декабря 26, 2010, 14:19
Вы никогда флоатами по сети не обменивались? И вавки из формата в формат не конвертировали?
Название: Java vs C#
Отправлено: arseniiv от декабря 26, 2010, 14:23
Нет уж, в тексте, который я пересказывал (arseniiv не станет пересказывать неодобренное своей головой), явно написано, что тип определяет диапазон и операции.
Название: Java vs C#
Отправлено: RawonaM от декабря 26, 2010, 14:54
Цитата: Алексей Гринь от декабря 26, 2010, 13:53
Аргументы будут? Уж думаю у Хейлсберга опыта в языко- и компиляторостроении побольше будет.
Какие тут аргументы? Надо и все. Поле можно инициализировать, а пропертю нельзя? Ну давайте вообще на С вернемся и нафиг оно надо.

Цитата: Алексей Гринь от декабря 26, 2010, 13:42
Если сразу после указания проперти ставить знак равенства и дефолтное значение, то встаёт вопрос: при приравнивании компилятор должен ставить значение сразу в поле (что невозможно в случае неавтоматических пропертей), или задействовать механизм пропертей (т.е. с вызовом метода)? Это во-первых. А во-вторых, если верно второе, то задействование механизма пропертей это же вызов метода, а это есть конструкция с побочными эффектами, и в таком виде ставить небезопасно — прочие поля ещё не гарантируются быть установленными, а мы можем на них, неинициализированные, надеяться. Поэтому Хейлсберг принудил проставлять значение в конструкторе, где последовательность прозрачна.
Это только для неавтоперти актуально. А для авто — имплицитному полю присваиваешь и все.
Название: Java vs C#
Отправлено: myst от декабря 26, 2010, 15:25
Цитата: Alone Coder от декабря 26, 2010, 14:19
Вы никогда флоатами по сети не обменивались? И вавки из формата в формат не конвертировали?
А надо?
Название: Java vs C#
Отправлено: myst от декабря 26, 2010, 15:26
Цитата: arseniiv от декабря 26, 2010, 14:23
Нет уж, в тексте, который я пересказывал (arseniiv не станет пересказывать неодобренное своей головой), явно написано, что тип определяет диапазон и операции.
Coder изобрёл новый, революционный подход. Правда, его опередили на несколько десятилетий всякие там процессороклепатели, гады, но ничего, надо бороться.
Название: Java vs C#
Отправлено: myst от декабря 26, 2010, 15:30
Цитата: RawonaM от декабря 26, 2010, 14:54
Ну давайте вообще на С вернемся и нафиг оно надо.
Как, тебе не любо писать на C? Такой прекрасный язык! Все ксакепы только на нём и пишут. Не какой-то там Паскаль для школоты!
Название: Java vs C#
Отправлено: arseniiv от декабря 26, 2010, 15:50
Цитата: myst от декабря 26, 2010, 15:26
Coder изобрёл новый, революционный подход.
А то я не вижу сам. ;D
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 26, 2010, 15:56
Цитата: RawonaM от декабря 26, 2010, 14:54
ЦитироватьАргументы будут? Уж думаю у Хейлсберга опыта в языко- и компиляторостроении побольше будет.
Какие тут аргументы? Надо и все. Поле можно инициализировать, а пропертю нельзя?
Я же уже объяснил выше. Проперти это среднее между полем и методом. С чего бы проперти иметь автоинициализацию как у поля вообще? Я вообще считаю, что инициализация в месте объявления - это плохая практика, скопипащенная дизайнёрами из жабки. Надо в конструкторе только. Ибо гемора много, если придётся менять код.

Цитата: RawonaM от декабря 26, 2010, 14:54
Это только для неавтоперти актуально. А для авто — имплицитному полю присваиваешь и все.
Ортогональность.

Тогда можно было бы:
Цитироватьstring Name { get; set; } = "Hello!";

Но нельзя было бы:
Цитироватьstring Name {
   set { /* Код. */ }
   get { /* Код. */ }
} = "Hello!";

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

На такое бы нашёлся тоже свой Равонам, который бы и это критиковал.

Короче, не умеешь пользоваться и не понимаешь принципов — не жалуйся и юзай питон и жабку. Там можно писать отличный хреновый код.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 26, 2010, 16:13
Как я уже говорил, основная причина существования свойств это вывод их в публичный интерфейс.
Поля содержат реальную, физическую информацию, в то время как свойства это логические составляющие объекта, инкапсулирующие поля.
Извне класса свойство это метод, ведущий себя чисто как поле.
Но внутри-то объявления класса свойство это обычный метод. Какая инициализация может быть у метода? Зачем она ему вообще? Если нужна автоинициализация, то энкапсулируй специально созданное вручную поле (хотя в конце концов компилятор выведен код тупо в конструктор).
Автосвойства сделаны для упрощения рутинного написания геттеров и сеттеров — и не более. С какой стати они должны эмулировать поведение полей? Если понять, что такое свойство, то можно прекрасно видеть, почему дефолтное значение для свойства есть понятие абсурдное. Свойства это просто обёртки-wrappers. Дефолтное значение для обёртки это нонсенс.
Название: Java vs C#
Отправлено: Алексей Гринь от декабря 26, 2010, 16:25
Ещё неортогональности и неясностей:

Допустимо:
Цитировать
class MyClass
{
   public string Name { get; set; } = "Hello!";
}

Недопустимо:
Цитировать
abstract class MyClass
{
   public abstract string Name { get; set; } = "Hello!";
}

Недопустимо:
Цитироватьinterace INameable
{
   string Name { get; set; } = "Hello!";
}

Ваще классно, да.

Прикол в том, что у «автосвойств» может не быть неявного поля :) Да, давайте введём ещё двадцать правил и исключений, чтобы угодить чьему-либо непониманию сего понятия :)
Название: Java vs C#
Отправлено: Demetrius от декабря 26, 2010, 17:26
Цитата: myst от декабря 26, 2010, 10:40
Вирт, как известно, вообще радикально решил эту проблему: убрал беззнаковые целые как класс.
Ну дык в жабе так же.
Название: Java vs C#
Отправлено: Alone Coder от декабря 26, 2010, 17:34
Вы бы ещё язык микрокалькулятора вспомнили :)
Название: Java vs C#
Отправлено: myst от декабря 26, 2010, 17:35
Цитата: Demetrius от декабря 26, 2010, 17:26
Ну дык в жабе так же.
Гослинг у Вирта подглядел. :)
Название: Java vs C#
Отправлено: arseniiv от января 6, 2011, 23:46
(Думаю тут попсевдооффтопить, благо тема уже раскрученная и не пропадёт из виду.)

В VCL есть готовая реализация паттерна проектирования Command (вроде его) — actions, которые позволяют синхронизировать пункты меню и кнопки на панелях, а так же при желании снабдить их простым диалогом настройки с сохранением положения панелей и кнопок на них. Последнее мне не нужно, но интересно, реализованно ли что-то для синхронизации меню и панелей стандартным классом/компонентом в .NET или каким-нибудь сторонним подключаемым. Иначе придётся писать столь полезную вещь самому.
Название: Java vs C#
Отправлено: arseniiv от января 7, 2011, 11:42
На Исходниках (http://forum.sources.ru/index.php?showtopic=322801&st=0&#entry2796329) сказали, что стандартного всё-таки нигде не спрятано. Хотя про сторонние разработки ничего. Ладно, руками напишу.
Название: Java vs C#
Отправлено: Phersu от января 24, 2011, 00:51
Сегодня пришла идея о таком синтаксисе:

Цитироватьclass Point
{
     public Point(generate(get) int x,
                         generate(get) int y)
     { }
}

И далее можно использовать:
Цитировать
var p = new Point(10, 20);
var x = p.X;

Т.е., generate(get) или generate(set) или generate(get, set) генерируют для указанного аргумента конструктора поле и геттеры с сеттером для него.

Как бы Хейлсберг до этого додумался уже! Так можно было сделать вместо того, что было введено в C# 3.0
Название: Java vs C#
Отправлено: Demetrius от января 24, 2011, 03:38
Алексей, а Вы случаем не в помойку kitchen sink шарп хотите превратить? Два синтаксиса для одного и того же действия&nbsp;&mdash; это как-то тетто...
Название: Java vs C#
Отправлено: Phersu от января 24, 2011, 09:41
Цитата: Demetrius от
Два синтаксиса для одного и того же действия
Цитата: Phersu от января 24, 2011, 00:51
Так можно было сделать вместо
Название: Java vs C#
Отправлено: Demetrius от января 24, 2011, 10:39
Цитата: Phersu от января 24, 2011, 00:51
Как бы Хейлсберг до этого додумался уже!
Название: Java vs C#
Отправлено: Phersu от января 24, 2011, 10:49
Сослагательный перфект
Название: Java vs C#
Отправлено: Тайльнемер от января 25, 2011, 08:25
Цитата: Phersu от января 24, 2011, 09:41
Phersu
Что с вашим основным аккаунтом?
Название: Java vs C#
Отправлено: Demetrius от января 25, 2011, 09:04
Ему административно заткнули рот, то ли за мат, то ли за что-то еще, бог их разберешь. После рецедива с Phersu забанили, кажется обоих.

Жалко. Хороший человек.
Название: Java vs C#
Отправлено: RawonaM от января 25, 2011, 10:15
Цитата: Demetrius от января 25, 2011, 09:04
Жалко. Хороший человек.
+1.

Бан Гриню закончится через несколько дней, будем верить, что он исправится и не будет больше от нас отлучаться.
Название: Java vs C#
Отправлено: Bhudh от января 26, 2011, 23:45
Учитывая, что «отлучаться» здесь — пассив, чтится зобавна...