Лекция Вирта в политехническом - впечатления
От: BreQwaS Россия  
Дата: 21.09.05 11:41
Оценка: 290 (36) :)
Кросспост отсюда.

Flying in a blue dream

(весь нижеследующий текст будет понятен только программистам и интересующимся)

Итак, если кто не знает, сегодня утром в лектории политехнического музея была лекция "History and perspectives of Oberon language". Читал её Никлаус Вирт самолично.

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

Организация была "на высоте", как и всегда. Российские традиции блюлись со всей строгостью: толпа из примерно пятисот вполне приличных людей — студенты, программисты, институтские преподаватели — честно стояла в очереди за пригласительными, выдававшиеся двумя девушками, неспешно водившими пальчиком по спискам. Ровно половину аудитории (естественно, лучшую) отгородили "для вип-персон". Таковых оказалось десяток или два — однако всех остальных на эти ряды не пускали ещё долго. Перед лекцией какая-то тётка долго и упоно рассказывала, в каких славных стенах проходит действо. А переводчик, который переводил лекцию — это вообще отдельная песня. Но про это — потом.

С горем пополам лекция началась. Собственно, для читавшего флеймы типа "Оберон vs все-все-все" или "синтаксический оверхед", ничего особо нового сказано не было. В основном Вирт рассказывал про историю создания языка, от Паскаля через Модулу до Оберона: про то, что было добавлено, но в основном — про то, что было выкинуто. Не забыл похвастаться пресловутыми шестнадцатью страницами, на которых умещается спецификация языка. Поскольку всё это переводилось на русский, причём медленно и криво, слушать было довольно скучно.

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

1) Хороший язык — это простой язык. Жёстки, чёткий, логичный, с максимально строгой типизацией.
2) Оберон является таким языком. На обероне можно писать всё что угодно, а ещё лучше — всё сразу. Пресловутая Lilith тому примером.
3) Оберон не является промышленным стандартом потому, что ему не учат в университетах. А в университетах не учат оберон, потому что он не является промышленным стандартом. Порочный круг.
4) С/С++ и другие языки, которые сейчас этими стандартами являются, стали таковыми в основном благодаря маркетингу и громадной финансовой мощи тех, кто их продвигал.
5) Open source — это классно.
6) Java и C# позаимствовали из Оберона кой-какие идеи, но они были извращены синтаксисом С (так и сказал — corrupted with C syntax) и потому плохи. Но явно лучше, чем С и С++.

Сам Вирт как человек — очень симпатичен. Классический старенький профессор с седой головой, спокойным и приятным (хотя немного дрожащим) голосом, ясным умом, чистой и аккуратной речью и иногда просыпающимся чувством юмора. Английский у него IMHO очень неплохой, хотя говорил он довольно просто — лично я понимал его речь без проблем — но акцент очень сильный и довольно чудной. Наверное, учиься у него было бы классно.

Но, к сожалению, лекция была ОЧЕНЬ сильно испорчена переводом. Переводил какой-то придурковатый растрёпанный хамоватй мужичок, видимо — штатный переводчик политехнического. Мало того, что он не знал терминов и нёс всякую чушь (tree structures — три-структуры, open source — открытые источники, concurrency — то совместимость, то конкуренция, hard drive — твёрдый диск, 7-pass compiler — семиразрядный компилятор, compilation — исчисление и пр.), так он ещё и обычные фразы переводил совершенно похабно. Похабно не по смыслу, а по тону и подбору слов. Если Вирт говорил в стиле университетской лекции, то переводчик — не то в стиле журнала "Хакер", не то в стиле мартышки из зоопарка. Интересно, Вирт понял, что часто возникавший сдавленный ржач в зале относился не к нему, а к очередным "большим массивам программирования"?

В общем, самые шумные аплодисменты сорвал последний вопрос: "Профессор, а как вы думаете, появятся ли автоматические переводчики, способные полностью заменить человека?.."

Профессор ответил на вторую часть вопроса, потонувшую в гоготе: "И, если говорить шире, появятся ли машины, способные полностью заменить человека?" Ответ был — "Completely? Well, I think I wouldn't like her." Молодец деда

---

Перечитал написанное, и понял, что ничего не сказал о самом главном:

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

Кстати, теперь у меня на последней страничке зачёки примостился скромный и аккуратный "зачёт" от профессора Вирта. Ещё один повод "потерять" её перед выдачей диплома

http://livejournal.com/users/breqwas
Re: Лекция Вирта в политехническом - впечатления
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 21.09.05 13:10
Оценка: +1 :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :)))
Здравствуйте, BreQwaS, Вы писали:

А, эта, Губанова видел?
... << RSDN@Home 1.2.0 alpha rev. 617>>
AVK Blog
Re[5]: Лекция Вирта в политехническом - впечатления
От: sch  
Дата: 22.09.05 10:39
Оценка: 3 (3) +8
>

3) Оберон не является промышленным стандартом потому, что ему не учат в университетах. А в университетах не учат оберон, потому что он не является промышленным стандартом. Порочный круг.
> 4) С/С++ и другие языки, которые сейчас этими стандартами являются, стали таковыми в основном благодаря маркетингу и громадной финансовой мощи тех, кто их продвигал.


Гм... Я почему-то всегда думал, что Си был создан для использования исключительно внутри AT&T. Промышленным стандартом этот язык стал исключительно из-за своей логической завершенности и выразительности. Си есть конечная форма логического развития любого языка для системного программирования. Я подчеркиваю, Си такой, какой он есть не потому, что правительственная коммиссия или отдельно взятый, пусть и уважаемый, профессор, решили что дескать нужно им создать язык, а потому, что СИ есть результат закономерной эволюции языков A и B... Си -- это простой язык для выполнения сложных, очень сложных вещей. Именно поэтому у Си в системном программировании нет конкурентов и быть не может, как и не может быть конкурентов у ассемблера, например.

Такую большую популярность Си завоевал исключительно потому, что в те времена любое программирование было довольно низкоуровевым, т.е. довольно близким к системному.

А Си++ исключительно унаследовал популярность и практически все преимущества Си.

Все гораздо проще, как видите. И совершенно не нужны тут теории заговора со стороны мировых корпораций.
Posted via RSDN NNTP Server 1.9
Re[6]: Лекция Вирта в политехническом - впечатления
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 22.09.05 10:40
Оценка: 107 (8) +1
Здравствуйте, Donz, Вы писали:

D>Также надо учитывать, что Толстой один, сколько людей может написать как он? Ты предлагаешь настолько усложнить языки программирования, чтобы на них могли ваять исключительно гении, а для понимания написанного человеку требовался пятилетний курс языка?


Фишка как раз в том, что написаные Толстым произведения совсем не требуют для своего понимания пятилетнего курса русского языка (разве что для иностранцев).

И меня бы вполне устроило, если бы качественный софт писало всего несколько гениев, а не половина полунеграмотной Индии.

А по поводу того, сколько людей смогут писать как Толстой -- в "Законах Паркинсона" есть замечательный рецепт: для того, чтобы было больше гениев, нужен высокий средний уровень всех остальных. Поэтому, может быть, вместо создания языков для дебилов (я не про Оберон, а вообще), тратить силы на хорошую подготовку самих программистов?

D>Мне совершенно не хочется, чтобы if можно было написать двумястами разными способами.


Просто попробуй
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: Лекция Вирта в политехническом - впечатления
От: AndreyFedotov Россия  
Дата: 22.09.05 08:23
Оценка: 8 (3) +5
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, Дарней, Вы писали:


BQS>>>4) С/С++ и другие языки, которые сейчас этими стандартами являются, стали таковыми в основном благодаря маркетингу и громадной финансовой мощи тех, кто их продвигал.


Д>>насколько я помню, первые реализации C были практически наколенной поделкой, и только потом он получил поддержку


E>Имхо, с C++ тоже самое.

E>А уж про всякие Perl-ы с Python-ами, и Ruby с Tcl/Tk так и говорить не приходится -- только силами энтузиастов. И на них сейчас пишут больше, чем на Oberon.

Беда Вирта и подобных ему людей в том, что они искренне считают, что то, что им кажется логичным и правильным — лучше и по их мнению именно оно должно развиваться. Ну а жизнь проще и вместе с тем богаче. И народу было положить на "красоту" паскаля с обероном, где надо было писать begin...end вместо {...}. И те, кто помнят или видел набор текста на чудных зелёненьких терминалах IBM/VAX/ЕС-ЭВМ — хорошо поймут почему. В действительности если присмотреться, то сегодняшнее положение дел, когда всё равно, что писать (begin...end или {...}) — так как вставку автоматически обеспечивает среда разработки (а так же рефакторинг, автодокументирование, подсчёт статистики и многое другое) — это следствие многих десятилетий работы и развития наколеночных технологий, решения практических задач и успехов добытых как отдельными интузиастами, так и крупными компаниями.

А если посмотреть чуть шире (в то в философском смысле) оказывается, что наколеночные технологии (C, C++, Java, C#, Perl, Ruby, Tcl/Tk, ...) в целом гораздо успешнее, чем наработки теоретические (ADA, Pascal, Oberon...). По моему это получается в следствие учёта реальных потребностей тех, кому технология нужна и для кого она предназначени, а так же обратной связи от них. В случае же теоретических разработок если потребности чьи-то и учитываются, то только не тех, кому с технологией работать.
Re[3]: Лекция Вирта в политехническом - впечатления
От: Дарней Россия  
Дата: 22.09.05 10:38
Оценка: +2 :))) :)))
Здравствуйте, krasin, Вы писали:

K>1. Реальные программы на ФЯ за редкими исключениями не пишут, т.е. ФЯ скорее чисто академическая вещь.


http://www.googlefight.com/index.php?lang=en_GB&amp;word1=oberon&amp;word2=haskell

Похоже, Вирт окончательно утратил связь с реальностью
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[3]: Лекция Вирта в политехническом - впечатления
От: Трурль  
Дата: 23.09.05 04:56
Оценка: +1 :))) :))) :)
Здравствуйте, BreQwaS, Вы писали:

BQS>Я честно попытался спровоцировать его на это вопросом "почему при наличии такого хорошего оберона программы пишутся не на нём".


Когда-то Сократ намеревался посвятить оставшуюся жизнь выяснению вопроса, почему люди, зная как поступать хорошо, поступают все-таки плохо. Дело закончилось тем, что ему предложили выпить яду.
Re[2]: Лекция Вирта в политехническом - впечатления
От: BreQwaS Россия  
Дата: 25.09.05 17:02
Оценка: :))) :))) :))
Здравствуйте, mormat, Вы писали:

M>..... А с чего всё начиналось... с лекции Вирта про оберон и принципы... а вылилось во всестороннее обсуждение недостатков си, плюс мессаги религиозных фанатов....


А я что? А я ничего
Я сижу и тихо созерцаю — благодаря этому сообщению меня в месячный top10 занесло.
И ведь ничего особенного не написал вроде...
WinAmp играет: [theme] — star wars (intro)
http://livejournal.com/users/breqwas
Re[4]: Лекция Вирта в политехническом - впечатления
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 22.09.05 08:49
Оценка: 3 (3) +2 -2
Здравствуйте, AndreyFedotov, Вы писали:

AF> А если посмотреть чуть шире (в то в философском смысле) оказывается, что наколеночные технологии (C, C++, Java, C#, Perl, Ruby, Tcl/Tk, ...) в целом гораздо успешнее, чем наработки теоретические (ADA, Pascal, Oberon...). По моему это получается в следствие учёта реальных потребностей тех, кому технология нужна и для кого она предназначени, а так же обратной связи от них. В случае же теоретических разработок если потребности чьи-то и учитываются, то только не тех, кому с технологией работать.


Мне вот тоже интересно, почему весьма неглупый дедушка Вирт удивляется, что лаконичный и строгий Oberon не пользуется популярностью. И главную причину видит в мощном маркетинге тяжелых конкурентов. Я же вижу аналогию с естественными языками. Например, великий и богатый русский язык. Его овладение весьма тяжело и для носителей языка (я, например, был по русскому языку двоечником в школе), не говоря уж про иностранцев. Его мощь поражает. Говорят, что у Толстова на странице текста можно не найти повторения ни одного слова. В то же время можно совершенно понятно передавать свои впечатления с помошью трех-четырех матерных слов и нескольких предлогов. Но, имхо, гораздо проще и приятнее читать нормальный художественный текст, не замусоренных повторами, односложными предложениями, сокращенниями и прочим. Только вот чтобы научиться так писать нужно не мало труда приложить.

Вернемся к языкам программирования. При знакомстве с Perl и Ruby меня, например, неприятно поразила возможность писать if и while после действий. Т.е. вместо "нормального":
if( something )
    do_that()

можно написать:
do_that() if( something )

Поскольку я начинал учится программировать на Паскале, работая затем на C++, то я считал, что все это извращения, которые только ухудшают читабельность программы. Но, попрограммировав на Ruby я пришел к удивительному для себя открытию -- это удобно! Если не терять чувства меры, то такой подход не только сохраняет читабельность, но и упрощает написание кода. И ведь такая возможность в Perl и Ruby появилась не просто так -- она была добавлена туда по реальной необходимости.

Вот мне и кажется, что строгие, лаконичные языки пытаются заставить говорить только "Ручка лежит на столе". В то время как может потребоваться сказать "На столе лежит ручка". Или даже "Лежит ручка на столе". А т.к. программа -- это все таки текст, который должен быть в большей степени ориентирован на удобное восприятие программистом, а не компилятором, то чем больше свободы предоставляет язык программисту, тем более выразительными получаются программы.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[14]: Лекция Вирта в политехническом - впечатления
От: Пацак Россия  
Дата: 25.09.05 06:38
Оценка: +7
Здравствуйте, eao197, Вы писали:

E>По-твоему:

E>
E>if( 10 == a ) do_something();
E>

E>читается хуже, чем:
E>
E>if( a == 10 ) do_something();
E>


"Если a равно десяти, то..."
"Если 10 равно а то..."

Не знаю, как тебе, но мне вторая фраза просто "режет слух". Наверное потому, что привык в математике переменные в левую сторону уравнения переносить, а константы — в правую.
Ку...
Re[12]: Лекция Вирта в политехническом - впечатления
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.09.05 01:50
Оценка: 5 (2) +2 :))
Здравствуйте, Cyberax, Вы писали:

C>Или, например, взять GC — системное программирование с ним просто будет

C>невозможно.

Серьезно? А мужики то незнали и написали ОС на C#. Да еще и сам GC на нем написали. Все что выше HAL там на шарпе. И как не странно, ЖЦ не мешает.

Или ты имешь в виду, что теперь создание ядра ОС и драйверов не является системным программированием?

C>Это такая фигня — ошибка того же класса, что и and вместо or.


Нда.

Ты часто ставишь "<" вместо "!="? А вот == и = путаются на раз. Но проблема тут не в синтаксисе, а в том, что С плюет на типобезопастность.

>> В результате полдня потратил в сложном алгоритме на лов ошибки.


C>Что могу сказать.... Тренироваться надо! Я уже не вспомню, когда в

C>последний раз я искал подобную ошибку больше 5 минут.

Что могу сказать? Думать нужно прежде чем говоришь. Человек усомнился (и надо признать очень справедливо) в верности утверждения "С просто выучить... С простой язык". А ты ему про тренеровку. Натрирероваться можно и на машинных кодах программировать.

Кстати о тренеровке. Представь. Ты купил себе квартиру в которой добрый малый сделал дверной проем так, что ты глазами его не замечашь, но вот твой лоб упорно бъется о него при выходе. Ты возмущенно выставляешь претензии строителям, а они тебе в ответ "Что могу сказать.... Тренироваться надо! Я уже не вспомню, когда в последний раз я искал подобную ошибку больше 5 минут.".

>> Уродство это полное синтаксическое. Или синтаксис объявлений. С какой

>> стати в объявлении массива имя переменной стоит внутри объявления типов?

C>А с какой стати оно должно стоять в другом месте?


Со стати логичности. Квадратные скобочки являются частью декларации типа. И совершенно не логично, что часть этой декларации находится справа от имени переменной, а часть слева. Ты конечно уже "натренеровался", точнее привык к этому уродству, но вот новечка это однозначно введет в заблуждение. Именно по этому в C-подобном C# от этого отказались.
Но это еще что. Массивы хотя бы понятны на взгляд (если привыкнуть). А вот объявление указателя на функцию или typedef для него это уже верх дебилизма! Я долго мучился пока привык к этому:
void* (*pointerVarName)(void*);
typedef void* (*FuncPointerTypeName)(void*);

А вот делегаты C# понятны буквально каждому:
delegate object DelegateTypeName(object param);

Какого черта typedef и объявление указателя на фунцию не такие же как для других типов? Это что логично?

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

>> необходимо столько же времени, а иногда и больше, чем на изучение
>> всего Си перед этим.

C>В низкоуровневом программировании без этого — никуда.


Да? А я вот и на VB видел выкрутасы с памятью. memmove() чертовски сильная ведь, однако.

Если серьзно, то указатели нужны только там где их необходимость впихнули в старые "добрые" времена. К тому же указатели разные бывают. В том же Обероне (не к ночи будет упомянут) они вроде такой разрушительной силы не имеют.

C>2. Сишные структуры можно располагать в памяти с точностью до _бита_

C>(битовые поля, однако).

Про выравниваение слышал? А #pragma есть расширение языка.

C>3. Никакого GC и исключений (нет проблем с ABI).


Охриненные приемущества... для машин с 32К памяти...

C>4. Есть примитивы для вызова функций по указателю и т.п.


Они почти везде есть. Только не столь убоги и запутаны.

C>5. Арифметика указателей (основное Cшное тождество: a[i]==*(a+i)==i[a]).


Так чем i[a] то не подходит тогда? А ведь и это не все. Круче всего:
*(a += i)


C>Тем не менее, даже сейчас нечем полностью заменить С. Даже у С++

C>уже есть определнные недостатки по сравнению с С.

Один. Сложность реализации компилятора. Однако пожалуй тот же компилятор Оберона создать несколько проще. Так что первенство С действительно с трудом объясняется удачным дизайном языка.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Лекция Вирта в политехническом - впечатления
От: AndreyFedotov Россия  
Дата: 22.09.05 14:57
Оценка: :))) :)))
Здравствуйте, Gaperton, Вы писали:

E>>Во-вторых, такие переключения полезны. Шоры с глаз снимают. Причем качественно. Это как путешествие в далекую страну -- не только свежее впечатление, но и осознание некоторых вещей, о которых раньше и не думал (но здесь все сильно индивидуально).


G>Угу, +1. Наконец-то до народа это начало доходить. Год назад за такую фразу тут бы порвали не задумываясь.


А вот ты про C# такое скажи, так кое кто и сейчас порвёт.
Re[8]: Лекция Вирта в политехническом - впечатления
От: gear nuke  
Дата: 23.09.05 07:31
Оценка: +1 :))) :))
Здравствуйте, Donz, Вы писали:

D>>>Мне совершенно не хочется, чтобы if можно было написать двумястами разными способами.

E>>Просто попробуй
D>Пробовал кое-где использовать ?: вместо if, не воткнуло совершенно.

Как человек, ненавидящий всем фибрами души уродский синтаксис С и закорючки perl , скажу, что именно из-за этого они и рулят . Как говорил один знакомый прапор "2 мата достаточно, что бы солдаты сразу поняли задачу. На человеческом языке на это уйдут годы"
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[6]: Лекция Вирта в политехническом - впечатления
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 22.09.05 10:14
Оценка: 34 (3) +2
Здравствуйте, _FRED_, Вы писали:

E>>… И ведь такая возможность в Perl и Ruby появилась не просто так -- она была добавлена туда по реальной необходимости.


_FR>А что за необходимость? чем практически постфиксная запись отличается от префиксной


Мировосприятием и настроением программиста в данный, конкретный момент времени Строго говоря, разница только на эстетическом уровне. Вот парочка примеров.

Это формирование командной строки для запуска скрипта. У скрипта могут быть аргументы как со значениями, так и без (т.е. --verbose -- это аргумент без значения, а --path=/usr/local/lib -- это аргумент со значением). Код, который использует постфиксную нотацию (pair[0] всегда содержит имя аргумента, pair[1] содержит nil, если значения нет):
cmd_line = "ruby " + a_config.action_script_name
a_config.action_script_params.each do |pair|
    cmd_line << " " << pair[ 0 ]
    cmd_line << "=" << pair[ 1 ] if pair[ 1 ]
end

А вот запись префиксная:
cmd_line = "ruby " + a_config.action_script_name
a_config.action_script_params.each do |pair|
    cmd_line << " " << pair[ 0 ]
    if pair[ 1 ]
        cmd_line << "=" << pair[ 1 ]
    end
end

либо так, для компактности:
cmd_line = "ruby " + a_config.action_script_name
a_config.action_script_params.each do |pair|
    cmd_line << " " << pair[ 0 ]
    if pair[ 1 ] then cmd_line << "=" << pair[ 1 ] end
end

Лично мне первый вариант кажется понятнее, т.к. наша задача -- записать в одну строку пары '<имя>=<значение>', где только у некоторых элементов не будет части '=<значение>'.

Еще один пример. Разбор всех элементов в XML с определенным именем и получение из каждого элемента значения его атрибута:
paths = []
config.each_element( CONFIG_PATH_TAG ) do |e|
    paths << Config.mandatory_attr( e, CONFIG_PATH_NAME_ATTR )
end unless nil == config.elements[ CONFIG_PATH_TAG ]

Выделенная жирным строка запрещает разбор элементов, если их в XML вообще нет (в этом случае метод each_element выкинет исключение). Хотя это очень редкая ситуация, т.к. в большинстве случаев в XML есть хотя бы один искомый элемента. Не используя unless нужно было бы записать:
paths = []
if nil != config.elements[ CONFIG_PATH_TAG ]
    config.each_element( CONFIG_PATH_TAG ) do |e|
        paths << Config.mandatory_attr( e, CONFIG_PATH_NAME_ATTR )
    end
end


Уж не знаю, насколько эти примеры будут показательными. Все же свободное чтение постфиксных if/unless/while требует некоторого погружения в язык. Без этого традиционные, префиксные выражения кажутся понятнее. Но, когда привыкаешь к языку разумное использование постфиксных выражений, имхо, повышает читабельность.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: Лекция Вирта в политехническом - впечатления
От: mefrill Россия  
Дата: 22.09.05 11:29
Оценка: 8 (2) +3
Здравствуйте, sch, Вы писали:

sch>Гм... Я почему-то всегда думал, что Си был создан для использования исключительно внутри AT&T. Промышленным стандартом этот язык стал исключительно из-за своей логической завершенности и выразительности.


Си стал поппулярен потмоу, что юниксы в университетах американских ставили. По той же причине у нас Фортран был популярен.

sch>Си есть конечная форма логического развития любого языка для системного программирования. Я подчеркиваю, Си такой, какой он есть не потому, что правительственная коммиссия или отдельно взятый, пусть и уважаемый, профессор, решили что дескать нужно им создать язык, а потому, что СИ есть результат закономерной эволюции языков A и B...


В смысле, не один уважаемый профессор, а целых два??? И в чем же "закономерность" эволюции состоит?

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


Си — простой язык??? Ну, может и простой для тех, кто его изучил, но только для них. Почему конкурентов у Си быть не может? ИМХО, все решает традиция. Если я в университете Си изучал, зачем мне еще что-то учить? И то, что ОС пишут на Си — точно такая-же традиция.

sch>Такую большую популярность Си завоевал исключительно потому, что в те времена любое программирование было довольно низкоуровевым, т.е. довольно близким к системному.


sch>А Си++ исключительно унаследовал популярность и практически все преимущества Си.


Следует добавить: и недостатки тоже.

sch>Все гораздо проще, как видите. И совершенно не нужны тут теории заговора со стороны мировых корпораций.


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

Не стоит восхвалять Си, там много известных несовершенств. Главное преимущество этого языка — традиция. Человек долго к чему-то привыкает и, если уж привыкнет, то отвыкание от этого воспринимает как трагедию. Я, кстати, не исключение. Даже если больше года не программируешь, все-равно где-то в подсознании сидит,совершенно как родной русский. Вот недавно забыл, что означает операция процент. Но, все-равно буду на нем писать, ибо на других пишу так же, как по английски разговариваю.
Re[7]: Лекция Вирта в политехническом - впечатления
От: Cyberax Марс  
Дата: 22.09.05 12:10
Оценка: 1 (1) +4
mefrill wrote:

> sch>Гм... Я почему-то всегда думал, что Си был создан для

> использования исключительно внутри AT&T. Промышленным стандартом этот
> язык стал исключительно из-за своей логической завершенности и
> выразительности.
> Си стал поппулярен потмоу, что юниксы в университетах американских
> ставили. По той же причине у нас Фортран был популярен.

А почему ставили юниксы? На фортране у нас системный софт, кстати, не
писали.

> sch>Си -- это простой язык для выполнения сложных, очень сложных

> вещей. Именно поэтому у Си в системном программировании нет
> конкурентов и быть не может, как и не может быть конкурентов у
> ассемблера, например.
> Си — простой язык???

Да, простой. Почти такой же простой, как и ассемблер.

> Почему конкурентов у Си быть не может?


Потому, что он максимально приближен к реальной аппаратуре. То есть в С
нет искусственных понятий типа строчек или массивов — все выражается
через базовые понятия.

Конкурентом для С может быть С++ — в нем сохранились все возможности С и
добавилось много новых преимуществ.

> ИМХО, все решает традиция. Если я в университете Си изучал, зачем мне

> еще что-то учить? И то, что ОС пишут на Си — точно такая-же традиция.

А на чем еще писать ОСы?

> Следует добавить: и недостатки тоже.


Не все, в С++ многое лучше сделано.

> sch>Все гораздо проще, как видите. И совершенно не нужны тут теории

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

А почему традиция началась? Продукты на С, кстати, очень хорошо
совмещаются со всеми остальными языками.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0 beta
Sapienti sat!
Re[3]: Лекция Вирта в политехническом - впечатления
От: Кодт Россия  
Дата: 25.09.05 17:00
Оценка: 1 (1) +4
Здравствуйте, BreQwaS, Вы писали:

BQS>Кто-то рядом добавил: Компилятор пролога можно написать на обероне, но компилятор оберона нельзя написать на прологе. Профессор согласно закивал.


Подхалим нашёлся... дедушку утешил.

Уж чего-чего, а парсер в виде набора предикатов выразить — как нефиг делать. А для построения AST и дальнейшей его трансляции в прологе есть все необходимые структуры данных — начиная с многоуровневых списков.
Перекуём баги на фичи!
Re[5]: Лекция Вирта в политехническом - впечатления
От: Donz Россия http://donz-ru.livejournal.com
Дата: 22.09.05 09:09
Оценка: +1 -4
Здравствуйте, eao197, Вы писали:

E>Я же вижу аналогию с естественными языками. Например, великий и богатый русский язык. Его овладение весьма тяжело и для носителей языка (я, например, был по русскому языку двоечником в школе), не говоря уж про иностранцев. Его мощь поражает. Говорят, что у Толстова на странице текста можно не найти повторения ни одного слова. В то же время можно совершенно понятно передавать свои впечатления с помошью трех-четырех матерных слов и нескольких предлогов. Но, имхо, гораздо проще и приятнее читать нормальный художественный текст, не замусоренных повторами, односложными предложениями, сокращенниями и прочим. Только вот чтобы научиться так писать нужно не мало труда приложить.

[клац]
Аналогия, ИМХО, совершенно неудачная. Исходный текст должен понятным любому, кто хоть чуть-чуть знаком с данным языком. Именно поэтому когда-то появилась возможность документирования программы в самом исходном тексте, поэтому отошли от асма и методы программирования всё более приближаются к таким понятиям, которыми человек привык оперировать в обычном мире (ООП, например). Также надо учитывать, что Толстой один, сколько людей может написать как он? Ты предлагаешь настолько усложнить языки программирования, чтобы на них могли ваять исключительно гении, а для понимания написанного человеку требовался пятилетний курс языка? Такое уже было, и от этого избавлялись как могли.
Мне совершенно не хочется, чтобы if можно было написать двумястами разными способами.
Насчёт Perl'а и Ruby. Ужас синтаксиса первого, по-моему, признают все. А второй просто непопулярен. Плохой пример, в общем.
Re[4]: Лекция Вирта в политехническом - впечатления
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.09.05 11:25
Оценка: :))) :))
Здравствуйте, Глеб Алексеев, Вы писали:

ГА>Пролог — не совсем ФЯ, это язык логического программирования.


Точнее совсем не ФЯ.

ГА>У меня складывается впечатление, у что у Вирта (при всем моем к нему уважении) нездоровая ревность к "академическим играм, не имеющим отношения к реальной жизни", если эти игрища вышли не из под его пера .


Дык. Сам академический игрун. Причем все отговорки ищет. То маркетинг виноват, то все слишком игрушечное, то идеологически не законченное, то сложное. Думаю, что Вирт проспал главное завоевание человечества — язык БрэйнФак. Он как раз отвечает всем Виртовским требованиям. Прост, локоничен, без грамма маркетинга, идеологически завершен, позволяет сделать что угодно.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: "Простота" Java
От: Павел Кузнецов  
Дата: 25.09.05 04:09
Оценка: 50 (3) +1
Donz,

> E>А Java не так прост, как может показаться. Например, когда я на нем писал, то столкнулся с несколькими неприятными моментами. Вот несколько из них:


> Я программирую как раз на Java в основном, и понять этот язык гораздо проще, чем С++.


Это зависит больше от степени знакомства с языком, нежели от самого языка. В Java, как и в C++, вполне достаточно своих грабель и неочевидных вещей:

public class Rhymes {
   private static Random rnd = new Random();
   public static void main(String[] args) {
     StringBuffer word = null;
     switch(rnd.nextInt(2)) {
       case 1: word = new StringBuffer('P');
       case 2: word = new StringBuffer('G');
       default: word = new StringBuffer('M');
     }
     word.append('a');
     word.append('i');
     word.append('n');
     System.out.println(word);
   }
}

What Does It Print?
(a) Pain, Gain, or Main (varies at random)
(b) Pain or Main (varies at random)
(c) Main (always)
(d) None of the above


public class NameGame {
   public static void main(String args[]) {
     Map m = new IdentityHashMap();
     m.put("Mickey", "Mouse");
     m.put("Mickey", "Mantle");
     System.out.println(m.size());
   }
}

What Does It Print?
(a) 0
(b) 1
(c) 2
(d) It varies


public class Names {
   private Map m = new HashMap();
   public void Names() {
     m.put("Mickey", "Mouse");
     m.put("Mickey", "Mantle");
   }
   public int size() { return m.size(); }
   public static void main(String args[]) {
     Names names = new Names();
     System.out.println(names.size());
   }
}

What Does It Print?
(a) 0
(b) 1
(c) 2
(d) It varies


public class Gray {
   public static void main(String[] args){
     System.out.println(X.Y.Z);
   }
}
class X {
   static class Y {
     static String Z = "Black";
   }
   static C Y = new C();
}
class C {
   String Z = "White";
}

What Does It Print?
(a) Black
(b) White
(c) Won’t compile
(d) None of the above


> В своё время Java-бум был как раз из-за того, что стоимость разработки на них меньше, чем на С++.


Что характерно, это так и не было подтверждено независимыми исследованиями:

There have been (to our knowledge) no complete, thorough, scientific studies conducted comparing the productivity of development using Java vs. C. But we have a few random data points:

  • Sun and many others quote a study by IDC called "Java Pays -- Positively" that claimed a 40% savings in using Java for development and 30% in maintenance. Unfortunately, that report was published back in May, 1998 and is nowhere to be found today.
  • A personal web page by Robert Wells entitled Java offers Increased Productivity contains some analysis and references, but no hard numbers.
  • The paper entitled An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl by Lutz Prechelt compares multiple languages on performance. It has a section on "Program Reliability" and another on "Work time and productivity", but it finds no significant difference in programs written in C vs. Java.
  • A second paper by the same author and based on the same experimental data, Comparing Java vs. C/C++ efficiency differences to inter-personal differences finds that differences in programmers' ability was a bigger factor in determining code efficiency than the language used. The same lesson also applies to choosing a programming language: it's more important to choose good developers than to choose a good language. With that said, it's still the case that given that you have a particular set of developers, choosing one language over another does make a big difference.
  • A web page called Java From The Trenches by Jim Frost claims that "Java's feature set is such that most developers see a 200% to 300% improvement in time to completion versus C++, and much better code reliability to boot. In some cases, such as server applications, Java productivity is an order of magnitude better than C++...". The page does not say where those numbers came from.
  • It would seem that software cost estimating models and tools would take into account which programming language is being used. Surprisingly, it seems that most do not. The COCOMO II model, the most popular model for software cost estimation, does not care which programming language is being used: the cost of developing 1000 non-comment lines of source code is independent of the programming language. Of course, it would take far more lines of assembly language than C to accomplish a particular task. If you believe this, then whether it takes more or less lines of Java code to do a particular task is critical. See the "Software Cost Estimation" section below for more on counting lines of code.


  • Напротив, некоторые на этом буме погорели:

    In two cases, management made a decision to directly port cash cow C and C++ products to Java. They believed that creating a multi-platform product in Java would decrease long-term development costs and time to market.

    The development teams bought into the concept completely and did their best to handle the port within the allotted time frame. Unfortunately, line-in-the-sand deadlines combined with crushing workloads working in a language that did not lend itself well to the port resulted in the creation of products that did not work as planned. The original applications were fast, reliable, easy to set up and non-consumptive, but the Java versions were not.

    One of the companies made the mistake of converting their C and C++ code base directly into Java hoping that the end result would work well enough to release. It did not. The direct port resulted in a poor imitation of the original, but the company released the product anyway.

    Both products failed to gain sustained acceptance after release. The development teams reacted by working harder than before to optimize the code, reduce bugs, and make adoption more palatable to the customer. Unfortunately, the damage had been done and new sales went flat.

    Posted via RSDN NNTP Server 2.0 beta
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[13]: Лекция Вирта в политехническом - впечатления
    От: Gaperton http://gaperton.livejournal.com
    Дата: 23.09.05 10:48
    Оценка: 2 (2) +2
    Здравствуйте, Пацак, Вы писали:

    П>Здравствуйте, eao197, Вы писали:


    П>>>Не так важно, главное — суть: приходится либо зря читать весь блок, либо "прыгать" глазами на его конец для проверки, есть ли там условие.

    E>>Нет, как раз в этом и суть. Постфиксные if/unless имеет писать только если есть возможность легко взглядом поймать всю конструкцию.
    E>>Кроме того, если из if-а 50 строк кода можно вынести в отдельную функцию -- это в любом случае нужно сделать.

    П>Дык это-то понятно, но это ж в идеале. Но вот только сегодня она 5 строк и постфикс-if легко виден, а завтра ее дали ламеру-временщику Васе, он ее раздул до 50 и уволился. И пока рефакторинг не проведешь — читающие код будут в этом месте спотыкаться.


    Разруха, она в головах человеческих, а не в языке. Запрет на определенные конструкции существенным образом ситуацию не меняет. Хочешь эксперимент? Назови мне язык, и я, сыграв в ламера-временщика, с легкостью напишу тебе на нем до ужаса нечитабельный код.

    Эффективные, реально работающие в индустрии методы борьбы с этим такие:
    1) Не нанимайть на работу ламеров и временщиков.
    2) Вводить единые соглашения по оформлению кода.
    3) Вводить единые стилевые соглашения.
    4) Вводить обязательную практику code reviews, в поддержку п. 2 и 3. Несоблюдение оформительских и стилевых соглашений считать дефектом (багом). Про http://www.rsdn.ru/Forum/Message.aspx?mid=1358322&amp;only=1
    Автор: Gaperton
    Дата: 01.09.05
    Re[15]: Лекция Вирта в политехническом - впечатления
    От: Cyberax Марс  
    Дата: 16.10.05 13:24
    Оценка: 2 (2) +1 :)
    VladD2 wrote:

    > C>ОС на управляемых языках — полно (экспериментальных и коммерческих).

    > C>Реально успешных сейчас — ноль. Пожалуй, Symbolics'ы были верхом успеха.
    > А можно назвать успешные ОС кроме Виндовс и Линукс?

    Symbian, *BSD, Solaris...

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[7]: Лекция Вирта в политехническом - впечатления
    От: Donz Россия http://donz-ru.livejournal.com
    Дата: 22.09.05 12:21
    Оценка: 1 (1) +3
    Здравствуйте, eao197, Вы писали:

    D>>Также надо учитывать, что Толстой один, сколько людей может написать как он? Ты предлагаешь настолько усложнить языки программирования, чтобы на них могли ваять исключительно гении, а для понимания написанного человеку требовался пятилетний курс языка?


    E>Фишка как раз в том, что написаные Толстым произведения совсем не требуют для своего понимания пятилетнего курса русского языка (разве что для иностранцев).

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

    E>И меня бы вполне устроило, если бы качественный софт писало всего несколько гениев, а не половина полунеграмотной Индии.

    Гениев на всех не хватит. Насчёт индусов, уж как бы над ними не прикалывались, однако свои бабки они отбивают, экономику Индии поднимают, а люди им продолжают заказывать, видимо работодателей всё устраивает. И тут можно кричать и топать ногами, но никуда от этого не деться.
    "Все должно быть простым настолько, насколько это возможно, но не проще" (с)Эйнштейн

    E>А по поводу того, сколько людей смогут писать как Толстой -- в "Законах Паркинсона" есть замечательный рецепт: для того, чтобы было больше гениев, нужен высокий средний уровень всех остальных. Поэтому, может быть, вместо создания языков для дебилов (я не про Оберон, а вообще), тратить силы на хорошую подготовку самих программистов?

    То есть, по-твоему, надо специально без всякой цели усложнять языки, только для того, чтобы таким образом "повышался" уровень программистов? Хороший программист — это не склад знаний о языке и его фишках, а умение логически мыслить.
    Java — тоже язык для дебилов? Вообще, куда тратить свои силы каждый решает сам. Вот ты можешь запросто создать свой язык для "особо одарённых", а Вирт свой вклад в развитие программирования уже сделал.

    D>>Мне совершенно не хочется, чтобы if можно было написать двумястами разными способами.

    E>Просто попробуй
    Пробовал кое-где использовать ?: вместо if, не воткнуло совершенно. Это как с названиями полей и методов, мне гораздо проще использовать isDoubleBufferSupported, чем idbf.

    Всё это я пишу не для того, чтобы доказать, что Оберон — это хорошо (я его в глаза не видел и видеть не хочу), а просто спорю с аналогией про естественные языки. В конце концов, международный язык сейчас английский, а он попроще русского, немецкого и т.д. будет.
    Re[3]: Лекция Вирта в политехническом - впечатления
    От: Cyberax Марс  
    Дата: 22.09.05 08:55
    Оценка: +4
    krasin wrote:

    > 1. Реальные программы на ФЯ за редкими исключениями не пишут, т.е. ФЯ

    > скорее чисто академическая вещь.

    Пишут, но не в mainstream'е (хотя O'Caml уже к этому приближается).
    Например, софт для телефонных коммутаторов пишут на Эрланге.

    > 2. Одна из основных идей ФЯ, сказал Вирт, состоит в том,что программа

    > не пользуется переменными в обычном понимании, и поэтому функции
    > получаются stateless, что круто для анализа и оптимизации,
    > предоставляет дополнительную гибкость в использовании, т.к. нет
    > побочного эффекта. Но! Поскольку state есть основополагающая вещь для
    > существующих компьютеров, та же ячейка памяти хранит состояние, то
    > специально уходить от этого, "обманывая природу" стоит слишком много
    > усилий.

    Вирт не понимает функционального программирования В ФЯ функция
    обрабатывает данные, которые ей передали в качестве параметров.

    Ну а модификация глобальных ресурсов как чистый side-эффект функции
    считается моветоном и в обычных императивных языках, и этого надо
    избегать — особенно хорошо это проявляется, когда надо добавить
    многопоточность . Но все мы знаем, что Оберон не приспособлен для
    многопоточных приложений....

    > Более того, ряд приложений все-таки требуют сохранения состояния /

    > хранение контекста, поэтому почти во все ФЯ введена возможность
    > пользоваться аналогом обычных переменных, доступ к которым идет через
    > специальные языковые/библиотечные средства.

    Эээ... Haskell, например, чисто функционален. Там есть, конечно, функции
    прямой манипуляции переменными, но они предназначены для специальных
    хаков (как модуль System в Обероне ) — при нормальном использовании
    они не нужны.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[7]: Лекция Вирта в политехническом - впечатления
    От: Дарней Россия  
    Дата: 22.09.05 11:54
    Оценка: +4
    Здравствуйте, mefrill, Вы писали:

    M>Си стал поппулярен потмоу, что юниксы в университетах американских ставили. По той же причине у нас Фортран был популярен.


    кто ставил? начальство по указке свыше? ни хрена подобного! сами же и ставили. потому что было удобно

    M>В смысле, не один уважаемый профессор, а целых два??? И в чем же "закономерность" эволюции состоит?


    не "два уважаемых профессора", а "два прожженых практика"

    M>Почему конкурентов у Си быть не может? ИМХО, все решает традиция.


    это сейчас — традиция. раньше традиции не было, а вот конкурентов у Си была куча

    M>Так при чем здесь заговор? В фирме основной продукт на Си написан, вот они и вкладывают в изучение именно Си, а не какого-нибудь другого языка.


    Никакого основного продукта, написанного на Си, у них не было ТОГДА
    Как утверждается историками, Юних вообще возник как побочный продукт разработки внутреннего софта.
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[4]: Лекция Вирта в политехническом - впечатления
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.09.05 12:08
    Оценка: :))) :)
    Здравствуйте, VladD2, Вы писали:

    VD>...Примерно тот же бред Вирт пел когда в Обероне вооще небыло поддержки ООП...


    Виртовские языки будучи один раз созданными не изменяются со временем, вместо этого каждый новый язык Вирта всегда получает новое имя. В языке Oberon ООП есть: http://www.inr.ac.ru/~info21/wirth/programming_in_oberon.pdf (смотрите четвертую часть).
    Re[16]: Лекция Вирта в политехническом - впечатления
    От: Павел Кузнецов  
    Дата: 11.10.05 01:50
    Оценка: :))) :)
    GlebZ,

    > AVC>Пример:

    > AVC>
    > AVC>while (*dest++ = *source++)
    > AVC>   ;
    > AVC>

    > Не говори за всех. В C# такое не пройдет. И тут проблема не в написании знака равно. Здесь проблема в интерпретации численных значений как boolean.

    А так?
    bool a = ...;
    bool b = ...;
    
    if ( a = b )
    {
       . . .
    }
    Posted via RSDN NNTP Server 2.0 beta
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[12]: Лекция Вирта в политехническом - впечатления
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 13.10.05 13:54
    Оценка: +1 -1 :))
    Здравствуйте, Cyberax, Вы писали:

    C>Тем не менее, даже сейчас нечем полностью заменить С.


    А чем же Modula-2 не подходит, автором или синтаксисом?
    Re[16]: typedef - не создает нового типа
    От: Кодт Россия  
    Дата: 12.10.05 10:07
    Оценка: 18 (1) +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А теперь наивный такой вопросик: А как же передать переменную типа Vector3D не по ссылке, а по значению, т.е. так как можно передать обычную переменную value-типа?


    Встречный наивный ответик: а нафига.
    Массивы потому и называются массивами, что могут иметь очень большой размер.
    Передача их по значению
    — во-первых, требует размещения копии где-то в памяти (в каком хранилище? стек же не резиновый)
    — во-вторых, медленная
    Разумеется, всегда можно изыскать способ выполнить глубокое копирование — начиная с простейшего заворачивания в структуру (boost::array, например) и кончая умными указателями-на-массивы (std::vector).
    Но тут уже программист сам себе злобный буратино.

    Обработка массивов не является задачей первостепенной важности ни в Обероне, ни в С++ — поэтому большая часть инструментария выносится в библиотеки (которые можно тюнинговать как хочется).
    А вот для языков, принципиально заточенных под массивы и списки (ФЯ) — работа с ними как со значениями (включая стратегии владения и копирования) на уровне языка всячески приветствуется.

    Исключение составляют строки — многие языки поддерживают работу с ними как со значениями. Во-первых, это часто встречающаяся задача, а во-вторых, можно надеяться на разумную длину строк.
    Но опять же, степень поддержки языком варьируется:
    — примитивные операции (конкатенация там...)
    — форматирование и подстановка
    — регулярные выражения
    Почему конкатенация в паскале есть, а регекспов нет, хотя в перле регекспы встроены в язык? Потому что цели у языков разные.
    Перекуём баги на фичи!
    Re[8]: Лекция Вирта в политехническом - впечатления
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 22.09.05 14:52
    Оценка: 1 (1) +2
    Здравствуйте, Donz, Вы писали:

    E>>Фишка как раз в том, что написаные Толстым произведения совсем не требуют для своего понимания пятилетнего курса русского языка (разве что для иностранцев).

    D>И его рассуждения в "Война и мир" тоже запоем читались, совершенно не напрягая? Вот помнится, я эпилог (заключительные мысли о войне, Наполеоне и т.д.) дочитал только для галочки "вот прочитал всю "Войну и мир" от корки до корки".

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

    D>Вообще, худ. книги читаются для удовольствия, а программизм большей частью — работа (я не отрицаю, что он может приносить удовольствие). И смысл работы не в том, чтобы выпендрится, мол я вот циклы двадцатью разными способами делать могу (хотя способы полностью идентичные по результату), а чтобы продукт работал, и коллеги понимали что к чему в твоём коде.


    Имхо, программирование похоже на журналистику. И тем и другим приходится писать текст на заданную тему. И если одно и тоже событие описывают несколько журналистов, то результат может получиться совершенно разным. Один может изложить все очень сухо, и это будет не интересно. Второй -- нальет воды так, что забудешь о чем читал. А третий и факты передаст, и читать приятно будет.

    Так же и в программировании. Дай в распоряжение только while. И разбирайся затем с эмуляцией for или do...while. Или дай все for/while/do...while (в префиксной и постфиксной нотации) в неумелые руки и опять придется с неудобоваримым кодом мучаться. Зато, если и язык выразительный, и писатель опытный, то и программы получаются удачными. И их сопровождение проблем не вызывает.

    D>То есть, по-твоему, надо специально без всякой цели усложнять языки, только для того, чтобы таким образом "повышался" уровень программистов? Хороший программист — это не склад знаний о языке и его фишках, а умение логически мыслить.


    В каждом языке есть свои идиомы и, как это модно сейчас говорить, паттерны. В C++, например, к таковым относится использование x+=y вместо x=x+y, std::auto_ptr вместо ручного вызова delete, модификаторы const для использования возможностей компилятора по предотвращению вызова неконстантных методов или модификации объекта, pimpl для обеспечения безопасности в случае исключений, применение шаблонов вместо макросов типа MIN, MAX и т.д. Подобные вещи создают преимущества одного языка перед другим. И их отрицание означает попросту преднамеренный отказ от использования лучших качеств конкретного языка. Скажем, в Ruby, к таким качествам относится наличие постфиксных if/unless/while. При разумном использовании они делают программирование на Ruby приятнее
    Автор: eao197
    Дата: 22.09.05
    .

    D>Java — тоже язык для дебилов?


    А Java не так прост, как может показаться. Например, когда я на нем писал, то столкнулся с несколькими неприятными моментами. Вот несколько из них:
    -- если аргументом метода является объект, то его изменение в методе отражается на вызывающем коде (поскольку объект передается по ссылке):
    void changeArgument( SomeClass someObject )
    {
        someObject.setSomething( "a" );
        ...
    }
    
    void initiateChanging()
    {
        SomeClass someObject = new SomeObject();
        someObject.setSomething( "b" );
        changeArgument( someObject );
        // Вот тут someObject.getSomething() будет возвращать "a", а не "b".
    }

    в тоже время, если аргументом является примитвный тип (int или long), то его изменение в методе не приводит к изменениям в вызывающем коде.
    Ну и кроме того, в Java нет модификатора const, поэтому нельзя методам запретить изменять свои аргументы. Иногда это приводит к неприятным открытиям;

    -- в Java нет возможности применять идиому RAII. Поэтому при исключениях нужно писать catch-и или finally чтобы почистить за собой ресурсы. Естественно, что это забывается, либо в finally вызывается метод, который приводит к новому исключению. Поэтому мне приходилось видеть finally, в которых были свои try..catch..finally;

    -- в Java не просто вернуть несколько значений из метода. Вот в C++ я писал:
    bool find_something( const key_t & k, int & a, int & b, int & c )
        {
            ...
            a = ...;
            b = ...;
            c = ...;
            ...
        }
    ...
    int a, b, c;
    find_something( k, a, b, c );

    в Java же приходилось как-то извращаться. Например, вот так:
    boolean findSomething( Key k, int[] res )
    {
        ...
        res[ 0 ] = ...;
        res[ 1 ] = ...;
        res[ 2 ] = ...;
    }
    ...
    int[] abc = new int[ 3 ];
    findSomething( k, abc );

    Или же классы-враперы (вроде Integer вместо int) использовать.

    -- memory-leak, как ни странно, возможны. Достаточно где-то ссылку на объект не занулить и все

    Так что, хоть Java и проще, чем C++, программировать не ней отнюдь не развлечение, имхо.

    D> Вообще, куда тратить свои силы каждый решает сам. Вот ты можешь запросто создать свой язык для "особо одарённых", а Вирт свой вклад в развитие программирования уже сделал.


    А я его вклад ни в коей мере не оспариваю. Просто я не понимаю его убежденности вот в этом аргументе:

    4) С/С++ и другие языки, которые сейчас этими стандартами являются, стали таковыми в основном благодаря маркетингу и громадной финансовой мощи тех, кто их продвигал.


    Кстати, делал я скриптовый язык для себя, был опыт. Интересное занятие, но не благодарное.

    D>>>Мне совершенно не хочется, чтобы if можно было написать двумястами разными способами.

    E>>Просто попробуй
    D>Пробовал кое-где использовать ?: вместо if, не воткнуло совершенно.

    Правда? Сразу вспоминается про нелюбовь к кошкам из-за неумения их готовить
    Вот свежий пример из сегодняшней работы:
    action = new widget_action_t(
            is_connected ? impl::c_connected_group : impl::c_disconnected_group,
            ip, m_action_group );
    action->setText( channel_name );
    action->setIconSet( srv_icon );
    action->setToolTip( channel_name );
    action->setStatusTip( channel_name );

    переписываем без ?:
    int group = impl::c_disconnected_group;
    if( is_connected )
        group = impl::c_connected_group;
    action = new widget_action_t( group, ip, m_action_group );
    action->setText( channel_name );
    action->setIconSet( srv_icon );
    action->setToolTip( channel_name );
    action->setStatusTip( channel_name );


    Неужели всторой вариант проще?

    D>Это как с названиями полей и методов, мне гораздо проще использовать isDoubleBufferSupported, чем idbf.


    Мне то же, но это из другой оперы.

    D>Всё это я пишу не для того, чтобы доказать, что Оберон — это хорошо (я его в глаза не видел и видеть не хочу), а просто спорю с аналогией про естественные языки. В конце концов, международный язык сейчас английский, а он попроще русского, немецкого и т.д. будет.


    Я сейчас так же не про конкретно Оберон. А аналогию с естественными языками считаю вполне уместной.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[11]: Лекция Вирта в политехническом - впечатления
    От: Cyberax Марс  
    Дата: 24.09.05 19:15
    Оценка: 1 (1) +1 -1
    mefrill wrote:

    > C>1. С очень просто объединяется с другими языками (в том числе с асмом).

    > C>2. С достаточно портабелен (в отличие от асма).
    > Не мог бы ты разъянить подробнее, в чем заключаются свойства языка Си,
    > так облегчающие его портабельность и связь с другими языками?

    В языке С почти отсутствуют искусственные для низкоуровневого
    программирования понятия.

    Например, массив в Паскале — это "черный ящик" — мы о нем знаем только
    то, что к нему можно обращаться по индексу. Формат хранения данных в нем
    нам неизвестен. В языке С массив представлен в виде указателя — мы точно
    знаем его структуру и свойства.

    Или, например, взять GC — системное программирование с ним просто будет
    невозможно.

    > C>Синтаксических сложностей в С не так много, и они никаких проблем не

    > C>доставляют (после того, как на них раз наткнешься). Сложности возникают
    > C>из-за низкоуровневого программирования (ручное управление памяти и
    > т.п.).
    > Не согласен. Я преподавал Си не один год.

    Нда...

    > И в университете студентам и дома полным неучам. Поэтому знаю точно о

    > трудностях, которые при изучении Си встречаются. Об операторе
    > сравнения было уже оговорено много и долго. Вот недавний пример, я на
    > си программирую уже больше 10 лет, а написал в сравнении один = вместо
    > двух.

    Это такая фигня — ошибка того же класса, что и and вместо or.

    > В результате полдня потратил в сложном алгоритме на лов ошибки.


    Что могу сказать.... Тренироваться надо! Я уже не вспомню, когда в
    последний раз я искал подобную ошибку больше 5 минут.

    > Уродство это полное синтаксическое. Или синтаксис объявлений. С какой

    > стати в объявлении массива имя переменной стоит внутри объявления типов?

    А с какой стати оно должно стоять в другом месте?

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

    > необходимо столько же времени, а иногда и больше, чем на изучение
    > всего Си перед этим.

    В низкоуровневом программировании без этого — никуда.

    > C>Нет. Потому, что интерфейс С настолько БАЗОВЫЙ, что дальше уже некуда.

    > Не понимаю, что значит "базовый интерфейс"?

    1. Сишные функции и переменные экспортируются по имени, в
    экспортированой сигнатуре отсутствует информация о типах (т.е. нет
    проблем с несовместимым ABI).
    2. Сишные структуры можно располагать в памяти с точностью до _бита_
    (битовые поля, однако).
    3. Никакого GC и исключений (нет проблем с ABI).
    4. Есть примитивы для вызова функций по указателю и т.п.
    5. Арифметика указателей (основное Cшное тождество: a[i]==*(a+i)==i[a]).

    > C>А может все-таки из-за достоинств С?

    > Может быть и из-за достоинств. Они в Си, несомненно, есть. Но,
    > возносить эти достоинтсва в абсолют и видеть в них единственную и
    > главную причину его популярности я бы не стал. Считаю, что это
    > необъективно.

    Тем не менее, даже сейчас нечем полностью заменить С. Даже у С++
    уже есть определнные недостатки по сравнению с С.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[14]: Лекция Вирта в политехническом - впечатления
    От: Igor Trofimov  
    Дата: 25.09.05 10:03
    Оценка: 1 (1) +2
    E>Ты это серьезно?

    Абсолютно. Можно проголосовать, если еще не было такого голосования.
    Если тебе кажется, что читается это одинаково — то это типичный случай того, как привычка (в данном случае вызванная кривостью средства разработки и для других средств — вредная) подсознательно возводится в ранг непререкаемой истины. Привычка, врастающая "под корку" — страшная вещь. Это почти не возможно контролировать и самоанализировать. Вот и ты сейчас начнешь возражать
    Re[11]: Лекция Вирта в политехническом - впечатления
    От: Глеб Алексеев  
    Дата: 26.09.05 07:11
    Оценка: 1 (1) +2
    Здравствуйте, jazzer, Вы писали:

    J>Да ладно тебе.

    J>Куча программистов знают и язык типа С++, и язык типа Perl, и активно их используют.
    Гораздо меньше народу одинаково хорошо знает язык типа С++ и язык типа Haskell и адекватно их применяет.
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Re[2]: Ты о Си или о Плюсах?
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 19.10.05 07:28
    Оценка: 1 (1) +2
    Здравствуйте, Cyberax, Вы писали:

    C>SilverCloud wrote:


    >> C>Это *одновременно* высокоуровневый и низкоуровневый язык.

    >> Если о Си, то не понимаю, как может считаться высокоуровневым язык, в
    >> котором нет *строк*?

    C>А в чем проблемы? Вообще-то в С строки есть.


    C>Нет удобной поддержки строковых операций? Ну так делаем ее:

    C>По желанию добавляем подсчет ссылок, резервирование места, итераторы и
    C>т.п. Если хочется уже готового, то берем GLib.
    Увы. Первое, на что ты напорешься — это interoperability. Потому, что библиотека, скажем, ftp от крутых перцев, будет использовать свою реализацию строки. И тебе придется писать тонны согласующего кода.
    Второе, на что ты напорешься, это отсуствие инкапсуляции. Ловкие пацаны, которые будут расширять твою библиотеку, будут испытывать неизяснимую склонность к прямому использованию str->data.
    Ну и третье, на что ты напорешься — это на утечки. Потому, что надо везде-везде, аккуратно-аккуратно не забывать вызывать метод удаления строки. Никакого RAII в С не реализовано. Увы.

    C>Ну а если вы считаете, что строки должны обязательно быть намертво

    C>впаяны в язык, то спешу разочаровать — это совсем необязательно.

    Это крайне желательно. Вообще, практика показала, что платформа просто обязана предоставлять как можно более исчерпывающий набор примитивов для работы. Сколько у нас есть способов представить дату, если мы пишем программу на C под WinAPI? Сколько в плюсах есть способов записать массив байт в файл?

    Стоит обратить внимание на стандартизацию, которая покрыла практически все инженерные отрасли. Представь себе, что у нас нет ни метрической, ни дюймовой системы резьб. "Ничего, ведь каждый производитель может легко нарезать себе винтов и гаек с нужными характеристиками", да? А может, еще и "зачем вынуждать производителя следовать вшитым в стандарт требованиям, ведь это ограничивает гибкость"?
    1.1.4 stable rev. 510
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[8]: Лекция Вирта в политехническом - впечатления
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 22.09.05 11:07
    Оценка: +3
    Здравствуйте, _FRED_

    Во многом я с тобой согласен, но, все же, позволю себе несколько ремарок.

    _FR>Ведь здесь не просто синтаксис (префикс-постфикс), но и образ мышления (прочтения), разбора алгоритма затрагивается, а научиться "вдруг" думать по-другому (отложив, например, С++ и переключившись на Ruby) способны очень не многие.


    Имхо, во-первых, это не так. В равной степени владеть разными стилями программирования (скажем, императивным на C++ и функциональным на Эрланге) действительно сложно. А вот освоить несколько похожих императивных языков совсем не сложно.
    Во-вторых, такие переключения полезны. Шоры с глаз снимают. Причем качественно. Это как путешествие в далекую страну -- не только свежее впечатление, но и осознание некоторых вещей, о которых раньше и не думал (но здесь все сильно индивидуально).

    _FR>Именно, требуется привычка => повышается сложность поддержки, так как найти при необходимости не просто программиста, но и с "привычками" должно быть сложно…


    Это безусловно. Но, мне кажется, что если сама программа сделана без over-design-а, но ее понимание не так уж и сложно. Ведь практически в любом языке программирования очень много знаний мы получаем не от чтения описаний языка в какой-нибудь умной книжке, а при изучении чужих программ. Поэтому если программа хорошо написана, на нормальном языке, для которого есть достаточно книг и учебных материалов (а Ruby как раз из таких), то среднему программисту в ней разобраться не составит труда даже после поверхносного знакомства с языком. Так что весь фокус в том, чтобы программу хорошо написать.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[4]: Лекция Вирта в политехническом - впечатления
    От: Кодт Россия  
    Дата: 25.09.05 17:09
    Оценка: :)))
    Здравствуйте, Трурль, Вы писали:

    BQS>>Я честно попытался спровоцировать его на это вопросом "почему при наличии такого хорошего оберона программы пишутся не на нём".


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


    Это органично вписалось в его исследования
    Перекуём баги на фичи!
    Re[17]: Лекция Вирта в политехническом - впечатления
    От: Павел Кузнецов  
    Дата: 11.10.05 21:26
    Оценка: +3
    Здравствуйте, Кодт, Вы писали:

    К>
    GZ>>   if (a:=b)then
    К>

    К>Не аналогично, однако. В Паскале операция присваивания возвращает void.

    Если я правильно помню грамматику Паскаля, там, вообще, присваивание не является expression, а является statement — т.е. о возвращаемом значении вообще говорить вообще бессмысленно, так же как о возвращаемом значении for или while (в Паскале — в некоторых других языках это вполне может иметь смысл). Внутри if, естественно, statement быть не может, только expression...
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[17]: Лекция Вирта в политехническом - впечатления
    От: Cyberax Марс  
    Дата: 16.10.05 16:06
    Оценка: +1 -1 :)
    VladD2 wrote:

    >>> C>ОС на управляемых языках — полно (экспериментальных и коммерческих).

    >>> C>Реально успешных сейчас — ноль. Пожалуй, Symbolics'ы были верхом
    > успеха.
    >>> А можно назвать успешные ОС кроме Виндовс и Линукс?
    > C>Symbian, *BSD, Solaris...
    > Назвать их популярными у меня бы язык не повернулся. Хотя Symbian
    > может и можно.

    Вполне популярные, и активно развивающиеся. Кстати, есть еще куча всяких
    zOS и vxWorks.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[16]: typedef - не создает нового типа
    От: WolfHound  
    Дата: 12.10.05 10:59
    Оценка: 18 (1) +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Кстати, можно продолжить языковое соревнование. Как на счет такого кода:

    C++ хорош тем что если в нем чегото нету то очень часто это можно сделать довольно легко
    Описываем вот такой шаблон
    class ArrayDefaultTag{};
    template<class T, int N, class Tag = ArrayDefaultTag>
    struct Array
    {
        T& operator[](int i)
        {
            return arr[i];
        }
        T const& operator[](int i)const
        {
            return arr[i];
        }
        int Length()const
        {
            return N;
        }
    private:
        T arr[N];
    };

    Теперь если написать так то все компилируется
    typedef Array<int, 3> A;
    typedef Array<int, 3> B;
    
    void fa(A & v)
    {    
    }
    
    void fb(B & v)
    {
    }
    
    int main()
    {
        A a;
        B b;
        fa(b);
        fb(a);
    }

    А если нам надо чтобы не компилировалось пишем так
    class ArrayATag{};
    class ArrayBTag{};
    typedef Array<int, 3, ArrayATag> A;
    typedef Array<int, 3, ArrayBTag> B;

    Теперь A и B разные типы.

    Кстати этот массив вполне себе копируется как значение
    ... << RSDN@Home 1.1.4 beta 6a rev. 436>>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[2]: Лекция Вирта в политехническом - впечатления
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 22.09.05 05:07
    Оценка: 13 (2)
    Здравствуйте, Дарней, Вы писали:

    BQS>>4) С/С++ и другие языки, которые сейчас этими стандартами являются, стали таковыми в основном благодаря маркетингу и громадной финансовой мощи тех, кто их продвигал.


    Д>насколько я помню, первые реализации C были практически наколенной поделкой, и только потом он получил поддержку


    Имхо, с C++ тоже самое.
    А уж про всякие Perl-ы с Python-ами, и Ruby с Tcl/Tk так и говорить не приходится -- только силами энтузиастов. И на них сейчас пишут больше, чем на Oberon.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[9]: Лекция Вирта в политехническом - впечатления
    От: Cyberax Марс  
    Дата: 24.09.05 16:25
    Оценка: 10 (1) +1
    mefrill wrote:

    > C>Да, простой. Почти такой же простой, как и ассемблер.

    > Тогда зачем он вообще нужен? Ассемблер же проще? Надо было на нем и
    > программировать, зачем на Си переходить?

    1. С очень просто объединяется с другими языками (в том числе с асмом).
    2. С достаточно портабелен (в отличие от асма).

    > C>Потому, что он максимально приближен к реальной аппаратуре. То есть в С

    > C>нет искусственных понятий типа строчек или массивов — все выражается
    > C>через базовые понятия.
    > C>А на чем еще писать ОСы?
    > Ну а почему же другой язык не предложить? Такой же низкоуровневый как
    > Си, но без сложностей и синтаксических уродств, которые в Си,
    > очевидно, встречаются?

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

    > C>А почему традиция началась? Продукты на С, кстати, очень хорошо

    > C>совмещаются со всеми остальными языками.
    > Ага, совмещаются, я абсолютно согласен. Но здесь снова спутана причина
    > со следствием. Совмещаются они ПОТОМУ, что Си поплярен, а совсем не
    > потому, что он так хорошо.

    Нет. Потому, что интерфейс С настолько БАЗОВЫЙ, что дальше уже некуда.

    > Почему традиция началась я уже отвечал выше: не знаю. Почему в

    > универах машины эти стали ставить? Может, дешевые они были или взятку
    > дали, не знаю.

    А может все-таки из-за достоинств С?

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[2]: Лекция Вирта в политехническом - впечатления
    От: BreQwaS Россия  
    Дата: 21.09.05 17:17
    Оценка: 8 (2)
    Здравствуйте, _FRED_, Вы писали:

    _FR>А что же "повод" не опубликовал?


    Уже

    http://www.livejournal.com/users/breqwas/19180.html#cutid1
    WinAmp играет: (умолк пока)
    http://livejournal.com/users/breqwas
    Re[9]: Лекция Вирта в политехническом - впечатления
    От: Gaperton http://gaperton.livejournal.com
    Дата: 22.09.05 12:45
    Оценка: 7 (1) +1
    Здравствуйте, eao197, Вы писали:

    E>Здравствуйте, _FRED_


    E>Во многом я с тобой согласен, но, все же, позволю себе несколько ремарок.


    _FR>>Ведь здесь не просто синтаксис (префикс-постфикс), но и образ мышления (прочтения), разбора алгоритма затрагивается, а научиться "вдруг" думать по-другому (отложив, например, С++ и переключившись на Ruby) способны очень не многие.


    E>Имхо, во-первых, это не так. В равной степени владеть разными стилями программирования (скажем, императивным на C++ и функциональным на Эрланге) действительно сложно.


    Не-а, совсем не сложно, как врач говорю . Чтобы не приводить в пример только себя — для программиста-телекомщика компании Эрикссон владеть и C++ и Erlang является нормой, так как большинство промышленных решений на Erlang содержат вставки на С++. Помнишь, мы с тобой говорили про стратегию разработки с парой языков, "низкого" и "высокого" уровня? Вот это тот самый случай.

    E>Во-вторых, такие переключения полезны. Шоры с глаз снимают. Причем качественно. Это как путешествие в далекую страну -- не только свежее впечатление, но и осознание некоторых вещей, о которых раньше и не думал (но здесь все сильно индивидуально).


    Угу, +1. Наконец-то до народа это начало доходить. Год назад за такую фразу тут бы порвали не задумываясь.
    Re[11]: Массивы и указатели в C
    От: AVC Россия  
    Дата: 25.09.05 11:40
    Оценка: 3 (1) +1
    Здравствуйте, Павел Кузнецов, Вы писали:

    >>> А вот насчет массивов, это вы загнули.

    >>
    >> В С их как таковых нет — есть только синтаксический сахар над указателями.

    ПК>Распространенная точка зрения, не вполне согласующаяся с реальностью, данной нам в ощущениях:

    ПК>
    ПК>int a[5] = { 0, 1, 2, 3, 4 };
    ПК>

    ПК>как преобразовать данную конструкцию в эквивалент на указателях?

    ИМХО, это аргумент не по существу дела.
    Главная проблема с массивами Си в том, что информация об их "массивовости" теряется при выходе из соответствующей области видимости (scope)).
    Рассмотрим пример (в который раз? ).
    void foo(int *p)
    {
        /* сначала немного любимой адресной арифметики */
        p[-1] = 666; /* раз */
        5[p]  = 666; /* два */
    
        /* да, и, кстати, как же здесь отличить массив от указателя? :xz:  */
        free(p);     /* три */
    }
    
    void bar()
    {
        static int a[5] = { 0, 1, 2, 3, 4 };
    
        foo(a);
    }


    Так что же неверного в утверждении, что массив в Си (вне области видимости его объявления) неотличим от указателя?
    ИМХО, приведенный Вами, Павел, пример и есть не что иное, как syntactic sugar: так, прилепили фичу к указателю.

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[12]: Лекция Вирта в политехническом - впечатления
    От: mefrill Россия  
    Дата: 25.09.05 13:31
    Оценка: 2 (1) +1
    Здравствуйте, Cyberax, Вы писали:

    C>В языке С почти отсутствуют искусственные для низкоуровневого

    C>программирования понятия.

    Честно говоря, я склоняюсь к тому, что Си — высокоуровневый язык, из семейства так называемых процедурных языков. Низкоуровневые свойства, конечно, есть, но они синтаксически непродуманы. Маппирование памяти на типизированный объекты путем введения указателей введено ИМХО неудачно. Гораздо лкчше было-бы ввести специальный оператор для такой операции. Существующая арифметика указателей ведет к ошибкам. В общем, по моему мнению, указатели — неудачное решение.

    C>Например, массив в Паскале — это "черный ящик" — мы о нем знаем только

    C>то, что к нему можно обращаться по индексу. Формат хранения данных в нем
    C>нам неизвестен. В языке С массив представлен в виде указателя — мы точно
    C>знаем его структуру и свойства.

    Ну так ведь принцип здесь один: в процедурный язык вводятся понятия, связанные с Фон-Неймановской машиной. Т.е. средства для работы с плоской адресацией с произвольным доступом. Реализовать его можно различными способами. Как я уже писал, по моему мнению, гораздо лучшим решением было-бы ввести специальный оператор маппирования на память с произвольным доступом. При этом удобно было-бы вести работу с различными типами памяти, для встроенных ОС. Сейчас в Си это делается с помощью довольно уродливых расширений компилятора — модификаторов типа.

    C>Это такая фигня — ошибка того же класса, что и and вместо or.


    Не понимаю, как можно об этом спорить??? Пропустить случайно один символ "=" это ведь не тоже самое, что написать "<" вместо ">"? Или "||" вместо "&&"?

    C>Что могу сказать.... Тренироваться надо! Я уже не вспомню, когда в

    C>последний раз я искал подобную ошибку больше 5 минут.

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

    C>А с какой стати оно должно стоять в другом месте?


    с такой, что в Си объявление типа строится по схеме: имя_типа имя_переменной. Почему в объявлении массива имя_переменной залезло в середину имени_типа? Это уход от единой схемы объявления. И кто-нибудь может мне объяснить, какая у этого ухода была цель???

    C>В низкоуровневом программировании без этого — никуда.


    Писал об этом выше. Работу с памятью с произвольным доступом можно организовать совсем по другому, без всяких уродств, связанных с указателями.

    >> C>Нет. Потому, что интерфейс С настолько БАЗОВЫЙ, что дальше уже некуда.

    >> Не понимаю, что значит "базовый интерфейс"?

    C>1. Сишные функции и переменные экспортируются по имени, в

    C>экспортированой сигнатуре отсутствует информация о типах (т.е. нет
    C>проблем с несовместимым ABI).
    C>2. Сишные структуры можно располагать в памяти с точностью до _бита_
    C>(битовые поля, однако).
    C>3. Никакого GC и исключений (нет проблем с ABI).
    C>4. Есть примитивы для вызова функций по указателю и т.п.
    C>5. Арифметика указателей (основное Cшное тождество: a[i]==*(a+i)==i[a]).

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

    C>Тем не менее, даже сейчас нечем полностью заменить С. Даже у С++

    C>уже есть определнные недостатки по сравнению с С.

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

    C>--

    C>С уважением,
    C> Alex Besogonov (alexy@izh.com)
    Re[13]: Лекция Вирта в политехническом - впечатления
    От: BreQwaS Россия  
    Дата: 25.09.05 08:09
    Оценка: 1 (1) +1
    Здравствуйте, VladD2, Вы писали:

    VD>Ты часто ставишь "<" вместо "!="? А вот == и = путаются на раз. Но проблема тут не в синтаксисе, а в том, что С плюет на типобезопастность.


    Блин, да откуда оно всё?
    Я такой ошибки уже пару лет не делал. Всего на С/С++ пишу года три.

    WinAmp играет: [theme] — star wars (intro)
    http://livejournal.com/users/breqwas
    Re[13]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.09.05 16:19
    Оценка: 1 (1) +1
    Здравствуйте, mefrill, Вы писали:


    M>Во-первых, графическое выражение операции стравнения, так же как и присваивания, противоречит математической интуиции. Исмвол "=" значит в математике именно сравнение, а не какую-либо операцию.


    Это спорный вопрос. Во-первых, никого сам оператор не нарягает. Во-вторых, в математике просто нет понятия модификации переменных, так что выражение:
    x = 1

    можно трактовать как присвоение значения новой переменной, а можно и как утверждение, то "x == 1".
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[13]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.09.05 16:19
    Оценка: 1 (1) +1
    Здравствуйте, mefrill, Вы писали:

    M>Инчае говоря, данная операция составная, обозначающая две атомарных, и имеющая направление. Естественно было бы обозначать ее стрелкой или там, как в Паскале ":=", здесь есть ассиметричность, а значит, есть и направление. Но обозначать эту операцию символом "=" — это значит, во-первых, убрать из обозначения операции направление и, во-вторых, противоречить математической интуиции. Далее, обозначив сравнение неестественным "==" вставили в язык источных ошибок при написании. Т.е. ИМХО это все-же проблема синтаксиса, а не семантики.


    Мне кажется аргумент этот натянут. Ну, нет проблем у человека с ассоциацией "=" с присвоением. Говорить о кличестве более простых операций вообще не стоит. По крайней мере в рамках языка высокого уровня (ЯВУ). Иначе мы дойдем сначала до ассемблера, а потом до маш.кодов. Ведь даже сравнение тоже записывается минимум двумя командами.

    Проблема именно в банальной похожести. Например, я прекрасно отдаю себе отчем что означает "+" в С, но ошибки такие допускал просто по невнимательности. Причем если меня контролировал компилятор (в C#), то я и горя не вдал. Подумашь опечатался? С кем не бывает? Я вот переодически просто не ту букву могу в переменной залепить. Компилятор все равно остановит. А вот когда ошибочку приходится искать в рантайме... Причем ведь складывается идиотское ощущение магии! Как говорил Альф из какого-то сериала:

    ----------------------------------------
    — Почему пячь попал в сосдеское стекло?
    — Наверное не сработало ваше земное притяжение.


    M> Ну стали бы обозначать присваивание через |-|, какая разница?


    Через минус конечно некрасиво. Но вот через "-=" все воспринимают неплохо.

    M> Человек бы все-равно привык рано или поздно, а вот изучать труднее. Конечно, создатели языка имели какие-то причины ,когда выбирали эти обозначения. Хотелось бы с ними ознакомиться.


    Еще раз. Нет у начинающий (который многие то и математику то не знают как следует) с интерпретацией символа "=". Это в основном поклонники Паскаля притягивают этот аргумент за уши. Проблема именно в легкости опечатки. Опечататься можно и с ":=". Сложнее конечно, но можно.

    M>Ну вот о чем я и писал уже выше. Прямую работу с памятью можно было бы реализовать по другому, может быть более полно отразив понятия Фон-Неймановсткой машины.


    Думаю, что верным выходом было бы вообще предоставить возможность программировать вообще без понятия "узатель". C#, кстати, это красиво демонстрирует. Указетели есть. Причем они даже почти такие же как в С, но они есть в специальном небезопастном контексте, который можно интерпретировать как расширенный раздел языка для низкоуровневого программирования.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[13]: Лекция Вирта в политехническом - впечатления
    От: Cyberax Марс  
    Дата: 14.10.05 07:29
    Оценка: 1 (1) :)
    Сергей Губанов wrote:

    > C>Тем не менее, даже *сейчас* нечем полностью заменить С.

    > А чем же Modula-2 не подходит, автором или синтаксисом?

    Если кратко, то всем.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[6]: Лекция Вирта в политехническом - впечатления
    От: BreQwaS Россия  
    Дата: 22.09.05 16:53
    Оценка: +1 :)
    Здравствуйте, sch, Вы писали:

    sch>Все гораздо проще, как видите.


    А я-то тут при чём?
    WinAmp играет: (умолк пока)
    http://livejournal.com/users/breqwas
    Re[14]: Лекция Вирта в политехническом - впечатления
    От: Пацак Россия  
    Дата: 24.09.05 09:02
    Оценка: +2
    Здравствуйте, Gaperton, Вы писали:

    G>Разруха, она в головах человеческих, а не в языке.


    Да это-то понятно... Но вот скажем в автомоблях тоже разрухи нет по сути, она в головах водителей. Однако ПДД зачем-то вводят, тех самых водителей ограничивая, чтоб из-за своей разрухи бед не натворили.

    G>Запрет на определенные конструкции существенным образом ситуацию не меняет. Хочешь эксперимент? Назови мне язык, и я, сыграв в ламера-временщика, с легкостью напишу тебе на нем до ужаса нечитабельный код.


    А давай лучше другой эксперимент проведем. Я назову два языка, ты попробуешь написать нечитаемый код на обоих, а потом честно скажешь, где это оказалось проще и где такой код встретить более вероятно. Согласен? Тогда плз: perl vs python. Лично мне надо сильно поизвращаться, чтоб написать на питоне уж совсем нечитаемый код (скорее всего придется нагородить несколько строчек в "функциональном" стиле с кучей лямбд и условий), а сколько его налепили на коленках перловые горе-программисты?

    G>Эффективные, реально работающие в индустрии методы борьбы с этим такие:

    (скип)
    Так-то оно так, но... Чего мы добились-то? Только того, что заменили синтаксический запрет на использование "плохих" конструкций в самом языке административным указанием не использовать их в разрабатываемых проектах. Плюс ввели порочную практику "вообще нельзя, но если иногда и очень хочется, то можно". Набивший оскомину пример с goto думаю приводить нет смысла: куча языков без него прекрасно обходятся, в большинстве проектов за его использование руки вырывают аж до самых пяток, но в то же время куча народу считает, что "иногда его применение бывает очень полезным". Может лучше пожертвовать этим "иногда" в угоду повседневной практике, а не наоборот?
    Ку...
    Re[11]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.09.05 01:50
    Оценка: +2
    Здравствуйте, mefrill, Вы писали:

    M>Не согласен. Я преподавал Си не один год. И в университете студентам и дома полным неучам. Поэтому знаю точно о трудностях, которые при изучении Си встречаются. Об операторе сравнения было уже оговорено много и долго. Вот недавний пример, я на си программирую уже больше 10 лет, а написал в сравнении один = вместо двух. В результате полдня потратил в сложном алгоритме на лов ошибки. Уродство это полное синтаксическое.


    Согласен, что С ужасен во многих аспектах, но надо давать скидку на времена и понимать что заменял С и какие были в те времена у него пользователи. Что же касается присвоения, то ту дело не в синтаксисе. В C#, например, синтаксис тот же, но подобную ошибку допустить невозможно. Разница между языками заключается в том, что C# типобезопасный язык, а С нет. Ведь так все просто "a = b" должно возвращать значение того же типа, что и "a". Оператор if же должен принимать выражение типа bool. Никакие присвоения кроме присвоения булевых переменных такой тип не дают, так что компилятор сразу выявляет ошибку. Ну, а сравнивать булевы переменные просто глупо, так что грабли в этом случае скорее гипотетические. Те кто на них наравлся должны просто сменить проыессию.

    M>Или синтаксис объявлений. С какой стати в объявлении массива имя переменной стоит внутри объявления типов?


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

    M> Или пресловутые указатели. Чтобы человек понял их премудрость необходимо столько же времени, а иногда и больше, чем на изучение всего Си перед этим.


    Полностью согласен. Однако в этом минусе есть свой плюс. Познание указателей открывает человеку некое внутреннее понимание работы компьютера. Я заметил, что если человек не в силах понять указатели и научиться с ними работать, что ему вообще лучше завязать с программированием. Ну, не для него оно. Так что С и С++ замечательные развивалки для мозгов. Но первыми языками их лучше не делать. Хотя я лично начинал именно с С. Проблемой это не стало. Но как сейчас помню как не просто далось его изучение.

    M> И это уже не проблема синтаксиса, а семантическое свойство языка.


    Остальное тоже в основном семантика. А синтаксис очень даже. В том же C# он почти такой же, а проблем нет.

    M>Может быть и из-за достоинств. Они в Си, несомненно, есть. Но, возносить эти достоинтсва в абсолют и видеть в них единственную и главную причину его популярности я бы не стал. Считаю, что это необъективно.


    Ды еще раз обращаю внимание на то когда и для кого был создан С. Ведь на него переходили те, кто и так манипулировал адресами памяти, только еще более варварскими методами. Это сейчас когда проработаны концепции типобзеопастности, системы типов и т.п. указатели кажутся низкоуровневой конструкцией дико усложняющей изучение языка, а тогда это была "офигительная рацуха" позволившая людям не тратить время на адрессную арифметику. Да, и нельзя не признать, что С давал по тем временам невероятную краткость и гибкость. Народ восхищался strcpy на С!
    void strcpy(char* to, char* from)
    {
        while (*to++ = *from++);
    }

    а грабли вылезли уже после. И то что этот изумительный пример является пособием для изучения граблей стало ясно только когда язык стал популярен. Те монстры ассемблера просто не считали подобные грабли за проблему!
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[12]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.09.05 01:50
    Оценка: +2
    Здравствуйте, eao197, Вы писали:

    E>Здравствуйте, mefrill, Вы писали:


    M>>Вот недавний пример, я на си программирую уже больше 10 лет, а написал в сравнении один = вместо двух. В результате полдня потратил в сложном алгоритме на лов ошибки.


    E>hint: размещать константу слева от знака равенства. Тогда выражение if( 10 = a ) просто не скомпилируется.


    Классный хинт! При этом читать код становится удобнее никуда! Но нам ведь не до того как наш код читаться будет. Нам бы скомпилироваться, запуститься и молиться чтобы не грохнулу незнамо где. Вот это и есть самое худшее в С/С++. К тому же константы может банально не быть.

    E>Наблюдение из собственного опыта: после того, как я стал следовать этому правилу, я ни разу не ошибся с присваиванием в if (даже если в сравнении использовались два lvalue), т.к. приходилось задумываться о том, есть ли в выражении константа, которую можно написать слева. Из-за этого на выражении в if() внимание концентрировалось и ошибок в написании == просто не происходило.


    Ага. Даже думать об этом (не делая) уже уберегает об ошибки. Но вот зачем тратить свое время и энергию на такие глупости если есть языки в которых подобная проблема не возможна в следствии намного более продуманного дизайна?
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[14]: Лекция Вирта в политехническом - впечатления
    От: Пацак Россия  
    Дата: 25.09.05 08:49
    Оценка: +2
    Здравствуйте, BreQwaS, Вы писали:

    BQS>Блин, да откуда оно всё?

    BQS>Я такой ошибки уже пару лет не делал. Всего на С/С++ пишу года три.

    Да тут дело даже не столько в ошибке..

    // ... some code
    while (a=foo()) {
        boo(a);
    }
    // ... some code


    Глядя на вышеприведенный кусок кода — ты можешь "на глаз" определить, что в нем нет ошибки, и он должен делать именно то, что делает, а не то, что приведено ниже? ИМХО не зная того, что делает some code — сказать это в общем-то проблематично. И это не есть хорошо: учитывая, что поиском ошибки может заниматься совсем не тот программист, который ее сделал, подобные двумысленности могут сильно добавить ему работы.

    // ... some code
    while (a==foo()) {
        boo(a);
    }
    // ... some code
    Ку...
    Re[12]: Массивы и указатели в C
    От: Cyberax Марс  
    Дата: 25.09.05 12:40
    Оценка: :))
    AVC wrote:

    > Главная проблема с массивами Си в том, что информация об их

    > "массивовости" теряется при выходе из соответствующей области
    > видимости (scope)).

    Это не проблема — это достоинство

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[12]: Лекция Вирта в политехническом - впечатления
    От: mefrill Россия  
    Дата: 25.09.05 13:04
    Оценка: +2
    Здравствуйте, eao197, Вы писали:

    E>hint: размещать константу слева от знака равенства. Тогда выражение if( 10 = a ) просто не скомпилируется.


    блин, я же написал, что больше 10 лет уже программирую на си. Ну неужели ты думаешь, что я этого правила не знаю? В том фрагменте кода я сравнивал две переменные величины. И это правило, естественно, не работало. Алгоритм был довольно сложный, поэтому отладка заняла много времени.

    Но, принципиально здесь ничего не меняется. Во-первых, графическое выражение операции стравнения, так же как и присваивания, противоречит математической интуиции. Исмвол "=" значит в математике именно сравнение, а не какую-либо операцию. Во-вторых, использование "=" и "==" ведет к вышеупомянутым ошибкам независмо от математической традиции. Ясно одно: это синтаксичесая неудача языка.

    E>Наблюдение из собственного опыта: после того, как я стал следовать этому правилу, я ни разу не ошибся с присваиванием в if (даже если в сравнении использовались два lvalue), т.к. приходилось задумываться о том, есть ли в выражении константа, которую можно написать слева. Из-за этого на выражении в if() внимание концентрировалось и ошибок в написании == просто не происходило.


    Уже писал об этом. Придумывать костыли для синтаксического свойства языка указывает только на одно: это свойство неудачно.
    Re[5]: Лекция Вирта в политехническом - впечатления
    От: Кодт Россия  
    Дата: 25.09.05 17:00
    Оценка: +2
    Здравствуйте, VladD2, Вы писали:

    VD>Дык. Сам академический игрун. Причем все отговорки ищет. То маркетинг виноват, то все слишком игрушечное, то идеологически не законченное, то сложное. Думаю, что Вирт проспал главное завоевание человечества — язык БрэйнФак. Он как раз отвечает всем Виртовским требованиям. Прост, локоничен, без грамма маркетинга, идеологически завершен, позволяет сделать что угодно.


    ... и очень эффективно решает главную поставленную задачу — т.е. fuck brains.
    Перекуём баги на фичи!
    Re[11]: Массивы и указатели в C
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 11.10.05 07:26
    Оценка: -1 :)
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Распространенная точка зрения, не вполне согласующаяся с реальностью, данной нам в ощущениях:


    Не смотря на то, что массивовые переменные получить можно, в языках С/C++/Java/C# нет возможности определения массивовых типов:
      TYPE
        Vector3D = ARRAY 3 OF REAL; (* value-type, SIZE(Vector3D) = 3*8 = 24 *)
    
      PROCEDURE f(v: Vector);
      ...
    Re[23]: Лекция Вирта в политехническом - впечатления
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.10.05 11:40
    Оценка: +2
    Здравствуйте, Трурль, Вы писали:

    Т>Здравствуйте, AVC, Вы писали:


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


    Т>Вообще, можно было бы обойтись и без этого.

    Т>
    Т>VAR
    Т>  f: FuncWithoutArgs;
    Т>  x: REAL;
    Т>  ...
    Т>  f := Random; (* использование в качестве процедурной константы *)
    Т>  x := Random; (* вызов функции *)
    Т>


    1) В следующем случае без скобок нельзя:
    TYPE
      F = PROCEDURE(): F;
    
    VAR
      f, g, h: F;
    BEGIN
      ...
      g := f;
      h := f(); (* f и f() - разные вещи *)


    2) В Delphi есть проблема со взятием адреса процедурной переменной. Так например @f — оказывается адрес самой процедуры, но не адрес процедурной переменной f, как это следовало бы из общих соображений, а если бы f была еще и функцией без параметров то тут никакие общие соображения не помогут. Проверка f <> nil в Delphi означает проверку результата вызова функции с nil, саму же процедурную переменную на nil проверяют @f <> nil или Assigned(f). Короче, столько мороки в Delphi из-за того что решили не указывать скобок у функции без параметров.
    Re[15]: Лекция Вирта в политехническом - впечатления
    От: GlebZ Россия  
    Дата: 27.09.05 09:11
    Оценка: 22 (1)
    Здравствуйте, AVC, Вы писали:
    AVC>Очень интересно, как можно опечататься с ":=", так чтобы компилятор этого не заметил?
    AVC>Hint: в Паскале (Модуле-2, Обероне) операции присваивания и сравнения используются в разных контекстах.
    AVC>В то время как в Си-подобных языках — могут использоваться в одном контексте.
    AVC>Пример:
    AVC>
    AVC>while (*dest++ = *source++)
    AVC>   ;
    AVC>

    Не говори за всех. В C# такое не пройдет. И тут проблема не в написании знака равно. Здесь проблема в интерпретации численных значений как boolean.

    С уважением, Gleb.
    Re[8]: Лекция Вирта в политехническом - впечатления
    От: mormat Украина mormat.org.ua
    Дата: 25.09.05 00:34
    Оценка: 18 (1)
    Здравствуйте, Cyberax, Вы писали:

    >> ИМХО, все решает традиция. Если я в университете Си изучал, зачем мне

    >> еще что-то учить? И то, что ОС пишут на Си — точно такая-же традиция.

    C>А на чем еще писать ОСы?


    http://bluebottle.ethz.ch/

    Чем не ОС на Active Oberon. Ведет проект один человек. Я был приятно удивлен увиденным. Думаю, если бы эту ось на постоянной основе продвигало хоть на порядок больше народу, и если бы еще ктото-чтото писали софт и игры для неё, и несколько раньше (лет на 10 ) — ситуация на рынке ОС могла бы сложится несколько иная.

    И никто бы не орал бы, что си — панацея. Однако традиции а может и нет.
    Пусто
    Re: Ты о Си или о Плюсах?
    От: Cyberax Марс  
    Дата: 19.10.05 06:21
    Оценка: 4 (1)
    SilverCloud wrote:

    > C>Это *одновременно* высокоуровневый и низкоуровневый язык.

    > Если о Си, то не понимаю, как может считаться высокоуровневым язык, в
    > котором нет *строк*?

    А в чем проблемы? Вообще-то в С строки есть.

    Нет удобной поддержки строковых операций? Ну так делаем ее:

    Делаем раз:
    typedef struct tagString
    {
        size_t length;
        char *data;
    } String;


    Делаем два:
    String createString(const char *str)
    {
        String res;
        res.length=strlen(str);
        res.data=strdup(str);
        return res;
    }
    void deleteString(String *str)
    {
        res->length=0;
        free(res->data);
    }
    void appendString(String *dst,String *src)
    {
        dst->length+=src->length;
        char *tmp=calloc(dst->length+1);
        strcat(tmp,dst->data);
        strcat(tmp,src->data);
        free(dst->data); dst->data=tmp;
    }


    Делаем три:
    String str;
    
    str=createString("This is a string");
    deleteString(str);

    По желанию добавляем подсчет ссылок, резервирование места, итераторы и
    т.п. Если хочется уже готового, то берем GLib.

    Ну а если вы считаете, что строки должны обязательно быть намертво
    впаяны в язык, то спешу разочаровать — это совсем необязательно.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[14]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.09.05 16:19
    Оценка: 3 (1)
    Здравствуйте, BreQwaS, Вы писали:

    BQS>Блин, да откуда оно всё?

    BQS>Я такой ошибки уже пару лет не делал. Всего на С/С++ пишу года три.

    Рад за тебя. Я писл на С++ 10 лет. Последние 5 лет тоже не делал подобной ошибки. Првда в основном потому что забил на С++.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[22]: Лекция Вирта в политехническом - впечатления
    От: Трурль  
    Дата: 20.10.05 05:36
    Оценка: 1 (1)
    Здравствуйте, AVC, Вы писали:

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


    Вообще, можно было бы обойтись и без этого.
    VAR
      f: FuncWithoutArgs;
      x: REAL;
      ...
      f := Random; (* использование в качестве процедурной константы *)
      x := Random; (* вызов функции *)
    Re[2]: Лекция Вирта в политехническом - впечатления
    От: BreQwaS Россия  
    Дата: 22.09.05 08:17
    Оценка: :)
    G>Подскажите, плз., те, кто был на лекции. Задавали ли Вирту вопросы относительно
    G>функционального программирования?
    G>Очень интересно мнение такого известного и уважаемого дяденьки!

    Задавали, про пролог. Ответ был примерно такой:

    В прологе вы не указываете, как искать решение, а описываете некие предикаты, которым должно соответствовать решение, а всё остальное за вас сделает некий wizard. Но при этом вы можете давать визарду какие-то подсказки насчёт того, как искать решение — но разве это не то, от чего предполагалось избавиться? Если честно, то пролог — это интересная академическая игра, но она не имеет отношения к реальной жизни.

    Кто-то рядом добавил: Компилятор пролога можно написать на обероне, но компилятор оберона нельзя написать на прологе. Профессор согласно закивал.
    http://livejournal.com/users/breqwas
    Re[2]: Лекция Вирта в политехническом - впечатления
    От: Глеб Алексеев  
    Дата: 22.09.05 09:23
    Оценка: :)
    Здравствуйте, LuciferMoscow, Вы писали:

    LM>

    LM>4) С/С++ и другие языки, которые сейчас этими стандартами являются, стали таковыми в основном благодаря маркетингу и громадной финансовой мощи тех, кто их продвигал.

    LM>Это Ваши слова и Вирта? Могу порекомендовать Страуструп "Дизайн и эволюция С++". Совсем это не так.
    По-моему, понятно, что BreQWas кратко пересказал свое понимание тезисов Вирта. А мы сейчас всем РСДНом начем с ним спорить и убеждать, что это не так .
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Re[7]: Лекция Вирта в политехническом - впечатления
    От: Privalov  
    Дата: 22.09.05 11:27
    Оценка: +1
    Здравствуйте, eao197, Вы писали:

    EE>Мировосприятием и настроением программиста в данный, конкретный момент времени Строго говоря, разница только на эстетическом уровне. Вот парочка примеров.

    [...]
    E>Уж не знаю, насколько эти примеры будут показательными. Все же свободное чтение постфиксных if/unless/while требует некоторого погружения в язык. Без этого традиционные, префиксные выражения кажутся понятнее. Но, когда привыкаешь к языку разумное использование постфиксных выражений, имхо, повышает читабельность.

    Хорошие примеры. Ключевые слова здесь — "разумное использование". Что приведенные примеры и демонстрируют. Однако, увлекшись, или редактируя чужой код, можно выдать и такое (псевдокод):

      if (cond1)
      {
         do_some1() if (cond2);
         do_some3() if (cond3);
      }


    Если cond — не просто какие-нибудь флаги, то чтение такого кода превращается в хорошую головоломку.
    Re[11]: Лекция Вирта в политехническом - впечатления
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 22.09.05 15:32
    Оценка: +1
    Здравствуйте, Пацак, Вы писали:

    E>>Это неразумное использование.

    E>>50 строк кода -- это отдельная функция, даже две.

    П>Не так важно, главное — суть: приходится либо зря читать весь блок, либо "прыгать" глазами на его конец для проверки, есть ли там условие.


    Нет, как раз в этом и суть. Постфиксные if/unless имеет писать только если есть возможность легко взглядом поймать всю конструкцию.

    Кроме того, если из if-а 50 строк кода можно вынести в отдельную функцию -- это в любом случае нужно сделать. Мне вот сегодня пришлось заглянуть в исходники QDesigner, так там функции в 300 строк длинной читать совсем не просто, не смотря на то, что все if-ы "нормальные" используются.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[9]: Лекция Вирта в политехническом - впечатления
    От: GlebZ Россия  
    Дата: 22.09.05 15:49
    Оценка: +1
    Здравствуйте, eao197, Вы писали:

    E>
    E>action = new widget_action_t(
    E>        is_connected ? impl::c_connected_group : impl::c_disconnected_group,
    E>        ip, m_action_group );
    E>action->setText( channel_name );
    E>action->setIconSet( srv_icon );
    E>action->setToolTip( channel_name );
    E>action->setStatusTip( channel_name );
    E>

    E>переписываем без ?:
    E>
    E>int group = impl::c_disconnected_group;
    E>if( is_connected )
    E>    group = impl::c_connected_group;
    E>action = new widget_action_t( group, ip, m_action_group );
    E>action->setText( channel_name );
    E>action->setIconSet( srv_icon );
    E>action->setToolTip( channel_name );
    E>action->setStatusTip( channel_name );
    E>


    E>Неужели всторой вариант проще?

    Проще так
    action = new widget_action_t( GetGroup(), ip, m_action_group );


    С уважением, Gleb.
    Re[13]: Лекция Вирта в политехническом - впечатления
    От: Cyberax Марс  
    Дата: 22.09.05 18:08
    Оценка: -1
    GlebZ wrote:

    > Вот тебе стандарт

    > <http://www.moorecad.com/standardpascal/iso7185.txt&gt;. Вот тебе
    > определение стринга в стандартном паскале:

    A character-string containing a single string-element shall denote a
    value of the required char-type
    (see 6.4.2.2). A character-string containing more than one
    string-element shall denote a value of
    a string-type (see 6.4.3.2) with the same number of components as the
    character-string contains
    string-elements. All character-strings with a given number of components
    shall possess the same
    string-type.
    There shall be an implementation-defined one-to-one correspondence
    between the set of alternatives
    from which string-elements are drawn and a subset of the values of the
    required char-type. The
    occurrence of a string-element in a character-string shall denote the
    occurrence of the corresponding
    value of char-type.

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

    > А вот тебе сравнение С vs Pascal(раньше было популярно их сравнивать

    > )здесь <http://en.wikipedia.org/wiki/Pascal_and_C#Epilogue&gt;
    > Доказал?

    Нет

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[2]: Лекция Вирта в политехническом - впечатления
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 23.09.05 03:22
    Оценка: -1
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Здравствуйте, BreQwaS, Вы писали:


    AVK>А, эта, Губанова видел?


    Врядли... он же с Нижнего Новгорода... родной город позорит....
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[11]: Лекция Вирта в политехническом - впечатления
    От: gear nuke  
    Дата: 23.09.05 07:31
    Оценка: -1
    Здравствуйте, GlebZ, Вы писали:

    >>> А вообще, почему-то забывают что в C очень ценилось возможность

    >>> ассемблерных вставок, в том числе и в терминах языка.

    AFAIK в терминах языка они появились сравнительно недавно. MSVC их до сих пор не поддерживает .

    C>>На самом деле вот ассемблерные вставки не так уж и важны.

    GZ>Сейчас неважно, компиляторы работают качественнее чем человек.

    Такие компиляторы можно пересчитать на пальцах одной руки . И уж точно, там не будет компиляторов Pascal (FPC — не считаем, это по сути front-end gcc)

    Компилятор в BlackBox просто ужасен Right thing говорит сама за свою эфективность для решения ряда задач .
    People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
    Re[11]: Лекция Вирта в политехническом - впечатления
    От: Gaperton http://gaperton.livejournal.com
    Дата: 23.09.05 10:04
    Оценка: :)
    Здравствуйте, AndreyFedotov, Вы писали:

    AF>Здравствуйте, Gaperton, Вы писали:


    E>>>Во-вторых, такие переключения полезны. Шоры с глаз снимают. Причем качественно. Это как путешествие в далекую страну -- не только свежее впечатление, но и осознание некоторых вещей, о которых раньше и не думал (но здесь все сильно индивидуально).


    G>>Угу, +1. Наконец-то до народа это начало доходить. Год назад за такую фразу тут бы порвали не задумываясь.


    AF>А вот ты про C# такое скажи, так кое кто и сейчас порвёт.


    Нечего меня кое-кем пугать, мне он давно не страшен. Я уже с год как практически не читаю его посты и ни при каких обстоятельствах на них не отвечаю, так пусть рвет на здоровье. Как там было у Аристотеля? "Заочно он меня пусть хоть парвет!", о как!
    Re[8]: Лекция Вирта в политехническом - впечатления
    От: mefrill Россия  
    Дата: 24.09.05 16:07
    Оценка: +1
    Здравствуйте, Дарней, Вы писали:

    Д>кто ставил? начальство по указке свыше? ни хрена подобного! сами же и ставили. потому что было удобно


    Да, вроде-бы, нет. Ситуация тогда была другая совсем. Это сейчас на PC можно кучу ОС поставить различных. А тогда, ставилась машина, и с ней весь софт ставился. Я, конечно, не в курсе, как так получилось, что стали университетские машины с юниксами поставлять, но предполагаю, что так оно и было.

    Д>не "два уважаемых профессора", а "два прожженых практика"


    Вот снова попытка перенести наши понятия в то время. Тогда "практиков" в том смысле, что мы сейчас под этим имеем ввиду, не было. Софт писался под конкретную машину, пакетом для конкретного заказчика. Или софт писался в университетах и НИИ под конкретные проекты. Вот и эти ребята такими же "практиками" были. При заводе они не работали я полагаю. А больше и негде практикой заниматься тогда было. Время, когда программист стал офисным клерком, наступило позже.

    Д>это сейчас — традиция. раньше традиции не было, а вот конкурентов у Си была куча


    В американских университетах у Си была куча конкурентов?

    Д>Никакого основного продукта, написанного на Си, у них не было ТОГДА

    Д>Как утверждается историками, Юних вообще возник как побочный продукт разработки внутреннего софта.

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

    О чем я хотел сказать изначально — только о том, что нельзя переносить сегодняшние понятия, а тем более, коммерческие, в то время, в другую ситуацию.
    Re[8]: Лекция Вирта в политехническом - впечатления
    От: mefrill Россия  
    Дата: 24.09.05 16:14
    Оценка: -1
    Здравствуйте, Cyberax, Вы писали:

    C>А почему ставили юниксы? На фортране у нас системный софт, кстати, не

    C>писали.

    Говорю честно, не знаю причины. Может кто взятку дал в правительстве, может еще что. Ставили машины, а ОС для них была юникс. А почему ставили именно эти машины я не знаю.

    C>Да, простой. Почти такой же простой, как и ассемблер.


    Тогда зачем он вообще нужен? Ассемблер же проще? Надо было на нем и программировать, зачем на Си переходить?

    >> Почему конкурентов у Си быть не может?

    C>Потому, что он максимально приближен к реальной аппаратуре. То есть в С
    C>нет искусственных понятий типа строчек или массивов — все выражается
    C>через базовые понятия.
    C>А на чем еще писать ОСы?

    Ну а почему же другой язык не предложить? Такой же низкоуровневый как Си, но без сложностей и синтаксических уродств, которые в Си, очевидно, встречаются?

    C>А почему традиция началась? Продукты на С, кстати, очень хорошо

    C>совмещаются со всеми остальными языками.

    Ага, совмещаются, я абсолютно согласен. Но здесь снова спутана причина со следствием. Совмещаются они ПОТОМУ, что Си поплярен, а совсем не потому, что он так хорошо. Почему традиция началась я уже отвечал выше: не знаю. Почему в универах машины эти стали ставить? Может, дешевые они были или взятку дали, не знаю.
    Re[10]: Лекция Вирта в политехническом - впечатления
    От: mefrill Россия  
    Дата: 24.09.05 17:14
    Оценка: +1
    Здравствуйте, Cyberax, Вы писали:

    C>1. С очень просто объединяется с другими языками (в том числе с асмом).

    C>2. С достаточно портабелен (в отличие от асма).

    Не мог бы ты разъянить подробнее, в чем заключаются свойства языка Си, так облегчающие его портабельность и связь с другими языками?

    C>Синтаксических сложностей в С не так много, и они никаких проблем не

    C>доставляют (после того, как на них раз наткнешься). Сложности возникают
    C>из-за низкоуровневого программирования (ручное управление памяти и т.п.).

    Не согласен. Я преподавал Си не один год. И в университете студентам и дома полным неучам. Поэтому знаю точно о трудностях, которые при изучении Си встречаются. Об операторе сравнения было уже оговорено много и долго. Вот недавний пример, я на си программирую уже больше 10 лет, а написал в сравнении один = вместо двух. В результате полдня потратил в сложном алгоритме на лов ошибки. Уродство это полное синтаксическое. Или синтаксис объявлений. С какой стати в объявлении массива имя переменной стоит внутри объявления типов? Или пресловутые указатели. Чтобы человек понял их премудрость необходимо столько же времени, а иногда и больше, чем на изучение всего Си перед этим. И это уже не проблема синтаксиса, а семантическое свойство языка. Мы все видим информатику через призму Си, поэтому эти вещи нам кажутся простыми и естественными, однако, на самом деле это не так.

    C>Нет. Потому, что интерфейс С настолько БАЗОВЫЙ, что дальше уже некуда.


    Не понимаю, что значит "базовый интерфейс"?

    C>А может все-таки из-за достоинств С?


    Может быть и из-за достоинств. Они в Си, несомненно, есть. Но, возносить эти достоинтсва в абсолют и видеть в них единственную и главную причину его популярности я бы не стал. Считаю, что это необъективно.
    Re[14]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.09.05 01:51
    Оценка: +1
    Здравствуйте, Gaperton, Вы писали:

    G>Разруха, она в головах человеческих, а не в языке. Запрет на определенные конструкции существенным образом ситуацию не меняет. Хочешь эксперимент? Назови мне язык, и я, сыграв в ламера-временщика, с легкостью напишу тебе на нем до ужаса нечитабельный код.


    G>Эффективные, реально работающие в индустрии методы борьбы с этим такие:

    G>1) Не нанимайть на работу ламеров и временщиков.
    G>2) Вводить единые соглашения по оформлению кода.
    G>3) Вводить единые стилевые соглашения.
    G>4) Вводить обязательную практику code reviews, в поддержку п. 2 и 3. Несоблюдение оформительских и стилевых соглашений считать дефектом (багом). Про http://www.rsdn.ru/Forum/Message.aspx?mid=1358322&amp;only=1
    Автор: Gaperton
    Дата: 01.09.05


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

    А логическая ошибочка очень простая. Речь не о разрухе, а о возможностях человеческого мозга. Они не безграничны! И по этому лучше их использовать по делу. А запретами пусть займется тупая программа.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[13]: Лекция Вирта в политехническом - впечатления
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 25.09.05 06:23
    Оценка: -1
    Здравствуйте, VladD2, Вы писали:

    E>>hint: размещать константу слева от знака равенства. Тогда выражение if( 10 = a ) просто не скомпилируется.


    VD>Классный хинт! При этом читать код становится удобнее никуда!


    По-твоему:
    if( 10 == a ) do_something();

    читается хуже, чем:
    if( a == 10 ) do_something();

    Ты это серьезно?
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[12]: Лекция Вирта в политехническом - впечатления
    От: Павел Кузнецов  
    Дата: 25.09.05 06:43
    Оценка: +1
    eao197,

    > hint: размещать константу слева от знака равенства. Тогда выражение if( 10 = a ) просто не скомпилируется.


    Альтернатива: включить в своем компиляторе соответствующие предупреждения.
    Posted via RSDN NNTP Server 2.0 beta
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[10]: Лекция Вирта в политехническом - впечатления
    От: AVC Россия  
    Дата: 25.09.05 10:06
    Оценка: :)
    Здравствуйте, jazzer, Вы писали:

    J>Уверен, что все это знают, но на всякий случай: "мир" в названии означает не отсутствие войны, а общество. Типа "Ленин и мировая буржуазия"


    Как раз наоборот: слово "мир" в названии романа означает именно "отсутствие войны".
    Ошибочное толкование (как "общество") стало популярным после одной из игр "Что, где, когда".
    Источник такого толкования — опечатка на титульной странице одного-единственного тома в старом издании.
    К сожалению, сейчас не дам ссылку (давно дело было). Но на одном из форумов www.membrana.ru несколько лет назад (в 2002 или 2003) этот случай разбирался. Приводился как снимок злополучной титульной страницы, так и снимки всех титульных страниц в остальных томах.
    Т.о., игра "Что, где, когда" невольно стала источником массового заблуждения.

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[13]: Массивы и указатели в C
    От: Пацак Россия  
    Дата: 25.09.05 12:46
    Оценка: +1
    Здравствуйте, Cyberax, Вы писали:

    C>Это не проблема — это достоинство


    Скорее просто фича. А уж чем она оборачивается — проблемами или достоинствами — это от конкретного случая зависит.
    Ку...
    Re[12]: Лекция Вирта в политехническом - впечатления
    От: mefrill Россия  
    Дата: 25.09.05 13:57
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, mefrill, Вы писали:


    VD>Согласен, что С ужасен во многих аспектах, но надо давать скидку на времена и понимать что заменял С и какие были в те времена у него пользователи. Что же касается присвоения, то ту дело не в синтаксисе. В C#, например, синтаксис тот же, но подобную ошибку допустить невозможно. Разница между языками заключается в том, что C# типобезопасный язык, а С нет. Ведь так все просто "a = b" должно возвращать значение того же типа, что и "a". Оператор if же должен принимать выражение типа bool. Никакие присвоения кроме присвоения булевых переменных такой тип не дают, так что компилятор сразу выявляет ошибку. Ну, а сравнивать булевы переменные просто глупо, так что грабли в этом случае скорее гипотетические. Те кто на них наравлся должны просто сменить проыессию.


    Ну не знаю. Что такое операция присваивания? Это, на самом деле, две поледовательных операции:
    1. Прочитать данные из участка памяти, на который ссылается выражение справа.
    2. Записать прочитанные данные в участок памяти, на который ссылается выражение слева.

    Инчае говоря, данная операция составная, обозначающая две атомарных, и имеющая направление. Естественно было бы обозначать ее стрелкой или там, как в Паскале ":=", здесь есть ассиметричность, а значит, есть и направление. Но обозначать эту операцию символом "=" — это значит, во-первых, убрать из обозначения операции направление и, во-вторых, противоречить математической интуиции. Далее, обозначив сравнение неестественным "==" вставили в язык источных ошибок при написании. Т.е. ИМХО это все-же проблема синтаксиса, а не семантики. Ну стали бы обозначать присваивание через |-|, какая разница? Человек бы все-равно привык рано или поздно, а вот изучать труднее. Конечно, создатели языка имели какие-то причины ,когда выбирали эти обозначения. Хотелось бы с ними ознакомиться.

    M>> Или пресловутые указатели. Чтобы человек понял их премудрость необходимо столько же времени, а иногда и больше, чем на изучение всего Си перед этим.

    VD>Полностью согласен. Однако в этом минусе есть свой плюс. Познание указателей открывает человеку некое внутреннее понимание работы компьютера. Я заметил, что если человек не в силах понять указатели и научиться с ними работать, что ему вообще лучше завязать с программированием. Ну, не для него оно. Так что С и С++ замечательные развивалки для мозгов. Но первыми языками их лучше не делать. Хотя я лично начинал именно с С. Проблемой это не стало. Но как сейчас помню как не просто далось его изучение.

    Ну вот о чем я и писал уже выше. Прямую работу с памятью можно было бы реализовать по другому, может быть более полно отразив понятия Фон-Неймановсткой машины.
    Re[15]: Массивы и указатели в C
    От: AVC Россия  
    Дата: 25.09.05 14:56
    Оценка: +1
    Здравствуйте, Cyberax, Вы писали:

    C>Я собственно это и хотел сказать. Адресная арифметика — просто

    C>незаменимое средство для низкоуровневого программирования, но у нее свои
    C>недостатки.

    ИМХО, тот факт, что низкоуровневые средства языка Си не требуют специального "знака" (вроде IMPORT SYSTEM в Модуле-2 и Обероне), является недостатком языка.
    Впрочем, нет желания затевать очередной ((N+1)-й) "языковой" флейм.

    P.S.
    Что касается самого форума (лекция Вирта), то многие посты выглядят так:
    "Мнение Вирта о языках программирования (функциональном программировании и т.д. и т.п.) не совпадает с моим.
    Значит, Вирт в этом не разбирается."
    Это забавно.

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[15]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.09.05 16:19
    Оценка: +1
    Здравствуйте, Пацак, Вы писали:

    П>Да тут дело даже не столько в ошибке..


    П>
    П>// ... some code
    П>while (a=foo()) {
    П>    boo(a);
    П>}
    П>// ... some code
    П>


    П>Глядя на вышеприведенный кусок кода — ты можешь "на глаз" определить, что в нем нет ошибки, и он должен делать именно то, что делает, а не то, что приведено ниже?


    Имкнно!

    И конечно опытные программисты такие ошибки делают редко. Но достигается это обычно ценой того, что они всячески избегают присвоений во вложенных выражениях и тем, что используют трюки вроде постановки константы первым операндом. Но, к сожалению, это приходит только с годами, и приводит к более длинному и менее читабельному коду, хотя цель создателей языка была ровно противоположная.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[14]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.09.05 16:19
    Оценка: +1
    Здравствуйте, eao197, Вы писали:

    E>По-твоему:

    E>
    E>if( 10 == a ) do_something();
    E>

    E>читается хуже, чем:
    E>
    E>if( a == 10 ) do_something();
    E>

    E>Ты это серьезно?

    Да, более чем! Я читаю смысл кода, а не как компилятор. И я хочу читать "значение равно десяти", а не "десяти равно значения". Мне вообще не нравится как говорит Ёда.

    А ты просто привык к эому убожеству. Кстати, а почему в твоих листингах на Руби я подобного не встречал? Или я просто не обращал внимания?
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    ...как утверждается историками...
    От: Зверёк Харьковский  
    Дата: 26.09.05 12:35
    Оценка: +1
    Здравствуйте, Дарней, Вы писали:

    [...]
    Д>Как утверждается историками, Юних вообще возник как побочный продукт разработки внутреннего софта.

    Вообще-то говоря, это неверно.
    FAQ — це мiй ай-кью!
    Re[17]: Лекция Вирта в политехническом - впечатления
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 26.09.05 13:55
    Оценка: +1
    Здравствуйте, Пацак, Вы писали:

    E>>Вообще-то в Ruby такая же ситуация с присваиванием в if, как и в C. Интерпритатор предупреждение выдает, но не более того.


    П>Ужас ИМХО. И все из-за того, что кому-то пришло в голову сделать оператор присваивания, возвращающий значение.


    Чтобы было еще страшнее. В Ruby можно делать вот так:
    result = if 10 == a
            do_something()
        else
            do_something_else()
        end


    т.е. if -- это выражение, у которого так же есть свое значение.



    П>Поневоле задумаешься — а так ли оправданы были жертвы...


    Пока не было оптимизирующих компиляторов -- вполне.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[2]: ...как утверждается историками...
    От: Зверёк Харьковский  
    Дата: 26.09.05 14:15
    Оценка: +1
    Здравствуйте, Дарней, Вы писали:

    Д>>>Как утверждается историками, Юних вообще возник как побочный продукт разработки внутреннего софта.


    ЗХ>>Вообще-то говоря, это неверно.


    Д>За что купил, за то и продаю А у тебя есть другие данные?


    Ну, не то чтобы прямо противоположные, но несколько отличающиеся.

    "...разработки внутреннего софта"
    Multics — совместный проект Bell Labs и MIT по разработке операционной системы разделенного времени (time-sharing) для компьютера General Electrics 645 — тяжело назвать "внутренним софтом", несмотря на провал проекта.

    "...Юних вообще возник как побочный продукт..."
    Скажем так, "побочным продуктом" можно назвать продукт, который создан в рамках проекта для внутренних нужд проекта, но перерос собственное предназначение.
    Unix — это, скажем так, самостоятельный проект нескольких разработчиков Mutics, попытка использования и упрощения идей, заложенных в Mutics, в операционной системе для менее мощного компьютера. (собственно, имя Unics — это "единственное число" от Mutics — "unix — единица того, чего много в mutics").

    Именно для разработки этой ОС Ритчи создал C.
    FAQ — це мiй ай-кью!
    Re[12]: Лекция Вирта в политехническом - впечатления
    От: BreQwaS Россия  
    Дата: 26.09.05 16:36
    Оценка: +1
    Здравствуйте, Дарней, Вы писали:

    Д>А кто вообще сказал, что конструкции языка для низкоуровневого программирования должны удовлетворять математическим традициям?


    Лично для меня очень сомнительно, что конструкции любого универсального языка обязаны удовлетворять математическим традициям, что бы тут ни вещали поклонники ФЯ. Я вроде программы пишу, а не теоремы доказываю...
    WinAmp играет: (умолк пока)
    http://livejournal.com/users/breqwas
    Re[11]: "Простота" Java
    От: AndreyFedotov Россия  
    Дата: 27.09.05 09:20
    Оценка: +1
    А уж про коллекции вообще и говорить нечего. В коллекцию элементарно запихивается и извлекается объект любого типа. И на уровне языка с этим сделать ничего нельзя. Куда тут до C++ с его шаблонами или даже до C# Правда во второй версии языка это было подправлено, однако недостатков Generics в Java было найдено столько же, сколько и достоинств (например здесь
    Автор(ы): Kobylansky Stanislav
    Дата: 22.05.2005
    Наконец, свершилось то, чего так долго ждали java разработчики, вышла очередная версия java с поддержкой многих вещей, о которых давно мечтают разработчики. Одним из нововведений стали шаблоны. Как раз о них и пойдет речь в этой статье.
    )
    Re[16]: Лекция Вирта в политехническом - впечатления
    От: AVC Россия  
    Дата: 27.09.05 20:53
    Оценка: :)
    Здравствуйте, GlebZ, Вы писали:

    AVC>>Пример:

    AVC>>
    AVC>>while (*dest++ = *source++)
    AVC>>   ;
    AVC>>

    GZ>Не говори за всех. В C# такое не пройдет. И тут проблема не в написании знака равно. Здесь проблема в интерпретации численных значений как boolean.

    Приму к сведению.
    C# лучше... чем C++.

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[12]: "Простота" Java
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 27.09.05 22:06
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

    VD>В итоге...

    <...>
    VD>С++ давно просится на рефактринг.

    Имхо, такой рефакторинг уже провели десять лет назад -- появилась Java. Те, кто мог отказаться от багажа существующего C++ кода в сторону Java и двинулись. Затем произошла еще одна попытка рефакторинга. Теперь уже не столько C++, сколько Java -- появился C#. Те, кто мог отказаться от багажа C++ и Java двинулись в сторону C#

    VD> Но в виду того что в комитете засели консерваторы этого никогда не случится.


    Благодоря этому я могу быть уверен, что пару сотен тысяч строк C++ кода, написанных лично мной за последние 5-6 лет, не придется выбрасывать после выхода очередного стандарта C++. А ведь я всего один из почти трех миллионов C++ программистов. Так что подобная консервативность экономит ну очень большие средства и сотни тысячи человеко-лет на портирование C++ программ на очередной супер-пупер-мега-язык.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[16]: Лекция Вирта в политехническом - впечатления
    От: Кодт Россия  
    Дата: 11.10.05 10:55
    Оценка: +1
    Здравствуйте, GlebZ, Вы писали:

    AVC>>Очень интересно, как можно опечататься с ":=", так чтобы компилятор этого не заметил?

    GZ>Аналогично что и сказал ПК.
    GZ>var
    GZ>a:boolean;
    GZ>b:boolean;
    GZ>begin
    GZ>   if (a:=b)then
    GZ>.....
    GZ>end;

    Не аналогично, однако. В Паскале операция присваивания возвращает void.
    В Сях же она возвращает ссылку на приёмник — это и бонус, и грабли одновременно.
    Перекуём баги на фичи!
    Re[17]: typedef - не создает нового типа
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 14.10.05 05:30
    Оценка: :)
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Mr. None,


    >> Тип для массива есть, просто получиь к нему доступ мы можем лишь через определение для него синонима с помощью typedef.


    ПК>Не вполне понял, что здесь говорится... Все конструкции, где используется имя типа массива, введенное с помощью typedef, можно заменить на эквивалентные без использования оного.


    Примерно это я и хотел сказать . Думаю Сергей меня понял .
    [offtop_mode = on]
    Практика показывает: обладая большими знаниями по предмету перестаёшь понимать простейшее объяснение основанное на аналогиях и схожести объектов. Так, например, когда моя жена (прочитав в моей диссертации фразу) попросила меня обяъяснить, что такое фрактальная или дробная размерность я очень долго думал, как бы это сделать по проще и додумался. Вот если взять противокомаринную сетку, которой окна затянуты — она вроде бы 2-ух мерная, но с другой стороны настолько дырявая, что как бы и 2-ух мерной её назвать сложно... Но с другой стороны она точно не 1-но мерная... поэтому про неё можно сказать, что она обладает некой дробной размерностью, значение которой лежит между 1 и 2... Когда же в шутку я рассказал это объяснение своему НР, он меня чуть с г@%#ом не съел!
    [offtop_mode = off]

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


    ПК>Не (с)только это. В примере Сергея иллюстрируется специальное правило C++, сводящееся к тому, что объявления вида f(T[N]) преобразуется в f(T*).


    Вы правы... Я не столько хотел объяснить что демонстрирует пример Сергея, сколько хотел объяснить, что он не демонстирует того, чего Сергей хотел продемонстрировать — эквивалентность типа и синонима получаемого с помощью typedef`а .
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[9]: Лекция Вирта в политехническом - впечатления
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 14.10.05 07:25
    Оценка: :)
    Здравствуйте, mormat, Вы писали:

    C>>А на чем еще писать ОСы?


    M>http://bluebottle.ethz.ch/


    M>Ведет проект один человек.


    Кстати, Гуткнехт собирается Zonnon на нее перенести (потом). А то под .Net активные абъекты Zonnon-а уж очень не эффективно реализуются, под BlueBottle же всё "летать" будет.
    Re[13]: Лекция Вирта в политехническом - впечатления
    От: Cyberax Марс  
    Дата: 16.10.05 08:52
    Оценка: -1
    Pzz wrote:

    > C>Или, например, взять GC — системное программирование с ним просто будет

    > C>невозможно.
    > Это спорное утверждение. Существует экспериментальный проект —
    > www-сервер, полностью написанный на ML, включая драйвера сетевых карт,
    > TCP-стек и собственно www-сервер. В ML нет доступа к ручному
    > управленую памятью. Т.е., совсем нет

    ОС на управляемых языках — полно (экспериментальных и коммерческих).
    Реально успешных сейчас — ноль. Пожалуй, Symbolics'ы были верхом успеха.

    > C>Это такая фигня — ошибка того же класса, что и and вместо or.

    > Нет, не такого же. Пропустить (или вставить лишний) '=' можно просто
    > промахнувшись по клавише. and вместо or просто так не напишешь.

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

    > C>1. Сишные функции и переменные экспортируются по имени, в

    > C>экспортированой сигнатуре отсутствует информация о типах (т.е. нет
    > C>проблем с несовместимым ABI).
    > Это ошибочное утверждение — разные компиляторы могут придерживаться
    > разных соглашений о передаче параметров и использовании регистров.
    > Программа слинкуется, но работать не будет (или, что хуже, будет
    > работать, но не всегда).

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

    В любом случае, эта проблема нааааааааамного проще несовместимого C++ ABI.

    > C>2. Сишные структуры можно располагать в памяти с точностью до _бита_

    > C>(битовые поля, однако).
    > Это тоже не верно — порядок размещения битовых полей в памяти не
    > определен, и реально различается у разных компиляторов (особенно если
    > чуть-чуть выйти из узкого мирка 80x86-х процессоров).

    И тем не менее регулируется #pragma'ми. Тем более, что точное размещение
    обычно важно только для конкретной данной платформы.

    > C>3. Никакого GC и исключений (нет проблем с ABI).

    > Проблемы с ABI создает не сложность ABI, а отсутствие стандарта. У Явы
    > (не к ночи будет помянута) ABI сложнее сишного, а проблем с
    > совместимостью нет...

    У Java нет ABI как такового: .class-файлы — это просто по сути
    распарсеный и почти необратаный Java-код.

    Примером интероперабельности была бы работа скомпилированых в нативный
    код с помощью GCJ классов в Sun'овской JVM.

    > C>5. Арифметика указателей (основное Cшное тождество: a[i]==*(a+i)==i[a]).

    > Я не уверем, что возможность написать 3[ "abcdef" ] является
    > достоинством языка. Такой записью разве что студентов пугать на экзамене

    Это тождество просто показывает указательную ориентированость языка С.

    > C>Тем не менее, даже *сейчас* нечем полностью заменить С. Даже у С++

    > C>уже есть определнные недостатки по сравнению с С.
    > У C++ есть очень много недостатков по сравнению с C.

    Какие?

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[14]: Лекция Вирта в политехническом - впечатления
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 16.10.05 10:24
    Оценка: +1
    Здравствуйте, Cyberax, Вы писали:

    C>Pzz wrote:


    >> C>Или, например, взять GC — системное программирование с ним просто будет

    >> C>невозможно.
    >> Это спорное утверждение. Существует экспериментальный проект —
    >> www-сервер, полностью написанный на ML, включая драйвера сетевых карт,
    >> TCP-стек и собственно www-сервер. В ML нет доступа к ручному
    >> управленую памятью. Т.е., совсем нет

    C>ОС на управляемых языках — полно (экспериментальных и коммерческих).

    C>Реально успешных сейчас — ноль. Пожалуй, Symbolics'ы были верхом успеха.

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

    >> C>Это такая фигня — ошибка того же класса, что и and вместо or.

    >> Нет, не такого же. Пропустить (или вставить лишний) '=' можно просто
    >> промахнувшись по клавише. and вместо or просто так не напишешь.

    C>Я могу случайно вместо & поставить | (я как-то очень долго такую ошибку

    C>искал в коде, который я писал в 3 часа ночи). Кроме того, такие ошибки
    C>очень бросаются в глаза.

    Это постараться надо — & и | в очень разных местах клавиатуры.

    >> C>1. Сишные функции и переменные экспортируются по имени, в

    >> C>экспортированой сигнатуре отсутствует информация о типах (т.е. нет
    >> C>проблем с несовместимым ABI).
    >> Это ошибочное утверждение — разные компиляторы могут придерживаться
    >> разных соглашений о передаче параметров и использовании регистров.
    >> Программа слинкуется, но работать не будет (или, что хуже, будет
    >> работать, но не всегда).

    C>Этих соглашений всего несколько штук (паскалевское, C-шное, WINAPI) — и

    C>их поддерживают все компиляторы. Тем более, что для экспорта обычно
    C>используют "системный" формат.

    Скажите пожалуйста, какой компилятор поддерживает эти три соглашения для big endian ARM'а?

    C>В любом случае, эта проблема нааааааааамного проще несовместимого C++ ABI.


    А в чем конкретно заключается сложность ABI C++, Вы можете перечислить?

    >> C>2. Сишные структуры можно располагать в памяти с точностью до _бита_

    >> C>(битовые поля, однако).
    >> Это тоже не верно — порядок размещения битовых полей в памяти не
    >> определен, и реально различается у разных компиляторов (особенно если
    >> чуть-чуть выйти из узкого мирка 80x86-х процессоров).

    C>И тем не менее регулируется #pragma'ми. Тем более, что точное размещение

    C>обычно важно только для конкретной данной платформы.

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

    >> C>3. Никакого GC и исключений (нет проблем с ABI).

    >> Проблемы с ABI создает не сложность ABI, а отсутствие стандарта. У Явы
    >> (не к ночи будет помянута) ABI сложнее сишного, а проблем с
    >> совместимостью нет...

    C>У Java нет ABI как такового: .class-файлы — это просто по сути

    C>распарсеный и почти необратаный Java-код.

    И тем не менее. У Явы есть спецификация — нет проблем с совместимостью (ну, в основном нет). У C нет спецификации ABI (вернее, нет единой уважаемой всеми) — есть проблемы с совместимостью.

    Чтобы болт подходил к гайке, они должны быть сделаны по единому стандрату. Остальное не важно.

    C>Примером интероперабельности была бы работа скомпилированых в нативный

    C>код с помощью GCJ классов в Sun'овской JVM.

    >> C>5. Арифметика указателей (основное Cшное тождество: a[i]==*(a+i)==i[a]).

    >> Я не уверем, что возможность написать 3[ "abcdef" ] является
    >> достоинством языка. Такой записью разве что студентов пугать на экзамене

    C>Это тождество просто показывает указательную ориентированость языка С.


    Я ничего не понял в этой фразе

    >> C>Тем не менее, даже *сейчас* нечем полностью заменить С. Даже у С++

    >> C>уже есть определнные недостатки по сравнению с С.
    >> У C++ есть очень много недостатков по сравнению с C.

    C>Какие?


    Ох, очень много
    Re[19]: Лекция Вирта в политехническом - впечатления
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 16.10.05 14:30
    Оценка: :)
    Здравствуйте, VladD2, Вы писали:

    VD>Удивил ежа...


    Да тебя удивишь. Ты же иногда часто не понимаешь, о чем речь вообще идет.

    VD>В С-подобных языках это просто выражется через ? :.


    В Ruby так же есть ? :. С таким же смыслом как в C-подобных языках.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Нет...
    От: SilverCloud Россия http://rodonist.wordpress.com
    Дата: 18.10.05 16:04
    Оценка: -1
    Здравствуйте, Пацак, Вы писали:

    П>Ужас ИМХО. И все из-за того, что кому-то пришло в голову сделать оператор присваивания, возвращающий значение.


    Нет, всё из-за того, что кому-то вздумалось сделать оператор присваивания похожим на оператор проверки на равенство
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Re[23]: Лекция Вирта в политехническом - впечатления
    От: AVC Россия  
    Дата: 20.10.05 11:23
    Оценка: +1
    Здравствуйте, Трурль, Вы писали:

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


    Т>Вообще, можно было бы обойтись и без этого.

    Т>
    Т>VAR
    Т>  f: FuncWithoutArgs;
    Т>  x: REAL;
    Т>  ...
    Т>  f := Random; (* использование в качестве процедурной константы *)
    Т>  x := Random; (* вызов функции *)
    Т>


    Предположим, функция без параметров возвращает значение собственного процедурного типа.
    Что-то вроде того, что Сергей Губанов говорил о возможной реализации конечного автомата.
    TYPE ProcType = PROCEDURE(): ProcType;
    PROCEDURE Auto(): ProcType;
    BEGIN
    ...
    END Auto;
    VAR fp: ProcType;
    ...
      fp := Auto; (* и что здесь означает Auto: процедурную константу или вызов функции? *)

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[2]: Лекция Вирта в политехническом - впечатления
    От: BreQwaS Россия  
    Дата: 21.09.05 13:14
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>А, эта, Губанова видел?


    Нет. Но, думаю, мы его тут ещё увидим
    http://livejournal.com/users/breqwas
    Re: Лекция Вирта в политехническом - впечатления
    От: _FRED_ Черногория
    Дата: 21.09.05 16:30
    Оценка:
    Здравствуйте, BreQwaS, Вы писали:

    BQS>Кстати, теперь у меня на последней страничке зачёки примостился скромный и аккуратный "зачёт" от профессора Вирта. Ещё один повод "потерять" её перед выдачей диплома [/q]


    А что же "повод" не опубликовал?

    ЗЫ.
    Спасибо за интересный рассказ
    << RSDN@Home 1.2.0 alpha rev. 616 >> =08:30= [Windows 2003 — 5.2.3790.65536]
    under «*none*»
    Help will always be given at Hogwarts to those who ask for it.
    Re: Лекция Вирта в политехническом - впечатления
    От: henson Россия http://www.njt-rails.com
    Дата: 21.09.05 20:55
    Оценка:
    С точки зрения информативности лекция была никакая. Неправильный перевод довершал картину.
    Очень хотелось узнать о преимуществах языка Оберон перед другими, но увы, все сказанное относилось к истории его создания, а не к текущему состоянию. Про будущее этого языка тоже ничего сказано не было, как и о положительных/отрицательных сторонах. Вирт явно не хотел сталкивать лбами свой красивый Оберон и коммерческие поделки C++, Java и C#
    Re: Лекция Вирта в политехническом - впечатления
    От: Дарней Россия  
    Дата: 22.09.05 04:01
    Оценка:
    Здравствуйте, BreQwaS, Вы писали:

    BQS>1) Хороший язык — это простой язык.


    Сомнительно. Ох, как сомнительно.

    BQS>2) Оберон является таким языком. На обероне можно писать всё что угодно, а ещё лучше — всё сразу. Пресловутая Lilith тому примером.


    ну естественно

    BQS>3) Оберон не является промышленным стандартом потому, что ему не учат в университетах. А в университетах не учат оберон, потому что он не является промышленным стандартом. Порочный круг.




    BQS>4) С/С++ и другие языки, которые сейчас этими стандартами являются, стали таковыми в основном благодаря маркетингу и громадной финансовой мощи тех, кто их продвигал.


    насколько я помню, первые реализации C были практически наколенной поделкой, и только потом он получил поддержку

    BQS>6) Java и C# позаимствовали из Оберона кой-какие идеи, но они были извращены синтаксисом С (так и сказал — corrupted with C syntax) и потому плохи. Но явно лучше, чем С и С++.




    ИМХО, куда-то не в ту сторону Вирт идет
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[2]: Лекция Вирта в политехническом - впечатления
    От: BreQwaS Россия  
    Дата: 22.09.05 04:20
    Оценка:
    Здравствуйте, henson, Вы писали:

    H>Вирт явно не хотел сталкивать лбами свой красивый Оберон и коммерческие поделки C++, Java и C#


    Я честно попытался спровоцировать его на это вопросом "почему при наличии такого хорошего оберона программы пишутся не на нём". Помните, что он ответил?
    WinAmp играет: [theme] — star wars (intro)
    http://livejournal.com/users/breqwas
    Re: Лекция Вирта в политехническом - впечатления
    От: Grammazeka  
    Дата: 22.09.05 07:49
    Оценка:
    Здравствуйте, BreQwaS, Вы писали:

    BQS>Кросспост отсюда.


    BQS>[q]Flying in a blue dream


    BQS>(весь нижеследующий текст будет понятен только программистам и интересующимся)


    Господа, Я просто "страшно" расстроен . Такую лекцию пропустил ... Эх ...
    (если туп как дерево — родишься баобабом ... (с))

    Подскажите, плз., те, кто был на лекции. Задавали ли Вирту вопросы относительно
    функционального программирования?

    Очень интересно мнение такого известного и уважаемого дяденьки!
    Re[2]: Лекция Вирта в политехническом - впечатления
    От: krasin Россия  
    Дата: 22.09.05 08:33
    Оценка:
    G>Подскажите, плз., те, кто был на лекции. Задавали ли Вирту вопросы относительно
    G>функционального программирования?

    На лекции, которая была 19 сентября, Вирт в своем докладе затронул тему функционального программирования. Его мысли по этому поводу:
    1. Реальные программы на ФЯ за редкими исключениями не пишут, т.е. ФЯ скорее чисто академическая вещь.
    2. Одна из основных идей ФЯ, сказал Вирт, состоит в том,что программа не пользуется переменными в обычном понимании, и поэтому функции получаются stateless, что круто для анализа и оптимизации, предоставляет дополнительную гибкость в использовании, т.к. нет побочного эффекта. Но! Поскольку state есть основополагающая вещь для существующих компьютеров, та же ячейка памяти хранит состояние, то специально уходить от этого, "обманывая природу" стоит слишком много усилий. Более того, ряд приложений все-таки требуют сохранения состояния / хранение контекста, поэтому почти во все ФЯ введена возможность пользоваться аналогом обычных переменных, доступ к которым идет через специальные языковые/библиотечные средства. А это не спортивно, заметил Вирт.
    Re[3]: Лекция Вирта в политехническом - впечатления
    От: Глеб Алексеев  
    Дата: 22.09.05 09:05
    Оценка:
    Здравствуйте, BreQwaS, Вы писали:

    G>>Подскажите, плз., те, кто был на лекции. Задавали ли Вирту вопросы относительно

    G>>функционального программирования?
    BQS>Задавали, про пролог. Ответ был примерно такой:
    Пролог — не совсем ФЯ, это язык логического программирования.

    BQS>В прологе вы не указываете, как искать решение, а описываете некие предикаты, которым должно соответствовать решение, а всё остальное за вас сделает некий wizard. Но при этом вы можете давать визарду какие-то подсказки насчёт того, как искать решение — но разве это не то, от чего предполагалось избавиться? Если честно, то пролог — это интересная академическая игра, но она не имеет отношения к реальной жизни.

    Cyberax в соседней ветке очень хорошо на эту тему высказался.
    У меня складывается впечатление, у что у Вирта (при всем моем к нему уважении) нездоровая ревность к "академическим играм, не имеющим отношения к реальной жизни", если эти игрища вышли не из под его пера .

    Академические игры может и сложны для применения здесь и сразу, но если они стоящие, рано или поздно признание получают, например, мэйнстримовый C# уверенно дрейфует в сторону ФП.

    Мощная парадигма важнее чистоты синтаксиса.
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Re[4]: Лекция Вирта в политехническом - впечатления
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 22.09.05 09:15
    Оценка:
    Здравствуйте, Глеб Алексеев, Вы писали:

    BQS>>В прологе вы не указываете, как искать решение, а описываете некие предикаты, которым должно соответствовать решение, а всё остальное за вас сделает некий wizard. Но при этом вы можете давать визарду какие-то подсказки насчёт того, как искать решение — но разве это не то, от чего предполагалось избавиться? Если честно, то пролог — это интересная академическая игра, но она не имеет отношения к реальной жизни.

    ГА>Cyberax в соседней ветке очень хорошо на эту тему высказался.
    ГА>У меня складывается впечатление, у что у Вирта (при всем моем к нему уважении) нездоровая ревность к "академическим играм, не имеющим отношения к реальной жизни", если эти игрища вышли не из под его пера .

    ГА>Академические игры может и сложны для применения здесь и сразу, но если они стоящие, рано или поздно признание получают, например, мэйнстримовый C# уверенно дрейфует в сторону ФП.


    И при нелюбви его к ак. играм, тот же оберон ничем кроме как академической игрой у меня язык не поворачивается назвать...
    Re: Лекция Вирта в политехническом - впечатления
    От: LuciferMoscow Россия  
    Дата: 22.09.05 09:18
    Оценка:
    Здравствуйте, BreQwaS, Вы писали:

    4) С/С++ и другие языки, которые сейчас этими стандартами являются, стали таковыми в основном благодаря маркетингу и громадной финансовой мощи тех, кто их продвигал.

    Это Ваши слова и Вирта? Могу порекомендовать Страуструп "Дизайн и эволюция С++". Совсем это не так.
    Re[3]: Лекция Вирта в политехническом - впечатления
    От: LuciferMoscow Россия  
    Дата: 22.09.05 09:20
    Оценка:
    Здравствуйте, BreQwaS, Вы писали:

    BQS>Здравствуйте, henson, Вы писали:

    H>>Вирт явно не хотел сталкивать лбами свой красивый Оберон и коммерческие поделки C++, Java и C#
    BQS>Я честно попытался спровоцировать его на это вопросом "почему при наличии такого хорошего оберона программы пишутся не на нём". Помните, что он ответил?
    Не все там были. Можно не говоииь загадками?
    Re[5]: Лекция Вирта в политехническом - впечатления
    От: Глеб Алексеев  
    Дата: 22.09.05 09:20
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    ГА>>У меня складывается впечатление, у что у Вирта (при всем моем к нему уважении) нездоровая ревность к "академическим играм, не имеющим отношения к реальной жизни", если эти игрища вышли не из под его пера .


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

    Ну примерно это я и пытался сказать (см. выделенное).
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Re[4]: Лекция Вирта в политехническом - впечатления
    От: _FRED_ Черногория
    Дата: 22.09.05 09:37
    Оценка:
    Здравствуйте, LuciferMoscow, Вы писали:

    H>>>Вирт явно не хотел сталкивать лбами свой красивый Оберон и коммерческие поделки C++, Java и C#

    BQS>>Я честно попытался спровоцировать его на это вопросом "почему при наличии такого хорошего оберона программы пишутся не на нём". Помните, что он ответил?
    LM>Не все там были. Можно не говоииь загадками?

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

    ?
    << RSDN@Home 1.2.0 alpha rev. 616 >> =01:37= [Windows 2003 — 5.2.3790.65536]
    under «*none*»
    Help will always be given at Hogwarts to those who ask for it.
    Re[5]: Лекция Вирта в политехническом - впечатления
    От: _FRED_ Черногория
    Дата: 22.09.05 09:41
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>Вернемся к языкам программирования. При знакомстве с Perl и Ruby меня, например, неприятно поразила возможность писать if и while после действий. Т.е. вместо "нормального":

    E>if( something )
    E>    do_that()

    E>можно написать:
    E>do_that() if( something )

    E>… И ведь такая возможность в Perl и Ruby появилась не просто так -- она была добавлена туда по реальной необходимости.

    А что за необходимость? чем практически постфиксная запись отличается от префиксной
    << RSDN@Home 1.2.0 alpha rev. 616 >> =01:40= [Windows 2003 — 5.2.3790.65536]
    under «*none*»
    Help will always be given at Hogwarts to those who ask for it.
    Re[2]: Лекция Вирта в политехническом - впечатления
    От: BreQwaS Россия  
    Дата: 22.09.05 09:54
    Оценка:
    Здравствуйте, LuciferMoscow, Вы писали:

    LM>Это Ваши слова и Вирта? Могу порекомендовать Страуструп "Дизайн и эволюция С++". Совсем это не так.


    Вирта, хотя и немного изменённые. Смысл сохранён.
    http://livejournal.com/users/breqwas
    Re[4]: Лекция Вирта в политехническом - впечатления
    От: BreQwaS Россия  
    Дата: 22.09.05 10:02
    Оценка:
    Здравствуйте, LuciferMoscow, Вы писали:

    LM>Не все там были. Можно не говоииь загадками?


    Если вкратце, то

    3) Оберон не является промышленным стандартом потому, что ему не учат в университетах. А в университетах не учат оберон, потому что он не является промышленным стандартом. Порочный круг.
    4) С/С++ и другие языки, которые сейчас этими стандартами являются, стали таковыми в основном благодаря маркетингу и громадной финансовой мощи тех, кто их продвигал.

    http://livejournal.com/users/breqwas
    Re[5]: Лекция Вирта в политехническом - впечатления
    От: LuciferMoscow Россия  
    Дата: 22.09.05 10:09
    Оценка:
    Здравствуйте, _FRED_, Вы писали:

    _FR>Здравствуйте, LuciferMoscow, Вы писали:


    H>>>>Вирт явно не хотел сталкивать лбами свой красивый Оберон и коммерческие поделки C++, Java и C#

    BQS>>>Я честно попытался спровоцировать его на это вопросом "почему при наличии такого хорошего оберона программы пишутся не на нём". Помните, что он ответил?
    LM>>Не все там были. Можно не говоииь загадками?

    _FR>

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

    _FR>?
    Согласен, мнение Вирта на эту тему озвучено.
    Re[7]: Лекция Вирта в политехническом - впечатления
    От: _FRED_ Черногория
    Дата: 22.09.05 10:49
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>>>… И ведь такая возможность в Perl и Ruby появилась не просто так -- она была добавлена туда по реальной необходимости.

    _FR>>А что за необходимость? чем практически постфиксная запись отличается от префиксной
    E>Мировосприятием и настроением программиста в данный, конкретный момент времени Строго говоря, разница только на эстетическом уровне.

    Да, бывают такие "моменты времени" Но, ИМХО, во-первых, сегодня-момент, а завтра — нет и что? Использовать конструкции и стиль в зависимости от настроения во-вторых, я вижу порочность употребления "необщепринятых" конструкций в том, что они усложняют понимание для "непосвящённых", а в той или иной области "непосвящённым" был каждый. Ведь здесь не просто синтаксис (префикс-постфикс), но и образ мышления (прочтения), разбора алгоритма затрагивается, а научиться "вдруг" думать по-другому (отложив, например, С++ и переключившись на Ruby) способны очень не многие.

    E>Уж не знаю, насколько эти примеры будут показательными. Все же свободное чтение постфиксных if/unless/while требует некоторого погружения в язык. Без этого традиционные, префиксные выражения кажутся понятнее. Но, когда привыкаешь к языку разумное использование постфиксных выражений, имхо, повышает читабельность.


    Именно, требуется привычка => повышается сложность поддержки, так как найти при необходимости не просто программиста, но и с "привычками" должно быть сложно…
    << RSDN@Home 1.2.0 alpha rev. 616 >> =02:49= [Windows 2003 — 5.2.3790.65536]
    under «*none*»
    Help will always be given at Hogwarts to those who ask for it.
    Re[8]: Лекция Вирта в политехническом - впечатления
    От: sch  
    Дата: 22.09.05 12:42
    Оценка:
    >> sch>Си -- это простой язык для выполнения сложных, очень сложных
    >> вещей. Именно поэтому у Си в системном программировании нет
    >> конкурентов и быть не может, как и не может быть конкурентов у
    >> ассемблера, например.
    >> Си — простой язык???


    Вероятно было бы интересно сравнить количество понятий, которые должен знать человек, чтобы программировать на C в сравнении, скажем, с C#
    Posted via RSDN NNTP Server 1.9
    Re[8]: Лекция Вирта в политехническом - впечатления
    От: Трурль  
    Дата: 22.09.05 14:10
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>не "два уважаемых профессора", а "два прожженых практика"


    Про одного из этих "прожженых практиков" Вирт сказал, что он был "влюблен в Оберон".
    Re[8]: Лекция Вирта в политехническом - впечатления
    От: Пацак Россия  
    Дата: 22.09.05 14:41
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>Если cond — не просто какие-нибудь флаги, то чтение такого кода превращается в хорошую головоломку.


    Если просто флаги — в общем-то тоже не больно хорошо может выйти.

    paths = []
    config.each_element( CONFIG_PATH_TAG ) do |e|
        #
        # 50 строк кода
        #
    end unless foo 
    # Мать-перемать, foo в нашем случае всегда true
    # и мы зря разбирались, что делают те 50 строк :(
    Ку...
    Re[9]: Лекция Вирта в политехническом - впечатления
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 22.09.05 14:57
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    P>>Если cond — не просто какие-нибудь флаги, то чтение такого кода превращается в хорошую головоломку.


    П>Если просто флаги — в общем-то тоже не больно хорошо может выйти.


    П>
    П>paths = []
    П>config.each_element( CONFIG_PATH_TAG ) do |e|
    П>    #
    П>    # 50 строк кода
    П>    #
    П>end unless foo 
    П># Мать-перемать, foo в нашем случае всегда true
    П># и мы зря разбирались, что делают те 50 строк :(
    П>


    Это неразумное использование.
    50 строк кода -- это отдельная функция, даже две. Поэтому у меня бы было:

    def another_method(...)
        #
        # 50 строк кода.
        #
    end
    ...
    paths = []
    config.each_element( CONFIG_PATH_TAG ) do |e|
        another_method(...)
    end unless flag
    # И нафиг нам нужны 50 строк кода в another_method? ;)
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[10]: Лекция Вирта в политехническом - впечатления
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 22.09.05 15:01
    Оценка:
    Здравствуйте, Gaperton, Вы писали:

    G>Не-а, совсем не сложно, как врач говорю . Чтобы не приводить в пример только себя — для программиста-телекомщика компании Эрикссон владеть и C++ и Erlang является нормой, так как большинство промышленных решений на Erlang содержат вставки на С++. Помнишь, мы с тобой говорили про стратегию разработки с парой языков, "низкого" и "высокого" уровня? Вот это тот самый случай.


    Ну-у, вам, врачам, виднее А я вот с SQL-ем до сих пор на "Вы". Редко пользуюсь, наверное.

    А разговор помню. Правильный он был.

    E>>Во-вторых, такие переключения полезны. Шоры с глаз снимают. Причем качественно. Это как путешествие в далекую страну -- не только свежее впечатление, но и осознание некоторых вещей, о которых раньше и не думал (но здесь все сильно индивидуально).


    G>Угу, +1. Наконец-то до народа это начало доходить. Год назад за такую фразу тут бы порвали не задумываясь.


    Год назад я бы сам рвать бы и начал.
    Проблема в том, как же время находить, чтобы с интересными технологиями знакомиться. Да еще наиболее понравившиеся в работе применять. Вот это задачка.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[4]: Лекция Вирта в политехническом - впечатления
    От: AndreyFedotov Россия  
    Дата: 22.09.05 15:02
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>Здравствуйте, krasin, Вы писали:


    K>>1. Реальные программы на ФЯ за редкими исключениями не пишут, т.е. ФЯ скорее чисто академическая вещь.


    Д>http://www.googlefight.com/index.php?lang=en_GB&amp;word1=oberon&amp;word2=haskell


    Д>Похоже, Вирт окончательно утратил связь с реальностью


    Так пошли ему ссылочку...

    Заодно можно и эту:

    Oberon vs .NET
    Re[10]: Лекция Вирта в политехническом - впечатления
    От: Пацак Россия  
    Дата: 22.09.05 15:24
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>Это неразумное использование.

    E>50 строк кода -- это отдельная функция, даже две.

    Не так важно, главное — суть: приходится либо зря читать весь блок, либо "прыгать" глазами на его конец для проверки, есть ли там условие.
    Ку...
    Re[8]: Лекция Вирта в политехническом - впечатления
    От: GlebZ Россия  
    Дата: 22.09.05 15:24
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    >> Си стал поппулярен потмоу, что юниксы в университетах американских

    >> ставили. По той же причине у нас Фортран был популярен.
    C>А почему ставили юниксы? На фортране у нас системный софт, кстати, не
    C>писали.
    Фортран был не только у нас популярен, и не потому что он работает на unix'aх(гы-гы-гы). Список задач решаемых на компьютере в большинстве своем был математические. А тут фортрану и его библиотекам, конкурентов было мало.

    >> sch>Си -- это простой язык для выполнения сложных, очень сложных

    >> вещей. Именно поэтому у Си в системном программировании нет
    >> конкурентов и быть не может, как и не может быть конкурентов у
    >> ассемблера, например.
    >> Си — простой язык???

    C>Да, простой. Почти такой же простой, как и ассемблер.

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

    >> Почему конкурентов у Си быть не может?

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

    С уважением, Gleb.
    Re[9]: Лекция Вирта в политехническом - впечатления
    От: Cyberax Марс  
    Дата: 22.09.05 15:28
    Оценка:
    GlebZ wrote:

    > C>А почему ставили юниксы? На фортране у нас системный софт, кстати, не

    > C>писали.
    > Фортран был не только у нас популярен, и не потому что он работает на
    > unix'aх(гы-гы-гы). Список задач решаемых на компьютере в большинстве
    > своем был математические. А тут фортрану и его библиотекам,
    > конкурентов было мало.

    Так ему и сейчас конкурентов мало для быстрой математики (разве что C++
    ), так как некоторые ограничения в Фортране позволяют делать очень
    эффективный математический код.

    > C>Да, простой. Почти такой же простой, как и ассемблер.

    > Когда-то были споры, что такое С. Язык высокого уровня или продвинутый
    > макроассемблер. Я думаю, во многом совмещение этих вещей и сыграло
    > свою роль. На том железе, быстрота и компактность кода имели очень
    > важное значение.

    Оно и сейчас важно — поэтому большинство ОС и написано на С/C++.

    > C>Потому, что он максимально приближен к реальной аппаратуре. То есть в С

    > C>нет искусственных понятий типа строчек или массивов — все выражается
    > C>через базовые понятия.
    > В паскале, между прочим, понятие строчек тоже нет.

    Есть, в даже в ISOшном Pascal'е.

    > А вот насчет массивов, это вы загнули.


    В С их как таковых нет — есть только синтаксический сахар над указателями.

    > А вообще, почему-то забывают что в C очень ценилось возможность

    > ассемблерных вставок, в том числе и в терминах языка.

    На самом деле вот ассемблерные вставки не так уж и важны.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[10]: Лекция Вирта в политехническом - впечатления
    От: GlebZ Россия  
    Дата: 22.09.05 15:44
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    >> C>Потому, что он максимально приближен к реальной аппаратуре. То есть в С

    >> C>нет искусственных понятий типа строчек или массивов — все выражается
    >> C>через базовые понятия.
    >> В паскале, между прочим, понятие строчек тоже нет.

    C>Есть, в даже в ISOшном Pascal'е.

    На тот момент, когда паскаль как язык разворачивался, небыло.

    >> А вот насчет массивов, это вы загнули.


    C>В С их как таковых нет — есть только синтаксический сахар над указателями.

    Ну тогда мы будем считать что С/С++ и Paskal — синтаксический сахар над ассемблером. Не очень понимаю, но в С++ массивы переименовали в вектора. Но массив как был массивом, так и остался массивом.

    >> А вообще, почему-то забывают что в C очень ценилось возможность

    >> ассемблерных вставок, в том числе и в терминах языка.
    C>На самом деле вот ассемблерные вставки не так уж и важны.
    Сейчас неважно, компиляторы работают качественнее чем человек. Во времена С были важны, отставание C кода от чистого ассемблерного считалось в районе 30%, что было очень хорошо, но недостаточно для некоторых случаев. К тому-же, как не плюйся, с портами работать — удобнее всего ассемблер.

    С уважением, Gleb.
    Re[11]: Лекция Вирта в политехническом - впечатления
    От: Cyberax Марс  
    Дата: 22.09.05 16:22
    Оценка:
    GlebZ wrote:

    > C>Есть, в даже в ISOшном Pascal'е.

    > На тот момент, когда паскаль как язык разворачивался, небыло.

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

    >>> А вот насчет массивов, это вы загнули.

    > C>В С их как таковых нет — есть только синтаксический сахар над
    > указателями.
    > Ну тогда мы будем считать что С/С++ и Paskal — синтаксический сахар
    > над ассемблером. Не очень понимаю, но в С++ массивы переименовали в
    > вектора.

    Нет, никто массивы в С++ не переименовывал. Вектор (std::vector) в С++ —
    это специальный класс, предоставляющий интерфейс, похожий на массив.

    > Но массив как был массивом, так и остался массивом.


    В С есть основное тождество: i[j]==j[i] , так как
    i[j]=*(i+j)
    . То есть обращение к элементу массива представляется в
    виде адресной арифметики. Строка в С тоже является массивом.

    >>> А вообще, почему-то забывают что в C очень ценилось возможность

    >>> ассемблерных вставок, в том числе и в терминах языка.
    > C>На самом деле вот ассемблерные вставки не так уж и важны.
    > Сейчас неважно, компиляторы работают качественнее чем человек. Во
    > времена С были важны, отставание C кода от чистого ассемблерного
    > считалось в районе 30%, что было очень хорошо, но недостаточно для
    > некоторых случаев. К тому-же, как не плюйся, с портами работать —
    > удобнее всего ассемблер.

    Обычно большие ассемблерные части предпочитали писать в виде отдельных
    файлов, а потом их просто подлинковывать.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[9]: Лекция Вирта в политехническом - впечатления
    От: Donz Россия http://donz-ru.livejournal.com
    Дата: 22.09.05 16:25
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>Имхо, программирование похоже на журналистику. И тем и другим приходится писать текст на заданную тему. И если одно и тоже событие описывают несколько журналистов, то результат может получиться совершенно разным. Один может изложить все очень сухо, и это будет не интересно. Второй -- нальет воды так, что забудешь о чем читал. А третий и факты передаст, и читать приятно будет.


    E>Так же и в программировании. Дай в распоряжение только while. И разбирайся затем с эмуляцией for или do...while. Или дай все for/while/do...while (в префиксной и постфиксной нотации) в неумелые руки и опять придется с неудобоваримым кодом мучаться. Зато, если и язык выразительный, и писатель опытный, то и программы получаются удачными. И их сопровождение проблем не вызывает.


    Золотая середина, не спорю.

    E>А Java не так прост, как может показаться. Например, когда я на нем писал, то столкнулся с несколькими неприятными моментами. Вот несколько из них:

    Я программирую как раз на Java в основном, и понять этот язык гораздо проще, чем С++. В своё время Java-бум был как раз из-за того, что стоимость разработки на них меньше, чем на С++. С его заморочками допустить ошибку гораздо проще.

    E>Ну и кроме того, в Java нет модификатора const, поэтому нельзя методам запретить изменять свои аргументы. Иногда это приводит к неприятным открытиям;

    Там final есть, если что

    E>-- в Java не просто вернуть несколько значений из метода. Вот в C++ я писал:

    Ходят мысли, что возвращать несколько значений из метода — это приближение к ФП. Я их не совсем разделяю, согласен, сделать как в C# ключевое слово ref было бы неплохо, хотя тут можно подумать.

    E>-- memory-leak, как ни странно, возможны. Достаточно где-то ссылку на объект не занулить и все

    Эти утечки довольно просто отловить, чего не скажешь о С++

    E>Так что, хоть Java и проще, чем C++, программировать не ней отнюдь не развлечение, имхо.

    Ну я ж не говорил, что С++ — зло, а ява с её более понятным синтаксисом — рай на земле

    E>А я его вклад ни в коей мере не оспариваю. Просто я не понимаю его убежденности вот в этом аргументе:

    E>

    E>4) С/С++ и другие языки, которые сейчас этими стандартами являются, стали таковыми в основном благодаря маркетингу и громадной финансовой мощи тех, кто их продвигал.

    Здесь я с тобой согласен, собственно, я спорил по другой теме.

    D>>Пробовал кое-где использовать ?: вместо if, не воткнуло совершенно.

    E>Правда? Сразу вспоминается про нелюбовь к кошкам из-за неумения их готовить
    [skip]
    E>Неужели всторой вариант проще?
    Проще, когда читаешь код, может я просто не привык к такому обозначению, но по мне лучше использовать слова, чем значки, тем более, что эти значки не очень связаны по смыслу с их словесными аналогами.

    E>Я сейчас так же не про конкретно Оберон. А аналогию с естественными языками считаю вполне уместной.


    И каждый остался при своём мнении Всё-таки программирование — область техническая, насаждать сложности ни к чему, разнообразие непонятных значков и символов заказчик не оценит, да и не каждый коллега будет в восторге.
    Re[12]: Лекция Вирта в политехническом - впечатления
    От: Пацак Россия  
    Дата: 22.09.05 16:41
    Оценка:
    Здравствуйте, eao197, Вы писали:

    П>>Не так важно, главное — суть: приходится либо зря читать весь блок, либо "прыгать" глазами на его конец для проверки, есть ли там условие.

    E>Нет, как раз в этом и суть. Постфиксные if/unless имеет писать только если есть возможность легко взглядом поймать всю конструкцию.
    E>Кроме того, если из if-а 50 строк кода можно вынести в отдельную функцию -- это в любом случае нужно сделать.

    Дык это-то понятно, но это ж в идеале. Но вот только сегодня она 5 строк и постфикс-if легко виден, а завтра ее дали ламеру-временщику Васе, он ее раздул до 50 и уволился. И пока рефакторинг не проведешь — читающие код будут в этом месте спотыкаться. А на рефакторинг вечно чего-то нехватает — то времени, то людей, то денег. Зачем же давать лишнюю возможность для усложнения чтения кода, если их и без этого предостаточно? Синтаксис ИМХО должен быть простым и прямолинейным как стрела (гусары, молчать об обероне!), максимально ориентированным на чтение "сверху-вниз, слева-направо", тогда и мест для подобных "спотыканий" будет меньше.
    Хотя может, конечно я и неправ, но мне лично однострочное питоновское

    if a == foo : b = boo


    роднее, чем перловое

    $b = $boo if ($a == $foo);


    Хотя бы просто потому, что если завтра моему напарнику захочется добавить еще одно действие, то на питоне он пару раз нажмет enter и напишет:

    if a == foo : 
        b = boo
        c = coo


    тогда как на перле ему придется перевернуть код "вверх ногами":

    if ($a == $foo) {
        $b = $boo; 
        $c = $coo;
    }


    С другой стороны питон (как дань дексларативному программированию) позволяет, например, такие выкрутасы:

    a = [i**2 for i in range(1,100) if i/2*2==i] # Записать в a квадраты четных чисел 1..100-1


    и я, честно говоря, тоже не знаю, как к ним относиться. Удобно, конечно, но....
    Ку...
    Re[12]: Лекция Вирта в политехническом - впечатления
    От: GlebZ Россия  
    Дата: 22.09.05 17:16
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>GlebZ wrote:


    >> C>Есть, в даже в ISOшном Pascal'е.

    >> На тот момент, когда паскаль как язык разворачивался, небыло.

    C>Было. Причем с самого начала, так как попытки представить строку в виде

    C>массива символов не удались из-за слабых возможностей Паскаля.
    Вот тебе стандарт. Вот тебе определение стринга в стандартном паскале:
    type string=packet array[1..strleb] of char

    А вот тебе сравнение С vs Pascal(раньше было популярно их сравнивать )здесь
    Доказал?

    >>>> А вот насчет массивов, это вы загнули.

    >> C>В С их как таковых нет — есть только синтаксический сахар над
    >> указателями.
    >> Ну тогда мы будем считать что С/С++ и Paskal — синтаксический сахар
    >> над ассемблером. Не очень понимаю, но в С++ массивы переименовали в
    >> вектора.

    C>Нет, никто массивы в С++ не переименовывал. Вектор (std::vector) в С++ —

    C>это специальный класс, предоставляющий интерфейс, похожий на массив.

    >> Но массив как был массивом, так и остался массивом.

    Это я соврал. У меня был первый страуструп по которому я умудрился выучить язык(еще без шаблонов). Там было все перевернуто с ног на голову. Возможно перевод был хреновый. Но как-то ассоциации по поводу терминов остались.

    C>Обычно большие ассемблерные части предпочитали писать в виде отдельных

    C>файлов, а потом их просто подлинковывать.
    Это был лучший вариант, но кто как. Всякое было.

    С уважением, Gleb.
    Re[13]: Лекция Вирта в политехническом - впечатления
    От: Vintik_69 Швейцария  
    Дата: 22.09.05 18:04
    Оценка:
    Здравствуйте, GlebZ, Вы писали:
    GZ>Вот тебе стандарт.
    Так там написано, что string — отдельный тип. И операторы сравнения и конкатенации можно к нему применять, а к массивам нельзя.
    Re[14]: Лекция Вирта в политехническом - впечатления
    От: GlebZ Россия  
    Дата: 22.09.05 18:22
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>

    C>A character-string containing a single string-element shall denote a
    C>value of the required char-type
    C>(see 6.4.2.2). A character-string containing more than one
    C>string-element shall denote a value of
    C>a string-type (see 6.4.3.2) with the same number of components as the
    C>character-string contains
    C>string-elements.
    All character-strings with a given number of components
    C>shall possess the same
    C>string-type.
    C>There shall be an implementation-defined one-to-one correspondence
    C>between the set of alternatives
    C>from which string-elements are drawn and a subset of the values of the
    C>required char-type. The
    C>occurrence of a string-element in a character-string shall denote the
    C>occurrence of the corresponding
    C>value of char-type.

    Читаем более внимательно. Это не описание type string. Это описание "asdfadsf", текстовой строки с апострофами. Разница ясна?
    Это не разница между char* и string, это разница между "" и ''.

    С уважением, Gleb
    Re[15]: Лекция Вирта в политехническом - впечатления
    От: Vintik_69 Швейцария  
    Дата: 22.09.05 18:34
    Оценка:
    Здравствуйте, GlebZ, Вы писали:

    GZ>Это не разница между char* и string, это разница между "" и ''.


    Ну так разница между char* и string в том, к двум char* нельзя применить оператор +, а к string можно. И с операторами сравнения почти то же самое.
    Re[16]: Лекция Вирта в политехническом - впечатления
    От: GlebZ Россия  
    Дата: 22.09.05 18:38
    Оценка:
    Здравствуйте, Vintik_69, Вы писали:

    V_>Ну так разница между char* и string в том, к двум char* нельзя применить оператор +, а к string можно. И с операторами сравнения почти то же самое.

    Где ты увидел что можно суммировать? Номер параграфа.

    С уважением, Gleb.
    Re[17]: Лекция Вирта в политехническом - впечатления
    От: Vintik_69 Швейцария  
    Дата: 22.09.05 18:41
    Оценка:
    Здравствуйте, GlebZ, Вы писали:

    V_>>Ну так разница между char* и string в том, к двум char* нельзя применить оператор +, а к string можно. И с операторами сравнения почти то же самое.

    GZ>Где ты увидел что можно суммировать? Номер параграфа.

    Да, погорячился. Но сравнение-то остается.
    Re[18]: Лекция Вирта в политехническом - впечатления
    От: GlebZ Россия  
    Дата: 22.09.05 18:46
    Оценка:
    Здравствуйте, Vintik_69, Вы писали:

    V_>Да, погорячился. Но сравнение-то остается.

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

    С уважением, Gleb.
    Re[19]: Лекция Вирта в политехническом - впечатления
    От: Vintik_69 Швейцария  
    Дата: 22.09.05 18:54
    Оценка:
    Здравствуйте, GlebZ, Вы писали:

    GZ>Здравствуйте, Vintik_69, Вы писали:


    V_>>Да, погорячился. Но сравнение-то остается.

    GZ>Да хрен с ним, со сравнением. Там есть и другие отличия от обычных массивов(типа присваивания и сохранения в текстовой файл). Если текстовой файл в стандарте есть, то уже нужно что-то описать. Нет самого главного. Длины строки перед символами. Это массив с char.

    Ну как это хрен с ним? Я полагал, что в определение типа входят
    1) возможные значения
    2) операции которые можно совершать над переменной данного типа

    Разве не так?
    Re[20]: Лекция Вирта в политехническом - впечатления
    От: GlebZ Россия  
    Дата: 22.09.05 19:05
    Оценка:
    Здравствуйте, Vintik_69, Вы писали:

    V_>Разве не так?

    В данном случае обсуждалось

    >> C>Потому, что он максимально приближен к реальной аппаратуре. То есть в С
    >> C>нет искусственных понятий типа строчек или массивов — все выражается
    >> C>через базовые понятия.
    >> В паскале, между прочим, понятие строчек тоже нет.
    C>Есть, в даже в ISOшном Pascal'е.

    В случае определения что это тип, то и char[] также нужно называть не массивом, а другим типом. Поскольку к нему можно применить присвоение константной строки. В паскале меньше требований для строк нежели в С. В паскале есть длина строки, это размер массива(а он известен компилятору). В случае с С должен быть завершающий символ. Иначе никто тебе не скажет сколько там символов.
    Так что строки — это особые случаи массивов(указателей).

    С уважением, Gleb.
    Re[9]: Лекция Вирта в политехническом - впечатления
    От: Дарней Россия  
    Дата: 23.09.05 04:16
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    Т>Про одного из этих "прожженых практиков" Вирт сказал, что он был "влюблен в Оберон".


    Про кого именно? И что он этим хотел сказать? Когда появился С, оберона еще и в проекте не было.
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[5]: Лекция Вирта в политехническом - впечатления
    От: Дарней Россия  
    Дата: 23.09.05 04:16
    Оценка:
    Здравствуйте, AndreyFedotov, Вы писали:

    AF>Так пошли ему ссылочку...


    Куда послать?
    Да и не уверен, что он к моим словам прислушается. Своё мнение всегда дороже

    AF>Oberon vs .NET


    Подозреваю, что он опять ответит в духе "теории заговора".
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[7]: Лекция Вирта в политехническом - впечатления
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 23.09.05 10:04
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>И меня бы вполне устроило, если бы качественный софт писало всего несколько гениев, а не половина полунеграмотной Индии.


    А не боишься коллапса индустрии?
    ... << RSDN@Home 1.2.0 alpha rev. 617>>
    AVK Blog
    Re[11]: Лекция Вирта в политехническом - впечатления
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 23.09.05 10:11
    Оценка:
    Здравствуйте, AndreyFedotov, Вы писали:

    AF>А вот ты про C# такое скажи, так кое кто и сейчас порвёт.


    Политес офф
    Слушай, как же меня задолбали эти твои подколки, ей богу, как заевший граммофон. Очень хочется уколоть — велкам ту емейл. Не надо устраивать из форума базара.
    Политес он

    Просьба общаться по теме форума. Отвечать на это сообщение на moderator@rsdn.ru.
    ... << RSDN@Home 1.2.0 alpha rev. 617>>
    AVK Blog
    Re[8]: Лекция Вирта в политехническом - впечатления
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 23.09.05 10:13
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    E>>И меня бы вполне устроило, если бы качественный софт писало всего несколько гениев, а не половина полунеграмотной Индии.


    AVK>А не боишься коллапса индустрии?


    Нет. Все равно индусы уже своего не отдадут.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[12]: Лекция Вирта в политехническом - впечатления
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 23.09.05 10:16
    Оценка:
    Здравствуйте, Gaperton, Вы писали:

    G>Нечего меня кое-кем пугать, мне он давно не страшен. Я уже с год как практически не читаю его посты и ни при каких обстоятельствах на них не отвечаю, так пусть рвет на здоровье. Как там было у Аристотеля? "Заочно он меня пусть хоть парвет!", о как!


    Завязали с оффтопиком
    ... << RSDN@Home 1.2.0 alpha rev. 617>>
    AVK Blog
    Re[9]: Лекция Вирта в политехническом - впечатления
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 23.09.05 10:27
    Оценка:
    Здравствуйте, eao197, Вы писали:

    AVK>>А не боишься коллапса индустрии?


    E>Нет. Все равно индусы уже своего не отдадут.


    Зря ты так думаешь. Ломать не строить. Развалить софтопром Индии на самом деле не так уж и сложно. Вон завяжется очередная заварушка с Пакистаном и привет. Вот только тебе и мне от этого будет только хуже. Поскольку все равно их работу ни ты ни я делать не будет, а нашу работу они в ближайшей перспективе делать не смогут. Зато они раскручивают маховик софтопрома во всем мире, от чего какая то копейка упадет и в твой карман.
    ... << RSDN@Home 1.2.0 alpha rev. 617>>
    AVK Blog
    Re[8]: Лекция Вирта в политехническом - впечатления
    От: Pavel Dvorkin Россия  
    Дата: 23.09.05 10:54
    Оценка:
    Здравствуйте, Cyberax, Вы писали:


    C>А почему ставили юниксы? На фортране у нас системный софт, кстати, не

    C>писали.

    Писали. Primus (система терминального доступа ЕС ЭВМ) на Фортране была написана.
    With best regards
    Pavel Dvorkin
    Re[10]: Лекция Вирта в политехническом - впечатления
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 23.09.05 10:55
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>>>А не боишься коллапса индустрии?


    E>>Нет. Все равно индусы уже своего не отдадут.


    AVK>Зря ты так думаешь. Ломать не строить. Развалить софтопром Индии на самом деле не так уж и сложно. Вон завяжется очередная заварушка с Пакистаном и привет. Вот только тебе и мне от этого будет только хуже.


    Я как раз сомневаюсь, что в современном мире организация такой мощной заварушки является простым делом.
    Хотя, восток -- дело тонкое, да и индусов скоро будет больше чем китайцев. Бог его знает, чего там может быть.

    AVK> Поскольку все равно их работу ни ты ни я делать не будет, а нашу работу они в ближайшей перспективе делать не смогут. Зато они раскручивают маховик софтопрома во всем мире, от чего какая то копейка упадет и в твой карман.


    Мне почему-то аналогия с печниками в голову приходит. Когда-то их было много, хотя мастера своего дела все равно выделялись и ценились. Затем рост городов, централизованное отопление и газовые котлы сильно сократили потребность в печниках. Сократили, но не ликвидировали. И сейчас, насколько мне известно, печники без дела не сидят. А поскольку этим делом сейчас занимается не абы кто, а либо фанаты своего дела, либо продолжатели династий, то и работают они хорошо, и работа их ценится.

    Вот и я всегда стремился стать мастером в своем деле. Чтобы даже если произойдет что-то невероятное, и программистов вытеснят как класс, то все равно уже существующий в софтверной индустрии задел позволил бы мне зарабатывать на хлеб.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[11]: Лекция Вирта в политехническом - впечатления
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 23.09.05 11:14
    Оценка:
    Здравствуйте, eao197, Вы писали:

    AVK>>Зря ты так думаешь. Ломать не строить. Развалить софтопром Индии на самом деле не так уж и сложно. Вон завяжется очередная заварушка с Пакистаном и привет. Вот только тебе и мне от этого будет только хуже.


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


    Чего сомневаться если было уже? Просто сейчас это, слава богу, влиятельным мира сего не выгодно.

    AVK>> Поскольку все равно их работу ни ты ни я делать не будет, а нашу работу они в ближайшей перспективе делать не смогут. Зато они раскручивают маховик софтопрома во всем мире, от чего какая то копейка упадет и в твой карман.


    E>Мне почему-то аналогия с печниками в голову приходит. Когда-то их было много, хотя мастера своего дела все равно выделялись и ценились.


    Плохая аналогия. Софт несколько более разнообразен, нежели печные трубы.

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


    Скорее всего нет. Поскольку процесс этот будет нарастать лавинообразно. Удорожание софта приведет к уменьшению спроса на компы, что, в свою очеред приведет к удорожанию и компов и софта, что вызовет новый виток. В конце концов индустрия может просто схлопнуться.
    ... << RSDN@Home 1.2.0 alpha rev. 617>>
    AVK Blog
    Re[9]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 23.09.05 11:25
    Оценка:
    Здравствуйте, sch, Вы писали:

    sch>Вероятно было бы интересно сравнить количество понятий, которые должен знать человек, чтобы программировать на C в сравнении, скажем, с C#


    Сложность С не в количестве конструкций, а в количестве граблей и непонятности абстракций. Возми, к примеру, указатели. Для программирования на С нужно не просто знать, что такое указатель, а мыслить ими.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[3]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 23.09.05 11:25
    Оценка:
    Здравствуйте, krasin, Вы писали:

    K>На лекции, которая была 19 сентября, Вирт в своем докладе затронул тему функционального программирования. Его мысли по этому поводу:

    K>1. Реальные программы на ФЯ за редкими исключениями не пишут, т.е. ФЯ скорее чисто академическая вещь.

    Серьезный недостаток языка. Я бы сказал концептуальный. То ли дело Оберон!? Это вам не академические изыски. Вон Губанова как приплющило.

    K>2. Одна из основных идей ФЯ, сказал Вирт, состоит в том,что программа не пользуется переменными в обычном понимании, и поэтому функции получаются stateless, что круто для анализа и оптимизации, предоставляет дополнительную гибкость в использовании, т.к. нет побочного эффекта. Но! Поскольку state есть основополагающая вещь для существующих компьютеров, та же ячейка памяти хранит состояние, то специально уходить от этого, "обманывая природу" стоит слишком много усилий. Более того, ряд приложений все-таки требуют сохранения состояния / хранение контекста, поэтому почти во все ФЯ введена возможность пользоваться аналогом обычных переменных, доступ к которым идет через специальные языковые/библиотечные средства. А это не спортивно, заметил Вирт.


    Да. Примерно тот же бред Вирт пел когда в Обероне вооще небыло поддержки ООП. Потом худо бедно прикрутил и песня закончилась. К чему это я? А к тому, что нужно быть последовательным.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[12]: Лекция Вирта в политехническом - впечатления
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 23.09.05 11:39
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK> Просто сейчас это, слава богу, влиятельным мира сего не выгодно.


    Так я про это и говорю. Если расширить тему, то мне кажется, что глобализация -- это надежнейший сейчас путь к миру во всем мире. Серьезно.

    E>>Мне почему-то аналогия с печниками в голову приходит. Когда-то их было много, хотя мастера своего дела все равно выделялись и ценились.


    AVK>Плохая аналогия. Софт несколько более разнообразен, нежели печные трубы.


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

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


    AVK>Скорее всего нет. Поскольку процесс этот будет нарастать лавинообразно. Удорожание софта приведет к уменьшению спроса на компы, что, в свою очеред приведет к удорожанию и компов и софта, что вызовет новый виток. В конце концов индустрия может просто схлопнуться.


    Думаю, что по отношению к массовым компьютерам (PC-шкам, игровым приставкам и пр.) и массовому софту (офисам разным и пр.) это вполне возможно. Тем не менее, существуют направления, без которых уже не обойтись. Телекомунникации, управление транспортом, управление производством (АСУТП, в частности), системы жизнеобеспечения, сложная аппаратура с компьютерами на борту и др. Отказ от этого равносилен отказу от, например, автомобильного транспорта. Имхо, эти области так просто не загнутся.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[13]: Лекция Вирта в политехническом - впечатления
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 23.09.05 12:27
    Оценка:
    Здравствуйте, eao197, Вы писали:

    AVK>> Просто сейчас это, слава богу, влиятельным мира сего не выгодно.


    E>Так я про это и говорю. Если расширить тему, то мне кажется, что глобализация -- это надежнейший сейчас путь к миру во всем мире. Серьезно.


    +1
    Думаю, если бы не она, то если не третья мированя, то какой нибудь глобальный конфликт был бы.

    AVK>>Плохая аналогия. Софт несколько более разнообразен, нежели печные трубы.


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


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

    AVK>>Скорее всего нет. Поскольку процесс этот будет нарастать лавинообразно. Удорожание софта приведет к уменьшению спроса на компы, что, в свою очеред приведет к удорожанию и компов и софта, что вызовет новый виток. В конце концов индустрия может просто схлопнуться.


    E>Думаю, что по отношению к массовым компьютерам (PC-шкам, игровым приставкам и пр.) и массовому софту (офисам разным и пр.) это вполне возможно. Тем не менее, существуют направления, без которых уже не обойтись. Телекомунникации, управление транспортом, управление производством (АСУТП, в частности), системы жизнеобеспечения, сложная аппаратура с компьютерами на борту и др. Отказ от этого равносилен отказу от, например, автомобильного транспорта. Имхо, эти области так просто не загнутся.


    Однако, что совершенно очевидно, желающих в этих отраслях работать станет кардинально больше. Соотв. далеко не все найдут себе работу. И далеко не факт, что ты не окажешся в их числе.
    ... << RSDN@Home 1.2.0 alpha rev. 617>>
    AVK Blog
    Re[14]: Лекция Вирта в политехническом - впечатления
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 23.09.05 12:40
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    E>>Думаю, что по отношению к массовым компьютерам (PC-шкам, игровым приставкам и пр.) и массовому софту (офисам разным и пр.) это вполне возможно. Тем не менее, существуют направления, без которых уже не обойтись. Телекомунникации, управление транспортом, управление производством (АСУТП, в частности), системы жизнеобеспечения, сложная аппаратура с компьютерами на борту и др. Отказ от этого равносилен отказу от, например, автомобильного транспорта. Имхо, эти области так просто не загнутся.


    AVK>Однако, что совершенно очевидно, желающих в этих отраслях работать станет кардинально больше. Соотв. далеко не все найдут себе работу. И далеко не факт, что ты не окажешся в их числе.


    +1

    Ну да поживем -- увидим.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[9]: Лекция Вирта в политехническом - впечатления
    От: jazzer Россия Skype: enerjazzer
    Дата: 24.09.05 12:17
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>Здравствуйте, Donz, Вы писали:


    E>>>Фишка как раз в том, что написаные Толстым произведения совсем не требуют для своего понимания пятилетнего курса русского языка (разве что для иностранцев).

    D>>И его рассуждения в "Война и мир" тоже запоем читались, совершенно не напрягая? Вот помнится, я эпилог (заключительные мысли о войне, Наполеоне и т.д.) дочитал только для галочки "вот прочитал всю "Войну и мир" от корки до корки".

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


    "Война и мир" — это не мыльная опера, а весьма четкая картина того, как жили, думали и чувствовали люди в то время. Мало какая еще книга даст тебе лучшее представление о том, что представляло собой общество времен Отечественной войны 1812 года.

    Уверен, что все это знают, но на всякий случай: "мир" в названии означает не отсутствие войны, а общество. Типа "Ленин и мировая буржуазия" :)
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[10]: Лекция Вирта в политехническом - впечатления
    От: jazzer Россия Skype: enerjazzer
    Дата: 24.09.05 12:19
    Оценка:
    Здравствуйте, Gaperton, Вы писали:

    G>Угу, +1. Наконец-то до народа это начало доходить. Год назад за такую фразу тут бы порвали не задумываясь. :)


    Да ладно тебе.
    Куча программистов знают и язык типа С++, и язык типа Perl, и активно их используют.
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[9]: Лекция Вирта в политехническом - впечатления
    От: Cyberax Марс  
    Дата: 24.09.05 16:13
    Оценка:
    mefrill wrote:

    > Да, вроде-бы, нет. Ситуация тогда была другая совсем. Это сейчас на PC

    > можно кучу ОС поставить различных. А тогда, ставилась машина, и с ней
    > весь софт ставился. Я, конечно, не в курсе, как так получилось, что
    > стали университетские машины с юниксами поставлять, но предполагаю,
    > что так оно и было.

    А ставили Юникс на университетские машины потому, что он был
    ПОРТАБЕЛЬНЫМ. То есть перенести его на новую архитектуру не стоило
    больших проблем. И все благодаря С...

    > Д>это сейчас — традиция. раньше традиции не было, а вот конкурентов у

    > Си была куча
    > В американских университетах у Си была куча конкурентов?

    Был PL/1, был Pascal (на Паскале почти весь софт для Лизы написан был,
    например).

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[10]: Лекция Вирта в политехническом - впечатления
    От: mefrill Россия  
    Дата: 24.09.05 16:57
    Оценка:
    Здравствуйте, Cyberax, Вы писали:


    C>А ставили Юникс на университетские машины потому, что он был

    C>ПОРТАБЕЛЬНЫМ. То есть перенести его на новую архитектуру не стоило
    C>больших проблем. И все благодаря С...

    Не вижу логической связи между портабельностью ОС и свойствами языка Си. Не мог бы ты ее разъяснить поподробнее?

    C>Был PL/1, был Pascal (на Паскале почти весь софт для Лизы написан был,

    C>например).

    Ну какие-же это конкуренты, если для системного программирования на университетской машине надо Си использовать? Значит, надо Си учить обязательно, а другие языки — от случая к случаю. Кстати, насколько помню, у них Лисп учили как первый язык. А вот дальше уже от Си дется некуда просто было.
    Re[11]: Лекция Вирта в политехническом - впечатления
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 24.09.05 21:29
    Оценка:
    Здравствуйте, mefrill, Вы писали:

    M>Вот недавний пример, я на си программирую уже больше 10 лет, а написал в сравнении один = вместо двух. В результате полдня потратил в сложном алгоритме на лов ошибки.


    hint: размещать константу слева от знака равенства. Тогда выражение if( 10 = a ) просто не скомпилируется.

    Наблюдение из собственного опыта: после того, как я стал следовать этому правилу, я ни разу не ошибся с присваиванием в if (даже если в сравнении использовались два lvalue), т.к. приходилось задумываться о том, есть ли в выражении константа, которую можно написать слева. Из-за этого на выражении в if() внимание концентрировалось и ошибок в написании == просто не происходило.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[10]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.09.05 01:50
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Синтаксических сложностей в С не так много, и они никаких проблем не

    C>доставляют (после того, как на них раз наткнешься). Сложности возникают
    C>из-за низкоуровневого программирования (ручное управление памяти и т.п.).

    Агащазблин. С напичкан граблями. Их в нем так много, что на С++ с головой хватило. А в начале он был вообще ужасным. Это сейчас многое компилятором проверяется.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[11]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.09.05 01:50
    Оценка:
    Здравствуйте, jazzer, Вы писали:

    J>Куча программистов знают и язык типа С++, и язык типа Perl, и активно их используют.


    В этом то и проблема. Читать то приходится "мне".
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[10]: Массивы и указатели в C
    От: Павел Кузнецов  
    Дата: 25.09.05 02:00
    Оценка:
    Cyberax,

    >> А вот насчет массивов, это вы загнули.

    >
    > В С их как таковых нет — есть только синтаксический сахар над указателями.

    Распространенная точка зрения, не вполне согласующаяся с реальностью, данной нам в ощущениях:
    int a[5] = { 0, 1, 2, 3, 4 };

    как преобразовать данную конструкцию в эквивалент на указателях?
    Posted via RSDN NNTP Server 2.0 beta
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[9]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.09.05 02:03
    Оценка:
    Здравствуйте, mormat, Вы писали:

    M>Чем не ОС на Active Oberon. Ведет проект один человек. Я был приятно удивлен увиденным. Думаю, если бы эту ось на постоянной основе продвигало хоть на порядок больше народу, и если бы еще ктото-чтото писали софт и игры для неё, и несколько раньше (лет на 10 ) — ситуация на рынке ОС могла бы сложится несколько иная.


    Может все же 25? 10 лет назад был 1995-ый, а значит на столах пользователей был не то что ДОС, но Виндовс 95. А вот лет 25 назад может и правда что вышло бы.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[14]: Лекция Вирта в политехническом - впечатления
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 25.09.05 09:55
    Оценка:
    Здравствуйте, BreQwaS, Вы писали:

    BQS>Блин, да откуда оно всё?

    BQS>Я такой ошибки уже пару лет не делал. Всего на С/С++ пишу года три.

    Видать мало пишешь (не сочти за наезд). Я вон на на шарпе периодически накалываюсь, хоть и пишу на С-подобных языках уже черти сколько. Просто когда пишешь код в большом объеме, очень легко просто забыть стукнуть по клавише = два раза.
    ... << RSDN@Home 1.2.0 alpha rev. 615 on Windows XP 5.1.2600.131072>>
    AVK Blog
    Re[11]: Массивы и указатели в C
    От: Cyberax Марс  
    Дата: 25.09.05 10:39
    Оценка:
    Павел Кузнецов wrote:

    >> В С их как таковых нет — есть только синтаксический сахар над

    > указателями.
    > Распространенная точка зрения, не вполне согласующаяся с реальностью,
    > данной нам в ощущениях:
    >
    >int a[5] = { 0, 1, 2, 3, 4 };
    >
    > как преобразовать данную конструкцию в эквивалент на указателях?

    int *a=(int*)alloca(5*sizeof(int));
    int f;
    for (f=0;f<5;f++) a[f]=f;



    Нет, я знаю, что int a[5] ведет себя не совсем как простой указатель, но
    это объяснять мне здесь не хотелось.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[9]: Лекция Вирта в политехническом - впечатления
    От: Cyberax Марс  
    Дата: 25.09.05 12:50
    Оценка:
    mormat wrote:

    > C>А на чем еще писать ОСы?

    > http://bluebottle.ethz.ch/
    > Чем не ОС на Active Oberon. Ведет проект один человек. Я был приятно
    > удивлен увиденным. Думаю, если бы эту ось на постоянной основе
    > продвигало хоть на порядок больше народу, и если бы еще ктото-чтото
    > писали софт и игры для неё, и несколько раньше (лет на 10 ) — ситуация
    > на рынке ОС могла бы сложится несколько иная.

    Уже до тошноты тут ее обсуждали (у нее нет защиты памяти, например). Еще
    в этой ОСи не получится нормально запускать программы на С или Haskell,
    например.

    Это, кстати, касается и Владовского примера ОСи на С#.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[11]: Лекция Вирта в политехническом - впечатления
    От: Cyberax Марс  
    Дата: 25.09.05 12:51
    Оценка:
    VladD2 wrote:

    > C>Синтаксических сложностей в С не так много, и они никаких проблем не

    > C>доставляют (после того, как на них раз наткнешься). Сложности возникают
    > C>из-за низкоуровневого программирования (ручное управление памяти и
    > т.п.).
    > Агащазблин. С напичкан граблями. Их в нем так много, что на С++ с
    > головой хватило. А в начале он был вообще ужасным. Это сейчас многое
    > компилятором проверяется.

    А раньше проверялся lint'ом.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[14]: Массивы и указатели в C
    От: Cyberax Марс  
    Дата: 25.09.05 13:26
    Оценка:
    Пацак wrote:

    > C>Это не проблема — это достоинство

    > Скорее просто фича. А уж чем она оборачивается — проблемами или
    > достоинствами — это от конкретного случая зависит.

    Я собственно это и хотел сказать. Адресная арифметика — просто
    незаменимое средство для низкоуровневого программирования, но у нее свои
    недостатки.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[13]: Лекция Вирта в политехническом - впечатления
    От: Cyberax Марс  
    Дата: 25.09.05 13:58
    Оценка:
    mefrill wrote:

    > C>В языке С почти отсутствуют искусственные для низкоуровневого

    > C>программирования понятия.
    > Честно говоря, я склоняюсь к тому, что Си — высокоуровневый язык, из
    > семейства так называемых процедурных языков.

    Это одновременно высокоуровневый и низкоуровневый язык. Именно
    это и является его основным достоинством и причиной популярности.

    > Низкоуровневые свойства, конечно, есть, но они синтаксически

    > непродуманы. Маппирование памяти на типизированный объекты путем
    > введения указателей введено ИМХО неудачно. Гораздо лкчше было-бы
    > ввести специальный оператор для такой операции.

    Угу, и получится то же самое "вид сбоку".

    > Существующая арифметика указателей ведет к ошибкам. В общем, по моему

    > мнению, указатели — неудачное решение.

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

    > Ну так ведь принцип здесь один: в процедурный язык вводятся понятия,

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

    Чем какой нибудь:
    [code]
    void func(mem_address adr)
    {
    var int num=project(adr); //Как, кстати, указатели обзначать будем?
    }
    [code]
    будет лучше:
    void func(void *obj)
    {
        int *num=(int*)obj;
    }

    ?

    > При этом удобно было-бы вести работу с различными типами памяти, для

    > встроенных ОС. Сейчас в Си это делается с помощью довольно уродливых
    > расширений компилятора — модификаторов типа.

    Пусть лучше модификаторы типов остаются.

    > C>Это такая фигня — ошибка того же класса, что и and вместо or.

    > Не понимаю, как можно об этом спорить??? Пропустить случайно один
    > символ "=" это ведь не тоже самое, что написать "<" вместо ">"?

    Для меня, например, то же самое.

    > C>Что могу сказать.... Тренироваться надо! Я уже не вспомню, когда в

    > C>последний раз я искал подобную ошибку больше 5 минут.
    > В сложном алгоритме такую ошибку трудно найти. И вообще, эта твоя
    > фраза выше высокомерием отдает, не находишь?

    Ну что сделать Факт остается — ни для меня, ни для моих коллег ошибка
    с заменой == на = не является сколь-либо заметной проблемой.

    > C>А с какой стати оно должно стоять в другом месте?

    > с такой, что в Си объявление типа строится по схеме: имя_типа
    > имя_переменной. Почему в объявлении массива имя_переменной залезло в
    > середину имени_типа? Это уход от единой схемы объявления. И кто-нибудь
    > может мне объяснить, какая у этого ухода была цель???

    Просто авторы посчитали, что лучше сделать схему "имя_типа
    имя_переменной модификатор_массива"

    Честно говоря, есть намного большая проблема с объявлением типов в С:
    char* ptr=NULL,ptr2=NULL; //А ptr2 - это не указатель!


    > C>В низкоуровневом программировании без этого — никуда.

    > Писал об этом выше. Работу с памятью с произвольным доступом можно
    > организовать совсем по другому, без всяких уродств, связанных с
    > указателями.

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

    > C>1. Сишные функции и переменные экспортируются по имени, в

    > C>экспортированой сигнатуре отсутствует информация о типах (т.е. нет
    > C>проблем с несовместимым ABI).
    > C>2. Сишные структуры можно располагать в памяти с точностью до _бита_
    > C>(битовые поля, однако).
    > C>3. Никакого GC и исключений (нет проблем с ABI).
    > C>4. Есть примитивы для вызова функций по указателю и т.п.
    > C>5. Арифметика указателей (основное Cшное тождество: a[i]==*(a+i)==i[a]).
    > Если номер один я могу отнести к интерфейсу, то каким боком туда
    > остальные пункты попали?

    Назовите, пожалуйста, язык в котором остальные пункты выполняются. Язык
    D в пример не приводить.

    > Номер один же является скорее недостатком, нежели преимуществом. В

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

    Кроме стандартных проблем с разными рантаймами в Винде, я не помню,
    чтобы у меня падало именно из-за проблем с голыми именами.

    > C>Тем не менее, даже *сейчас* нечем полностью заменить С. Даже у С++

    > C>уже есть определнные недостатки по сравнению с С.
    > Вот с этим согласен, заменить нечем. Традиция. Но это снова не говорит
    > о том, что низкоуровневые свойства языка можно было бы организовать по
    > другому.

    Да не традиция это! Попробуйте реально написать программу на Паскале для
    режима ядра — тогда поймете все достоинства С.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[13]: Лекция Вирта в политехническом - впечатления
    От: Cyberax Марс  
    Дата: 25.09.05 14:59
    Оценка:
    mefrill wrote:

    > Ну не знаю. Что такое операция присваивания? Это, на самом деле, две

    > поледовательных операции:
    > 1. Прочитать данные из участка памяти, на который ссылается выражение
    > справа.
    > 2. Записать прочитанные данные в участок памяти, на который ссылается
    > выражение слева.

    А вот и нет. Скорее всего, присваиваемое число будет уже лежать в
    регистре, так что присваивание может быть простым mov'ом из регистра в
    память.

    А если присваивание идет в цикле, то можно использовать и инструкции
    типа "память-в-память" (movsd и т.п.).

    А еще в случае с плавучкой — числа могут лежать на стеке математического
    сопроцессора.

    А еще есть SSE/MMX/Altivec.

    А скоро будут cell-процессоры со своими заморочками.

    И т.д.

    То есть если уж хочется чего-то, более соответствующего реальной
    архитектуре компьютера, то ничего простого не получится.

    > Ну вот о чем я и писал уже выше. Прямую работу с памятью можно было бы

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

    Современные компьютеры оооочень сильно отличаются от классической
    архитектуры Фон-Неймана.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[12]: Массивы и указатели в C
    От: Павел Кузнецов  
    Дата: 25.09.05 16:03
    Оценка:
    Cyberax,

    >> int a[5] = { 0, 1, 2, 3, 4 };

    >> как преобразовать данную конструкцию в эквивалент на указателях?

    >
    > int *a=(int*)alloca(5*sizeof(int));
    > int f;
    > for (f=0;f<5;f++) a[f]=f;
    >


    А теперь то же самое в global scope...

    > Нет, я знаю, что int a[5] ведет себя не совсем как простой указатель, но

    > это объяснять мне здесь не хотелось.

    Главное что реализованы массивы не через указатели, только индексируются через них.
    Posted via RSDN NNTP Server 2.0 beta
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[12]: Массивы и указатели в C
    От: Павел Кузнецов  
    Дата: 25.09.05 16:06
    Оценка:
    AVC,

    > Главная проблема с массивами Си в том, что информация об их "массивовости" теряется при выходе из соответствующей области видимости (scope)).


    Это другая (валидная) проблема.

    > Так что же неверного в утверждении, что массив в Си (вне области видимости его объявления) неотличим от указателя?


    То что это не совсем так. Массив "неотличим" только при условии получения и работы с указателем на его первый элемент. Если этого не делать, то отличия останутся. Например, можно оперировать указателем на массив.

    > ИМХО, приведенный Вами, Павел, пример и есть не что иное, как syntactic sugar: так, прилепили фичу к указателю.


    В таком случае, выразите, пожалуйста, тот пример через указатели.
    Posted via RSDN NNTP Server 2.0 beta
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[13]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.09.05 16:19
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Альтернатива: включить в своем компиляторе соответствующие предупреждения.


    Паш, хорошо что сегодня в твоем компиляторе есть такая возможность.
    Вот только в моем ее небыло. Я конечно привык, но хорошем такое не назовешь. Так зачем уродская конструкция которую нужно запрещать вообще попала в язык?
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[13]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.09.05 16:19
    Оценка:
    Здравствуйте, mefrill, Вы писали:

    M>Уже писал об этом. Придумывать костыли для синтаксического свойства языка указывает только на одно: это свойство неудачно.


    Однако, как я уже говорил, просто приведение типизации в норму на раз устраняет эту проблему.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[12]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.09.05 16:19
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>А раньше проверялся lint'ом.


    Линт значительно моложе С. К тому же он и в подметки не годится современным типобезопастным языкам.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re: Лекция Вирта в политехническом - впечатления
    От: mormat Украина mormat.org.ua
    Дата: 25.09.05 16:34
    Оценка:
    ..... А с чего всё начиналось... с лекции Вирта про оберон и принципы... а вылилось во всестороннее обсуждение недостатков си, плюс мессаги религиозных фанатов....
    Пусто
    Re[15]: Лекция Вирта в политехническом - впечатления
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 25.09.05 17:29
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Да, более чем! Я читаю смысл кода, а не как компилятор. И я хочу читать "значение равно десяти", а не "десяти равно значения". Мне вообще не нравится как говорит Ёда.


    Да уж.
    Ну что же, сколько людей, столько и мнений.



    VD>А ты просто привык к эому убожеству. Кстати, а почему в твоих листингах на Руби я подобного не встречал? Или я просто не обращал внимания?

    Просто не обращал внимания:

    Re[11]: Задумчиво так...: нужен ли народу scripting?
    Автор: eao197
    Дата: 15.09.05

    def play_with_animal( animal )
        sound = animal.make_sound
        if "woof" != sound && "quack" != sound
            animal.go_away!
        else
            puts "I like animal with sound '#{sound}'"
        end
    end

    константы слева, даже в !=.

    Re[6]: Lisp
    Автор: eao197
    Дата: 14.07.05

    def constructor_param_maker( p )
        r = ""
        for i in 0...p.length do
            r = r + "#{p[i].type} #{p[i].name}#{', ' if i+1 < p.length}"
        end
        r
    end

    здесь используется оператор <, кроме того, i+1 -- это rvalue. Ну и к тому же, if здесь записан в постфиксной форме.

    Re[7]: Qt + MSVC
    Автор: eao197
    Дата: 04.07.05

    def    setup_platform_flags()
        if toolset.tag( "target_os" ) == "mswin"
                define( "MXX_RU_ACE__PLATFORM_WIN32", OPT_UPSPREAD )
                define( "WIN32", OPT_UPSPREAD )
    
                if "vc" == toolset.name ||
                                "bcc" == toolset.name
                        define( "MXX_RU_ACE__ACE_HAS_STANDARD_CPP_LIBRARY",
                                        OPT_UPSPREAD )
                end
    
                lib( "user32.lib" )
                lib( "advapi32.lib" )
    
                if "bcc" == toolset.name
                        lib( "ws2_32.lib" )
                end
    
        elsif toolset.tag( "target_os" ) == "unix"
                if toolset.tag( "unix_port" ) == "cygwin"
                        define( "MXX_RU_ACE__PLATFORM_CYGWIN32", OPT_UPSPREAD )
                elsif toolset.tag( "unix_port" ) == "linux"
                        define( "MXX_RU_ACE__PLATFORM_LINUX", OPT_UPSPREAD )
                        lib( "pthread" )
                        lib( "dl" )
                        lib( "rt" )
                end 
        elsif toolset.tag( "target_os" ) == "tandem_oss"
                define( "MXX_RU_ACE__PLATFORM_TANDEM_OSS", OPT_UPSPREAD )
    
                compiler_option( "-Wextensions", OPT_UPSPREAD )
                compiler_option( "-D _XOPEN_SOURCE_EXTENDED=1", OPT_UPSPREAD )
    
                lib( "zsptsrl" )
        end
    end

    если сравнение идет с атрибутом, то константа располагается слева. В случае с вызовом метода Ruby диагностирует синтаксическую ошибку при нахождении конструкции вида "a() = b".

    Re[48]: Python vs C#
    Автор: eao197
    Дата: 24.05.05

    if current_time 
        if (t - current_time) < 15 * 60
                t = current_time
        end
    end
    
    if t != current_time
        t = Time.local( t.year, t.mon, t.mday, t.hour, (t.min / 15) * 15, 0 )
        current_time = t
    end

    здесь нет операторов = или ==.

    Re[26]: Почему нельзя преподавать C#
    Автор: eao197
    Дата: 07.03.05

    if "<" == r[ 1 ]
            std_path_included << r[ 2 ]
    else
            local_path_included << r[ 2 ]
    end

    константа слева.

    Re[61]: Почему нельзя преподавать C#
    Автор: eao197
    Дата: 06.04.05

    Re[40]: Почему нельзя преподавать C#
    Автор: eao197
    Дата: 04.04.05

    Нет операторов сравнения внутри if.


    Вообще-то в Ruby такая же ситуация с присваиванием в if, как и в C. Интерпритатор предупреждение выдает, но не более того.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[16]: Лекция Вирта в политехническом - впечатления
    От: Пацак Россия  
    Дата: 25.09.05 19:44
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>Просто не обращал внимания:

    (skip)
    E>Вообще-то в Ruby такая же ситуация с присваиванием в if, как и в C. Интерпритатор предупреждение выдает, но не более того.

    Ужас ИМХО. И все из-за того, что кому-то пришло в голову сделать оператор присваивания, возвращающий значение. Нет, конечно получилось красиво и стало возможно писать "элегантный" код типа:

    while (d = a[i++]) b[j++] = d*d;


    ...но сколько одновременно породилось проблем. А с другой стороны "альтернативный" код вышел бы не так уж чтоб и сильно длиннее:

    while (a[i]) {
        b[i] = a[i]*a[i];
        i++;
    }


    или даже

    for(i=0; a[i]; i++) {
        b[i] = a[i]*a[i];
    }


    Поневоле задумаешься — а так ли оправданы были жертвы...

    ЗЫ Хотя сам грешен, пользуюсь...
    Ку...
    Re[11]: Лекция Вирта в политехническом - впечатления
    От: Павел Кузнецов  
    Дата: 25.09.05 19:49
    Оценка:
    mefrill,

    > я на си программирую уже больше 10 лет, а написал в сравнении один = вместо двух. В результате полдня потратил в сложном алгоритме на лов ошибки.


    1) В твоем компиляторе можно включить соответствующие предупреждения?
    2) Интересно, что не только в C/C++ путаница между = и ==. Например, в том же Ocaml разница существенно более тонкая: = обозначает equality, а == -- identity. Грубо говоря = сравнивает значения, а == -- указатели.

    > Или синтаксис объявлений. С какой стати в объявлении массива имя переменной стоит внутри объявления типов?


    С той же, с какой * стоит перед именем переменной, а () -- после имени функции: это все идет от общей идеи, что объявление напоминает использование.
    int *i;
    int (*pf)(void);


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


    Даже не языка, а самой концепции указателей. Сложная это для новичков штука, вне зависимости от языка.
    Posted via RSDN NNTP Server 2.0 beta
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[9]: Лекция Вирта в политехническом - впечатления
    От: Дарней Россия  
    Дата: 26.09.05 04:28
    Оценка:
    Здравствуйте, mefrill, Вы писали:

    M>Я, конечно, не в курсе, как так получилось, что стали университетские машины с юниксами поставлять, но предполагаю, что так оно и было.


    Неправильно предполагаешь. Поищи точную информацию

    M>Вот снова попытка перенести наши понятия в то время. Тогда "практиков" в том смысле, что мы сейчас под этим имеем ввиду, не было. Софт писался под конкретную машину, пакетом для конкретного заказчика. Или софт писался в университетах и НИИ под конкретные проекты. Вот и эти ребята такими же "практиками" были. При заводе они не работали я полагаю. А больше и негде практикой заниматься тогда было. Время, когда программист стал офисным клерком, наступило позже.


    "Практики" тогда как раз были — точнее, только они и были. А вот "теоретиков" не было.

    M>В американских университетах у Си была куча конкурентов?


    А почему ты ограничиваешься только университетами? В те времена системный софт писали на Ассемблере, каковой и был серьезнейшим конкурентом Си.
    Многие тогда считали, что "преимущества, которые дает этот язык, не перевешивают потерю в производительности" (какие знакомые слова, не правда ли? )

    Д>>Никакого основного продукта, написанного на Си, у них не было ТОГДА

    Д>>Как утверждается историками, Юних вообще возник как побочный продукт разработки внутреннего софта.

    M>Можно сказать и так: тогда вообще никаких продуктов не было. продукты появились вместе с микрокомпьютерами.


    Так всё-таки никакого "основного продукта", который стал паровозом для Си, не было?

    M>О чем я хотел сказать изначально — только о том, что нельзя переносить сегодняшние понятия, а тем более, коммерческие, в то время, в другую ситуацию.


    Ну не я это начал.
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[13]: Массивы и указатели в C
    От: Дарней Россия  
    Дата: 26.09.05 04:54
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>То что это не совсем так. Массив "неотличим" только при условии получения и работы с указателем на его первый элемент.


    void foo(int p[])
    {
        int size = sizeof(p);
        printf("%d\n", size);
    }
    
    void bar()
    {
        static int a[5] = { 0, 1, 2, 3, 4 };
        int size = sizeof(a);
        printf("%d\n", size);
        foo(a);
    }


    А если вот так?
    сравни результат sizeof внутри foo и внутри bar
    Или попробуй передать в функцию двухмерный "массив".
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[9]: Лекция Вирта в политехническом - впечатления
    От: Дарней Россия  
    Дата: 26.09.05 04:59
    Оценка:
    Здравствуйте, mefrill, Вы писали:

    M>Говорю честно, не знаю причины. Может кто взятку дал в правительстве, может еще что. Ставили машины, а ОС для них была юникс. А почему ставили именно эти машины я не знаю.


    то есть у тебя нет точных данных
    Зачем ты тогда разбрасываешься обвинениями, котороые обоснованы только твоими измышлениями?
    Или это потому, что так сказал Вирт, а он никогда не ошибается?
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[13]: Массивы и указатели в C
    От: AVC Россия  
    Дата: 26.09.05 07:03
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    >> Так что же неверного в утверждении, что массив в Си (вне области видимости его объявления) неотличим от указателя?


    ПК>То что это не совсем так. Массив "неотличим" только при условии получения и работы с указателем на его первый элемент. Если этого не делать, то отличия останутся. Например, можно оперировать указателем на массив.


    Ну, не знаю.
    Вот простой пример. Компилятор Си (gcc 3.3.3) позволяет делать free для массива (в разных вариациях).
    Сравнивая выдачу foo и bar, можно убедиться, что функция free "была здесь".

    #include <stdio.h>
    #include <stdlib.h>
    
    void foo(int (*a)[5])
    {
        int i;
    
        for (i = -1; i <= 5 ; ++i)
            printf("a[%d] = %d\n", i, (*a)[i]);
        free(*a);
        free(a);
    }
    
    void bar(int a[5])
    {
        int i;
    
        for (i = -1; i <= 5; i++)
            printf("a[%d] = %d\n", i, a[i]);
        free(a);
    }
    
    int main()
    {
        static int a[5] = { 0, 1, 2, 3, 4 };
    
        printf("=== foo ===\n");
        foo(&a);
        printf("=== bar ===\n");
        bar(a);
        return 0;
    }


    >> ИМХО, приведенный Вами, Павел, пример и есть не что иное, как syntactic sugar: так, прилепили фичу к указателю.


    ПК>В таком случае, выразите, пожалуйста, тот пример через указатели.


    Я не вполне понял, какую именно мысль я тем самым смогу подтвердить или опровергнуть.
    Я приводил примеры, что Си во многом обращается с массивами как с указателями.

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[15]: Лекция Вирта в политехническом - впечатления
    От: Дарней Россия  
    Дата: 26.09.05 08:03
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Видать мало пишешь (не сочти за наезд). Я вон на на шарпе периодически накалываюсь, хоть и пишу на С-подобных языках уже черти сколько.


    В шарпе? А расскажи плиз, как ты ухитряешься это делать?
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[10]: Лекция Вирта в политехническом - впечатления
    От: mefrill Россия  
    Дата: 26.09.05 08:10
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>то есть у тебя нет точных данных

    Д>Зачем ты тогда разбрасываешься обвинениями, котороые обоснованы только твоими измышлениями?
    Д>Или это потому, что так сказал Вирт, а он никогда не ошибается?

    Во-первых, какиеми обвинениями я разбрасываюсь??? Я лишь написал простую и, для меня очевидную, вещь: многие свойства языка Си сложны для восприятия, многие синтаксические конструкции языка Си неестественны и противоречат математической традиции. Далее, я написал, что популярность языка Си обусловливается не его ИМХО мифическими преимуществами, каковые безусловно есть, а традицией программисткого сообщества. Об истинных истоках этой традиции я не знаю, ибо этим вопросом не занимался никогда изысканиями на эту тему. То, что язык Си изучают (изучали!?) потму, что он востребован в промышленности, да это так. Вопрос: почему он востребован в промышленности? Ты отвечаешь: потому, что он такой хороший и превосходный. Я отвечаю: это не так, язык обычный, с преимуществами и недостатками, конечно, для процедурного языка, очень низкоуровневый. Но программируют на нем из-за того, что в университете научили и продуктов куча на этом языке. Получается замкнутый круг. Где-то он должен разорваться. Я его разрываю, как мне кжется, резонно предполагая связи какие-то в правительстве, взятку или еще что-то. Что предполагаешь ты — неизвестно. Так в чем обвинения?
    Re[16]: Лекция Вирта в политехническом - впечатления
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 26.09.05 08:35
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>В шарпе? А расскажи плиз, как ты ухитряешься это делать?


    Ну вот так. Набираешь код, потом компилируешь и компилятор ругается на несоответствие типов.
    ... << RSDN@Home 1.2.0 alpha rev. 617>>
    AVK Blog
    Re[11]: Лекция Вирта в политехническом - впечатления
    От: Дарней Россия  
    Дата: 26.09.05 08:48
    Оценка:
    Здравствуйте, mefrill, Вы писали:

    M>многие синтаксические конструкции языка Си неестественны и противоречат математической традиции.


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

    M>Далее, я написал, что популярность языка Си обусловливается не его ИМХО мифическими преимуществами, каковые безусловно есть


    так всё-таки "мифическими" или "каковые безусловно есть"?

    M>Но программируют на нем из-за того, что в университете научили и продуктов куча на этом языке. Получается замкнутый круг. Где-то он должен разорваться. Я его разрываю, как мне кжется, резонно предполагая связи какие-то в правительстве, взятку или еще что-то.


    Кажется, я уже начинаю понимать ход мыслей Вирта.
    Си плох, потому что я знаю, что он плох -> Паскаль лучше, потому что я знаю, что Паскаль лучше -> значит, кто-то дал взятку, чтобы все использовали Си. Потому что Си плох и никто не стал бы использовать его по своей воле.

    M>Я его разрываю, как мне кжется, резонно предполагая связи какие-то в правительстве, взятку или еще что-то. Что предполагаешь ты — неизвестно. Так в чем обвинения?


    Я не предполагаю. Я просто читаю имеющиеся в наличии источники информации. здесь, например. Если бы ты тоже почитал, вместо того чтобы выдумывать, то сам бы понимал, насколько абсурдно твое предположение.
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[17]: Лекция Вирта в политехническом - впечатления
    От: Дарней Россия  
    Дата: 26.09.05 08:51
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Ну вот так. Набираешь код, потом компилируешь и компилятор ругается на несоответствие типов.


    ну у меня тоже бывает, что я чего-то не то ввожу, что надо, а потом компилятор ругается. Но сами конструкции языка совершенно ни в чем не виноваты, я абсолютно уверен
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[11]: Лекция Вирта в политехническом - впечатления
    От: Кодт Россия  
    Дата: 26.09.05 10:37
    Оценка:
    Здравствуйте, mefrill, Вы писали:

    M>Во-первых, какиеми обвинениями я разбрасываюсь??? Я лишь написал простую и, для меня очевидную, вещь: многие свойства языка Си сложны для восприятия, многие синтаксические конструкции языка Си неестественны и противоречат математической традиции. Далее, я написал, что популярность языка Си обусловливается не его ИМХО мифическими преимуществами, каковые безусловно есть, а традицией программисткого сообщества. Об истинных истоках этой традиции я не знаю, ибо этим вопросом не занимался никогда изысканиями на эту тему. То, что язык Си изучают (изучали!?) потму, что он востребован в промышленности, да это так. Вопрос: почему он востребован в промышленности? Ты отвечаешь: потому, что он такой хороший и превосходный. Я отвечаю: это не так, язык обычный, с преимуществами и недостатками, конечно, для процедурного языка, очень низкоуровневый. Но программируют на нем из-за того, что в университете научили и продуктов куча на этом языке. Получается замкнутый круг. Где-то он должен разорваться. Я его разрываю, как мне кжется, резонно предполагая связи какие-то в правительстве, взятку или еще что-то. Что предполагаешь ты — неизвестно. Так в чем обвинения?


    Всё бы вам разрывать да разрывать.
    Давайте посмотрим на эволюцию Фортрана. Он, как и Си, начинался с автокода (для IBM 704). Потом нашёл благодарных почитателей в лице математиков (физиков, химиков, астрономов, экономистов) — на нём напедалили такое количество по-настоящему качественных библиотек, что отказаться не получится. Да и никто не хочет.
    Безо всякой теории заговора и безо всяких взяток. Просто менеджеры прекрасно соображают: сколько человекотысячелетий и бразильонов долларов нужно вбухать, чтобы перетащить большой расчётный проект с фортрана на плюсы.

    Можно, конечно, сделать конвертор фортрана на си. Ну он нарожает совершенно не поддающийся отладке код. И что дальше?
    Фортрановские библиотеки (если это ещё F4, а не более-менее структурный F77) — сплошные макароны.
    Перекуём баги на фичи!
    Re[4]: Лекция Вирта в политехническом - впечатления
    От: GlebZ Россия  
    Дата: 26.09.05 11:46
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Уж чего-чего, а парсер в виде набора предикатов выразить — как нефиг делать. А для построения AST и дальнейшей его трансляции в прологе есть все необходимые структуры данных — начиная с многоуровневых списков.

    Главное чтобы никто не намекнул на Лисп. А то снова флейм пойдет.

    С уважением, Gleb.
    Re: ...как утверждается историками...
    От: Дарней Россия  
    Дата: 26.09.05 13:50
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    Д>>Как утверждается историками, Юних вообще возник как побочный продукт разработки внутреннего софта.


    ЗХ>Вообще-то говоря, это неверно.


    За что купил, за то и продаю А у тебя есть другие данные?
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[8]: Лекция Вирта в политехническом - впечатления
    От: achp  
    Дата: 26.09.05 14:10
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>кто ставил? начальство по указке свыше? ни хрена подобного! сами же и ставили. потому что было удобно


    Потому, что было бесплатно; потому, что в этом можно было "копаться"; потому, что это можно было модифицировать под себя.
    Re[3]: ...как утверждается историками...
    От: Дарней Россия  
    Дата: 27.09.05 03:51
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>"...разработки внутреннего софта"

    ЗХ>Multics — совместный проект Bell Labs и MIT по разработке операционной системы разделенного времени (time-sharing) для компьютера General Electrics 645 — тяжело назвать "внутренним софтом", несмотря на провал проекта.

    ЗХ>"...Юних вообще возник как побочный продукт..."

    ЗХ>Скажем так, "побочным продуктом" можно назвать продукт, который создан в рамках проекта для внутренних нужд проекта, но перерос собственное предназначение.
    ЗХ>Unix — это, скажем так, самостоятельный проект нескольких разработчиков Mutics, попытка использования и упрощения идей, заложенных в Mutics, в операционной системе для менее мощного компьютера. (собственно, имя Unics — это "единственное число" от Mutics — "unix — единица того, чего много в mutics").

    Насколько я помню, у Реймонда написано, что Юникс возник уже после провала Мультикса. Мультикс конечно можно назвать его предшественником, поскольку разработчики Юникса тоже работали над тем проектом. Но прямой связи между этими проектами нет.
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[12]: Лекция Вирта в политехническом - впечатления
    От: ZayatsZ Россия  
    Дата: 27.09.05 05:25
    Оценка:
    ПК>2) Интересно, что не только в C/C++ путаница между = и ==. Например, в том же Ocaml разница существенно более тонкая: = обозначает equality, а == -- identity. Грубо говоря = сравнивает значения, а == -- указатели.

    А в PHP вообще даже три разных сравнения: =, == и ===
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Re[14]: Лекция Вирта в политехническом - впечатления
    От: AVC Россия  
    Дата: 27.09.05 08:39
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Еще раз. Нет у начинающий (который многие то и математику то не знают как следует) с интерпретацией символа "=". Это в основном поклонники Паскаля притягивают этот аргумент за уши. Проблема именно в легкости опечатки. Опечататься можно и с ":=". Сложнее конечно, но можно.


    Очень интересно, как можно опечататься с ":=", так чтобы компилятор этого не заметил?
    Hint: в Паскале (Модуле-2, Обероне) операции присваивания и сравнения используются в разных контекстах.
    В то время как в Си-подобных языках — могут использоваться в одном контексте.
    Пример:
    while (*dest++ = *source++)
       ;

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[11]: "Простота" Java
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 27.09.05 16:23
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:


    ПК>Это зависит больше от степени знакомства с языком, нежели от самого языка. В Java, как и в C++, вполне достаточно своих грабель и неочевидных вещей:


    Ага вопрос только в том насколько этих граблей много и как просто на них напароться.

    Коничество реальных граблей в Яве куда меньше чем в плюсах. Так что твой пример скорее попытка сказать "да это доктор у Вас катриночки такие...".

    Кстати, попытался воспроизвести данные приколы на Шарпе. Прошли все два (хотя их там описано много). Один с приведением char к int и параметром конструктора "capacity" (break-и естественно пошли лесом), а второй с float-ом инициаилизированным гигантским числом используемым в качестве индекса в цикле.

    Оба варианта встречаются в природе крайне редко. Второй так вообще притянут зу уши. Float в качестве индекса — это маразм по любому.

    А вот неявное приведение char к int можно было бы и запретить.

    В итоге... Кроме этих грабель можно найти еще штуки три-четыре так же редко вствречаемых грабель. Надо ли их знать для безопастного использования языка? Я думаю, что скорее всего нет. А вот гребли плюсов знать просто необходимо. Без этого знания жизнь становится адом. Так что твои примеры скорее уловка. А языки нужно проектировать так чтобы багов в них было как можно меньше. С++ давно просится на рефактринг. Но в виду того что в комитете засели консерваторы этого никогда не случится.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[12]: Массивы и указатели в C
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 11.10.05 08:07
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    ПК>>Распространенная точка зрения, не вполне согласующаяся с реальностью, данной нам в ощущениях:


    СГ>Не смотря на то, что массивовые переменные получить можно, в языках С/C++/Java/C# нет возможности определения массивовых типов:

    СГ>
    СГ>  TYPE
    СГ>    Vector3D = ARRAY 3 OF REAL; (* value-type, SIZE(Vector3D) = 3*8 = 24 *)
    
    СГ>  PROCEDURE f(v: Vector);
    СГ>  ...
    СГ>


    Я что-то пропустил?
    #include <iostream>
    #include <typeinfo>
    
    typedef float a[ 3 ];
    
    int
    main()
        {
            std::cout << typeid( a ).name() << std::endl;
        }

    Результат (VC7.1)
    float [3]
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[12]: Массивы и указатели в C
    От: Cyberax Марс  
    Дата: 11.10.05 08:07
    Оценка:
    Сергей Губанов wrote:

    > ПК>Распространенная точка зрения, не вполне согласующаяся с

    > реальностью, данной нам в ощущениях:
    > Не смотря на то, что массивовые *переменные* получить можно, в языках
    > С/C++/Java/C# нет возможности определения массивовых *типов*:

    А какая у этих типов масса?

    > TYPE

    > Vector3D = ARRAY 3 OF REAL; (* value-type, SIZE(Vector3D) = 3*8 = 24 *)
    >
    > PROCEDURE f(v: Vector);
    > ...
    >
    typedef float[3] Vector3D;
    assert(sizeof(Vector3D)>=sizeof(float)*3); //Vector's size may be larger 
    because of alignment issues.


    Ну и я уже не говорю про:
    typedef std::valarray<float> FloatValArray;
    typedef boost::array<floar,3> StaticFloatArray;
    typedef std::vector<float> DynamicFloatArray;


    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[17]: Лекция Вирта в политехническом - впечатления
    От: GlebZ Россия  
    Дата: 11.10.05 09:19
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>А так?

    ПК>
    ПК>bool a = ...;
    ПК>bool b = ...;
    
    ПК>if ( a = b )
    ПК>{
    ПК>   . . .
    ПК>}
    ПК>

    Так переварит. Корректная инструкция, иначе пришлось бы отрубить до фига функционала в условии if. Вплоть до if (b) {};

    С уважением, Gleb.
    Re[15]: Лекция Вирта в политехническом - впечатления
    От: GlebZ Россия  
    Дата: 11.10.05 09:20
    Оценка:
    Здравствуйте, AVC, Вы писали:

    AVC>Очень интересно, как можно опечататься с ":=", так чтобы компилятор этого не заметил?

    Аналогично что и сказал ПК.
    var
    a:boolean;
    b:boolean;
    begin
    if (a:=b)then
    .....
    end;


    С уважением, Gleb.
    Re[17]: Лекция Вирта в политехническом - впечатления
    От: GlebZ Россия  
    Дата: 11.10.05 11:08
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Не аналогично, однако. В Паскале операция присваивания возвращает void.

    К>В Сях же она возвращает ссылку на приёмник — это и бонус, и грабли одновременно.
    Oops


    С уважением, Gleb.
    Re[17]: Лекция Вирта в политехническом - впечатления
    От: AVC Россия  
    Дата: 11.10.05 11:32
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    AVC>>>Очень интересно, как можно опечататься с ":=", так чтобы компилятор этого не заметил?

    GZ>>Аналогично что и сказал ПК.
    К>
    GZ>>var
    GZ>>a:boolean;
    GZ>>b:boolean;
    GZ>>begin
    GZ>>   if (a:=b)then
    GZ>>.....
    GZ>>end;
    К>

    К>Не аналогично, однако. В Паскале операция присваивания возвращает void.
    К>В Сях же она возвращает ссылку на приёмник — это и бонус, и грабли одновременно.

    ИМХО, если есть "грабли", "бонус" кажется уже не таким притягательным.
    (Конечно, точки зрения могут быть разные.)

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[13]: typedef - не создает нового типа
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 12.10.05 08:46
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>Я что-то пропустил?

    typedef float a[ 3 ];



    Переменную-массив из 3 элементов Вы создать конечно сможете, о чем я и говорил. Но вот типа нового тут не создается, вот смотрите:
    #include "stdafx.h"
    
    typedef int Vector2D[2];
    typedef int Vector3D[3];
    
    void f2D(Vector2D v)
    {
        for(int i = 0; i < 2; i++) v[i] = i;
    }
    
    void f3D(Vector3D v)
    {
        for(int i = 0; i < 3; i++) v[i] = i;
    }
    
    int _tmain()
    {
        int v2d[2];
        int v3d[3];
        f2D(v3d);
        f3D(v2d);
        return 0;
    }

    этот код прекрасно компилируется, но во время выполнения случается непонятная ошибка, связанная с порчей памяти ведь я случайно перепутал v2d и v3d: f2D(v3d); f3D(v2d); а для компилятора это не заметно, ведь typedef — не создает нового типа.
    Re[13]: Массивы и указатели в C
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 12.10.05 08:55
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>А какая у этих типов масса?


    Проверил в BlackBox. Инструкция SIZE для типов вида ARRAY N OF Element, где N — константа, возвращает в точности N*SIZE(Element).
    Re[14]: typedef - не создает нового типа
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 12.10.05 09:07
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Переменную-массив из 3 элементов Вы создать конечно сможете, о чем я и говорил. Но вот типа нового тут не создается,

    СГ> вот смотрите:
    СГ>
    СГ>#include "stdafx.h"
    
    СГ>typedef int Vector2D[2];
    СГ>typedef int Vector3D[3];
    
    СГ>void f2D(Vector2D v)
    СГ>{
    СГ>    for(int i = 0; i < 2; i++) v[i] = i;
    СГ>}
    
    СГ>void f3D(Vector3D v)
    СГ>{
    СГ>    for(int i = 0; i < 3; i++) v[i] = i;
    СГ>}
    
    СГ>int _tmain()
    СГ>{
    СГ>    int v2d[2];
    СГ>    int v3d[3];
    СГ>    f2D(v3d);
    СГ>    f3D(v2d);
    СГ>    return 0;
    СГ>}
    СГ>

    СГ>этот код прекрасно компилируется, но во время выполнения случается непонятная ошибка, связанная с порчей памяти ведь я случайно перепутал v2d и v3d: f2D(v3d); f3D(v2d); а для компилятора это не заметно, ведь typedef — не создает нового типа.

    Не знание языка не освобождает от ответственности
    Тебя кстати, не смутило, что в f2D и f3D вектора передаются не по значению (как это было бы, если бы Vector?D был не агрегатом, а, скажем, классом), а по ссылке? Точнее говоря, декларация функции f( int p[3] ) в C++ эквивалентна f( int * p ).

    На самом деле Vector2D действительно вводит тип, и чтобы в этом убедится нужно всего лишь изменить декларации f?D функций:
    void f2D(Vector2D & v)
    {
        for(int i = 0; i < 2; i++) v[i] = i;
    }
    
    void f3D(Vector3D & v)
    {
        for(int i = 0; i < 3; i++) v[i] = i;
    }


    Попробуй теперь свой пример скомпилировать.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[15]: typedef - не создает нового типа
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 12.10.05 09:32
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>
    E>void f2D(Vector2D & v)
    E>void f3D(Vector3D & v)

    E>Попробуй теперь свой пример скомпилировать.

    Так гораздо лучше — теперь хоть тот бред не компилируется.

    А теперь наивный такой вопросик: А как же передать переменную типа Vector3D не по ссылке, а по значению, т.е. так как можно передать обычную переменную value-типа?




    Кстати, можно продолжить языковое соревнование. Как на счет такого кода:
        TYPE
            A = ARRAY 3 OF BYTE;
            B = ARRAY 3 OF BYTE;
        
        PROCEDURE fa(u: A);
        BEGIN
        END fa;
    
        PROCEDURE fb(u: B);
        BEGIN
        END fb;
    
        PROCEDURE Test;
            VAR a: A; b: B;
        BEGIN
            fa(b); (* ERROR: incopatible assignment *)
            fb(a); (* ERROR: incopatible assignment *)
        END Test;

    typedef int A[3];
    typedef int B[3];
    
    void fa(A & v)
    {    
    }
    
    void fb(B & v)
    {
    }
    
    int _tmain()
    {
        A a;
        B b;
        fa(b); /* компилятору по барабану */
        fb(a); /* компилятору по барабану */
        return 0;
    }
    Re[15]: typedef - не создает нового типа
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 13.10.05 03:54
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Переменную-массив из 3 элементов Вы создать конечно сможете, о чем я и говорил. Но вот типа нового тут не создается,


    E>Не знание языка не освобождает от ответственности

    E>Тебя кстати, не смутило, что в f2D и f3D вектора передаются не по значению (как это было бы, если бы Vector?D был не агрегатом, а, скажем, классом), а по ссылке? Точнее говоря, декларация функции f( int p[3] ) в C++ эквивалентна f( int * p ).

    E>На самом деле Vector2D действительно вводит тип, и чтобы в этом убедится нужно всего лишь изменить декларации f?D функций:


    Формально г-н Губанов прав, typedef действительно не вводит новый тип, лишь определяет синоним для существующего:

    Стандарт 7.3.1/1
    ... A typedefname is thus a synonym for another type. A typedefname does not introduce a new type the way a class declaration (9.1) or enum declaration does...


    Но я не случайно сделал оговорку "определяет синоним для существующего". Тип для массива есть, просто получиь к нему доступ мы можем лишь через определение для него синонима с помощью typedef.

    А теперь коммент для г-на Губанова.
    Несмотря на всё вышесказанное, ваш пример в корне не правилен. Он ни как не демонстрирует тот факт, что typedef не определяет новый тип. Вы продемонстрировали лишь то, что массивы одной размерности неявно преобразуются друг в друга и в указатели... Если вы хотели продемонстрировать, что typedef не вводит новый тип, вы должны были привести такой пример:
    typedef int Vector2D[2];
    void fun(Vector2D var)
    {
    }
    
    int main()
    {
        Vector2D var1;
        int var2[2];
        func(var1);
        func(var2);
        return 0;
    }


    Так что не лезли бы вы туда, в чём разбираетесь не достаточно хорошо...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[16]: typedef - не создает нового типа
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 13.10.05 06:44
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    СГ>>>Переменную-массив из 3 элементов Вы создать конечно сможете, о чем я и говорил. Но вот типа нового тут не создается,


    E>>Не знание языка не освобождает от ответственности

    E>>Тебя кстати, не смутило, что в f2D и f3D вектора передаются не по значению (как это было бы, если бы Vector?D был не агрегатом, а, скажем, классом), а по ссылке? Точнее говоря, декларация функции f( int p[3] ) в C++ эквивалентна f( int * p ).

    E>>На самом деле Vector2D действительно вводит тип, и чтобы в этом убедится нужно всего лишь изменить декларации f?D функций:


    MN>Формально г-н Губанов прав, typedef действительно не вводит новый тип, лишь определяет синоним для существующего:

    MN>

    MN>Стандарт 7.3.1/1
    MN>... A typedefname is thus a synonym for another type. A typedefname does not introduce a new type the way a class declaration (9.1) or enum declaration does...


    MN>Но я не случайно сделал оговорку "определяет синоним для существующего". Тип для массива есть, просто получиь к нему доступ мы можем лишь через определение для него синонима с помощью typedef.


    Именно это я и имел в виду.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[16]: typedef - не создает нового типа
    От: Павел Кузнецов  
    Дата: 13.10.05 12:04
    Оценка:
    Mr. None,

    > Тип для массива есть, просто получиь к нему доступ мы можем лишь через определение для него синонима с помощью typedef.


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

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


    Не (с)только это. В примере Сергея иллюстрируется специальное правило C++, сводящееся к тому, что объявления вида f(T[N]) преобразуется в f(T*).
    Posted via RSDN NNTP Server 2.0 beta
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[18]: Лекция Вирта в политехническом - впечатления
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 14.10.05 20:30
    Оценка:
    Здравствуйте, AVC, Вы писали:

    AVC>ИМХО, если есть "грабли", "бонус" кажется уже не таким притягательным.


    На самом деле, если выкинуть извращения, то практическая польза остается только в такой конструкции:
    int bufSize;
    while ((bufSize = stream.Read(...)) > 0)
        ...
    ... << RSDN@Home 1.2.0 alpha rev. 615 on Windows XP 5.1.2600.131072>>
    AVK Blog
    Re[10]: Лекция Вирта в политехническом - впечатления
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 14.10.05 20:31
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Кстати, Гуткнехт собирается Zonnon на нее перенести (потом). А то под .Net активные абъекты Zonnon-а уж очень не эффективно реализуются, под BlueBottle же всё "летать" будет.


    А не проще к стандартному CLR Host green threads подцепить?
    ... << RSDN@Home 1.2.0 alpha rev. 615 on Windows XP 5.1.2600.131072>>
    AVK Blog
    Re[10]: Лекция Вирта в политехническом - впечатления
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 15.10.05 22:20
    Оценка:
    C>А ставили Юникс на университетские машины потому, что он был
    C>ПОРТАБЕЛЬНЫМ. То есть перенести его на новую архитектуру не стоило
    C>больших проблем. И все благодаря С...

    Скорее потому, что его можно было изучать, в силу доступности исходников, как для "скачивания", так и для понимания. А потом Sun сообразил, что если поставлять свои машинки в университеты по низким ценам, то выпускники университетов разойдутся потом по конторам и станут живыми агитаторами за решения от Sun. A Sun'овские машинки были с Унихом внутри, как известно...
    Re[12]: Массивы и указатели в C
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 15.10.05 22:27
    Оценка:
    C>Нет, я знаю, что int a[5] ведет себя не совсем как простой указатель, но
    C>это объяснять мне здесь не хотелось.

    int a[5] ведет себя как константа типа "указатель на целое". Значением этой константы является адрес некоторого места в памяти, где может поместиться 5 целых чисел. И эти числа можно проинициализировать при объявлении.
    Re[13]: Массивы и указатели в C
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 15.10.05 22:32
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    >> Нет, я знаю, что int a[5] ведет себя не совсем как простой указатель, но

    >> это объяснять мне здесь не хотелось.

    ПК>Главное что реализованы массивы не через указатели, только индексируются через них.


    Эквиавалентность массивов и указателей видна на следующем примере:

    int foo( int array[5] )
    {
    return sizeof( array );
    }

    Как Вы думаете, что вернет эта функция?

    Однако что обидно, если написать так:

    int array[ 5 ];
    int foo = sizeof( array );

    то результат получится совсем другой. Этот пример показывает, что массивы и указатели все же не совсем эквиавалентны, и это один из примеров досадной нерегулярности языка C.
    Re[11]: Лекция Вирта в политехническом - впечатления
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 15.10.05 22:46
    Оценка:
    Здравствуйте, mefrill, Вы писали:

    M>Не согласен. Я преподавал Си не один год. И в университете студентам и дома полным неучам. Поэтому знаю точно о трудностях, которые при изучении Си встречаются. Об операторе сравнения было уже оговорено много и долго. Вот недавний пример, я на си программирую уже больше 10 лет, а написал в сравнении один = вместо двух. В результате полдня потратил в сложном алгоритме на лов ошибки.


    А Вы предупреждения в компиляторе включать не пробовали? Или есть еще компиляторы, которые не умеют давать предупреждения, когда присваивание используется в качестве условия в операторе ветвления или цикла?

    M>Уродство это полное синтаксическое. Или синтаксис объявлений. С какой стати в объявлении массива имя переменной стоит внутри объявления типов?


    Это правда. Такое впечатление, что Ричи сначала придумал алгоритм, с помощью которого он будет парсить объявления типов, а потом уже стал задумываться, как получившимся синтаксисом пользоваться

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


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

    Однако надо сказать, что низкоуровневость понятия памяти торчит из любого языка, в котором есть переменные и присваивания (а не значения, как в чистой функциональщине). C, в отличии от многих, по крайней мере в этом вопросе честен.
    Re[12]: Лекция Вирта в политехническом - впечатления
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 15.10.05 22:57
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Или, например, взять GC — системное программирование с ним просто будет

    C>невозможно.

    Это спорное утверждение. Существует экспериментальный проект — www-сервер, полностью написанный на ML, включая драйвера сетевых карт, TCP-стек и собственно www-сервер. В ML нет доступа к ручному управленую памятью. Т.е., совсем нет

    >> И в университете студентам и дома полным неучам. Поэтому знаю точно о

    >> трудностях, которые при изучении Си встречаются. Об операторе
    >> сравнения было уже оговорено много и долго. Вот недавний пример, я на
    >> си программирую уже больше 10 лет, а написал в сравнении один = вместо
    >> двух.

    C>Это такая фигня — ошибка того же класса, что и and вместо or.


    Нет, не такого же. Пропустить (или вставить лишний) '=' можно просто промахнувшись по клавише. and вместо or просто так не напишешь.

    C>1. Сишные функции и переменные экспортируются по имени, в

    C>экспортированой сигнатуре отсутствует информация о типах (т.е. нет
    C>проблем с несовместимым ABI).

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

    C>2. Сишные структуры можно располагать в памяти с точностью до _бита_

    C>(битовые поля, однако).

    Это тоже не верно — порядок размещения битовых полей в памяти не определен, и реально различается у разных компиляторов (особенно если чуть-чуть выйти из узкого мирка 80x86-х процессоров).

    C>3. Никакого GC и исключений (нет проблем с ABI).


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

    C>4. Есть примитивы для вызова функций по указателю и т.п.

    C>5. Арифметика указателей (основное Cшное тождество: a[i]==*(a+i)==i[a]).

    Я не уверем, что возможность написать 3[ "abcdef" ] является достоинством языка. Такой записью разве что студентов пугать на экзамене

    >> C>А может все-таки из-за достоинств С?

    >> Может быть и из-за достоинств. Они в Си, несомненно, есть. Но,
    >> возносить эти достоинтсва в абсолют и видеть в них единственную и
    >> главную причину его популярности я бы не стал. Считаю, что это
    >> необъективно.

    C>Тем не менее, даже сейчас нечем полностью заменить С. Даже у С++

    C>уже есть определнные недостатки по сравнению с С.

    У C++ есть очень много недостатков по сравнению с C. Строго говоря, ставить эти языки в один ряд не слишком-то корректно.
    Re[13]: Лекция Вирта в политехническом - впечатления
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 15.10.05 23:00
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Но это еще что. Массивы хотя бы понятны на взгляд (если привыкнуть). А вот объявление указателя на функцию или typedef для него это уже верх дебилизма! Я долго мучился пока привык к этому:

    VD>[c#]
    VD>void* (*pointerVarName)(void*);
    VD>typedef void* (*FuncPointerTypeName)(void*);

    Это еще что. Вы попробуйте написать type cast в указатель на функцию, да еще и с параметрами
    Re[14]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 16.10.05 01:00
    Оценка:
    Здравствуйте, Pzz, Вы писали:

    Pzz>Это еще что. Вы попробуйте написать type cast в указатель на функцию, да еще и с параметрами


    Вот потому я и программирую последнее время на Шарпе. В нем такой фигней заниматься не приходится.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[14]: Массивы и указатели в C
    От: Павел Кузнецов  
    Дата: 16.10.05 01:16
    Оценка:
    Pzz,

    > Эквиавалентность массивов и указателей видна на следующем примере:

    >
    > int foo( int array[5] )
    > {
    > return sizeof( array );
    > }
    >
    > Как Вы думаете, что вернет эта функция?

    Это типичное заблуждение: для этого конкретного случая (использование массивов при объявлении аргументов функции) существует специальное правило, гласящее, что аргумент имеет тип соответствующего указателя.

    > это один из примеров досадной нерегулярности языка C.


    Что есть, то есть.
    Posted via RSDN NNTP Server 2.0 beta
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[13]: Лекция Вирта в политехническом - впечатления
    От: Privalov  
    Дата: 16.10.05 06:36
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    C>>Тем не менее, даже сейчас нечем полностью заменить С.


    СГ>А чем же Modula-2 не подходит, автором или синтаксисом?


    Как писали в книгах по Модуле-2, она была призвана заменить Паскаль. Насколько эта цель достигнута — видно всем. Кстати, а нет ли у вас объяснения, почему? Видимо, по тем же причинам на нее не переходят с других языков.
    Re[15]: Лекция Вирта в политехническом - впечатления
    От: Cyberax Марс  
    Дата: 16.10.05 12:19
    Оценка:
    Pzz wrote:

    > C>ОС на управляемых языках — полно (экспериментальных и коммерческих).

    > C>Реально успешных сейчас — ноль. Пожалуй, Symbolics'ы были верхом успеха.
    > Утверждение было, что системное программирование невозможно. Я его
    > опроверг. О возможности написания коммерчески успешной ОС в
    > зависимости от языка программирования я бы предпочел не высказываться,
    > ибо как и почему зависит коммерческий успех от языка, я не знаю
    >

    > C>Я могу случайно вместо & поставить | (я как-то очень долго такую ошибку

    > C>искал в коде, который я писал в 3 часа ночи). Кроме того, такие ошибки
    > C>очень бросаются в глаза.
    > Это постараться надо — & и | в очень разных местах клавиатуры.

    Так точно так же надо постараться написать = вместо ==. Тем более, что
    все компиляторы об этом предупреждают.

    > C>Этих соглашений всего несколько штук (паскалевское, C-шное, WINAPI) — и

    > C>их поддерживают все компиляторы. Тем более, что для экспорта обычно
    > C>используют "системный" формат.
    > Скажите пожалуйста, какой компилятор поддерживает эти три соглашения
    > для big endian ARM'а?

    На big endian ARM соглашение WINAPI будет неактуальным, а для остальных
    двух — любой приличный компилятор (GCC, CodeWarrior, etc.).

    > C>В любом случае, эта проблема нааааааааамного проще несовместимого

    > C++ ABI.
    > А в чем конкретно заключается сложность ABI C++, Вы можете перечислить?

    1. Name mangling (как C++ные имена представляются в виде строк) —
    главная проблема.
    2. Exception interoperability.
    3. Object array format (как записывается длина массива объектов)
    4. Allocators interoperability (как new/delete взаимодействуют друг с
    другом).
    И т.п.

    > C>И тем не менее регулируется #pragma'ми. Тем более, что точное

    > размещение
    > C>обычно важно только для конкретной данной платформы.
    > Точное размешение обычно важно, когда 2 машинки собираются
    > обмениваться между собой этими данными в бинарном виде.

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

    Для обмена данными их проще приводить в какой-то единый формат.

    > C>У Java нет ABI как такового: .class-файлы — это просто по сути

    > C>распарсеный и почти необратаный Java-код.
    > И тем не менее. У Явы есть спецификация — нет проблем с совместимостью
    > (ну, в основном нет). У C нет спецификации ABI (вернее, нет единой
    > уважаемой всеми) — есть проблемы с совместимостью.

    Для Java эта задача тривиальна. Для С++ создание единого ABI —
    чрезвычайно сложная проблема.

    > C>Это тождество просто показывает указательную ориентированость языка С.

    > Я ничего не понял в этой фразе

    Это показатель того, что в С работа с указателями органично встроена в язык.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[13]: Массивы и указатели в C
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 16.10.05 12:55
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Cyberax,


    >>> int a[5] = { 0, 1, 2, 3, 4 };

    >>> как преобразовать данную конструкцию в эквивалент на указателях?

    >>
    >> int *a=(int*)alloca(5*sizeof(int));
    >> int f;
    >> for (f=0;f<5;f++) a[f]=f;
    >>


    ПК>А теперь то же самое в global scope...


    int* Init()
    {
        int i;
        
        for (i = 0; i < 5; i++)
            a[i] = i;
    }
    
    int* a = Init();


    То же мне проблема.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[15]: Массивы и указатели в C
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 16.10.05 12:55
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    >> это один из примеров досадной нерегулярности языка C.


    ПК>Что есть, то есть.


    Вообще-то в непоследовательности создателей С тут трудно упрекнуть. Как раз тут они доказывают, что массивов как таковых в С нет. А вот когда sizeof() возвращает что-то другое для массива — вот это уже непоследовательность.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[14]: Массивы и указатели в C
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 16.10.05 12:55
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>Скорее просто фича. А уж чем она оборачивается — проблемами или достоинствами — это от конкретного случая зависит.


    За такие "фичи" надо было руки отрывать и с работы увольнять.

    Что мелашо сделать полноценные массивы и их приведение к указателям?
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[16]: Массивы и указатели в C
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 16.10.05 12:55
    Оценка:
    Здравствуйте, AVC, Вы писали:

    AVC>Что касается самого форума (лекция Вирта), то многие посты выглядят так:

    AVC>"Мнение Вирта о языках программирования (функциональном программировании и т.д. и т.п.) не совпадает с моим.
    AVC>Значит, Вирт в этом не разбирается."
    AVC>Это забавно.

    Вообще-то о том как Вирт разбирается в том о чем говорит видно из его же слов. И совпадение с личным мнением тут как бы мало интересно.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[18]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 16.10.05 12:55
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>Чтобы было еще страшнее. В Ruby можно делать вот так:

    E>
    E>result = if 10 == a
    E>        do_something()
    E>    else
    E>        do_something_else()
    E>    end
    E>


    E>т.е. if -- это выражение, у которого так же есть свое значение.

    E>)

    Удивил ежа...

    В С-подобных языках это просто выражется через ? :.
    result = 10 == a ? do_something() : do_something_else();


    Насколько я понимаю в Руби многое является выражением. Потому и ";" нет. Да и return-ы не нужны. С одной стороны это хорошо, так как урпащает выражение мыслей в фунциональном стиле. С другой плохо так как приовдит к неочевидным побочным эффектам.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[17]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 16.10.05 12:55
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>А так?

    ПК>
    ПК>bool a = ...;
    ПК>bool b = ...;
    
    ПК>if ( a = b )
    ПК>{
    ПК>   . . .
    ПК>}
    ПК>


    А так это разумное выражение. А вот так:

    if (a == b)

    уже сомнительно.

    По крайней мере я ни разу не видел подобных ошибок. А вот в плюсах это грабли мимо которых никто не прошел.

    Что ты хочешь этим доказать?
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[19]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 16.10.05 12:55
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>На самом деле, если выкинуть извращения, то практическая польза остается только в такой конструкции:

    AVK>
    AVK>int bufSize;
    AVK>while ((bufSize = stream.Read(...)) > 0)
    AVK>    ...
    AVK>


    Да, вообще-то практической пользы и в других случаях море. Вот толко когда я писал на С++, то просто таки избегал присвоений в ифах, а на Шарпе пользуюсь этим сплошь и рядом.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[18]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 16.10.05 12:55
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Если я правильно помню грамматику Паскаля, там, вообще, присваивание не является expression, а является statement — т.е. о возвращаемом значении вообще говорить вообще бессмысленно, так же как о возвращаемом значении for или while (в Паскале — в некоторых других языках это вполне может иметь смысл). Внутри if, естественно, statement быть не может, только expression...


    VC6 вроде вообще не делал.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[10]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 16.10.05 12:55
    Оценка:
    Здравствуйте, Cyberax, Вы писали:


    C>Это, кстати, касается и Владовского примера ОСи на С#.


    Хинт. ОС содержит CLI-рантайм.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[14]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 16.10.05 13:14
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>ОС на управляемых языках — полно (экспериментальных и коммерческих).

    C>Реально успешных сейчас — ноль. Пожалуй, Symbolics'ы были верхом успеха.

    А можно назвать успешные ОС кроме Виндовс и Линукс? Уже у линукса будут огромные проблемы с популярностью. ОС вообще море. А популярных из них еденицы. Прийдет время будут и популярные управляемые ОС. Пок что они только эксперементы. Но и Юникс когда-то был эксперементом.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[16]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 16.10.05 15:34
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    >> C>ОС на управляемых языках — полно (экспериментальных и коммерческих).

    >> C>Реально успешных сейчас — ноль. Пожалуй, Symbolics'ы были верхом успеха.
    >> А можно назвать успешные ОС кроме Виндовс и Линукс?

    C>Symbian, *BSD, Solaris...


    Назвать их популярными у меня бы язык не повернулся. Хотя Symbian может и можно.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[20]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 16.10.05 15:34
    Оценка:
    Здравствуйте, eao197, Вы писали:

    VD>>Удивил ежа...


    E>Да тебя удивишь. Ты же иногда часто не понимаешь, о чем речь вообще идет.


    И что же тут не понятного?

    VD>>В С-подобных языках это просто выражется через ? :.


    E>В Ruby так же есть ? :. С таким же смыслом как в C-подобных языках.


    И? Жаль еще 5 вариантов не сделали.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[15]: Лекция Вирта в политехническом - впечатления
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 16.10.05 16:12
    Оценка:
    VladD2 wrote:
    >
    > Pzz>Это еще что. Вы попробуйте написать type cast в указатель на
    > функцию, да еще и с параметрами
    >
    > Вот потому я и программирую последнее время на Шарпе. В нем такой фигней
    > заниматься не приходится.

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

    Можно, конечно, сделать union из указателей на функции разных типов. Это
    будет type safe, и все такое. Плохо это тем, что никакой реальной type
    safety этот union не добавляет, т.е. статическая типизация все равно
    невозможна (мы ведь решили, что способ вызова функции определяется в
    рантайме), но заставляет дублировать знание о всех возможных способах
    применения данного указателя еще в одном месте, причем без всякой пользы.

    Как, интересно, эта проблема решается в C#?
    Posted via RSDN NNTP Server 1.9
    Re[16]: Лекция Вирта в политехническом - впечатления
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 16.10.05 16:25
    Оценка:
    Cyberax wrote:
    >
    >> C>Этих соглашений всего несколько штук (паскалевское, C-шное, WINAPI) — и
    >> C>их поддерживают все компиляторы. Тем более, что для экспорта обычно
    >> C>используют "системный" формат.
    >> Скажите пожалуйста, какой компилятор поддерживает эти три соглашения
    >> для big endian ARM'а?
    >
    > На big endian ARM соглашение WINAPI будет неактуальным, а для остальных
    > двух — любой приличный компилятор (GCC, CodeWarrior, etc.).

    JFYI, на ARM'е свой джентельментский набор несовместимых соглашений о
    вызовах. И бардака там гораздо больше, чем на x86.

    Кстати, и на x86 бардака хватает. Как по-вашему устроена передача и
    возврат структуры по значению?

    >> C>В любом случае, эта проблема нааааааааамного проще несовместимого

    >> C++ ABI.
    >> А в чем конкретно заключается сложность ABI C++, Вы можете перечислить?
    >
    > 1. Name mangling (как C++ные имена представляются в виде строк) —
    > главная проблема.
    > 2. Exception interoperability.
    > 3. Object array format (как записывается длина массива объектов)
    > 4. Allocators interoperability (как new/delete взаимодействуют друг с
    > другом).
    > И т.п.

    Name mangling — казалось бы, достаточно один раз договориться (т.е.,
    проблема не техническая, а организационная).

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

    Object array format — а это что такое? Где в C++ в явном виде видно, что
    длина массива где-то хранится? Это внутреннее дело new[]/delete[]

    new/delete — проблемы нет, если вся программа использует какую-то одну
    пару. Именно так оно обычно и происходит.

    Более интересная проблема, это как из указателя на объект класса
    добраться до его методов. В частности, конструкторов/деструкторов (нужно
    для new/delete) и до виртуальных методов.

    >> C>И тем не менее регулируется #pragma'ми. Тем более, что точное

    >> размещение
    >> C>обычно важно только для конкретной данной платформы.
    >> Точное размешение обычно важно, когда 2 машинки собираются
    >> обмениваться между собой этими данными в бинарном виде.
    >
    > Точное расположение важно в системном программировании, когда оно точно
    > определено аппаратными протоколами работы. Собственно, для этого в
    > основном и используются битовые поля.
    >
    > Для обмена данными их проще приводить в какой-то единый формат.

    Если этот единый формар называется не XML, а IP datagram, то работа с
    битовыми полями все же нужна.

    >> C>У Java нет ABI как такового: .class-файлы — это просто по сути

    >> C>распарсеный и почти необратаный Java-код.
    >> И тем не менее. У Явы есть спецификация — нет проблем с совместимостью
    >> (ну, в основном нет). У C нет спецификации ABI (вернее, нет единой
    >> уважаемой всеми) — есть проблемы с совместимостью.
    >
    > Для Java эта задача тривиальна. Для С++ создание единого ABI —
    > чрезвычайно сложная проблема.

    Для Явы эта задача тривиальна только потому, что Sun сделал это один
    раз, и всем навязал свой стандарт. Для C++ этого никто не сделал. По
    разным причинам. Одна из них заключается в том, что ни у кого нет
    достаточного авторитета, чтобы это сделать.

    >> C>Это тождество просто показывает указательную ориентированость языка С.

    >> Я ничего не понял в этой фразе
    >
    > Это показатель того, что в С работа с указателями органично встроена в язык.

    Что, возможность написать 3[ "abcde" ] показывает, что в C работа с
    указателями встроена в язык?

    Я думаю, она показывает то, что авторы языка гораздо больше думали о
    компиляторе, чем о человеке, когда они придумывали синтаксис. Кстати,
    они этого по-моему особенно и не скрывали...
    Posted via RSDN NNTP Server 1.9
    Re[16]: Лекция Вирта в политехническом - впечатления
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 16.10.05 18:01
    Оценка:
    Здравствуйте, Pzz, Вы писали:

    Pzz>Как, интересно, эта проблема решается в C#?


    Делегаты + рефлекшен
    ... << RSDN@Home 1.2.0 alpha rev. 615 on Windows XP 5.1.2600.131072>>
    AVK Blog
    Re[17]: Лекция Вирта в политехническом - впечатления
    От: pagid Россия  
    Дата: 16.10.05 19:55
    Оценка:
    Здравствуйте, Pzz, Вы писали:

    Pzz>Я думаю, она показывает то, что авторы языка гораздо больше думали о

    Pzz>компиляторе, чем о человеке, когда они придумывали синтаксис. Кстати,
    Pzz>они этого по-моему особенно и не скрывали...

    Мне кажется, что Вирт тоже думал о компиляторе больше, чем о человеке, когда придумывал Паскаль, Модулу, Оберон ... , однако результат противоположный.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Re[18]: Лекция Вирта в политехническом - впечатления
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 16.10.05 22:12
    Оценка:
    pagid wrote:
    >
    > Pzz>Я думаю, она показывает то, что авторы языка гораздо больше думали о
    > Pzz>компиляторе, чем о человеке, когда они придумывали синтаксис. Кстати,
    > Pzz>они этого по-моему особенно и не скрывали...
    >
    > Мне кажется, что Вирт тоже думал о компиляторе больше, чем о человеке,
    > когда придумывал Паскаль, Модулу, Оберон ... , однако результат
    > противоположный.

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

    T.e. запись

    x ::= foo;

    может быть как присваиванием иксу значения переменной foo, так и вызовом
    функции без параметров, что уже мило.

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

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

    Вероятно поэтому в Паскале функции не могут возвращать указатели на
    функции
    Posted via RSDN NNTP Server 1.9
    Re[17]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 17.10.05 00:40
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Делегаты + рефлекшен


    Нафига тут рефлекшен?
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[16]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 17.10.05 00:40
    Оценка:
    Здравствуйте, Pzz, Вы писали:

    Pzz>Иногда (редко, но все же) хочется иметь возможность хранить/передавать

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

    Pzz>Можно, конечно, сделать union из указателей на функции разных типов. Это

    Pzz>будет type safe, и все такое. Плохо это тем, что никакой реальной type
    Pzz>safety этот union не добавляет,

    union в С/С++ и типобезопасность неимеют ничего общего. Типобезопасные юнионы есть только в ОКамле.

    Pzz> т.е. статическая типизация все равно

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

    Для татических решений можно вывернуться (хотя и раком) на шаблонах. Кое-как решения буста и Локи эту проблему решает. Но именно что кое-как.

    Pzz>Как, интересно, эта проблема решается в C#?


    В нем есть тип — delegate. Все методы с подходящей сигнатурой могут быть присвоены пермеменной типа delegate. Получается полная типобезопастность, динамичность и т.п. В общем, разработчики языка не стали выпендриваться, а просто встроили в язык нужную функциональность. А апологеты С++, в том числе автор и комитет, все бются над задачей доказательства ненужности этого и самодостаточности С++.

    Как это выглядит на шарпе:
    delegate int MyDelegateType(string str);
    
    ...
    // где-то... возможно в другой сборке.
    void SomeMethod(MyDelegateType func)
    {
        int i = func("123");
    }
    ...
    // где-то совсем в другом месте (возвожно компилируемом отдельно от первой сборки).
    obj.SomeMethod(int.Parse);
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[18]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 17.10.05 00:40
    Оценка:
    Здравствуйте, Cyberax, Вы писали:


    C>Вполне популярные, и активно развивающиеся. Кстати, есть еще куча всяких

    C>zOS и vxWorks.

    Агащазблин:
    http://globalstats.hotlog.ru/#OS

    http://www.hotlog.ru/hlpub.shtml?view=22

    Немаловажную роль играют и используемые операционные системы. Не секрет, что Windows лидирует в этом плане. Но смена его версий проходит достаточно динамично. Так, два года назад Windows 98 преобладал во всех отношениях – почти 60% пользователей отдавали ему предпочтение. Сейчас его доля сократилась до 21%, а в лидеры вышел Windows XP (55%). Также незначительный рост процентной доли наблюдается у Linux, но на него по-прежнему приходится менее 1% пользователей. Совсем немного пользователей (также менее 1%) предпочитают Macintosh, и при этом его доля постоянно снижается.

    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[19]: Лекция Вирта в политехническом - впечатления
    От: pagid Россия  
    Дата: 17.10.05 02:24
    Оценка:
    Здравствуйте, Pzz, Вы писали:


    Pzz>Если бы он это делал, в языке не было бы такой глупости, как то, что

    Pzz>вызов функции без параметров записывается без скобок после имени функции.

    Pzz>T.e. запись


    Pzz> x ::= foo;


    Pzz>может быть как присваиванием иксу значения переменной foo, так и вызовом


    Это не усложняет компилятор, но усложняет восприятие человеком



    Pzz>Вероятно поэтому в Паскале функции не могут возвращать указатели на

    Pzz>функции

    Сильно сомневаюсь, что Вирт видел небходимость в этом в момент создания Паскаля, особенно в рамках его минимальсткого подхода.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Re[14]: Массивы и указатели в C
    От: Павел Кузнецов  
    Дата: 17.10.05 04:35
    Оценка:
    VladD2,

    >>>> int a[5] = { 0, 1, 2, 3, 4 };

    >>>> как преобразовать данную конструкцию в эквивалент на указателях?

    >>>
    >>> int *a=(int*)alloca(5*sizeof(int));
    >>> int f;
    >>> for (f=0;f<5;f++) a[f]=f;
    >>>


    > ПК>А теперь то же самое в global scope...

    >
    > int* Init()
    > {
    >     int i;
    >     
    >     for (i = 0; i < 5; i++)
    >         a[i] = i;
    > }
    >
    > int* a = Init();
    >


    Где выделение памяти, где возврат значения в Init?
    Posted via RSDN NNTP Server 2.0 beta
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[19]: Лекция Вирта в политехническом - впечатления
    От: Cyberax Марс  
    Дата: 17.10.05 07:58
    Оценка:
    VladD2 wrote:

    > C>Вполне популярные, и активно развивающиеся. Кстати, есть еще куча

    > всяких
    > C>zOS и vxWorks.
    > Агащазблин:
    > http://globalstats.hotlog.ru/#OS

    Ну так по-вашему эксаваторы и подъемные краны — не нужны и
    незначительны. Их доля ведь оооочень маленькая среди остальных машин.

    > http://www.hotlog.ru/hlpub.shtml?view=22


    Домен .ru, однако.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[19]: Лекция Вирта в политехническом - впечатления
    От: AVC Россия  
    Дата: 17.10.05 08:20
    Оценка:
    Здравствуйте, Pzz, Вы писали:

    >> Мне кажется, что Вирт тоже думал о компиляторе больше, чем о человеке,

    >> когда придумывал Паскаль, Модулу, Оберон ... , однако результат
    >> противоположный.

    Pzz>Если бы он это делал, в языке не было бы такой глупости, как то, что

    Pzz>вызов функции без параметров записывается без скобок после имени функции.

    Pzz>T.e. запись


    Pzz> x ::= foo;


    Pzz>может быть как присваиванием иксу значения переменной foo, так и вызовом

    Pzz>функции без параметров, что уже мило.

    В Обероне, как и в Модуле-2, использование скобок при вызове функции обязательно.

    Pzz>Далее, там, где требуется указатель на функцию (например, функция может

    Pzz>быть передана как параметр другой функции), никакого специального значка
    Pzz>перед именем функции не требуется.

    Pzz>Теперь вопрос, как в таком синтаксисе описать функцию без параметров,

    Pzz>возвращающую указатель на функцию? Никак, потому что при ее
    Pzz>использовании невозможно будет понять по контексту, имеется ли в виду
    Pzz>она сама, или возвращаемое ей значение.

    Pzz>Вероятно поэтому в Паскале функции не могут возвращать указатели на

    Pzz>функции

    Здесь, скорее, наоборот.
    В Паскале не было процедурных переменных, поэтому и скобки при вызове функции не требовались.

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[17]: Лекция Вирта в политехническом - впечатления
    От: GlebZ Россия  
    Дата: 17.10.05 08:29
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>А апологеты С++, в том числе автор и комитет, все бются над задачей доказательства ненужности этого и самодостаточности С++.

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

    С уважением, Gleb.
    Re[19]: Лекция Вирта в политехническом - впечатления
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 17.10.05 08:48
    Оценка:
    Здравствуйте, Pzz, Вы писали:

    Pzz>может быть как присваиванием иксу значения переменной foo, так и вызовом

    Pzz>функции без параметров, что уже мило.

    Пожалуйста, не путайте Виртовский Паскаль 1970-года и творчество компании Borland не имеющего к Вирту ни какого отношения.

    Вирт исправил ошибки Паскаля создав язык Modula-2 (1979), а затем Oberon (1987).
    
    (* Modula/Oberon *)
    
    TYPE
      Proc = PROCEDURE (): INTEGER;
    
      PROCEDURE foo (): INTEGER;
      BEGIN
        RETURN 2718;
      END foo;
    
    VAR 
      x, y, z: INTEGER;
      f, g: Proc;
    BEGIN
      x := foo(); (* Вызов процедуры-функции foo и присвоение результата переменной x *)
      f := foo;   (* Присвоение значения процедурной переменной f равного значению процедурной константы foo *)
      y := f();   (* Вызов процедуры-функции связанной с f и присвоение результата переменной x *)
      g := f;     (* Присвоение значения одной (процедурной) переменной значению другой (процедурной) переменной *)
      z := g();
    ...
    Re[11]: Лекция Вирта в политехническом - впечатления
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 17.10.05 08:59
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    СГ>>Кстати, Гуткнехт собирается Zonnon на нее перенести (потом). А то под .Net активные абъекты Zonnon-а уж очень не эффективно реализуются, под BlueBottle же всё "летать" будет.


    AVK>А не проще к стандартному CLR Host green threads подцепить?


    Извините я не знаю что это такое, но если это как-то зависит от платформы, то такой вариант не подойдет. Ведь дело-то в чем: либо делать компилятор чисто под .Net генерирующий только safe модули и, стало быть, программы будут работать везде где есть .Net; либо нафиг наплевать на это .Net и сделать всё по своему, т.е. под Aos Bluebottle, где активности реализованы сразу поверх железа. Промежуточный вариант не особо-то нужен.
    Re[15]: Массивы и указатели в C
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 17.10.05 09:35
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Где выделение памяти, где возврат значения в Init?


    Блин, включи фантазию.

    int* Init()
    {
        int* a = (int*)mallac(5 * sizeof(int));
        int i;
        
        for (i = 0; i < 5; i++)
            a[i] = i;
        
        return a;
    }
    
    int* a = Init();
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[20]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 17.10.05 09:35
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Ну так по-вашему эксаваторы и подъемные краны — не нужны и

    C>незначительны. Их доля ведь оооочень маленькая среди остальных машин.

    По-моему, аналогии умеснтны только при объяснених. А в спорах идоказательствах — это является нечестным приемом ведения беседы.

    >> http://www.hotlog.ru/hlpub.shtml?view=22


    C>Домен .ru, однако.


    А ты из Африки?
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[18]: Лекция Вирта в политехническом - впечатления
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 17.10.05 11:12
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    AVK>>Делегаты + рефлекшен


    VD>Нафига тут рефлекшен?


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

    ... << RSDN@Home 1.2.0 alpha rev. 615 on Windows XP 5.1.2600.131072>>
    AVK Blog
    Re[16]: Массивы и указатели в C
    От: Павел Кузнецов  
    Дата: 17.10.05 12:58
    Оценка:
    VladD2,

    >
    > int* Init()
    > {
    >     int* a = (int*)mallac(5 * sizeof(int));
    >     int i;
    >     
    >     for (i = 0; i < 5; i++)
    >         a[i] = i;
    >     
    >     return a;
    > }
    >
    > int* a = Init();
    >


    Собственно, что и ожидалось. Это совсем не то же, что в оригинальном примере:
    int a[5] = { 0, 1, 2, 3, 4 };

  • По меньшей мере, память не там выделяется.
  • Кроме того, в первом случае используется static initialization, а в твоем -- dynamic initialization, что для global/namespace scope принципиально из-за порядка инициализации.
  • Ну и, естественно, в C это работать не будет, только в C++.
    Posted via RSDN NNTP Server 2.0 beta
  • Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[19]: Лекция Вирта в политехническом - впечатления
    От: Кодт Россия  
    Дата: 17.10.05 14:55
    Оценка:
    Здравствуйте, Pzz, Вы писали:

    Pzz>Если бы он это делал, в языке не было бы такой глупости, как то, что

    Pzz>вызов функции без параметров записывается без скобок после имени функции.

    Pzz>T.e. запись


    Pzz> x ::= foo;


    Pzz>может быть как присваиванием иксу значения переменной foo, так и вызовом

    Pzz>функции без параметров, что уже мило.

    Pzz>Далее, там, где требуется указатель на функцию (например, функция может

    Pzz>быть передана как параметр другой функции), никакого специального значка
    Pzz>перед именем функции не требуется.

    Pzz>Теперь вопрос, как в таком синтаксисе описать функцию без параметров,

    Pzz>возвращающую указатель на функцию? Никак, потому что при ее
    Pzz>использовании невозможно будет понять по контексту, имеется ли в виду
    Pzz>она сама, или возвращаемое ей значение.

    Во-первых, функция с полным комплектом параметров есть константа (а побочные эффекты — нафиг!).
    Функция без параметров, следовательно, сама по себе является константой. Контекст однозначный

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

    Некое подобие этого можно наблюдать в языках, где есть перегрузка приведения типов. Что-то вроде

    С++
    typedef function< double(*)(void) > numfunc;
    double itself(double x) { return x; }
    
    class LazyNum
    {
      numfunc fx;
    public:
      LazyNum(double x) : fx( bind(itself,x) ) {}
      LazyNum(numfunc f) : fx(f) {}
    
      operator double() const { return fx(); }
    };


    или какого-нибудь скриптового
    function force(x)
    {
      return isFunction(x) ? x() : x;
    }


    Но это плохо вяжется с механизмом выведения типов (кроме случая, когда язык полностью ленивый).
    Перекуём баги на фичи!
    Тоже "птичьи языки" не люблю!
    От: SilverCloud Россия http://rodonist.wordpress.com
    Дата: 17.10.05 17:07
    Оценка:
    Здравствуйте, Donz, Вы писали:

    D>по мне лучше использовать слова, чем значки, тем более, что эти значки не очень связаны по смыслу с их словесными аналогами.

    +
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Re[19]: Лекция Вирта в политехническом - впечатления
    От: Павел Кузнецов  
    Дата: 17.10.05 18:12
    Оценка:
    VladD2,

    > ПК>Если я правильно помню грамматику Паскаля, там, вообще, присваивание не является expression, а является statement — т.е. о возвращаемом значении вообще говорить вообще бессмысленно, так же как о возвращаемом значении for или while (в Паскале — в некоторых других языках это вполне может иметь смысл). Внутри if, естественно, statement быть не может, только expression...

    >
    > VC6 вроде вообще не делал.

    VC6 умел компилировать Паскаль?.. В Си++ в if определения могли быть очень давно, и VC++6 это поддерживал.
    Posted via RSDN NNTP Server 2.0 beta
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[20]: Лекция Вирта в политехническом - впечатления
    От: AVC Россия  
    Дата: 17.10.05 18:42
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Во-первых, функция с полным комплектом параметров есть константа (а побочные эффекты — нафиг!).

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

    Возьмем, например, генератор случайных чисел:
    unsigned int rand(void);

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[19]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 17.10.05 20:37
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>

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


    И?
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[21]: Лекция Вирта в политехническом - впечатления
    От: Кодт Россия  
    Дата: 17.10.05 20:47
    Оценка:
    Здравствуйте, AVC, Вы писали:

    К>>Во-первых, функция с полным комплектом параметров есть константа (а побочные эффекты — нафиг!).

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

    AVC>Возьмем, например, генератор случайных чисел:

    AVC>unsigned int rand(void);

    AVC>

    У этой функции есть скрытый параметр-монада. Если писать на чистом функциональном языке, то он тут же станет явным и обязательным

    Ну а если говорить на С++, то
    struct Rand
    {
      operator int() const { return rand(); }
    };
    
    const Rand r;      // константа :)
    const Rand rr = r; // опять константа
    assert(memcmp(&r, &rr, sizeof(Rand))==0); // они одинаковы до последнего байта!
    int x = rr, y = rr, z = rr; // и прекрасно вычисляются
    Перекуём баги на фичи!
    Re[20]: Лекция Вирта в политехническом - впечатления
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 17.10.05 20:52
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>И?


    Ну если в компайл тайме неизвестна сигнатура функции, то единственный способ создать на нее делегат это рефлекшен.
    ... << RSDN@Home 1.2.0 alpha rev. 615 on Windows XP 5.1.2600.131072>>
    AVK Blog
    Ты о Си или о Плюсах?
    От: SilverCloud Россия http://rodonist.wordpress.com
    Дата: 18.10.05 16:04
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Это одновременно высокоуровневый и низкоуровневый язык.

    Если о Си, то не понимаю, как может считаться высокоуровневым язык, в котором нет строк?
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Re[21]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 18.10.05 19:18
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Ну если в компайл тайме неизвестна сигнатура функции, то единственный способ создать на нее делегат это рефлекшен.


    По-моему, о сигнатуре вызова речи не шало. Человек не очень внятно, но вроде как намекал на точ то в С++ можно отностельно легко задать список ссылок на методы классов известных во время компиляции, но не так-то просто задать ссылку на метод класса который появляется в рантайме. У делегатов таких проблем нет.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[21]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 18.10.05 20:05
    Оценка:
    Здравствуйте, AVC, Вы писали:

    AVC>Возьмем, например, генератор случайных чисел:

    AVC>
    AVC>unsigned int rand(void);
    AVC>

    AVC>

    Это как раз пример использования побочного эффекта. Ее можно заменить на ленивую функцию возвращающую списко "случайных" чисел.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[12]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 18.10.05 20:05
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    AVK>>А не проще к стандартному CLR Host green threads подцепить?


    СГ>Извините я не знаю что это такое, но если это как-то зависит от платформы, то такой вариант не подойдет. Ведь дело-то в чем: либо делать компилятор чисто под .Net генерирующий только safe модули и, стало быть, программы будут работать везде где есть .Net; либо нафиг наплевать на это .Net и сделать всё по своему, т.е. под Aos Bluebottle, где активности реализованы сразу поверх железа. Промежуточный вариант не особо-то нужен.


    1. Зеленые потоки/файберы/легкие поток (в общем, как их не называй) присутствуют во втором фрэймворке.
    2. Ансэйф не делает код непереносимым. Просто он небезопасен и позволяет вручную управлять памятью.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[3]: Ты о Си или о Плюсах?
    От: Cyberax Марс  
    Дата: 19.10.05 07:44
    Оценка:
    Sinclair wrote:

    > C>Нет удобной поддержки строковых операций? Ну так делаем ее:

    > C>По желанию добавляем подсчет ссылок, резервирование места, итераторы и
    > C>т.п. Если хочется уже готового, то берем GLib.
    > Увы. Первое, на что ты напорешься — это interoperability. Потому, что
    > библиотека, скажем, ftp от крутых перцев, будет использовать свою
    > реализацию строки.

    И пусть, главное чтобы они наружу выставляли обычные C-style строки.

    > И тебе придется писать тонны согласующего кода.


    Всего строчки.

    > Второе, на что ты напорешься, это отсуствие инкапсуляции.


    PIMPL-идиома применима и для С, кроме того есть и другие методы скрыть
    реализацию. Конечно, все можно обойти — но тут уж сам виноват.

    > Ну и третье, на что ты напорешься — это на утечки. Потому, что надо

    > везде-везде, аккуратно-аккуратно не забывать вызывать метод удаления
    > строки. Никакого RAII в С не реализовано. Увы.

    Ну что делать, карма такая у С.

    С утечками можно бороться с помощью системы пулов (как в Apache,
    Subversion и новой Samba). Не очень хороший вариант, но работающий.

    > C>Ну а если вы считаете, что строки должны обязательно быть намертво

    > C>впаяны в язык, то спешу разочаровать — это совсем необязательно.
    > Это крайне желательно.

    Ладно, добавляем такую строку:
    magic_string s1,s2;
    
    s1="Blah-blah";
    s1+=312;
    s2=s1;
    assert(s2=="Blah-blah312");

    Возникают следующие вопросы:
    1. Откуда берется память под строки (какие функции используются)?
    2. Как кастомизировать выделение памяти?
    3. Как переходить от этих строк к С-style?
    4. Какие политики резервирования хранилища используются?
    И т.п.

    В общем, потребуется куча расширений синтаксиса языка ТОЛЬКО для работы
    со строками. А это некрасиво.

    > Вообще, практика показала, что платформа просто обязана предоставлять

    > как можно более исчерпывающий набор примитивов для работы.

    Сомнительно.

    > Сколько у нас есть способов представить дату, если мы пишем программу

    > на C под WinAPI?

    Что-то около 10.

    > Сколько в плюсах есть способов записать массив байт в файл?


    Знаю штук 5.

    А вот платформы с Единственно Истинным Способом делать вещи получаются
    неэффективными. Спросите у Павла Дворкина об этом.

    > "Ничего, ведь каждый производитель может легко нарезать себе винтов и

    > гаек с нужными характеристиками", да?

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

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[20]: Лекция Вирта в политехническом - впечатления
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 19.10.05 07:52
    Оценка:
    Здравствуйте, AVC, Вы писали:

    Pzz>>Вероятно поэтому в Паскале функции не могут возвращать указатели на

    Pzz>>функции

    AVC>Здесь, скорее, наоборот.

    AVC>В Паскале не было процедурных переменных, поэтому и скобки при вызове функции не требовались.

    Ну однако, передать функцию как параметр было, по-моему, можно. Т.е., в каком-то виде продецурные переменные все же есть.
    Re[4]: Ты о Си или о Плюсах?
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 19.10.05 07:54
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Ну что делать, карма такая у С.

    Нет. Такая карма у языков, которые считают, что "намертво впаивать строки в язык необязательно".
    C>С утечками можно бороться с помощью системы пулов (как в Apache,
    C>Subversion и новой Samba). Не очень хороший вариант, но работающий.
    Я не в курсе, что такое система пулов; тем не менее, очень сомневаюсь, что существует хоть какая-то система, позволяющая автоматизировать управление памятью для pure С.

    C>Ладно, добавляем такую строку:

    C>
    C>magic_string s1,s2;
    
    C>s1="Blah-blah";
    C>s1+=312;
    C>s2=s1;
    C>assert(s2=="Blah-blah312");
    C>

    C>Возникают следующие вопросы:
    C>1. Откуда берется память под строки (какие функции используются)?
    Совершенно правильный вопрос. Он показывает важность встраивания управления памятью в платформу/язык. Это даже важнее, чем встраивание строк.
    C>2. Как кастомизировать выделение памяти?

    C>3. Как переходить от этих строк к С-style?

    Не надо от них никуда переходить. С-style — это абсолютное зло. Его не должно быть. Именно вместо него должна быть эта magic_string.

    C>В общем, потребуется куча расширений синтаксиса языка ТОЛЬКО для работы

    C>со строками. А это некрасиво.
    Во-первых, неясно, где же тут расширения синтаксиса. С++ представляет собой неплохую попытку остаться в рамках близкого синтаксиса. Там есть все — и приведение, и кастомизация всего чего угодно.
    Хотя, на мой взгляд, именно там и надо было запретить C-style строки как класс и стандартизовать хоть какую-то std::string, именно чтобы избежать проблем с интероперабельностью.

    C>Сомнительно.


    C>Что-то около 10.

    >> Сколько в плюсах есть способов записать массив байт в файл?
    C>Знаю штук 5.
    C>А вот платформы с Единственно Истинным Способом делать вещи получаются
    C>неэффективными. Спросите у Павла Дворкина об этом.
    Я не собираюсь спрашивать об этом у человека, который пока что не различает UB и выброс исключения.

    >> "Ничего, ведь каждый производитель может легко нарезать себе винтов и

    >> гаек с нужными характеристиками", да?

    C>Да, если метчики для нарезки резьб без проблем бы справлялись с

    C>инструментальной сталью и были бы готовые заготовки всех диаметров.
    Гм. Метчики и есть тот самый стандарт. Метчик — это System.String. Метчик — это std::string. Именно он — гарантия того, что твоя гайка ("Hello world") подойдет к чужому винту. А ты предлагаешь как раз способ состряпать по-быстрому метчик для своего проекта, и стряпать гайки им.
    1.1.4 stable rev. 510
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[5]: Ты о Си или о Плюсах?
    От: Cyberax Марс  
    Дата: 19.10.05 08:29
    Оценка:
    Sinclair wrote:

    > C>С утечками можно бороться с помощью системы пулов (как в Apache,

    > C>Subversion и новой Samba). Не очень хороший вариант, но работающий.
    > Я не в курсе, что такое система пулов; тем не менее, очень сомневаюсь,
    > что существует хоть какая-то система, позволяющая автоматизировать
    > управление памятью для pure С.

    Есть такие. Пулы действуют очень просто — при начале какого-то действия
    создаем пул, в нем происходят все выделения, в конце действия просто
    уничтожаем весь пул (такой mini-GC). Прекрасно работает во всяких
    демонах и серверах.

    > C>Возникают следующие вопросы:

    > C>1. Откуда берется память под строки (какие функции используются)?
    > Совершенно правильный вопрос. Он показывает важность встраивания
    > управления памятью в платформу/язык. Это даже важнее, чем встраивание
    > строк.

    А вот фига. Управление памятью в С встроить нельзя — потеряются
    низкоуровневые свойства.

    > C>3. Как переходить от этих строк к С-style?

    > Не надо от них никуда переходить.

    Надо, Федя, надо.

    > С-style — это абсолютное зло. Его не должно быть.


    Почему? Хотя я бы предпочел представление строк в виде пары указателей
    вместо одного указателя и ноля.

    > C>В общем, потребуется куча расширений синтаксиса языка ТОЛЬКО для работы

    > C>со строками. А это некрасиво.
    > Во-первых, неясно, где же тут расширения синтаксиса. С++ представляет
    > собой неплохую попытку остаться в рамках близкого синтаксиса. Там есть
    > все — и приведение, и кастомизация всего чего угодно.

    Ну и куча расширений синтаксиса и семантики.

    > Хотя, на мой взгляд, именно там и надо было запретить C-style строки

    > как класс и стандартизовать хоть какую-то std::string, именно чтобы
    > избежать проблем с интероперабельностью.

    А как быть с кастомными строками, например с flex_string'ом из
    Александреску? Как они будут интероперировать со стандартными строками?

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Re[21]: Лекция Вирта в политехническом - впечатления
    От: AVC Россия  
    Дата: 19.10.05 19:58
    Оценка:
    Здравствуйте, Pzz, Вы писали:

    AVC>>Здесь, скорее, наоборот.

    AVC>>В Паскале не было процедурных переменных, поэтому и скобки при вызове функции не требовались.

    Pzz>Ну однако, передать функцию как параметр было, по-моему, можно. Т.е., в каком-то виде продецурные переменные все же есть.


    Совершенно верно, использовать функции в качестве аргументов в Паскале можно было всегда.
    (Например, передавать f(x) в качестве параметра в подпрограмму численного интегрирования.)
    Но написать что-то вроде
    TYPE FuncWithoutArgs = PROCEDURE (): REAL;
    VAR
      f: FuncWithoutArgs;
      x: REAL;
    ...
      f := Random;
      x := f(); (* очередное случайное число *)

    было нельзя.
    Поэтому и не возникало и двусмысленности при использовании имени функции без скобок.
    Если оно встречалось в самой функции левой части оператора присваивания, то это означало возвращаемое значение (в Модуле-2 и Обероне для этого используется RETURN).
    Если оно встречалось в выражении, то означало вызов функции.
    С появлением в виртовских языках процедурных переменных потребовались обязательные скобки, чтобы отличить использование функции в качестве процедурной константы от вызова этой функции.

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[23]: Лекция Вирта в политехническом - впечатления
    От: WolfHound  
    Дата: 20.10.05 10:38
    Оценка:
    Здравствуйте, Трурль, Вы писали:

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


    Т>Вообще, можно было бы обойтись и без этого.

    ИМХО отсутствие скобок у функций без параметров это от лукавого.
    Я никогда не понимал (и не понимаю) зачем это было сделано. В конце концов пришлось просто запомнить.
    ... << RSDN@Home 1.1.4 beta 6a rev. 436>>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[24]: Лекция Вирта в политехническом - впечатления
    От: Кодт Россия  
    Дата: 20.10.05 11:22
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

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


    Т>>Вообще, можно было бы обойтись и без этого.

    WH>ИМХО отсутствие скобок у функций без параметров это от лукавого.
    WH>Я никогда не понимал (и не понимаю) зачем это было сделано. В конце концов пришлось просто запомнить.

    Возможно, чтобы упростить грамматику (которая у паскаля операторная):
    — арность скобок — строго 1
    — арность запятой — строго 2
    Поэтому конструкции f(x) и f(x,y,z) корректны, а f() — нет.

    Хотя арность begin-end варьируется от 0 до 1... впрочем, я уже не помню, может быть, для begin-end как-то особо разруливают.
    Перекуём баги на фичи!
    Re[25]: Лекция Вирта в политехническом - впечатления
    От: Трурль  
    Дата: 20.10.05 13:47
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Возможно, чтобы упростить грамматику (которая у паскаля операторная):


    Вряд-ли. В те времена мало кому приходило в голову ставить скобки, там где они вроде бы не нужны.
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.