В чем отличия, чем лучше заняться?
С какой целью хотите заняться?
Найти работу.
Тогда в первую очередь узнайте, какие программисты требуются в Вашем регионе и их оклады.
А у вас как? А фрилансером? Спрос на что больше?
Цитата: myst от октября 8, 2010, 11:20
Тогда в первую очередь узнайте, какие программисты требуются в Вашем регионе и их оклады.
+1
Вы инструмент хотите сравнить,а надо сравнивать работу.
Цитата: Karakurt от октября 8, 2010, 11:45
А у вас как?
Не в курсе, я же не программистом работаю. Года три назад были вакансии на сиплюсплюсников с окладом в районе сотки.
Цитата: Karakurt от октября 8, 2010, 11:45
А фрилансером?
Это не профессия. :)
Больше всего требуются 1С-ники. 8-) Во всяком случае раньше.
1С - это самое тупое и самое востребованное. Гуманитариям - самое оно. ;)
А в Омерике, не знаю правда ли, до сих пор востребованы кобольщики. :uzhos:
Цитата: Nekto от октября 9, 2010, 22:45
Больше всего требуются 1С-ники. 8-) Во всяком случае раньше.
1С - это самое тупое и самое востребованное. Гуманитариям - самое оно. ;)
Стопроцентов, это как раз хотел сказать.
При чем тут вообще язык? Что вы хотите программировать-то? Гуи или алгоритмы? Вы математик или лингвист?
Я математик. А есть разница что кодить - гуи или алг.?
Цитата: Karakurt от октября 10, 2010, 00:01
Я математик. А есть разница что кодить - гуи или алг.?
Естественно. Это разные вообще задачи.
Если математик, то вам пофиг какой язык, вас должны на конкретные задачи взять, там уже на каком языке проекты будут, такой и будете учить в процессе. Я так это понимаю.
На мой взгляд перспективнее С#. С другой стороны, на фрилансерство лучше веб осваивать имхо (PHP, JavaScript).
Сам я вообще не совсем из этой области, хотя хотел бы в нее попасть. Но просто в компании моей общаюсь с этими людьми :)
Всем спасибо.
Цитата: Nekto от октября 9, 2010, 22:45
Больше всего требуются 1С-ники. 8-)
Мы здесь про программистов говорим. Не мешайте.
Цитата: RawonaM от октября 10, 2010, 00:28
На мой взгляд перспективнее С#.
Чем Жаба, ты пошутил, что ли? :o
Цитата: myst от октября 10, 2010, 08:52
Цитата: RawonaM от октября 10, 2010, 00:28
На мой взгляд перспективнее С#.
Чем Жаба, ты пошутил, что ли? :o
А разве не разработчики джавы в спешке напихали в неё новых костылей, чтобы она могла соперничать с C#?
Что за костыли? F# - еще круче? :)
Цитата: Чайник777 от октября 13, 2010, 08:37
А разве не разработчики джавы в спешке напихали в неё новых костылей, чтобы она могла соперничать с C#?
Соперничать сильно улыбнуло. Расскажите, пожалуйста, для соперничества с C# в какой области индустрии программного обеспечения это было сделано? Кстати, а где, кроме поделок для Windows, применяется .NET?
Цитата: Karakurt от октября 13, 2010, 08:50
Что за костыли? F# - еще круче? :)
Языки — дело пятое. Надо оценивать платформу целиком.
Цитата: Karakurt от октября 8, 2010, 10:01
В чем отличия, чем лучше заняться?
Языки похожи и по синтаксису и по логике. Начать можно с любого, а потом освоить другой. Если нет предметных предпочтений, то я бы рекомендовал начать с C#.
Отличия приблизительно в следующем. Во-первых, Джава изначально не привязана к фирме изготовителю платформы (к Сану и его продукции). Джавная программа может работать и на Линуксе и на Виндовсе (для C# тоже уже есть Моно, но мне кажется, она может не всё и распространена недостаточно). Во-вторых, Джава старше и потому в ней изначально не были предусмотрены некоторые возможности, которые добавлялись впоследствии и не всегда удачно. Зато на Джаве написано больше программ и библиотек и некоторые сферы прочно закрепились за ней. В-третьих, C# задуман так, чтоб на него было легко портировать программы с других языков -- поэтому в нём собрано много разнообразных возможностей, соответствующих разным концепциям разных языков, а Джава, наоборот, основана на принципе экономии-- из неё по максимуму выброшено всё "ненужное" (хотя множественного наследования нет ни там, ни там :) ).
Конечно, есть множество мелких конкретных различий, которые будут выясняться по ходу.
Ему не жаст фо фан надо, он работать хочет.
Цитата: Чайник777 от октября 13, 2010, 08:37
А разве не разработчики джавы в спешке напихали в неё новых костылей, чтобы она могла соперничать с C#?
Всё всегда начинается с красивой идеи, а потом туда начинают запихиваться костыли. В .НЕТ тоже постоянно впихивают что-то новое. Я думаю, источником вдохновения служат всякие научные разработки языков, типа ОКамл, а потом коммерсанты пихают в свои разработки то, что они предполагают, будет наиболее практически востребовано...
Цитата: myst от октября 14, 2010, 11:12
Ему не жаст фо фан надо, он работать хочет.
Я как раз работаю фриласером и использую эти два языка.
Цитата: myst от октября 13, 2010, 11:18
Кстати, а где, кроме поделок для Windows, применяется .NET?
"Поделки для Виндоуз" -- очень востребованный продукт во фрилансе.
Цитата: Karakurt от октября 13, 2010, 08:50
Что за костыли? F# - еще круче? :)
Главный "костыль" -- это "дженериксы" -- параметризованные классы, приблизительно соответствующие "шаблонам" Си++. В Джаве их изначально не было, а потом, когда они были введены, то были сделаны лишь на уровне синтаксиса языка -- после компилляции они не существуют. В Сишарпе дженериксы реализованы лучше. Но, мне кажется, в Джаве они всё же появились раньше, хотя я не очень внимательно слежу за этой конкуренцией...
Коллекции, конечно, в джаве появились раньше, но были непрарамтрическими. Форыч -- не помню, у кого раньше появился. Причём в джаве его назвали так же, как и обычный оператор цикла -- for (только синтаксис другой), а в сишарпе сделали специальное слово -- foreach...
Спасибо, а вы только эти два языка используете или еще что? Что скажете о питоне, хаскеле? Что лучше подойдет для скажем программы переводчика?
Цитата: Dims от октября 14, 2010, 11:14
Я как раз работаю фриласером и использую эти два языка.
Кстати, расскажите, что собой представляет фрилансовое кодерство. Я думал, дикие кодеры истреблены аутсорсинговыми контроками.
Цитата: Dims от октября 14, 2010, 11:15
"Поделки для Виндоуз" -- очень востребованный продукт во фрилансе.
Какие поделки в ходу на фрилансовом рынке?
Я не только эти два языка использую, но вот Питон и Хаскель -- нет. Скрипты по мелочи править приходилось, но полностью писать -- не писал.
Для программы переводчика, я думаю, сам язык не важен, поскольку главное в программе -- это большая база данных/правил (сам язык уходит на второй план).
Думаю, что нужно поискать в интернете то, что уже написано на эту тему -- потому что всё равно придётся использовать готовые наработки (с нуля писать нельзя) -- и уже выбирать язык в соответствии с тем, что лучше совместимо с этими наработками и конечными требованиями.
В сишарп, кстати, имеются "лямбда выражения", то есть, анонимные функции, которые формулируются прямо в тексте: (wiki/en) C_Sharp_syntax#Lambda_expressions (http://en.wikipedia.org/wiki/C_Sharp_syntax#Lambda_expressions). Это "дань" функциональным языкам...
Цитата: myst от октября 14, 2010, 11:50
Кстати, расскажите, что собой представляет фрилансовое кодерство. Я думал, дикие кодеры истреблены аутсорсинговыми контроками.
Я не знаю, я целостной картины не имею. У меня в конечном итоге получилось несколько постоянных заказчиков, один из которых постоянно заказывает мне грабберы сайтов на C#. Может быть, когда эти заказчики иссякнут, то я больше никого найти и не смогу? Не знаю, пока всё нормально (сказал выпавший с девятого этажа, пролетая пятый).
Кстати, я заметил, что сейчас фриланс биржи предлагают услуги по организации фриласн-команд. Думаю, что можно и к команде примкнуть, либо организовать команду...
А как происходит взаимодействие с заказчиками? Программы сопровождать надо, или сдал — получил деньги — забыл? По деньгам как, хотя бы ориентировочно? Вы договариваетесь о цене по каждой программе отдельно или есть какие-то общие тарифы и т. п.? Ценообразование на основе чего?
Есть специальные сервера -- фриланс-сервера, где заказчики публикуют задания, а исполнители -- свои резюме, скилы и т.п. Обычно на этих сайтах идёт аукцион на понижение -- то есть, исполнители соревнуются кто дешевле и быстрее выполнит задание. Естественно, если явно указать нереально-низкую цену, то заказчик может не поверить в серьёзность намерений. Но поначалу неизбежно приходится демпинговать, потому что наиболее важный критерий -- это количество ранее выполненных заказов и отзывы по ним. Сейчас сайты предлагают тарификацию и по времени -- заказчик для контроля получает скриншоты вашего экрана в течении того времени, когда вы ставите галочку, что находитесь в процессе выполнения задания. Но я так не работал, я уже напрямую работаю. У меня выходит примерно среднерыночная московская программистская зарплата. Из минусов -- необходимость самому себя контролировать (расслабился, залез потрещать на форуме -- не заработал), кроме того, отсутствуют оплачиваемые отпуска, больничные и так далее. Кроме того, работаю дома -- мешаю домашним, а они -- мне. Из преимуществ -- возможность работать в любой точке земного шара (где есть интернет) и независимость...
Цитата: Dims от октября 14, 2010, 12:53
У меня выходит примерно среднерыночная московская программистская зарплата.
А по времени как? Сколько часов в месяц выходит?
Сколько времени на разработку дают?
Цитата: Dims от октября 14, 2010, 12:53
Из минусов -- необходимость самому себя контролировать (расслабился, залез потрещать на форуме -- не заработал), кроме того, отсутствуют оплачиваемые отпуска, больничные и так далее. Кроме того, работаю дома -- мешаю домашним, а они -- мне. Из преимуществ -- возможность работать в любой точке земного шара (где есть интернет) и независимость...
Ну, это общефрилансовые качества. :)
Цитата: 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%)
Плюс у моно есть некоторые штуки, которых нет в мс.нет.
Цитата: Phersu от октября 14, 2010, 17:44
Моно давно уже продакшн-реди.
Does the production know about this? :eat:
Кстати, моно можно использовать автономно — с помощью встроенной утилиты 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 от разных компаний :)
Верно говоришь, статическая сборка — добро.
Цитата: Phersu от октября 14, 2010, 17:44
Насчёт совместимости с мс.нет - порядка 99% (всякие убогие WPF я не имею в виду — там это won't support).
Вот подобные высказывания полностью обесценивают Вашу точку зрения.
Цитата: Dims от октября 19, 2010, 13:49
Вот подобные высказывания полностью обесценивают Вашу точку зрения.
Почему?
Цитата: Алексей Гринь от октября 19, 2010, 15:12
Почему?
Наверное, потому, что 99% — это слегка преувеличил. :)
Цитата: myst от октября 19, 2010, 15:22
Наверное, потому, что 99% — это слегка преувеличил. :)
Ну напирмер 99% это профиль 2.0
3.0 не весь
Мне кажется, 2.0 это state of the art, а дальше уже пошли всякие маркетоидные приблуды
C# прекрасен тем, что у него есть такие штуки типа valuetype classes и stackalloc. Т.е. можно писать код, который будет примерно одинаково быстр на всех VM'ах. А вот в жабке если тебе попадётся VM с хреновым аллокатором (напр. Бёма), то усё. Что если например у нас 3d-програмко, которая в один фрейм создаёт тысячи векторов, матриц и просто точек? Где-то будет жутко тормозить, а где-то летать. Разве ли это называется портабельность? :D
Ты опять углубляешься в гипотезы. А по факту я вижу Жабу во всех щелях, но не вижу дотНета нигде, кроме Винды. Моно — это, конечно, хорошо, но как-то уж больно неофициально. Завтра Мигель уйдёт в монастырь, и нет никакой гарантии, что оно не рипнется тут же.
Цитата: myst от декабря 18, 2010, 10:36
А по факту я вижу Жабу во всех щелях, но не вижу дотНета нигде, кроме Винды
У дотнета и жабы, хоть они выглядят на первый взгляд одинаково, разные ниши. Дотнет это персоналки и близко к человеку (а Винда это 80% десктопов), а жаба это сервера/прочий унылый ынтырпрайз и близко к машине/сухим данным. Ты видимо плаваешь в нише жабы только. Мне вот сервера в куй не упёрлись. Я вот больше заинтересован в софте, который общается с человеком в прямом, так сказать, эфире (геймдев, формочке и проч.) И тут, мне кажется, дотнет имеет куда больше преимуществ.
Цитата: myst от декабря 18, 2010, 10:36
Завтра Мигель уйдёт в монастырь, и нет никакой гарантии, что оно не рипнется тут же.
Так же можно сказать — завтра Oracle обанкротится, и нет никакой гарантии, что оно не рипнется тут же. «Ты опять углубляешься в гипотезы». Среди активных разрабов mono тридцать человек, и Мигель там в принципе давно мало чё решает — всё крутится само собой потихоньку. Он там типа Ассанжа, короче.
Цитата: Алексей Гринь от декабря 18, 2010, 11:51
У дотнета и жабы, хоть они выглядят на первый взгляд одинаково, разные ниши. Дотнет это персоналки и близко к человеку (а Винда это 80% десктопов), а жаба это сервера/прочий унылый ынтырпрайз и близко к машине/сухим данным. Ты видимо плаваешь в нише жабы только. Мне вот сервера в куй не упёрлись. Я вот больше заинтересован в софте, который общается с человеком в прямом, так сказать, эфире (геймдев, формочке и проч.) И тут, мне кажется, дотнет имеет куда больше преимуществ.
То есть андроиды всякие — это сервера/прочий унылый ынтырпрайз? ;)
Цитата: Алексей Гринь от декабря 18, 2010, 11:51
Так же можно сказать — завтра Oracle обанкротится, и нет никакой гарантии, что оно не рипнется тут же.
За Жабой стоит ещё куча корпораций, IBM например. Ну, и Google с недавних пор.
Цитата: Алексей Гринь от декабря 18, 2010, 11:51
Среди активных разрабов mono тридцать человек, и Мигель там в принципе давно мало чё решает — всё крутится само собой потихоньку.
Понимаешь, одно дело, когда проект развивают жастфофанщики, и совсем другое, когда мегакорпорации.
Цитата: 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 с недавних пор.
По-моему, Гугл в своих проектах использует чаще вообще с++ + питон, чем жабу. Про далвик см. выше.
А ИБМ не корпорация, а фигня на постном масле.
Цитата: Алексей Гринь от декабря 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?
Цитата: myst от декабря 18, 2010, 17:19
ЦитироватьНа андроиде нету жабы. Андроид не может запустить жабовый байткод. Там только интерфейс библиотек жабовый.
Так есть там жаба или нет?
Интерфейс жабовых библиотек не есть жаба... Тем более что и то там совместимость порядка 75% всего + много своих костылей.
Цитата: myst от декабря 18, 2010, 17:19
ЦитироватьПо-моему, Гугл в своих проектах использует чаще вообще с++ + питон, чем жабу.
Это в каких, особенно Питон?
С++ — низкоуровневый кодообезьянний код, а питон — вся логика вокруг него. Вроде так.
Цитата: myst от декабря 18, 2010, 17:19
ЦитироватьА ИБМ не корпорация, а фигня на постном масле.
Хренасе ты сказанул. :o
Если IBM — фигня, то что тогда Microsoft и Novell?
Ну IBM скуксены сильно. По крайней мере я много слышал, что софт у них хреновый весьма, индусский.
Цитата: Алексей Гринь от декабря 19, 2010, 16:43
Интерфейс жабовых библиотек не есть жаба... Тем более что и то там совместимость порядка 75% всего + много своих костылей.
Кроме андроида, есть ещё смарткарты всякие, телевизоры, блуреи и прочие микроволновые печи. Там жаба тоже урезанная, но жаба.
Цитата: Алексей Гринь от декабря 19, 2010, 16:43
С++ — низкоуровневый кодообезьянний код, а питон — вся логика вокруг него. Вроде так.
Так что за проекты-то?
Цитата: Алексей Гринь от декабря 19, 2010, 16:43
Ну IBM скуксены сильно. По крайней мере я много слышал, что софт у них хреновый весьма, индусский.
В этой скуксеной конторке работников >300 000. У Микрософта <90 000. Novell на этом фоне вообще чапочная компашка.
Цитата: 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% всего + много своих костылей.
Кроме андроида, есть ещё смарткарты всякие, телевизоры, блуреи и прочие микроволновые печи. Там жаба тоже урезанная, но жаба.
Только это уже не имеет отношения к вышеобозначенной идее... Я ведь не говорил, что жаба вообще не используется. Поскрести по сусекам всегда можно :)
Цитата: Алексей Гринь от декабря 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 недавно продали. Бимеры тоже вовсю используют Линупс в своих небольших монстрах.
Цитата: 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, и кто ими владеет — в принципе пофигу.
Цитата: myst от декабря 19, 2010, 16:56
Цитата: Алексей Гринь от Сегодня в 17:43ЦитироватьНу IBM скуксены сильно. По крайней мере я много слышал, что софт у них хреновый весьма, индусский.
В этой скуксеной конторке работников >300 000.
Ни о чём не говорит. В Нинтендо 4000, а бабла срубают всего втрое меньше.
Я читал у кого-то умного, что у всякой корпорации есть критический максимум (или лучше сказать минимум? :??? ) количества работников, когда увеличение числа, наоборот, начинает уменьшать продуктивность, качество и т.д. — в основном из-за того что начинают брать кого угодно и вводить должности по любому поводу, общее слежение за работой на разных уровнях кардинально усложняется — в общем, сродни разбуханию бюрократического аппарата во власти. Так что такое большое количество сотрудников это скорее признак упадка...
Цитата: Alone Coder от декабря 19, 2010, 20:35
В Нинтендо 4000, а бабла срубают всего втрое меньше.
Что у японцев в Нинтендо поставлено на автоматический робоконвеер, у ИБМ вручную собирают несовершеннолетние индусы в трущобах Мумбая :D Вот и накапливается 400 тыс. человек.
Цитата: Alone Coder от декабря 19, 2010, 20:35
Ни о чём не говорит. В Нинтендо 4000, а бабла срубают всего втрое меньше.
Чистая прибыль — это ещё не всё. Ресурсы у IBM огромные. Это и высококлассные специалисты разных областей, и готовые технологии, и НИОКР. Они вкладывают в исследования огого, а не тупо рубят бабло на родителях юных бездельников.
Цитата: myst от декабря 19, 2010, 20:51
Это и высококлассные специалисты разных областей и готовые технологии
Хаха. Хреновые там специалисты. В общей массе. А не в общей массе спецы есть везде.
Цитата: Алексей Гринь от декабря 19, 2010, 20:54
Хаха. Хреновые там специалисты. В общей массе. А не в общей массе спецы есть везде.
А ты-то откуда знаешь, хреновые они или нет?
А чоэта нинтендовцы юзают бимерские процессоры, сделанные вручную индусами с трущобах Бомбея? :eat:
Есть закон Паркинсона: каждый сотрудник стремится завести себе подчинённых, чтобы снять с себя часть работы. Однако в результате скорость работы снижается.
Боже, храни моно. Клепаю програмку. Под MS.NET запускаю — ничего не выдаёт, пустой экран. Вариантов источника проблемы — мульон. Только я начал горевать, что впереди ночь боли и слёз, как сообразил запустить оно же, но под mono. И — о чудо — на экран всё-таки что-то выдаётся, только messed up. А это, значит, что проблема в P/Invoke, а не в логике. Круг поиска ошибки куда более сужен...
Таки полезность valuetype objects в .NET не пустые слова. Автору порта физического движка Bullet на Java пришлось велосипедить хак под названием JStackAlloc, т.к. расчёт физики выделяет так много векторов и матриц, что сборщик мусора лихорадит (а хвалёный escape analysis работает в редких случаях и пригоден только для хелловорлдов). Жабка-какашка не пригодна для серьёзного использования.
Откуда такая ненависть к величайшему творению Гослинга? :eat:
Оттуда, что у любителей творения Гослинга такая ненависть к величайшему творению Мигеля :)
Так не ненависть же. Просто объективность. :)
Цитата: myst от декабря 23, 2010, 12:59
Просто объективность. :)
Там объективностью не пахнет. По крайней мере, не видел. Моно в глаза не видели (или видели последний раз в 2003 г.), и единственный аргумент «не нужно» (и «это делают агенты MS, бида-бида»). На что у меня есть ответ «Линукс ещё больше не нужен» :)
Не ну́жно просто смотреть на моно как на яву. Ну́жно вспомнить, что под линуксами есть большой сонм кривых ненужных недоязыков типа питона, руби, фрипаскали и проч., которые плодятся каждый день и все как один уродливы и тормозны. В этом плане моно держит твёрдое второе место после явы. Или сразу ненужно́ всё кроме явы — питоны всякие, лазарусы — или всё-таки всё нужно́ (и в этом суть опенсорса — используй что хочешь; не нравится — не используй), в том числе моно.
Ведь только к моно такая ненависть, хотя она лучше многих других продуктов. Причины две:
1) команда моно-таки немного отдалена от прочего красноглазого опенсорсного мальчишества (они больше занимаются делом, чем треплют языком как сумасшедший коммунист Столлман, который за всю жизнь осилил написать только программу-блокнот) и имеет косвенное отношение к MS;
2) они делают своё дело хорошо и успешно.
Отсюда и ненависть, что красноглазые дественники надрачивают на клавиатуру тут в поте лица, понимаешь (напр. парни из проекта dotGNU), а тут появляется с либеральными взглядами Мигель (не ненавидящий Microsoft, как положену по уставу) и делает всё намного красивее и правильнее :) Ср. состояние проектов mono и dotGNU.
Сравнивать питон и решетку как минимум некорректно. Задачи разные.
Потихоньку в решетку добавляют нужные элементы, которые давно искаропки есть в языках типа питона и т.п. Ни туплов нормальных, словари дебильные и прочее-прочее в с-шарпе не делает его таким уж привлекательным для повседневных задач.
Было бы здо́рово, если бы Микрософт официально сделал .NET многоплатформным, но он не хочет этого делать, и это не к добру. Ты же понимаешь, что Mono в роли догоняющего, как ни крути. Это весьма вероятно может привести к полной потере совместимости. Ты же сам говорил, что Mono уже не до конца совместим с .NET'ом. Безрадостно всё это. А сам Шарп, конечно, послаще Жабы, тут сомнений нет. От одного угрёбищного сравнения строк в Жабе str1.equals(str2) я чуть в осадок не выпал.
Цитата: RawonaM от декабря 23, 2010, 14:34
Ни туплов нормальных, словари дебильные и прочее-прочее в с-шарпе не делает его таким уж привлекательным для повседневных задач.
Что за туплы, что не так со словарями?
Это принцип Жабы такой. Ни перегрузки операторов, ни хрена вообще. Минимализм короче.
Ведь при существующей перегрузке, когда ты пишешь ==, кто знает, это перегруженный оператор или что вообще он вызывает? А так четко видно, какая функция задействована.
То же самое пропертиз в ц-диезе. С одной стороны, классная штука. С другой стороны, легко злоупотребить так, что ни хрена в коде не поймешь. Написал p.prop = фигня, там может его присвоитель компьютер убивает. Прозрачности нет.
Короче, нет в мире совершенства :)
Цитата: RawonaM от декабря 23, 2010, 14:34
Сравнивать питон и решетку как минимум некорректно. Задачи разные.
Так и не надо сравнивать решётку с явой, в этом мой пойнт. Это тоже не корректно и тоже задачи разные.
Цитата: myst от декабря 23, 2010, 15:03
Что за туплы, что не так со словарями?
Ну дык вот же добавляют потихоньку сладкую жизнь:
http://msdn.microsoft.com/en-us/library/system.tuple.aspx
Со словарями все не так. Не гибкие и длинно писать Dictionary...
Цитата: Алексей Гринь от декабря 23, 2010, 15:08
ЦитироватьСравнивать питон и решетку как минимум некорректно. Задачи разные.
Так и не надо сравнивать решётку с явой, в этом мой пойнт. Это тоже не корректно и тоже задачи разные.
Почему это? жаба и решетка совершенно для одинаковых целей и задач.
Цитата: myst от декабря 23, 2010, 15:01
Было бы здо́рово, если бы Микрософт официально сделал .NET многоплатформным, но он не хочет этого делать, и это не к добру.
Очень даже понятно, почему он не хочет официально это делать.
Цитата: RawonaM от декабря 23, 2010, 15:07
Это принцип Жабы такой. Ни перегрузки операторов, ни хрена вообще. Минимализм короче.
Фигня всё это. После того как вышла решётка, жаберы с большим удовольствием ввели enumerations, generics, foreach, annotations, autoboxing, params, и проч. Минимализм это красивая байка из старых добрых времён. Жаба нифига не минималистична, а неподъёмна, как мамонт. Они бы и рады сделать == для строк, но мешают требования по совместимости.
Цитата: RawonaM от декабря 23, 2010, 15:09
ЦитироватьТак и не надо сравнивать решётку с явой, в этом мой пойнт. Это тоже не корректно и тоже задачи разные.
Почему это? жаба и решетка совершенно для одинаковых целей и задач.
Ну-ну. Решётка это десктопные приложения (и вот уже геймдев для xbox) для людей, а жаба это сервера и энтерпрайз. Разные цели. Или скажи тогда, в чём разность целей питона и .NET
Цитата: 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 главной целью стоит кроссплатформенность, а у CLR — безопасный механизм межязыкового исполнения. Поэтому Microsoft не заинтересован в кроссплатформенности, т.к. она не является для CLR главной целью. Кроссплатформенность это приятное дополнение. Вообще кроссплатформенность это один из инструментов, а не святая цель, но красноглазикам это не объяснить.
Цитата: Алексей Гринь от декабря 23, 2010, 15:16
Или скажи тогда, в чём разность целей питона и .NET
:o Питон — интерпретируемый язык. Надо с NLTK работать че-нить с корпусом сделать, взял и сделал. Или хотя бы зашел в коммандную строку, набрал чтось типа for line = open("~/dict.txt").readlines(): if line bla-bla: print line
Скока у тебя займет проект в сшарпе замутить? Вообще разные вещи, ты что.
Цитата: RawonaM от декабря 23, 2010, 15:07
То же самое пропертиз в ц-диезе. С одной стороны, классная штука. С другой стороны, легко злоупотребить так, что ни хрена в коде не поймешь. Написал p.prop = фигня, там может его присвоитель компьютер убивает. Прозрачности нет.
Свойства обалденно хороши во время отладки. Можно приостановить исполнение и посмотреть значения свойств (они будут вычисляться дебаггером налету). А в яве можно посмотреть значения, которые возвращают методы getXXX? Наверняка нужно вводить писать что-то вроде "tmpvar = getXXX()", которое ещё хрен знает как автоматически стриппить в релизе, т.к. нет conditional compilation.
Цитата: RawonaM от декабря 23, 2010, 15:32
ЦитироватьИли скажи тогда, в чём разность целей питона и .NET
:o Питон — интерпретируемый язык.
Лол, с какой стати интерпретируемость или скорость являются целью? Java, C# и C++ приблизительно близки по скорости. Что, у них одна цель теперь? Бред.
Цитата: 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#.
Цитата: Алексей Гринь от декабря 23, 2010, 15:32
Свойства обалденно хороши во время отладки.
И не только. Но вводить в язык средства отладки — бред. Для отладки нужно делать отладчик хороший.
Цитата: RawonaM от декабря 23, 2010, 15:07
Это принцип Жабы такой. Ни перегрузки операторов, ни хрена вообще. Минимализм короче.
Ведь при существующей перегрузке, когда ты пишешь ==, кто знает, это перегруженный оператор или что вообще он вызывает? А так четко видно, какая функция задействована.
Какая, если функции перегружать как раз таки можно? ;)
И вообще, почему из Жабы не удалили все операторы, раз они такие гадкие? :eat:
Цитата: myst от декабря 23, 2010, 15:37
Какая, если функции перегружать как раз таки можно? ;)
А вот в С-шарпе нельзя. Бесит :(
Цитата: RawonaM от декабря 23, 2010, 15:07
Написал p.prop = фигня, там может его присвоитель компьютер убивает.
То есть если написать p.setProp(фигня), убийство компьютера переносится легче?
Цитата: RawonaM от декабря 23, 2010, 15:38
Цитата: myst от декабря 23, 2010, 15:37
Какая, если функции перегружать как раз таки можно? ;)
А вот в С-шарпе нельзя. Бесит :(
:o
Цитата: RawonaM от декабря 23, 2010, 15:37
ЦитироватьСвойства обалденно хороши во время отладки.
И не только. Но вводить в язык средства отладки — бред.
Это не основная цель свойств, а приятное дополнение. Свойства это действительно совершенно отдельная ООП-сущность, как и события, например. Конечно, можно полностью эмулировать их, как это делается в Яве, но... ООП ведь можно эмулировать и на чистом Си, и в ассемблере. Смысл высокоуровневых языков в сведению повторяющихся действий к нулю; уничтожению постоянных переизобретений колеса. Думаю, в яве свойств не было не из-за каких-то высоких целей, а просто потому что в языках, с которыми Гослинг до этого работал, их не было.
Гринь, да не сравнимо это. Хотя бы срезы типа a[5:25:2], вместо вызова функции — как жизнь упрощает.
Цитата: 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(фигня), убийство компьютера переносится легче?
Да, ты знаешь, что ты вызываешь функцию, а не просто что-то присваиваешь.
Цитата: 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 в роли догоняющих. И чего?
Дык, не в машине дело, но в платформе.
Цитата: myst от декабря 23, 2010, 15:37
И вообще, почему из Жабы не удалили все операторы, раз они такие гадкие?
Согласнен. Знак плюса перегружен для целых и для вещественных. Нехорошо. Нужно сделать как в ОКАМЛЕ (ЕМНИП), ввести знак ./ А то ведь вдруг при вызове 1.0f + 2.0f я хотел вызвать плюс, складывающий целые числа?
Цитата: Алексей Гринь от декабря 23, 2010, 15:45
А то ведь вдруг при вызове 1.0f + 2.0f я хотел вызвать плюс, складывающий целые числа?
А вот с делением не все так гладко. Интеджер или дробь. Хрен поймешь, че вызывается. Думать надо. :)
Цитата: RawonaM от декабря 23, 2010, 15:43
Да, ты знаешь, что ты вызываешь функцию, а не просто что-то присваиваешь.
Что значит просто присваиваешь? И то и другое — операция. У операции есть последствия, и их следует знать, прежде чем её применять. Это отмазкой копальхит. :)
Цитата: RawonaM от декабря 23, 2010, 15:47
А вот с делением не все так гладко. Интеджер или дробь. Хрен поймешь, че вызывается. Думать надо. :)
Неявное приведение типов, не? :eat:
Хех В Visual Studio я только пишу "Di", как мне среда предлагает слово Dictionary. Я жму пробел и слово вставляется. Три нажатия на клавишу. Практически для всех свойств и классов Intellisense попадают в точку в 95% случаев (он запоминает самые часто используемые слова). Т.е. то, что в питоне вшили редактор в язык (т.е. маленькие идентификаторы) - это хорошо, а то что в сишарп вшили возможность поддержки дебагером (свойства) - это плохо. Ну-ну...
Цитата: myst от декабря 23, 2010, 15:47
ЦитироватьДа, ты знаешь, что ты вызываешь функцию, а не просто что-то присваиваешь.
Что значит просто присваиваешь? И то и другое — операция. У операции есть последствия, и их следует знать, прежде чем её применять. Это отмазкой копальхит. :)
Ну вот, теперь надо думать, присваешь ты переменной или свойству, если свойству, то там имплицитно может быть еще 150 действий быть.
Цитата: Алексей Гринь от декабря 23, 2010, 15:50
Хех В Visual Studio я только пишу "Di", как мне среда предлагает слово Dictionary.
Мне тоже предлагает. Но написано-то все-равно длинно остается.
Цитата: myst от декабря 23, 2010, 15:39
ЦитироватьНаписал p.prop = фигня, там может его присвоитель компьютер убивает.
То есть если написать p.setProp(фигня), убийство компьютера переносится легче?
Согласен, семантически в яве сеттеры это те же шарповы свойства, т.е. также предлагается, что они работают быстро. Всякий может туда поставить Thread.sleep и ничего.
Цитата: RawonaM от декабря 23, 2010, 15:43
Тьфу, я имел в виду опциональные параметры нельзя. Бесит :(
Ввели в .NET 4, моно давно поддерживает, ещё в с начала 2010 г., вроде.
Цитата: RawonaM от декабря 23, 2010, 15:53
ЦитироватьХех В Visual Studio я только пишу "Di", как мне среда предлагает слово Dictionary.
Мне тоже предлагает. Но написано-то все-равно длинно остается.
И чаво?
Ладно, ушёл.
Цитата: Алексей Гринь от декабря 23, 2010, 15:54
ЦитироватьЦитироватьХех В Visual Studio я только пишу "Di", как мне среда предлагает слово Dictionary.
Мне тоже предлагает. Но написано-то все-равно длинно остается.
И чаво?
И длинно читать. Сложнее на вид воспринимается, дольше понимать. И писать длинно, если интерактивно. Туда ВС не встроишь.
Чего спорить с явными преимуществами? Питон не тягается с с-шарпом по скорости выполнения, за это экономит время программисту.
Цитата: Алексей Гринь от декабря 23, 2010, 15:53
ЦитироватьТьфу, я имел в виду опциональные параметры нельзя. Бесит :(
Ввели в .NET 4, моно давно поддерживает, ещё в с начала 2010 г., вроде.
Знаю, что ввели, но мы работаем на 3.5. Все это поэтапное добавление бесит. Нельзя сразу сделать нормальный язык? Неужто не ясно, что перегружать функцию ради опциональных параметров — бред.
Цитата: RawonaM от декабря 23, 2010, 15:53
Ну вот, теперь надо думать, присваешь ты переменной или свойству, если свойству, то там имплицитно может быть еще 150 действий быть.
Как ты это можешь перепутать?
Цитата: myst от декабря 23, 2010, 15:58
ЦитироватьНу вот, теперь надо думать, присваешь ты переменной или свойству, если свойству, то там имплицитно может быть еще 150 действий быть.
Как ты это можешь перепутать?
Хм... А ты ясновидящий? Что тут написано: Test.b = 2; ? Проперти или мембер? :)
Цитата: RawonaM от декабря 23, 2010, 15:57
И длинно читать. Сложнее на вид воспринимается, дольше понимать.
:o Ты хочешь сказать, что птичий язык аббревиатур читать легче?
Цитата: RawonaM от декабря 23, 2010, 15:57
Чего спорить с явными преимуществами? Питон не тягается с с-шарпом по скорости выполнения, за это экономит время программисту.
Write-only софт не нужен.
Цитата: RawonaM от декабря 23, 2010, 15:59
Хм... А ты ясновидящий? Что тут написано: Test.b = 2; ? Проперти или мембер? :)
Кто такой мембер? Ты же переменную со свойством собрался спутать? :what:
Цитата: RawonaM от декабря 23, 2010, 15:53
ЦитироватьЧто значит просто присваиваешь? И то и другое — операция. У операции есть последствия, и их следует знать, прежде чем её применять. Это отмазкой копальхит. :)
Ну вот, теперь надо думать, присваешь ты переменной или свойству, если свойству, то там имплицитно может быть еще 150 действий быть.
p.s. Дело в том, что в дотнете не используют публичные поля вообще. Это моветон. Т.е. если ты вызываешь нечто, похожее на поле, извне определения класса, то это определённо свойство. Внутри определения класса конечно ты должен знать что и как быстро вызывается. Свойства по гайдлайну должны быть очень быстрыми, не больше пары строк. Так же и в яве в setProp (который, например, наследован от родителя и по спецификации ожидается быстрота) кто-то может поставить длинное вычисление в пять минут.
Цитата: Алексей Гринь от декабря 23, 2010, 16:03
p.s. Дело в том, что в дотнете не используют публичные поля вообще. Это моветон.
В Жабе та же фигня, только нормального синтаксиса нет.
Цитата: myst от декабря 23, 2010, 16:02
ЦитироватьХм... А ты ясновидящий? Что тут написано: Test.b = 2; ? Проперти или мембер? :)
Кто такой мембер? Ты же переменную со свойством собрался спутать? :what:
А какая разница, мембер или переменная? Ну на тебе переменную:
class bla
{
...
void T()
{
...
b = 2;
}
}
Переменная или свойство?
Цитата: myst от декабря 23, 2010, 16:00
ЦитироватьЧего спорить с явными преимуществами? Питон не тягается с с-шарпом по скорости выполнения, за это экономит время программисту.
Write-only софт не нужен.
Зачем врайт-онли? Короче, ниче вы не понимаете :)
На питоне я не буду гуи строить, но если мне надо че-то простенькое с текстом сделать, я уж лучше питоном воспользуюсь.
Цитата: Алексей Гринь от декабря 23, 2010, 16:03
p.s. Дело в том, что в дотнете не используют публичные поля вообще. Это моветон. Т.е. если ты вызываешь нечто, похожее на поле, извне определения класса, то это определённо свойство.
Это кстати тупость. Ужасно бесит код типа:
class C
{
private int _a;
public int a
{
set { _a = value; }
get { return _a; }
}
}
И в чем глубокий смысло? Где инкапсуляция и прочие прелести?
Цитата: RawonaM от декабря 23, 2010, 16:06
class bla
{
...
void T()
{
...
b = 2;
}
}
Переменная или свойство?
В твоём примере это может быть всё что угодно: идентификатор типа, метода, пространства имён,...
Цитата: RawonaM от декабря 23, 2010, 16:08
Зачем врайт-онли? Короче, ниче вы не понимаете :)
Я уже столько наелся птичьего кода. У меня аллергия. :)
Цитата: RawonaM от декабря 23, 2010, 16:08
На питоне я не буду гуи строить, но если мне надо че-то простенькое с текстом сделать, я уж лучше питоном воспользуюсь.
А что он умеет такого делать с текстом?
Цитата: RawonaM от декабря 23, 2010, 16:12
class C
{
private int _a;
public int a
{
set { _a = value; }
get { return _a; }
}
}
Как, разве это до сих пор обязательно?
Цитата: myst от декабря 23, 2010, 16:14
В твоём примере это может быть всё что угодно: идентификатор типа, метода, пространства имён,...
Чёё?!
Цитата: myst от декабря 23, 2010, 16:16
ЦитироватьНа питоне я не буду гуи строить, но если мне надо че-то простенькое с текстом сделать, я уж лучше питоном воспользуюсь.
А что он умеет такого делать с текстом?
Все что в с-шарпе делается мульёнами строк. Еще мне нравится сетовая математическая нотация: [w for w in mydict if "ax" in w]. Делает жизнь прекраснее :)
Цитата: myst от декабря 23, 2010, 16:17
Как, разве это до сих пор обязательно?
Не понял...
Цитата: RawonaM от декабря 23, 2010, 15:57
ЦитироватьЦитироватьЦитироватьХех В Visual Studio я только пишу "Di", как мне среда предлагает слово Dictionary.
Мне тоже предлагает. Но написано-то все-равно длинно остается.
И чаво?
И длинно читать. Сложнее на вид воспринимается, дольше понимать. И писать длинно, если интерактивно. Туда ВС не встроишь.
Чего спорить с явными преимуществами? Питон не тягается с с-шарпом по скорости выполнения, за это экономит время программисту.
Согласно исследованием, глаз при чтении передвигается скачками от 1 до 20 знаков, хотя в среднем это около 10 знаков, а время затрачивается на каждый блок от 100 мс до 500 мс, в среднем 200 мс. Думаю, разница в сотню миллисекунд компенсируется временем на расшифровку аббревиатур типа dic_ht_sr_pr и листание обратно к первому определению, чтобы понять, что это вообще.
Цитата: Алексей Гринь от декабря 23, 2010, 15:56
Знаю, что ввели, но мы работаем на 3.5. Все это поэтапное добавление бесит. Нельзя сразу сделать нормальный язык?
Всё и сразу? А что питон не могли сделать сразу таким, какой он в версии 3000? Неужто хитрые планы ван Россума по выдою из хомячков денег? Нет, коммерческий софт развивается по тем же схемам, что и опенсорс. Нет предела совершенству - какую-то версию в какой-то момент надо уже выпускать, т.к. совершенствоваться можно долго и по сути бесконечно, а продукт нужно выставлять на обозрение уже сейчас.
Цитата: RawonaM от декабря 23, 2010, 15:57
Неужто не ясно, что перегружать функцию ради опциональных параметров — бред.
Забавно, что Хейлсберг как-то называл опциональные параметры перегрузкой для бедных. И надо ж тебе поди ж ты, сишарп оказался бедным языком :)
Хочется инкапсуляции? На геттеры и сеттеры можно разные модификаторы вешать. Привожу пример из жизни 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, например.
Цитата: RawonaM от декабря 23, 2010, 16:06
class bla
{
...
void T()
{
...
b = 2;
}
}
Переменная или свойство?
Свойств, пишущихся с маленькой буквы, не бывает :) (иначе это плохая практика) Здесь b это определённо или поле класса, или переменная, определённая в функции. Но это не проблема C# per se. Чтобы различать, я предпочитаю делать явное this.b для полей.
На самом деле пример совершенно надуманный, так как автор по-любому знает, что пишет, а читатель, если к этому моменту ещё не знает, то должен посмотреть определение, иначе дальнейший код ему будет непонятен. То есть как ни крути, проблемы нет.
Цитата: myst от декабря 23, 2010, 22:12
На самом деле пример совершенно надуманный, так как автор по-любому знает, что пишет, а читатель, если к этому моменту ещё не знает, то должен посмотреть определение, иначе дальнейший код ему будет непонятен. То есть как ни крути, проблемы нет.
Автор может не помнить, если писал этот код пять лет назад, так же как и читатель не может ходить и смотреть сеттеры всех пропертиз. А проблем вообще никогда никаких нет, вопрос потраченного времени.
Цитата: myst от декабря 23, 2010, 17:14
ЦитироватьНе понял...
int a{get;set;}
И нах это надо, если можно просто int a?
Цитата: Алексей Гринь от декабря 23, 2010, 20:26
Свойств, пишущихся с маленькой буквы, не бывает :) (иначе это плохая практика) Здесь b это определённо или поле класса, или переменная, определённая в функции. Но это не проблема C# per se. Чтобы различать, я предпочитаю делать явное this.b для полей.
У всех свои предпочтения и язык дает возможность разных вариантам, что создает потенциальное злоупотребление и недопонимание.
Все проблемы вообще надуманные и их никогда нет, если придерживаться строгих правил и все четко помнить наизусть. ИРЛ ситуация не такая, особенно когда над кодом работаешь возвращаясь к нему раз в несколько месяцев и код вообще не твой.
Чё-то Равонам умалчивает тот факт, что в Питоне есть такое понятие, как дескрипторы. Т.е. в питоне this.x = 10 тоже на самом деле может быть вызовом функции. И самый сок в том, что это непросто определить, т.к. весь язык построен на скрытых хаках. А в C# явно видно, что перед нами свойство, т.е. если боишься, то всегда можно закешировать его.
А разве я был против пропертизов? Я только указал на возможные их недостатки, которые иногда могут забрать в два раза больше времени, чем экономится на пропертизах вообще.
А вообще мне они очень даже нравятся.
Питон и сшарп некорректно сравнивать, как их можно вообще в одной строке писать-то..
Самый скрытохакный язык — Жабаскрипт.
Цитата: RawonaM от декабря 23, 2010, 22:39
У всех свои предпочтения и язык дает возможность разных вариантам, что создает потенциальное злоупотребление и недопонимание.
Это неприменимо для C#. Нужно писать по установлённым порядкам: имена публичных членов с большой буквы, приватных — с маленькой. Приватные свойства не имеют смысла, т.к. свойства существуют только ради красоты интерфейса, поэтому свойства всегда с большой буквы. Иначе засмеют.
Цитата: RawonaM от декабря 23, 2010, 22:48
только указал на возможные их недостатки, которые иногда могут забрать в два раза больше времени, чем экономится на пропертизах вообще.
Я не понял, где ты указывал на их недостатки. Даже в яве и в питоне и в си мало кто использует поля для публичного интерфейса. Делают функции-обёртки (в си — макросы) вокруг полей. Сам-то класс может работать со своими полями напрямую. Свойства созданы чисто для интерфейса, и там я никаких недостатков не вижу. Конечно, если с какого-то перепугу использовать приватные свойства, то можно запутаться.
Цитата: Алексей Гринь от декабря 23, 2010, 22:51
ЦитироватьУ всех свои предпочтения и язык дает возможность разных вариантам, что создает потенциальное злоупотребление и недопонимание.
Это неприменимо для C#. Нужно писать по установлённым порядкам: имена публичных членов с большой буквы, приватных — с маленькой. Приватные свойства не имеют смысла, т.к. свойства существуют только ради красоты интерфейса, поэтому свойства всегда с большой буквы. Иначе засмеют.
Засмеют — не аргумент. Во-первых, как отличить публичный член от проперти — не ясно, даже если придерживаться правил. Во-вторых, чего ж тогда эти порядки не встроены в язык? "Нужно писать так, а то засмеют" — это детсад. Если язык позволяет вариации, значит каждая компания может решить использовать это по-своему.
Цитата: Алексей Гринь от декабря 23, 2010, 22:54
Я не понял, где ты указывал на их недостатки.
Ну что ж делать, не можем мы на 100% друг друга понимать. Значит проехали :)
Цитата: Алексей Гринь от декабря 23, 2010, 22:54
Свойства созданы чисто для интерфейса,
Ещё для избежания проблем с versioning.
Цитата: RawonaM от декабря 23, 2010, 22:56
Во-первых, как отличить приватный член от проперти — не ясно, даже если придерживаться правил.
Не понял. Если придерживаться правил, то свойство будет с большой буквы, а поле — с маленькой. Так и отличать.
Цитата: RawonaM от декабря 23, 2010, 22:56
"Нужно писать так, а то засмеют" — это детсад.
Ну это я утрировал. Пишут ведь не по гайдлайнам только студенты первого курса или полные мудаки. Логично, что засмеют. Писать-то нужно не потому, что засмеют, а потому что чтобы избежать как раз проблемы с тем, поле перед нами или опушка.
Цитата: RawonaM от декабря 23, 2010, 22:56
Если язык позволяет вариации, значит каждая компания может решить использовать это по-своему.
Если язык позволяет выстрелить себе в ногу, это не повод стрелять себе в ногу.
Я не видел ещё, чтобы кто-либо серьёзный писал на C# по иным гайдлайнам, чем установлено.
Цитата: Алексей Гринь от декабря 23, 2010, 23:04
ЦитироватьВо-первых, как отличить приватный член от проперти — не ясно, даже если придерживаться правил.
Не понял. Если придерживаться правил, то свойство будет с большой буквы, а поле — с маленькой. Так и отличать.
Я очепятался, уже там исправил. Публичный член.
Цитата: Алексей Гринь от декабря 23, 2010, 23:04
ЦитироватьЕсли язык позволяет вариации, значит каждая компания может решить использовать это по-своему.
Если язык позволяет выстрелить себе в ногу, это не повод стрелять себе в ногу.
Повод еще как. Иначе можно вернуться к бестипным языкам и вообще ниче не проверять, если че-то не так сделал ССЗБ — и досвидания. Языки должны быть максимально удобными и экономить время, а не заставлять думать, какой тут капкан может быть.
Цитата: Алексей Гринь от декабря 23, 2010, 23:04
Я не видел ещё, чтобы кто-либо серьёзный писал на C# по иным гайдлайнам, чем установлено.
Напрашивается вывод, что правила должны быть встроены в язык.
И вообще, имхо самой банальной вещи в пропертях не хватает: индексаторов. Где-то читал, что в С-шарпе их убрали намеренно, хотя в васике и прочих дотнетах есть. Может в четверке уже одумались?
Цитата: RawonaM от декабря 23, 2010, 23:08
ЦитироватьЦитироватьВо-первых, как отличить приватный член от проперти — не ясно, даже если придерживаться правил.
Не понял. Если придерживаться правил, то свойство будет с большой буквы, а поле — с маленькой. Так и отличать.
Я очепятался, уже там исправил. Публичный член.
Терминология странная. Публичное свойство и есть публичный член. Имеется в виду поле? Как я уже сказал, в .NET публичные поля не рекомендуется использовать. Они допустимы разве что при P/Invoke при описании unmanaged structs, т.к. там инкапсуляция не нужна.
Во-первых, публичные поля не рекомендуются из-за возможных проблем с versioning, потому что логика может поменяться (напр., нужно полученный результат как-то изменить), а код везде (в том числе клиентский, если у нас библиотека) использует напрямую поле. Это ломание API.
Во-вторых, зачем вообще отличать поля от свойств? По гайдлайнам свойство должно производить гарантированно быструю операцию, т.е. оверхеда никакого не должно быть. Напр. поэтому в базовой библиотеке классов Object имеет метод GetHashCode, а не свойство HashCode, т.к. неизвестно сколько долго будет браться хеш, если переопределять метод в дочерних классах. Бояться, что а вдруг свойство будет думать минуту — это паранойя, которая на практике имеет мало смысла (с профайлером проблему легко найти).
Цитата: RawonaM от декабря 23, 2010, 23:09
ЦитироватьЯ не видел ещё, чтобы кто-либо серьёзный писал на C# по иным гайдлайнам, чем установлено.
Напрашивается вывод, что правила должны быть встроены в язык.
Может, так и есть. Не читал стандарт C#'овский. Но вообще это правила общие для .NET'а, хотя и допустимо использовать собственные конвенции, напр. как это есть в F# (там много чисто OCAML-овых функций_в_известном_стиле). Вообще в .NET'е есть ещё такая штука, как CLS compliance. Её можно нарушать, а можно не нарушать — смотря какие цели. Там поумнее всё сделано всё-таки, чем в жабке, и не так всё лоботомично.
Цитата: RawonaM от декабря 23, 2010, 23:11
И вообще, имхо самой банальной вещи в пропертях не хватает: индексаторов. Где-то читал, что в С-шарпе их убрали намеренно, хотя в васике и прочих дотнетах есть.
Ну они редко когда нужны, а если нужны, то легко эмулируются аггрегацией.
Цитата: Алексей Гринь от декабря 23, 2010, 23:21
Во-вторых, зачем вообще отличать поля от свойств?
Чтобы знать, вызывается функция или просто присваивается значение. С этого же все началось.
Впрочем, с точки зрения инкапсуляции этого не надо знать. Но когда разбираешь код класса какого-нибудь, нужно думать, вот тут присваивается проперти — а вдруг его сеттер делает какие-то действия?..
Если сеттеры и геттеры никогда ничего не делают помимо присвоения, то они вообще не нужны.
Цитата: Алексей Гринь от декабря 23, 2010, 23:21
Во-первых, публичные поля не рекомендуются из-за возможных проблем с versioning, потому что логика может поменяться (напр., нужно полученный результат как-то изменить), а код везде (в том числе клиентский, если у нас библиотека) использует напрямую поле. Это ломание API.
Так в сегодняшней реализации публичные поля используется так же, как и пропертиз. Завтра че-то изменится — замени на проперти если надо, ничего менять в существующих кодах не надо, даже и перекомпилировать не надо.
Впрочем, если на сегодня проперти определяется одной строкой и не отличается от переменной, а переменная создается имплицитно, то они вообще не отличаются.
Короче получается так: с одной стороны это удобно и юзфул, с другой стороны юзать их нужно в хирургических перчатках. Чтобы сделать ридонли поля проперти не обязательно было вводить.
Цитата: Алексей Гринь от декабря 23, 2010, 23:22
Там поумнее всё сделано всё-таки, чем в жабке, и не так всё лоботомично.
C этим согласен полюбэ.
Цитата: Алексей Гринь от декабря 23, 2010, 23:25
ЦитироватьИ вообще, имхо самой банальной вещи в пропертях не хватает: индексаторов. Где-то читал, что в С-шарпе их убрали намеренно, хотя в васике и прочих дотнетах есть.
Ну они редко когда нужны, а если нужны, то легко эмулируются аггрегацией.
Это как понять — легко? Мне нужно простую вещь сделать, а теперь эмуляцию строить...
Даю пример, буквально сегодня ломал голову. Я в С-диезе новичок, может че-то дельное подскажешь, чем просто языками трепать :)
Например, есть приватный массив допустим string a[]. Мне нужна пропертя, которая выдаст по индексу n — a[n][0]. Как это легко сделать? Получается, что если в лоб, то надо выдавать целый массив первых караткеров из того массива.
Геттеры и сеттеры отлично инлайнятся, если кто-то озабочен оверхедом на установку стекфрейма при вызове скрытого метода.
Цитата: Алексей Гринь от декабря 23, 2010, 23:38
Геттеры и сеттеры отлично инлайнятся, если кто-то озабочен оверхедом на установку стекфрейма при вызове скрытого метода.
Овергедом я не озабочен, это вообще отдельный вопрос. Я озабочен их надобностью.
Цитата: 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]. Как это легко сделать?
Чё-то не понял, что нужно.
Цитата: Алексей Гринь от декабря 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 должны быть равны.
Цитата: 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 таким методом сделано определённое число классов с именованным индексатором (то есть реально возвращаются специальные объекты). По-моему, это не очень сложно, учитывая нераспространённость такого случая.
Цитата: Алексей Гринь от декабря 24, 2010, 00:21
ЦитироватьПомечтаем о суппорте индексов:
Это малость нетривиально, поэтому надо методом GetFirstChar.
Если сильно приспичит, то можно эмулировать созданием вспомогательного класса что-то вроде
Ж*** короче. Понятно, что классом можно сэмулировать, но мне это ни к селу ни к городу вообще.
Цитата: Алексей Гринь от декабря 24, 2010, 00:21
По-моему, это не очень сложно, учитывая нераспространённость такого случая.
Случай это не то чтобы нераспространенный, он вообще постоянно нужен. Без него проперти неполноценные ни разу. Если я хочу вернуть значение как функция от индекса, а не массив вернуть. Фигня в общем нездоровая.
Цитата: Алексей Гринь от декабря 24, 2010, 00:21
Цитироватьно делать этого нельзя, кроме того, что делают эти дефолтные.
С чего хоть. Всё что угодно можно делать.
Пример из мира матриц:
Вот, наделал там, а кто-то читает код и ниче не понимает, потому что куча операций имплицитно делаются. Следовательно, нельзя делать все что захочешь в функциях доступа.
Цитата: RawonaM от декабря 24, 2010, 00:29
Ж*** короче.
Да чё хоть жопа. Там класс вспомогательный аж 4 полноценных строчки. Напоминаю, что в яве просто тупо описать поле, поставить один бессмысленный сеттер и один бессмысленный геттер это уже 3 строчки.
Цитата: RawonaM от декабря 24, 2010, 00:29
Случай это не то чтобы нераспространенный, он вообще постоянно нужен. Без него проперти неполноценные ни разу. Если я хочу вернуть значение как функция от индекса, а не массив вернуть. Фигня в общем нездоровая.
Спорно.
Цитата: RawonaM от декабря 24, 2010, 00:29
Вот, наделал там, а кто-то читает код и ниче не понимает, потому что куча операций имплицитно делаются.
Всегда есть комментарии.
Цитата: RawonaM от декабря 23, 2010, 22:37
Автор может не помнить, если писал этот код пять лет назад, так же как и читатель не может ходить и смотреть сеттеры всех пропертиз. А проблем вообще никогда никаких нет, вопрос потраченного времени.
Тебе так и так придётся смотреть определение b и тратить на это время. Я вариант с ясновидением не рассматриваю, возможно, зря... :eat:
Цитата: RawonaM от декабря 23, 2010, 22:37
И нах это надо, если можно просто int a?
А как компилятор будет свойства от переменных отличать?
Цитата: RawonaM от декабря 23, 2010, 22:39
Все проблемы вообще надуманные и их никогда нет, если придерживаться строгих правил и все четко помнить наизусть. ИРЛ ситуация не такая, особенно когда над кодом работаешь возвращаясь к нему раз в несколько месяцев и код вообще не твой.
В таком режиме птичий код, напичканный сокращениями, вообще противопоказан. Это не ты его выше рекламировал? ;)
Цитата: RawonaM от декабря 23, 2010, 22:48
Я только указал на возможные их недостатки, которые иногда могут забрать в два раза больше времени, чем экономится на пропертизах вообще.
Ты так и не привёл убедительных примеров.
Цитата: RawonaM от декабря 23, 2010, 22:48
Самый скрытохакный язык — Жабаскрипт.
?
Цитата: RawonaM от декабря 23, 2010, 22:56
Во-первых, как отличить публичный член от проперти — не ясно, даже если придерживаться правил.
Это совершенно не нужно. Свойство — это дополнительное средство отделения интерфейса от реализации. Тебя вообще не должно волновать, просто там присваивание или непросто. Все эти ахи-охи по поводу накладных расходов называется
преждевременная пессимизация — один из смертных грехов программирования.
Цитата: RawonaM от декабря 24, 2010, 00:29
Вот, наделал там, а кто-то читает код и ниче не понимает, потому что куча операций имплицитно делаются. Следовательно, нельзя делать все что захочешь в функциях доступа.
Опять двадцать пять. То есть документацию не читаем, код не читаем, логику не понимаем, пишем сами чего не знаем?
Цитата: 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]);
}
}
Цитата: myst от декабря 24, 2010, 09:20
Чё-то я спросонья не пойму, а в чём проблема?
Проснитесь и перечитайте Равонама.
Проснулся, перечитал. Ему надо a.prop
, которая будет вертать a.strings
Цитата: Алексей Гринь от декабря 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 это не простое взятие свойства, а скорее функция.
Цитата: Алексей Гринь от декабря 23, 2010, 13:16
сумасшедший коммунист Столлман, который за всю жизнь осилил написать только программу-блокнот
Здравствуйте пожалуйста. GDB, конечно же, Алексей Гринь напейсал.
ЦитироватьПервоначально написан Ричардом Столлмэном в 1988 году. С 1990 до 1993 гг. поддерживался Джоном Джилмором, во время его работы в компании Cygnus Solutions.
Целых два года писал, дойдя до версии 0.0.01 alpha, которая умела аж написать имя лицензии, с которой написана и имя автора! Молодец! А Линус до сих пор лично отслеживает все добавления в ядро. В то время как Столлмян кляузничает и борется с мельницами.
Цитата: Алексей Гринь от декабря 25, 2010, 19:13
А Линус до сих пор лично отслеживает все добавления в ядро.
То есть сам тоже уже не пишет? :eat:
Пишет. Не помню как было давно, но успехом пользовалась новость, что он переписал кое-чё на си, и получилось быстрее, чем существующая оптимизированная версия на ассемблере.
Про Столлмана сложно что-то такое вспомнить. Он больше юрист и политик, чем программист.
Цитата: Алексей Гринь от декабря 25, 2010, 20:01
Пишет. Не помню как было давно, но успехом пользовалась новость, что он переписал кое-чё на си, и получилось быстрее, чем существующая оптимизированная версия на ассемблере.
Осенью он костыль на коленке слепил для программ, которые неправильно используют memcpy. У него звук из-за этого пердел или что-то в этом роде.
Цитата: myst от декабря 25, 2010, 21:25
которые неправильно используют memcpy
Это ж как можно им неправильно пользоваться-то? Только если overlapped-память. Но ведь каждый ПТУшник знает, что нужно использовать memmove! Такие вот люди в опенсорсе.
Цитата: Алексей Гринь от декабря 25, 2010, 21:55
Это ж как можно им неправильно пользоваться-то? Только если overlapped-память. Но ведь каждый ПТУшник знает, что нужно использовать memmove! Такие вот люди в опенсорсе.
Ещё одно подтверждение того, что
каждый ПТУшник знает недостаточная защита от ошибок. И это не последняя ягодка C, колоццо и колоццо предстоит долгие годы. Вирт был прав на 200%, все эти undefined behaviours добром не кончаются, доказано C. :) И не надо про бидлокодеров мне рассказывать. :negozhe:
Кстати, я точно уже не помню, но вроде у флэша такая же фигня, или даже именно в нём у Линуса звук и пердел. :)
Много багов из-за путаницы signed/unsigned - довольно трудно без тайпкаста угадать, какого типа конкретный промежуточный результат. Если бы вместо "знаковых типов" были "знаковые операции" (что в реальности и происходит), было бы куда проще.
Цитата: Alone Coder от декабря 26, 2010, 09:16
Много багов из-за путаницы signed/unsigned - довольно трудно без тайпкаста угадать, какого типа конкретный промежуточный результат.
О таком смешении предупреждает компилятор.
Не всегда. Например, читаем из потока байты, а используем как знаковые числа. У моего друга был такой случай. Никакой компилятор не угадает, как должно быть.
Входные данные программы вообще не дело компилятора. Пример не из того тазика.
Получается, что мы при программировании мы пытаемся описывать знаковые/беззнаковые операции в терминах знаковых/безнаковых чисел, а потом компилятор делает обратную операцию. ЗАЧЕМ?
Цитата: Alone Coder от декабря 26, 2010, 10:36
Получается, что мы при программировании мы пытаемся описывать знаковые/беззнаковые операции в терминах знаковых/безнаковых чисел, а потом компилятор делает обратную операцию. ЗАЧЕМ?
Какую обратную операцию он делает? :o
Вирт, как известно, вообще радикально решил эту проблему: убрал беззнаковые целые как класс.
В зависимости от типов операндов вставляет знаковые и беззнаковые операции.
Язык без беззнаковых целых - это нелепо. Как через них делать широкие типы? Как должны работать сдвиги и пр.?
Цитата: 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
Цитата: myst от декабря 26, 2010, 11:01
Я не пойму, Вы предлагаете, отменить типизацию данных, что ли?
Я предлагаю всего лишь указывать знаковость не в типе данных, а в самой операции.
Вот, решил тут было воспользоваться автопропертями. А у них, как оказалось, невозможно выставить начальное значение! Когда этот язык доведут до ума, диез этот? >(
Цитата: myst от декабря 26, 2010, 11:01
ЦитироватьЯзык без беззнаковых целых - это нелепо.
Расскажите об этом Вирту.
Это не тому ли, у которого из придуманных языков популярен только один, и то среди школьников? :) Ну да, школьникам беззнаковые не пригодятся.
У беззнаковых профит в том, что не нужно проверять нижнюю границу на выход за пределы диапазона...
Цитата: RawonaM от декабря 26, 2010, 12:42
Вот, решил тут было воспользоваться автопропертями. А у них, как оказалось, невозможно выставить начальное значение!
В конструкторе поставить религия мешает?
Цитата: RawonaM от декабря 26, 2010, 12:42
Вот, решил тут было воспользоваться автопропертями. А у них, как оказалось, невозможно выставить начальное значение! Когда этот язык доведут до ума, диез этот?
Вообще это логично, и уже доведено до ума. Если сразу после указания проперти ставить знак равенства и дефолтное значение, то встаёт вопрос: при приравнивании компилятор должен ставить значение сразу в поле (что невозможно в случае неавтоматических пропертей), или задействовать механизм пропертей (т.е. с вызовом метода)? Это во-первых. А во-вторых, если верно второе, то задействование механизма пропертей это же вызов метода, а это есть конструкция с побочными эффектами, и в таком виде ставить небезопасно — прочие поля ещё не гарантируются быть установленными, а мы можем на них, неинициализированные, надеяться. Поэтому Хейлсберг принудил проставлять значение в конструкторе, где последовательность прозрачна.
Цитата: Алексей Гринь от декабря 26, 2010, 13:22
ЦитироватьВот, решил тут было воспользоваться автопропертями. А у них, как оказалось, невозможно выставить начальное значение!
В конструкторе поставить религия мешает?
И какой в этом глубокий смысл? А отказаться от пропертиз вообще религия мешает? Конструктор где находится, а проперти где.
Я предпочел создать вместо автопроперти нормальую проперти и вместо имплицитного поля эксплицитное с инициализацией, зато сразу видно, что происходит.
Цитата: Алексей Гринь от декабря 26, 2010, 13:42
Вообще это логично, и уже доведено до ума.
Не считаю. Как и с индексатором. В васике есть индексаторы, хоть бери и на васик переходи.
Цитата: RawonaM от декабря 26, 2010, 13:50
ЦитироватьВообще это логично, и уже доведено до ума.
Не считаю.
Аргументы будут? Уж думаю у Хейлсберга опыта в языко- и компиляторостроении побольше будет.
Цитата: RawonaM от декабря 26, 2010, 13:48
Конструктор где находится, а проперти где.
И чего? В реальной жизни больше половины полей объекта ставится в конструкторе — и ничего. Никто не жалуется. А тут вдруг бида. Я вообще для приличия всегда все значения стараюсь ставить только в конструкторе. А то одно инициализировано в одном месте, другое — в другом, хрен поймёшь. Это ли разве лучше?
Цитата: Alone Coder от декабря 26, 2010, 11:39
Я предлагаю всего лишь указывать знаковость не в типе данных, а в самой операции.
Это типа «Итак, мы изнасиловали переменную
a, как будто она беззнаковая; а сейчас мы будем её насиловать, как будто она знаковая»? :eat:
Да. Между прочим, в C уже есть как минимум два случая двойного насилования: char/int8 и int/boolean.
Цитата: Алексей Гринь от декабря 26, 2010, 13:18
Это не тому ли, у которого из придуманных языков популярен только один, и то среди школьников? :)
Поэтому продолжаем кушать кактус за обе щеки. Думаешь, у C сюрпризы? ;)
Цитата: Алексей Гринь от декабря 26, 2010, 13:18
У беззнаковых профит в том, что не нужно проверять нижнюю границу на выход за пределы диапазона...
Угу, особенно когда диапазон — [10;15], например.
Цитата: Alone Coder от декабря 26, 2010, 14:10
Между прочим, в C уже есть как минимум два случая двойного насилования: char/int8 и int/boolean.
Этот язык вообще для насильников, но в чём двойность?
Типизация определяет ширину. Остальное от лукавого.
Цитата: Alone Coder от декабря 26, 2010, 14:14
Типизация определяет ширину. Остальное от лукавого.
А длину она не определяет случаем или, там, вес?
Вы никогда флоатами по сети не обменивались? И вавки из формата в формат не конвертировали?
Нет уж, в тексте, который я пересказывал (arseniiv не станет пересказывать неодобренное своей головой), явно написано, что тип определяет диапазон и операции.
Цитата: Алексей Гринь от декабря 26, 2010, 13:53
Аргументы будут? Уж думаю у Хейлсберга опыта в языко- и компиляторостроении побольше будет.
Какие тут аргументы? Надо и все. Поле можно инициализировать, а пропертю нельзя? Ну давайте вообще на С вернемся и нафиг оно надо.
Цитата: Алексей Гринь от декабря 26, 2010, 13:42
Если сразу после указания проперти ставить знак равенства и дефолтное значение, то встаёт вопрос: при приравнивании компилятор должен ставить значение сразу в поле (что невозможно в случае неавтоматических пропертей), или задействовать механизм пропертей (т.е. с вызовом метода)? Это во-первых. А во-вторых, если верно второе, то задействование механизма пропертей это же вызов метода, а это есть конструкция с побочными эффектами, и в таком виде ставить небезопасно — прочие поля ещё не гарантируются быть установленными, а мы можем на них, неинициализированные, надеяться. Поэтому Хейлсберг принудил проставлять значение в конструкторе, где последовательность прозрачна.
Это только для неавтоперти актуально. А для авто — имплицитному полю присваиваешь и все.
Цитата: Alone Coder от декабря 26, 2010, 14:19
Вы никогда флоатами по сети не обменивались? И вавки из формата в формат не конвертировали?
А надо?
Цитата: arseniiv от декабря 26, 2010, 14:23
Нет уж, в тексте, который я пересказывал (arseniiv не станет пересказывать неодобренное своей головой), явно написано, что тип определяет диапазон и операции.
Coder изобрёл новый, революционный подход. Правда, его опередили на несколько десятилетий всякие там процессороклепатели, гады, но ничего, надо бороться.
Цитата: RawonaM от декабря 26, 2010, 14:54
Ну давайте вообще на С вернемся и нафиг оно надо.
Как, тебе не любо писать на C? Такой прекрасный язык! Все ксакепы только на нём и пишут. Не какой-то там Паскаль для школоты!
Цитата: myst от декабря 26, 2010, 15:26
Coder изобрёл новый, революционный подход.
А то я не вижу сам. ;D
Цитата: RawonaM от декабря 26, 2010, 14:54
ЦитироватьАргументы будут? Уж думаю у Хейлсберга опыта в языко- и компиляторостроении побольше будет.
Какие тут аргументы? Надо и все. Поле можно инициализировать, а пропертю нельзя?
Я же уже объяснил выше. Проперти это среднее между полем и методом. С чего бы проперти иметь автоинициализацию как у поля вообще? Я вообще считаю, что инициализация в месте объявления - это плохая практика, скопипащенная дизайнёрами из жабки. Надо в конструкторе только. Ибо гемора много, если придётся менять код.
Цитата: RawonaM от декабря 26, 2010, 14:54
Это только для неавтоперти актуально. А для авто — имплицитному полю присваиваешь и все.
Ортогональность.
Тогда можно было бы:
Цитироватьstring Name { get; set; } = "Hello!";
Но нельзя было бы:
Цитироватьstring Name {
set { /* Код. */ }
get { /* Код. */ }
} = "Hello!";
(особенно актуально при изменении логики, т.к. автопроперти часто ставятся как временная заглушка и вместо автопроперти может подставляться реальный код впоследствии - пришлось бы сдвигать код в конструктор, как и надо было сначала)
На такое бы нашёлся тоже свой Равонам, который бы и это критиковал.
Короче, не умеешь пользоваться и не понимаешь принципов — не жалуйся и юзай питон и жабку. Там можно писать отличный хреновый код.
Как я уже говорил, основная причина существования свойств это вывод их в публичный интерфейс.
Поля содержат реальную, физическую информацию, в то время как свойства это логические составляющие объекта, инкапсулирующие поля.
Извне класса свойство это метод, ведущий себя чисто как поле.
Но внутри-то объявления класса свойство это обычный метод. Какая инициализация может быть у метода? Зачем она ему вообще? Если нужна автоинициализация, то энкапсулируй специально созданное вручную поле (хотя в конце концов компилятор выведен код тупо в конструктор).
Автосвойства сделаны для упрощения рутинного написания геттеров и сеттеров — и не более. С какой стати они должны эмулировать поведение полей? Если понять, что такое свойство, то можно прекрасно видеть, почему дефолтное значение для свойства есть понятие абсурдное. Свойства это просто обёртки-wrappers. Дефолтное значение для обёртки это нонсенс.
Ещё неортогональности и неясностей:
Допустимо:
Цитировать
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!";
}
Ваще классно, да.
Прикол в том, что у «автосвойств» может не быть неявного поля :) Да, давайте введём ещё двадцать правил и исключений, чтобы угодить чьему-либо непониманию сего понятия :)
Цитата: myst от декабря 26, 2010, 10:40
Вирт, как известно, вообще радикально решил эту проблему: убрал беззнаковые целые как класс.
Ну дык в жабе так же.
Вы бы ещё язык микрокалькулятора вспомнили :)
Цитата: Demetrius от декабря 26, 2010, 17:26
Ну дык в жабе так же.
Гослинг у Вирта подглядел. :)
(Думаю тут попсевдооффтопить, благо тема уже раскрученная и не пропадёт из виду.)
В VCL есть готовая реализация паттерна проектирования Command (вроде его) — actions, которые позволяют синхронизировать пункты меню и кнопки на панелях, а так же при желании снабдить их простым диалогом настройки с сохранением положения панелей и кнопок на них. Последнее мне не нужно, но интересно, реализованно ли что-то для синхронизации меню и панелей стандартным классом/компонентом в .NET или каким-нибудь сторонним подключаемым. Иначе придётся писать столь полезную вещь самому.
На Исходниках (http://forum.sources.ru/index.php?showtopic=322801&st=0&#entry2796329) сказали, что стандартного всё-таки нигде не спрятано. Хотя про сторонние разработки ничего. Ладно, руками напишу.
Сегодня пришла идея о таком синтаксисе:
Цитировать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
Алексей, а Вы случаем не в помойку kitchen sink шарп хотите превратить? Два синтаксиса для одного и того же действия — это как-то тетто...
Цитата: Demetrius от
Два синтаксиса для одного и того же действия
Цитата: Phersu от января 24, 2011, 00:51
Так можно было сделать вместо
Цитата: Phersu от января 24, 2011, 00:51
Как бы Хейлсберг до этого додумался уже!
Сослагательный перфект
Ему административно заткнули рот, то ли за мат, то ли за что-то еще, бог их разберешь. После рецедива с Phersu забанили, кажется обоих.
Жалко. Хороший человек.
Цитата: Demetrius от января 25, 2011, 09:04
Жалко. Хороший человек.
+1.
Бан Гриню закончится через несколько дней, будем верить, что он исправится и не будет больше от нас отлучаться.
Учитывая, что «отлучаться» здесь — пассив, чтится зобавна...