LINUX.ORG.RU
ФорумTalks

C#


0

0

Кто-нибудь писал\пишет на С#? Недавно смотрел исходник на нем - как-то кривенько все выглядит. У кого какие впечатления?


Ответ на: комментарий от anonymous

> Быдло производители не пределали удобную рукоятку для забивания гвоздей к моему микроскопу. Меня как творческую личность лишили свободы выбора.

Указатели - не рукоятка. Это ФУНДАМЕНТАЛЬНАЯ функциональность, которую из-за её потенциальной опасности для быдла постарались заменить прикрученными с разных боков рукоятками и прочими костылями. И даже добились успеха в этом деле - быдло, по крайней мере, довольно.

anonymous
()
Ответ на: комментарий от anonymous

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

У тебя электропитание через розетки подаётся или с голых проводов? Провода удобнее - переходников под буржуйские вилки не нужно.

А на балконе перила есть? Ведь для внимательного человека они не нужны. А вид портят...

KRoN73 ★★★★★
()
Ответ на: комментарий от anonymous

>Ножи должны сдохнуть, потому что anonymousI может ими порезаться.

А почему ты не бреешья опасной бритвой?

KRoN73 ★★★★★
()
Ответ на: комментарий от anonymous

>Можно я буду программить на C?

Да хоть на ассемблере. Если это будет не в ущерб качеству.

Вот только сколько процентов сейчас программирует на нём? И, ведь, те кто на нём массово программировал 15 лет назад никуда не делись. Но - бросают. Задумайся над этим.

KRoN73 ★★★★★
()
Ответ на: комментарий от anonymous

Что значит "ФУНДАМЕНТАЛЬНАЯ функциональность" ? Мне не понятно. Приведи примеры задач которые нельзя решить без использования указателей ?

Burbaka ★★
()
Ответ на: комментарий от KRoN73

> У тебя электропитание через розетки подаётся или с голых проводов? Провода удобнее - переходников под буржуйские вилки не нужно.

> А на балконе перила есть? Ведь для внимательного человека они не нужны. А вид портят...

Некорректные аналогии. Розетками пользуются все и каждый день. Указатели ты можешь не юзать и не знать о них вообще. Специально для тебя придумали специальные средства "для дурака". Но не мешай другим, более сообразительным и внимательным, использовать указатели. А то получается позиция "если я не умею - нечего и другим уметь; ишь чего удумали - умнее меня быть!".

anonymous
()
Ответ на: комментарий от KRoN73

> А почему ты не бреешья опасной бритвой?

Большая слишком. Была бы сравнима по размерам - может, и брился бы.

anonymous
()
Ответ на: комментарий от KRoN73

> Вот только сколько процентов сейчас программирует на нём? И, ведь, те кто на нём массово программировал 15 лет назад никуда не делись. Но - бросают. Задумайся над этим.

Это связано не с его опасностью, а с переносимостью. Прогу на C ты скомпилишь на любой платформе, для которой есть C-компилер. А ассемблер-код прибит гвоздями к процессору.

anonymous
()
Ответ на: комментарий от Burbaka

> Что значит "ФУНДАМЕНТАЛЬНАЯ функциональность" ? Мне не понятно. Приведи примеры задач которые нельзя решить без использования указателей ?

Можно решить практически любые. Но некоторое - проще указателями. Например, ковыряться в участке памяти, структура которого не представляет собой что-то стандартизированное типа xml. Его, конечно, можно загрузить в какой-нибудь string и ковырять его методами, но это - костыль.

anonymous
()
Ответ на: комментарий от KRoN73

>>Можно я буду программить на C?

> И, ведь, те кто на нём массово программировал 15 лет назад никуда не делись. Но - бросают.

Откуда статистика? Я читал, что число программистов на Си даже растет, а на Си++ - падает, но не намного.

tailgunner ★★★★★
()

Бродив по сети, я однажды наткнулся на такое утверждение (к сожалению не помню кто автор):

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

А лично мне C# понравился. Чем? 1) Простотой и лаконичностью (тут один человек утверждал, что исходник кривенько выглядит, так это по моему вообще не аргумент, как можно к такому придираться если языка не знаншь совершенно.) 2) Наличием удобного и быстрого ide 3) Возможностью использовать небезопасный код (в яве конечно тоже есть, не отрицаю, но подход в C# мне больше понравился) 3) Огромным кол-вом готовых компонент (это конечно не редкость для языка но всё же) 4) Простотой разработки gui

anonymous
()
Ответ на: комментарий от anonymous

> Можно решить практически любые. Но некоторое - проще указателями. Например, ковыряться в участке памяти, структура которого не представляет собой что-то стандартизированное типа xml. Его, конечно, можно загрузить в какой-нибудь string и ковырять его методами, но это - костыль.

В этом примере не разкрывается принципиальная разница между указателем в Си и индексом массива в том же Си#. "Ковырятся" можно и так и так. Разве только в Си границы массива не чекаются. В чем заключается такая уж "фундаментальность" указателей ?

Burbaka ★★
()
Ответ на: комментарий от Burbaka

> В этом примере не разкрывается принципиальная разница между указателем в Си и индексом массива в том же Си#. "Ковырятся" можно и так и так. Разве только в Си границы массива не чекаются. В чем заключается такая уж "фундаментальность" указателей ?

В том, что это - базовый способ для прямой работы с памятью, непосредственно соответствующий таковому в ассемблере с его адресацией памяти через регистры. Если бы ты хоть немного знал ассемблер, то таких вопросов не задавал.

anonymous
()
Ответ на: комментарий от anonymous

> Например, ковыряться в участке памяти

Бред. Программа обрабатывает данные вполне определенного типа и понятие "участке памяти" - полный бред.

> структура которого не представляет собой что-то стандартизированное типа xml

т.е. обрабатывается последовательность байт?

> Его, конечно, можно загрузить в какой-нибудь string и ковырять его методами, но это - костыль.

Данные нужно из внешнего формата перевести в граф или массив и с ним работать.

Begemoth ★★★★★
()
Ответ на: комментарий от anonymous

А по мойму вести споры С/C++ vs Java(не говорю о C#) просто глупо. Вас видно в школе не учили, что язык(ex: Java) рождается не просто так, а когда появляется задача и ищется более удобное средство для ее решения. Например писать бизнес приложения на Java очень легко и удобно. Зачем выдумывать велосипеды на С/С++, если парни из Sun уже все написали за вас?

По поводу C#... а здорово ли, что он весь такой для Windows? =)

Ian ★★
()
Ответ на: комментарий от Ian

Ну mono еще никто не запретил... Хотя насколько это хорошая реализация .NET - не знаю.

Begemoth ★★★★★
()
Ответ на: комментарий от anonymous

> В том, что это - базовый способ для прямой работы с памятью, непосредственно соответствующий таковому в ассемблере с его адресацией памяти через регистры

Базовый для ЭВМ, но не для человека. Язык должен способствовать повышению уровня абстракции, а не просто предоставлять универсальные низкоуровневые средства. В функциональных языках прямая работа с указателями нужна только для взаимодействия с кодом на С.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

> Бред. Программа обрабатывает данные вполне определенного типа и понятие "участке памяти" - полный бред.

Участок памяти - это то место, которое ты, дурень, выделил при помощи malloc (потом освободил при помощи free), сгрузил туда данные из файла или получил с карты в PCI-разъёме и теперь анализируешь на низком уровне. Это не php-быдлокодинг, повторяю ещё раз для особо одарённых. Это низкоуровневая работа.

> т.е. обрабатывается последовательность байт?

Да. Или 16-битных данных, или ещё чего, всяко бывает. И указатели, соответственно, бывают разных типов.

> Данные нужно из внешнего формата перевести в граф или массив и с ним работать.

Кому нужно? Тебе? А я тебя спрашивал? Зачем мне какие-то идиотские костыли, если то, что надо мне, я прекрасно сделаю указателями? Чтоб тебе понравилось, что ли?

anonymous
()
Ответ на: комментарий от Begemoth

>> Его, конечно, можно загрузить в какой-нибудь string и ковырять его методами, но это - костыль.

> Данные нужно из внешнего формата перевести в граф или массив и с ним работать.

И в процессе этого перевода придется использовать указатели (aka индексы байтовых массивов).

Вообще какой-то странный спор. Вроде все знают, что процессоры работают с байтами, а не объектами, и с указателями, а не индексами. В чем фундаментальность указателя? Да в том, что на любой современной архитектуре индексы массивов и ссылки на объекты реализуются указателями.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

> В том, что это - базовый способ для прямой работы с памятью, непосредственно соответствующий таковому в ассемблере с его адресацией памяти через регистры. Если бы ты хоть немного знал ассемблер, то таких вопросов не задавал.

Значит указатели нужны в том случая когда необходим прямой доступ к некоторому участку памяти ? А где это надо кроме как в низкоуровневом программинге для железок ?

Burbaka ★★
()
Ответ на: комментарий от Burbaka

> Значит указатели нужны в том случая когда необходим прямой доступ к некоторому участку памяти ? А где это надо кроме как в низкоуровневом программинге для железок ?

Навскидку - в упаковке/распаковке данных в протоколах типа CORBA.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Навскидку - в упаковке/распаковке данных в протоколах типа CORBA

Чтоже там такого принципиального, что нельзя обойтись без указателей ?

Burbaka ★★
()
Ответ на: комментарий от Burbaka

> Значит указатели нужны в том случая когда необходим прямой доступ к некоторому участку памяти ? А где это надо кроме как в низкоуровневом программинге для железок ?

А вот в "низкоуровневом программинге для железок" обычно указатели типизированные, ибо структура регистров известна заранее ;) То есть там досту не к "участку памяти", а к "объекту типа 'регистры устройства'", и этот тип известен на этапе компиляции.

tailgunner ★★★★★
()
Ответ на: комментарий от Burbaka

>> Навскидку - в упаковке/распаковке данных в протоколах типа CORBA

>Чтоже там такого принципиального, что нельзя обойтись без указателей ?

Ты спросил, где используются - я ответил. Можно _принципиально_ ли там обойтись без указателей - не знаю. Но, исходя из того, что там пакуются/распаковываются данные заранее неизвестного типа, я не вижу, как там обойтись без манипуляции байтовыми массивами и использования указателей.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

> Участок памяти - это то место, которое ты, дурень, выделил при помощи malloc (потом освободил при помощи free), сгрузил туда данные из файла или получил с карты в PCI-разъёме и теперь анализируешь на низком уровне. Это не php-быдлокодинг, повторяю ещё раз для особо одарённых. Это низкоуровневая работа.

О Великий Гуру! Не соблаговолишь ли ты снизойти с высот низкоуровненго оперирования данными до понимания, что данные из файла или PCI-платы ты получаешь определенного типа, скажем, массив double вполне определенного размера, и этот "участок памяти" содержит _последовательность измерений_ и именно эту последовательность измерений программа и обрабатывает, на не "участок памяти".

> Да. Или 16-битных данных, или ещё чего, всяко бывает. И указатели, соответственно, бывают разных типов.

Да ты что!?

> Кому нужно? Тебе? А я тебя спрашивал? Зачем мне какие-то идиотские костыли, если то, что надо мне, я прекрасно сделаю указателями?

Да ты просто гений! Правильно нафиг нужны алгебраические типы данных! Нафиг абстракцию!

Begemoth ★★★★★
()
Ответ на: комментарий от tailgunner

> Ты спросил, где используются - я ответил. Можно _принципиально_ ли там обойтись без указателей - не знаю. Но, исходя из того, что там пакуются/распаковываются данные заранее неизвестного типа, я не вижу, как там обойтись без манипуляции байтовыми массивами и использования указателей.

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

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

> Та-ак. Имеется ввиду необходимость прямой работы с указателями при наличии в языке алгебраических типов данных?

Извини, но в моем ПТУ "алгебраических типов данных" не проходили. Не является ли "байтовый массив" "алгебраическим типом данных"? Не являются ли наличие native в Java и unmanaged-кода в C# признанием того, что без указателей обойтись всё-таки нельзя?

tailgunner ★★★★★
()
Ответ на: комментарий от Begemoth

> Базовый для ЭВМ, но не для человека.

Для человека базовым является русский, английский, немецкий и пр. Так, к слову.

> Язык должен способствовать повышению уровня абстракции, а не просто предоставлять универсальные низкоуровневые средства

Язык никому ничего не должен. Цель разработки языка - обеспечить решение определённого круга задач наиболее рациональным образом. Так вот, у каждого языка - свой типичный круг задач, но C (так уж повелось) - один из наиболее универсальных. На нём можно решить практическую любую задачу. А вот java - более узкий. На нём, конечно, пытаются решить и неподходящие для неё задачи, но выглядит это убого. C, как универсальному, указатели нужны. А в жабе можете творить что хотите - язык сей меня лично интересует очень мало, он заточен для обезьян и снабжён многочисленными защитами от тупой вероломной обезьяны.

anonymous
()
Ответ на: комментарий от tailgunner

Я опять не понимаю фундаметальной разницы между "указателем" и "массивом байтов" который есть в любом маломальски развитом языке программирования.

Burbaka ★★
()
Ответ на: комментарий от anonymous

>В том, что это - базовый способ для прямой работы с памятью, непосредственно соответствующий таковому в ассемблере с его адресацией памяти через регистры. Если бы ты хоть немного знал ассемблер, то таких вопросов не задавал.

Нескромный вопрос - тебе доводилось работать с архитектурами, отличными от x86?

KRoN73 ★★★★★
()
Ответ на: комментарий от Burbaka

> Значит указатели нужны в том случая когда необходим прямой доступ к некоторому участку памяти ? А где это надо кроме как в низкоуровневом программинге для железок ?

Не знаю. Полагаю, что в бизнес-приложениях от этого уровня попытались избавиться. Типичная обезьяна-кодер с указателями наделает кучу ошибок и потом не сможет их сама исправить, поэтому в языках типа java их убрали совсем. Но не потому, что это идеологически правильно, а потому, что дядьки из Sun поняли: пусть лучше индус родит громоздкий и тормозной код, который будет работать как надо, чем компактный и быстрый, который будет сегфолтиться. Просто бизнес, ничего личного.

anonymous
()
Ответ на: комментарий от Burbaka

Я и не говорил, что она есть. Наоборот, я считаю, что любой язык, претендующий на универсальность, имеет такую конструкцию (явно или неявно). Ибо указатели - фундаментальны :)

Хотя разница есть: "массив байтов" (точнее, индекс в нем) - это указатель в ограниченную область памяти. Это устраняет ошбку с сегфолтом (самую безобидную из всех ошибок работы с памятью).

tailgunner ★★★★★
()
Ответ на: комментарий от Burbaka

Вообще разница большая. Указатели вообще говоря могут быть не только типа void*. Операции с массивами в любом маломальски развитом языке включают проверку на диапазон индексов. Да и сами массивы могут быть многомерными.

Удивительно, что господа защитники указателей не вспомнили указатели на функции, которые являются основой для реализации мощных механизмов абстракции.

Begemoth ★★★★★
()
Ответ на: комментарий от KRoN73

> Нескромный вопрос - тебе доводилось работать с архитектурами, отличными от x86?

Что в нем нескромного? Да, приходилось. И сейчас постоянно приходится.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

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

Процессор не знает понятия "указатель". Только косвенную адресацию. И то не у всех. Более того, не все процессоры работаю с байтами. А вот с индексами - как раз многие работают. В том числе и пресловутые x86.

Забавно смотреть, как кто-то защищает низкоуровневый подход, даже не зная тонкостей низкоуровневого программирования.

KRoN73 ★★★★★
()
Ответ на: комментарий от anonymous

Песец. Из-за таких личностей как ты я люблю этот форум. Только здесь, в обществе сторонников сферических коней в вакууме и абсолютной универсальности на своей шкуре понимаешь, что все в мире относительно.

Burbaka ★★
()
Ответ на: комментарий от tailgunner

>Что в нем нескромного? Да, приходилось. И сейчас постоянно приходится.

Хорошо, уточнение - достаточно далёких от x86.

Вообще, "постоянно приходится" - с чем?

KRoN73 ★★★★★
()
Ответ на: комментарий от Burbaka

> Чтоже там такого принципиального, что нельзя обойтись без указателей ?

Что есть такого принципиального, чего нельзя сделать без кухонного ножа?

anonymous
()
Ответ на: комментарий от KRoN73

> Хорошо, уточнение - достаточно далёких от x86.

Ааа, вот ты к чему... Я работаю с "традиционными" архитектурами - то есть, ничего похожего на "Эльбрус", iAPX432, Java-процессоры. Но так уж получилось, я знаю, как работает система ввода/вывода "Эльбруса" :)

>Вообще, "постоянно приходится" - с чем?

С одним отечественным DSP. Но начинал я на ЕС, потом СМ, x86, C51, PowerPC. На всех хоть немного поработал с ассемблерами.

tailgunner ★★★★★
()
Ответ на: комментарий от Begemoth

> Вообще разница большая. Указатели вообще говоря могут быть не только типа void*. Операции с массивами в любом маломальски развитом языке включают проверку на диапазон индексов. Да и сами массивы могут быть многомерными.

Ну это отличия не в пользу указателей. О них я услышать не расчитывал.

Сам добавлю в пользу указателей (может и прозвучало, но не в явном виде): при помощи указателя можно представлять один и тот же участок памяти в виде данных различных типов. Это видимо используется, но редко. Обобщенного "зла" адресной арифметики в стиле Си нельзя искупить таким маленьким плюсом.

> Удивительно, что господа защитники указателей не вспомнили указатели на функции, которые являются основой для реализации мощных механизмов абстракции.

Абстракция у них не в чести

Burbaka ★★
()
Ответ на: комментарий от Begemoth

> О Великий Гуру! Не соблаговолишь ли ты снизойти с высот низкоуровненго оперирования данными до понимания, что данные из файла или PCI-платы ты получаешь определенного типа, скажем, массив double вполне определенного размера, и этот "участок памяти" содержит _последовательность измерений_ и именно эту последовательность измерений программа и обрабатывает, на не "участок памяти".

Это вопрос, как именно назвать сущность? Моя программа работает с данными типа X, на которые указывает указатель типа *X. То, что это какие-то там "измерения", программа не знает. Для неё есть последовательность данных какого-то типа. Ещё вопросы?

> Да ты просто гений! Правильно нафиг нужны алгебраические типы данных! Нафиг абстракцию!

На фиг _лишнюю_ абстракцию, которую придумывают от нечего делать. Нужна только та, от которой есть реальная польза.

anonymous
()
Ответ на: комментарий от Begemoth

> Та-ак. Имеется ввиду необходимость прямой работы с указателями при наличии в языке алгебраических типов данных?

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

anonymous
()
Ответ на: комментарий от Begemoth

> Вообще разница большая. Указатели вообще говоря могут быть не только типа void*.

Мы знаем :)

> Операции с массивами в любом маломальски развитом языке включают проверку на диапазон индексов.

Полезная фишка, спору нет.

> Да и сами массивы могут быть многомерными.

Правда? 8)

Вообще, о чем мы спорим? Я пытаюсь доказать, что указатели (понимаемые как "указатели на наименьшую адресуемую ячейку памяти") - вещь настолько фундаментальная, что даже в самом защищенном языке они присуствуют, ибо в некоторых случаях необходимы. Неужели с этим кто-то будет спорить?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Вообще, о чем мы спорим?

Изначально, как я понял, речь шла о практической ценности указателей и их фундаментальной необходимости на уровне языка программирования. Именно в этом контексте "опускался" Си#

Burbaka ★★
()
Ответ на: комментарий от Burbaka

> Я опять не понимаю фундаметальной разницы между "указателем" и "массивом байтов" который есть в любом маломальски развитом языке программирования.

Указатель никак не связан с размером области памяти. Он просто указывает на ячеку памяти. Решение о том, какого размера будет область памяти, принимается уже в процессе выполнения программы (malloc). Далее я могу изменять его значение, путешествуя по этой области памяти, как мне угодно. А потом могу и освободить эту память при помощи free.

anonymous
()
Ответ на: комментарий от KRoN73

> Нескромный вопрос - тебе доводилось работать с архитектурами, отличными от x86?

да.

anonymous
()
Ответ на: комментарий от Burbaka

>> Вообще, о чем мы спорим?

>Изначально, как я понял, речь шла о практической ценности указателей и их фундаментальной необходимости на уровне языка программирования. Именно в этом контексте "опускался" Си#

Ну, незаслуженно :) Вроде в unmanaged-коде указатели есть.

tailgunner ★★★★★
()
Ответ на: комментарий от Begemoth

> Удивительно, что господа защитники указателей не вспомнили указатели на функции, которые являются основой для реализации мощных механизмов абстракции.

А что, в java и их нет?

anonymous
()
Ответ на: комментарий от Burbaka

> Сам добавлю в пользу указателей (может и прозвучало, но не в явном виде): при помощи указателя можно представлять один и тот же участок памяти в виде данных различных типов. Это видимо используется, но редко. Обобщенного "зла" адресной арифметики в стиле Си нельзя искупить таким маленьким плюсом.

Струя газа в лужу. Это делается и с элементами массива. По крайней мере, я знаю языки, которые это позволяют. Это - не отличительная особенность указателей. Увы.

> Абстракция у них не в чести

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

anonymous
()
Ответ на: комментарий от anonymous

C тобой все ясно.

Если я спрошу у тебя: а используя такую свободу указателей ты можешь ошибится и пропутешествовать немного не туда ?

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

Этого мне крыть просто нечем. Убийственный довод.

Burbaka ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.