Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: LaptevVV Россия  
Дата: 10.05.04 10:08
Оценка: 91 (12) +1 -1
http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm

ВНИМАНИЕ!
Каждый, кто хочет написать ответ в эту ветку, должен:
1) прочитать её полностью — возможно, что ваши мысли уже были изложены три года назад
2) задуматься — а кто вообще прочтёт ваш ответ среди 850 сообщений, в дискуссии, которая три года назад завершилась
3) сохранив намерение писать ответ — создать новую дискуссию и излагать свои мысли там

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

— Кодт
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: LaptevVV Россия  
Дата: 10.05.04 10:10
Оценка: :)
Здравствуйте, LaptevVV, Вы писали:

LVV>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm

Цитата!

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

Видите, чем приходится заниматься!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: LaptevVV Россия  
Дата: 10.05.04 10:13
Оценка: 18 (1)
Здравствуйте, LaptevVV, Вы писали:

LVV>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm


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

Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: LaptevVV Россия  
Дата: 10.05.04 10:19
Оценка: 15 (1) +2 -1
Здравствуйте, LaptevVV, Вы писали:

LVV>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm



Очевидно, перед нами в высшей степени устойчивый порочный круг: учителя не могут изменить свои курсы, т.к. они должны привлечь и доставить удовольствие студентам; студенты требуют то, что практикуется в промышленности; а индустрия применяет и воспроизводит то, чему обучены ее работники. Этот замкнутый круг напоминает ситуацию, описанную мной во введении к сообщению о Паскале в 1970 г.: вузы стремятся учить тому, что требует индустрия, а в индустрии практикуется то, чему ее работники выучились в вузах.

Порочный круг был однажды разорван, когда распространился Паскаль. При поддержке коллег-единомышленников и в упорном противостоянии рутинерам, Паскаль распространился в учебных заведениях и проник в индустрию. Это произошло несмотря на могучую конкуренцию со стороны индустрии и других больших организаций, в соперничестве с языками PL/1, Алгол 68 и Ада. Однако наследники Паскаля, существенно его превосходившие, Модула-2 и Оберон, не получили должного внимания среди преподавателей, и сами пали перед лицом самого недостойного из соперников — C. Самого недостойного, т.к. в этом языке были нарушены все открытые к тому времени принципы серьезного программирования. Он запутывает студентов, допуская разный смысл для x = y и y = x и принуждая всех писать x = = y вместо обычного x = y. Только за одни эти пороки он заслуживает изгнания из учреждений образования. Однако сей уродливый синтаксис был целиком воспроизведен в языке Java, принятие которого академическим сообществом произошло по меньшей мере отчасти благодаря этой преемственности.

Класссс!!!!!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: LaptevVV Россия  
Дата: 10.05.04 10:21
Оценка: 18 (1)
Здравствуйте, LaptevVV, Вы писали:

LVV>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm


Позвольте мне закончить выступление смелым предложением для этой просвещенной аудитории профессионалов преподавания. Я вижу в своем воображении образцовый учебник в качестве подходящего исходного пункта. Он должен удовлетворять следующим критериям:

Начинаться сжатым введением в основные понятия программного проектирования.
Использовать лаконичную формальную нотацию, строго определенную не более чем на примерно 20 страницах.
Основываясь на этой нотации, вводятся основные понятия итерации, рекурсии, логического утверждения <assertion> и инварианта.
Центральная тема — структурирование утверждений и типизация данных.
За этим следуют концепции упрятывания информации, модульности и проектирование интерфейсов, продемонстрированные образцовыми примерами.
Книга устанавливает терминологию, которая столь же интуитивна, сколь и точна.
Книга имеет умеренный размер.


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

Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Aquary Россия https://wmspanel.com/
Дата: 10.05.04 11:19
Оценка: 4 (2) +4
Здравствуйте, LaptevVV, Вы писали:

LVV>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm


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

немного сумбурно я написал.... но я сам сталкиваюсь с проблемой обучения младших курсов программированию и мнение подкреляется некоторой практикой... хоть и относительно небольшой
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming
https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
http://scm-notes.blogspot.com/ — Блог об управлении конфигурацией
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 10.05.04 11:34
Оценка: :))
Здравствуйте, LaptevVV, Вы писали:

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


LVV>>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm



LVV>

LVV>Очевидно, перед нами в высшей степени устойчивый порочный круг: учителя не могут изменить свои курсы, т.к. они должны привлечь и доставить удовольствие студентам; студенты требуют то, что практикуется в промышленности; а индустрия применяет и воспроизводит то, чему обучены ее работники. Этот замкнутый круг напоминает ситуацию, описанную мной во введении к сообщению о Паскале в 1970 г.: вузы стремятся учить тому, что требует индустрия, а в индустрии практикуется то, чему ее работники выучились в вузах.

LVV>Порочный круг был однажды разорван, когда распространился Паскаль. При поддержке коллег-единомышленников и в упорном противостоянии рутинерам, Паскаль распространился в учебных заведениях и проник в индустрию. Это произошло несмотря на могучую конкуренцию со стороны индустрии и других больших организаций, в соперничестве с языками PL/1, Алгол 68 и Ада. Однако наследники Паскаля, существенно его превосходившие, Модула-2 и Оберон, не получили должного внимания среди преподавателей, и сами пали перед лицом самого недостойного из соперников — C. Самого недостойного, т.к. в этом языке были нарушены все открытые к тому времени принципы серьезного программирования. Он запутывает студентов, допуская разный смысл для x = y и y = x и принуждая всех писать x = = y вместо обычного x = y. Только за одни эти пороки он заслуживает изгнания из учреждений образования. Однако сей уродливый синтаксис был целиком воспроизведен в языке Java, принятие которого академическим сообществом произошло по меньшей мере отчасти благодаря этой преемственности.

LVV>Класссс!!!!!

На этом же сайте http://www.inr.ac.ru/~info21/info/wirth_avia.htm:

Безопасность пилотов и пассажиров должна начинаться уже на уровне компиляторов.


Взрыв 4 июня 1996 г. ракеты Ариан-5, стоившей пол-миллиарда долларов, имел причиной программную ошибку, которую компилятор Оберона/Компонентного Паскаля просто не пропустил бы.

Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: bkat  
Дата: 10.05.04 11:41
Оценка: +2
Здравствуйте, Kh_Oleg, Вы писали:

K_O>

K_O>Взрыв 4 июня 1996 г. ракеты Ариан-5, стоившей пол-миллиарда долларов, имел причиной программную ошибку, которую компилятор Оберона/Компонентного Паскаля просто не пропустил бы.


Ну пропустил бы другую ошибку и ракета взорвалась бы на 2 сек позже.
Никогда ошибки не будут выявляться автоматически компиляторами или другими тулзами.
Просто сложность и объем кода настолько велик,
что даже одна ошибка на десяток миллионов строк кода может быть (и иногда становится)
роковой.
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: BiТ  
Дата: 10.05.04 11:54
Оценка: 75 (4) -2
Здравствуйте, LaptevVV, Вы писали:

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


LVV>>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm


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


LVV>[/q]


И продолжая мысль — хорошо подготовленные вдохновенные любители сделают и тех, и других ))
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: LaptevVV Россия  
Дата: 10.05.04 12:09
Оценка: +1 -3
Здравствуйте, BiТ, Вы писали:

LVV>>>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm


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


LVV>>[/q]


BiТ>И продолжая мысль — хорошо подготовленные вдохновенные любители сделают и тех, и других ))

Нет! Разница здесь должна быть такой же, как , например, в музыке. Ни один любитель не может играть так, как играет профессионал. И у нас так же должно быть. А пока — то, что вы сказали. Это — ненормально!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 10.05.04 12:11
Оценка:
Здравствуйте, bkat, Вы писали:

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


K_O>>

K_O>>Взрыв 4 июня 1996 г. ракеты Ариан-5, стоившей пол-миллиарда долларов, имел причиной программную ошибку, которую компилятор Оберона/Компонентного Паскаля просто не пропустил бы.


B>Ну пропустил бы другую ошибку и ракета взорвалась бы на 2 сек позже.

B>Никогда ошибки не будут выявляться автоматически компиляторами или другими тулзами.
Борис БАБАЯН. Защищенные информационные системы.

B>Просто сложность и объем кода настолько велик,

B>что даже одна ошибка на десяток миллионов строк кода может быть (и иногда становится)
B>роковой.
Речь идет о таких ошибках, которые компилятор МОЖЕТ обнаруживать. Ясно, что кривой дизайн никакой Оберон не исправит.
И здесь компилятор С++ заведомо проигрывает именно из-за невероятной сложности самого языка. И проще его сделать нельзя — стандрат однако!

Еще одна цитата оттуда же:

Отношение объемов описаний языков — 16 стр. для Оберона, 200 для Java и больше 1000 для C++.

Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: bkat  
Дата: 10.05.04 12:14
Оценка:
Здравствуйте, LaptevVV, Вы писали:

BiТ>>И продолжая мысль — хорошо подготовленные вдохновенные любители сделают и тех, и других ))

LVV>Нет! Разница здесь должна быть такой же, как , например, в музыке. Ни один любитель не может играть так, как играет профессионал. И у нас так же должно быть. А пока — то, что вы сказали. Это — ненормально!

Да, это ненормально.
Но если сравнить потребность в музыкантах-профессионалах и программистах,
тогда все станет на свои места.
Да, надо готовить профи, но их никогда не будет в нужном количестве.
Потому видимо перспективней развивать технологию.
Именно такую, когда и обезъяны смогут писать без ошибок.
В общем сверхзадача программирования — сделать так, чтобы программирование
как род деятельности с участием человека исчезла бы совсем и стала бы ненужной
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: LaptevVV Россия  
Дата: 10.05.04 12:21
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>Речь идет о таких ошибках, которые компилятор МОЖЕТ обнаруживать. Ясно, что кривой дизайн никакой Оберон не исправит.

Да, еще в 70-е годы все учебники про технологии программирования обошла знаменитая ошибка в программе на фортране, из-за которой тоже взорвалась ракета, стартовавшая с мыса Кеннеди. В Фортране можно было писать идентификаторы с пробелами (!!!!). Это приводило к таким супер-ляпам:

do i=1,100      // это оператор цикла
do i=1.100      // это - оператор присваивания

Оба — правильные операторы на фортране.
Элементарная опечатка оператора(человек, набивающий программу на перфокарту!). И компилятор это пропускает!
K_O>И здесь компилятор С++ заведомо проигрывает именно из-за невероятной сложности самого языка. И проще его сделать нельзя — стандрат однако!

Да, я уже приводил аналогичный пример в С++
double d;
d = 3,141592653;       // d равно 3, а не Пи


K_O>Еще одна цитата оттуда же:

K_O>

K_O>Отношение объемов описаний языков — 16 стр. для Оберона, 200 для Java и больше 1000 для C++.

Вот это, конечно, впечатляет! Аналогично было с паскалем и алголом-68.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: bkat  
Дата: 10.05.04 12:28
Оценка: 1 (1)
Здравствуйте, Kh_Oleg, Вы писали:

K_O>Речь идет о таких ошибках, которые компилятор МОЖЕТ обнаруживать.


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

Почему придется преодалевать эти ограничения? Да просто жизнь такая
Можно почитать форумы тут на RSDN и проследить, как много усилий тратиться на разные
хаки и трюки, которые, кстати говоря, очень часто вызывают восхищение и
считаются "красивыми" решениями.
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 10.05.04 12:49
Оценка:
Здравствуйте, bkat, Вы писали:

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


K_O>>Речь идет о таких ошибках, которые компилятор МОЖЕТ обнаруживать.


B>Какие ошибки может обнаруживать компилятор?

B>Их не так уж и много.
Зато какие!!! Тебе уже привели примеры на фортране и C++.

B>Я лично не очень верю в надежность программ, написанных на языках

B>с очень строгой типизацией.
Вера есть тогда, когда нет знания. (сорри, если задел)

B>Да, в простых случаях (студенческие программы)

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

B>Почему придется преодалевать эти ограничения? Да просто жизнь такая

B>Можно почитать форумы тут на RSDN и проследить, как много усилий тратиться на разные
B>хаки и трюки, которые, кстати говоря, очень часто вызывают восхищение и
B>считаются "красивыми" решениями.
Вот тот фундаментальный подход, о котором говорит Вирт, и который не всем кажется подходящим при обучении программированию, как раз и учит тому, как программировать без трюков и прочих "хрюков" и, в конечном счете, создавать простые и надежные программы.
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: AVM Россия  
Дата: 10.05.04 12:52
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>На этом же сайте http://www.inr.ac.ru/~info21/info/wirth_avia.htm:


K_O>

K_O>Безопасность пилотов и пассажиров должна начинаться уже на уровне компиляторов.


K_O>

K_O>Взрыв 4 июня 1996 г. ракеты Ариан-5, стоившей пол-миллиарда долларов, имел причиной программную ошибку, которую компилятор Оберона/Компонентного Паскаля просто не пропустил бы.


Подробнее о катастрофе Ариан-5 было написано в "Открытых системах" http://www.osp.ru/os/1998/06/21.htm#part_1.
IMHO "Контрактного Проектирования" помогает избежать подобных ошибок, но не есть панацея.
Надо внимательнее делать повторное использование кода и не забывать, что программировании одно очень известное слово пишется через два "п"
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: bkat  
Дата: 10.05.04 13:13
Оценка: +1
Здравствуйте, Kh_Oleg, Вы писали:

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


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


K_O>>>Речь идет о таких ошибках, которые компилятор МОЖЕТ обнаруживать.


B>>Какие ошибки может обнаруживать компилятор?

B>>Их не так уж и много.
K_O>Зато какие!!! Тебе уже привели примеры на фортране и C++.
Такие, и куда более замороченные, ошибки элементарно выявляются на code review.
А вот кто готов проводить такие ревью? А мало желающих, потому как скучно...

B>>Я лично не очень верю в надежность программ, написанных на языках

B>>с очень строгой типизацией.
K_O>Вера есть тогда, когда нет знания. (сорри, если задел)
Да нет, не задел...
Коллекционирование ошибок, их поиск и уничтожение — это мое хобби
на работе . Ошибок, на реальных проектах, я лично видел дофига.
Таких ошибок, которые смог бы найти компилятор, мне не попадались.
А если еще использовать что-то типа BoundsChecker, то вероятность
таких глупых ошибок практически нулевая.
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 10.05.04 13:29
Оценка:
Здравствуйте, AVM, Вы писали:

AVM>Подробнее о катастрофе Ариан-5 было написано в "Открытых системах" http://www.osp.ru/os/1998/06/21.htm#part_1.

КЛАСС!!! Это просто шедевр!

Однако, Ariane 5, в отличие от предыдущей модели, имел уже принципиально другую дисциплину выполнения предполетных действий – настолько другую, что работа рокового программного модуля после времени старта вообще не имела смысла. Однако, модуль повторно использовался без каких-либо модификаций – видимо из-за нежелания изменять программный код, который успешно работает.

Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: unintruder  
Дата: 10.05.04 13:31
Оценка:
Здравствуйте, LaptevVV, Вы писали:

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


LVV>>>>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm


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


LVV>>>[/q]


BiТ>>И продолжая мысль — хорошо подготовленные вдохновенные любители сделают и тех, и других ))

LVV>Нет! Разница здесь должна быть такой же, как , например, в музыке. Ни один любитель не может играть так, как играет профессионал. И у нас так же должно быть. А пока — то, что вы сказали. Это — ненормально!

Послушай передачу Троицкий и Ф.М. Достоевский. Артемий предоставлял зрителям альбомы человека, который всю жизнь живет в Финляндии, в лесу, то что он делает надо слышать, или альбом индуса, датированный 1976 годом, электроная музыка "продиджи+Моби" в одном флаконе, саунд более чем современный. Они не профессионалы, в том смысле, как ты это понимаешь, но результат на лицо. Я хотел сказать, что это слишком категоричное заявление, вот если бы ты привел в пример бокс — любительский против профессионального, это наверное более близко выразило твою мысль.

все имхо.
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: bkat  
Дата: 10.05.04 13:36
Оценка: 1 (1) +1

Наконец, как ни парадоксально это звучит, даже если бы компьютерные системы действительно были надежнее "традиционных", то это вовсе не обязательно означает, что они обеспечивают большую безопасность. Дело в том, что надежность ПО традиционно определяется степенью его соответствия зафиксированным в спецификациях требованиям; однако, часто бывает так, что ПО делает именно то, что ему и было предписано, и авария Ariane 5 – классический тому пример: и злополучное вычисление посторонней для полета величины горизонтального отклонения Инерциальной Платформы, и реакция на него вплоть до выведения из строя всех навигационных систем и бортовых компьютеров – все это случилось в полном соответствии с Требованиями, которые были частично унаследованы от Ariane 4 и не отражали новых реальностей. Более того, по сравнению с ошибками в коде именно спецификационные ошибки обычно ведут к более тяжелым последствиям – компетенции разработчиков ПО недостаточно для обнаружения таких ошибок. Программный комплекс – сложная система, однако реальный мир, отражаемый в спецификационных требованиях – еще более сложен и требует специальных экспертных знаний. Так что надежность ПО и его безопасность – понятия, хотя и перекрывающиеся, но не идентичные.


Что как раз иллюстрирует, что проблемы куда глубже,
чем ошибки, не выловленные компилятором.
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: LaptevVV Россия  
Дата: 10.05.04 13:42
Оценка: -1
Здравствуйте, unintruder, Вы писали:

U>Послушай передачу Троицкий и Ф.М. Достоевский. Артемий предоставлял зрителям альбомы человека, который всю жизнь живет в Финляндии, в лесу, то что он делает надо слышать, или альбом индуса, датированный 1976 годом, электроная музыка "продиджи+Моби" в одном флаконе, саунд более чем современный. Они не профессионалы, в том смысле, как ты это понимаешь, но результат на лицо. Я хотел сказать, что это слишком категоричное заявление, вот если бы ты привел в пример бокс — любительский против профессионального, это наверное более близко выразило твою мысль.

Композиторы, панимаешь!!!!
Обрати внимание: в так называемых творческих профессиях много зависит от таланта. В программировании — совершенно не то положение. Программисты гораздо больше похожи на исполнителей. чем на композиторов. Даже самая творческая элита — архитекторы — должны МНОГО учиться. Просто наша область СИЛЬНО СПЕЦИФИЧЕСКАЯ.
Просто у меня под началом работали программисты-любители (без образования). Извините, но человек, имеющий даже то образование, которое есть, в целом пишет лучше — это мой опыт. Конечно, феномены есть во всякой области, но это все-таки исключение из правил. А вирт ведет речь о массовой подготовке ПРОФЕССИОНАЛОВ, а не про отдельную индивидуальную подготовку. Тут я с ним полнорстью согласен.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 10.05.04 13:49
Оценка: +1
Здравствуйте, bkat, Вы писали:

B>Что как раз иллюстрирует, что проблемы куда глубже,

B>чем ошибки, не выловленные компилятором.
Естественно!
Поэтому давайте займемся теми проблемами, которые компиляторы не умеют выявлять, а то, что они могут найти — пусть находят по полной, а не заставляют терять время в многочасовых code review.
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.05.04 14:58
Оценка: +2 :)
Здравствуйте, bkat, Вы писали:

B>Но в реальной жизни на преодаление ограничений, накладываемые компилятором,

B>могут быть потрачены такие усилия, что вся надежность будет перечеркнута
B>и даже будет еще хуже.

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

B>Почему придется преодалевать эти ограничения? Да просто жизнь такая

B>Можно почитать форумы тут на RSDN и проследить, как много усилий тратиться на разные
B>хаки и трюки, которые, кстати говоря, очень часто вызывают восхищение и
B>считаются "красивыми" решениями.

Не те фору мы читаешь
... << RSDN@Home 1.1.3 beta 2 (mobile station) >>
AVK Blog
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Зверёк Харьковский  
Дата: 10.05.04 15:44
Оценка: 108 (11) +6
Здравствуйте, LaptevVV, Вы писали:

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


LVV>>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm



LVV>

LVV>...и сами пали перед лицом самого недостойного из соперников — C.LVV>


Ревнители частоты языка часто нападают на С++. Они полагают, что высшее достижение современной цивилизации — язык, построенный исключительно из атомов и скобок. По мнению этих террористов от синтаксиса, если простую переменную с первого взгляда невозможно отличить от вызова функции или макроса — это вообще не язык, а шарлатанство для развлечения праздной толпы. К сожалению, теория расходится с практикой. В реальной жизни толпа платит лишь за то, чтобы видеть языки, в которых разные идеи выглядят по-разному. «Простые и последовательные» языки никогда не пользовались особым успехом за стенками академий, а языки с блочной структурой овладели массами. Стоит ли этому удивляться? Ведь компьютерные языки приходится изучать и запоминать, а для этого используется то же серое вещество, с помощью которого мы изучаем и запоминаем естественные языки. Попробуйте-ка назвать хотя бы один естественный язык без существительных, глаголов и скобок! Я бы не рискнул. Все наши познания в лингвистике говорят о том, что эти «плохие» особенности только ускоряют изучение компьютерного языка и делают его более понятным. i++ во всех отношениях действительно понятнее, чем i:=i+1, а x=17+29 читается лучше, нежели (setq(x(+17, 29)). Речь идет не о строении компьютерного языка, а скорее о нашем собственном строении. Все уродства С++ — это в основном наши уродства. Когда вы научитесь понимать и любить его странности, когда перестанете беспокоиться о математической стройности, будет сделан ваш первый шаг к достижению элегантности в С++.

(c) Элджер
FAQ — це мiй ай-кью!
Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Ka3a4oK  
Дата: 10.05.04 16:21
Оценка: +2
Здравствуйте, LaptevVV, Вы писали:

LVV>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm


Не пашет ссылка
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 10.05.04 16:26
Оценка: +1 -5
Здравствуйте, Зверёк Харьковский, Вы писали:

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


Если бы всегда решала толпа, то Земля бы до сих пор оставалась на трех китах!

ЗХ>«Простые и последовательные» языки никогда не пользовались особым успехом за стенками академий, а языки с блочной структурой овладели массами. Стоит ли этому удивляться? Ведь компьютерные языки приходится изучать и запоминать, а для этого используется то же серое вещество, с помощью которого мы изучаем и запоминаем естественные языки.


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

ЗХ>Попробуйте-ка назвать хотя бы один естественный язык без существительных, глаголов и скобок! Я бы не рискнул. Все наши познания в лингвистике говорят о том, что эти «плохие» особенности только ускоряют изучение компьютерного языка и делают его более понятным. i++ во всех отношениях действительно понятнее, чем i:=i+1,


Уверен? А если i — это указатель на структуру? Так уж прям и понятно, что при этом произойдет!

ЗХ>а x=17+29 читается лучше, нежели (setq(x(+17, 29)). Речь идет не о строении компьютерного языка, а скорее о нашем собственном строении. Все уродства С++ — это в основном наши уродства. Когда вы научитесь понимать и любить его странности, когда перестанете беспокоиться о математической стройности, будет сделан ваш первый шаг к достижению элегантности в С++.

...когда перестанете заботиться о читабельности, надежности и простоте ваших программ, вот тогда вы сможете сказать, что дейстивтельно изучили С++.
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: bkat  
Дата: 10.05.04 16:31
Оценка: +2
Здравствуйте, Kh_Oleg, Вы писали:

ЗХ>>Попробуйте-ка назвать хотя бы один естественный язык без существительных, глаголов и скобок! Я бы не рискнул. Все наши познания в лингвистике говорят о том, что эти «плохие» особенности только ускоряют изучение компьютерного языка и делают его более понятным. i++ во всех отношениях действительно понятнее, чем i:=i+1,


K_O>Уверен? А если i — это указатель на структуру? Так уж прям и понятно, что при этом произойдет!


Ну тогда вообще надо предать анафеме идею полиморфизма.
Ато привыкли, понимаешь, символ + и для сложения int и double ипользовать.
Некоторые извращенцы перегружают + для строк и пытаются
таким образом конкатенировать строки
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 10.05.04 16:59
Оценка:
Здравствуйте, bkat, Вы писали:

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


ЗХ>>>Попробуйте-ка назвать хотя бы один естественный язык без существительных, глаголов и скобок! Я бы не рискнул. Все наши познания в лингвистике говорят о том, что эти «плохие» особенности только ускоряют изучение компьютерного языка и делают его более понятным. i++ во всех отношениях действительно понятнее, чем i:=i+1,


K_O>>Уверен? А если i — это указатель на структуру? Так уж прям и понятно, что при этом произойдет!


B>Ну тогда вообще надо предать анафеме идею полиморфизма.

B>Ато привыкли, понимаешь, символ + и для сложения int и double ипользовать.
B>Некоторые извращенцы перегружают + для строк и пытаются
B>таким образом конкатенировать строки

Не надо впадать в крайности. "+" — это символ сложения. В повседеневной жизни мы обычно складываем числа.
А вот "++" — это операция инкремента. Еще нужно объяснять, что это за операция такая, и что для чисел она означает увеличение на единицу. Ну а перегрузка операторов — это вообще из серии "некоторое действие, которое выглядит как сложение, но делает то, что знаю только я!"
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 10.05.04 18:16
Оценка: 1 (1) +1
K_O>И здесь компилятор С++ заведомо проигрывает именно из-за невероятной сложности самого языка. И проще его сделать нельзя — стандрат однако!

Господа, вы как-то незаметно переместились с С на С++. Компилятор мог пропустить ошибку на С — как раз из-за его простоты. А С++ — да, сложный язык, но как раз благодаря этому его защищенность намногу выше, чем у Паскаля, что меня иногда даже раздражает. Особенно в этом преуспела STL — ее разработчики прямо-таки помешались на "безопасности". (слово-то какое — сразу вспоминаешь борьбу с терроризмом)

Так что давайте отделим мух от котлет и не будем путать С и С++ (а то, что у них одинаково пишется оператор сравнения вряд ли может быть причиной взрыва ракеты)
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 10.05.04 18:31
Оценка: 9 (1) +3 -2
LVV> Я вижу в своем воображении образцовый учебник в качестве подходящего исходного пункта. Он должен удовлетворять следующим критериям:

LVV>Начинаться сжатым введением в основные понятия программного проектирования.

LVV>Использовать лаконичную формальную нотацию, строго определенную не более чем на примерно 20 страницах.
<...>

Глупости. Это был бы худший учебник, какой только можно придумать. Он был бы понятен только тому, кто уже знает язык.
Практика же показывает, что лучший учебник — это Керниган-Ритчи, который безо всяких формальных нотаций с первой же страницы предлагает писать простую программу.
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 10.05.04 18:33
Оценка:
A>кроме того, излишнее погружение в формальную сторону программирования (нотации и т.п.) — это тоже излишество, т.к. эта штука способна напугать многих школьников, которым интересно писать программы, но не интересно читать

Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Vadim B  
Дата: 10.05.04 18:42
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Да, еще в 70-е годы все учебники про технологии программирования обошла знаменитая ошибка в программе на фортране, из-за которой тоже взорвалась ракета, стартовавшая с мыса Кеннеди. В Фортране можно было писать идентификаторы с пробелами (!!!!). Это приводило к таким супер-ляпам:


LVV>
LVV>do i=1,100      // это оператор цикла
LVV>do i=1.100      // это - оператор присваивания
LVV>

LVV>Оба — правильные операторы на фортране.

Ну, вообще говоря, на том фортране (70-х годов) первое не было оператором цикла. Надо было написать что-нибудь типа
do 10 i=1,100

где 10 — метка последнего оператора цикла.
Но сути сообщения это, конечно, не меняет .
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 10.05.04 18:49
Оценка: +1
Здравствуйте, SWW, Вы писали:

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


LVV>>Начинаться сжатым введением в основные понятия программного проектирования.

LVV>>Использовать лаконичную формальную нотацию, строго определенную не более чем на примерно 20 страницах.
SWW><...>

SWW>Глупости. Это был бы худший учебник, какой только можно придумать. Он был бы понятен только тому, кто уже знает язык.

SWW>Практика же показывает, что лучший учебник — это Керниган-Ритчи, который безо всяких формальных нотаций с первой же страницы предлагает писать простую программу.
Только обучение по такому учебнику сродни обучению игры на фортепиано двумя пальцами — быстрый прогресс вначале и ступор при попытке сыграть что-либо серьезное.
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.05.04 19:38
Оценка: 27 (2) +2 -1 :)))
Здравствуйте, LaptevVV, Вы писали:

LVV>

LVV>и принуждая всех писать x = = y вместо обычного x = y.

LVV>Класссс!!!!!

Я конечно все понимаю, но докапаться до == и = не достойно серьезного человека. Ссылка твоя не работат, ты хоть бы назвал бы имя товарища, я в будущем относился к его словам с осторожностью.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.05.04 19:38
Оценка:
Здравствуйте, Зверёк Харьковский, Вы писали:

Вообще-то в посте Лаптева о кривости С в области нарушений правил безпастного программирования говорилось, а ты в качестве (видимо) контр-примера привел раезд на функциональные языки. Получается разговор глухого со слепым.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.05.04 19:38
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>

K_O>Взрыв 4 июня 1996 г. ракеты Ариан-5, стоившей пол-миллиарда долларов, имел причиной программную ошибку, которую компилятор Оберона/Компонентного Паскаля просто не пропустил бы.


А вот интересно как можно определить от чего взарвалась ракета если ее бортовой компьютер был уничтожен взрывом?
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: AVM Россия  
Дата: 10.05.04 19:47
Оценка: +1
Здравствуйте, VladD2, Вы писали:

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


K_O>>

K_O>>Взрыв 4 июня 1996 г. ракеты Ариан-5, стоившей пол-миллиарда долларов, имел причиной программную ошибку, которую компилятор Оберона/Компонентного Паскаля просто не пропустил бы.


VD>А вот интересно как можно определить от чего взарвалась ракета если ее бортовой компьютер был уничтожен взрывом?

Обычно, все "логи" дублируются на Землю через телеметрию
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.05.04 19:57
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>ты хоть бы назвал бы имя товарища, я в будущем относился к его словам с осторожностью.


Н.Вирт
... << RSDN@Home 1.1.3 beta 2 (mobile station) >>
AVK Blog
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.05.04 20:12
Оценка:
Здравствуйте, AVM, Вы писали:

AVM>Обычно, все "логи" дублируются на Землю через телеметрию


И как ты себе видишь логирование действий процессора? Это ж каую нужно информацию передавать и чем?

ЗЫ

В сообщении раядом есть ссылка на теру где сказано, что они сделали эмуляцию полета на компьютере. Т.е. по русски говоря написали полноценные тесты, тольк сделали они это после попытки ввода в эксплуатацию. А в их деле если с первого раза спутник не запустился, значит спутниковый спорт не для них...
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 10.05.04 21:27
Оценка: -2
Здравствуйте, Kh_Oleg, Вы писали:

K_O>Ну а перегрузка операторов — это вообще из серии "некоторое действие, которое выглядит как сложение, но делает то, что знаю только я!"


Во-во!!! В этом смысле i=i+1 ничуть не лучше и не хуже, чем i++. Это уже проблема семантики, но корень ее — в слишком фривольном синтаксисе. Без базару, C++ — очень красивый и очень выразительный язык, но какова цена! Перегрузка операторов — это частный случай запредельной фривольности C/C++ в части преобразований типов и арифметики. Если, скажем, запретить в C++ для обхода массивов пользоваться чем бы то ни было, кроме STL-итераторов, а в самих итераторах заменить operator++() на next(), читабельность кода только улучшится.

Пусть бросит в меня камень тот, кто ни разу не ошибался с диапазонами массивов и величинами инкремента указателей, забыв про тип этих указателей. И кто ни разу не копался в исходниках, написанных другим (квалифицированным, ответственным) программистом. Это свобода на грани анархии. Вспоминаю свои ощущения в процессе изучения Java после нескольких лет юзанья C++: просто счастье, что есть автоматические финалайзеры, есть сборщик мусора, зато нет перегрузки операторов и нет множественного наследования. Все просто, строго и красиво, программеры с шаловливыми руками — руки за спину!
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.05.04 21:43
Оценка: :)
Здравствуйте, AndrewVK, Вы писали:

VD>>ты хоть бы назвал бы имя товарища, я в будущем относился к его словам с осторожностью.


AVK> Н.Вирт


А, ну, этому можно.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 10.05.04 21:44
Оценка: +2 -1
Здравствуйте, VladD2, Вы писали:

VD>докапаться до == и = не достойно серьезного человека.


Ну а вот тут [при желании ] можно и поспорить. Что такое юзабилити, небось знаешь. Вот эти == и = как раз из той оперы. Если вокруг этих операторов столько ошибок, опечаток и сломанных копий, значит решение было неудобное, неестественное.

Это из той же оперы, что i+1 и i++. Запись удобная, но чревата ошибками по забывчивости: i — число или указатель. Взять бы паскалевский inc(i [,amount]) для чисел, добавить next(i [,amount]) для указателей и других итераторов. Вряд ли код сильно потеряет в читабельности (может, даже приобретет), зато так просто перепутать число с указателем уже не получится.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 10.05.04 21:52
Оценка: +2
Здравствуйте, Kh_Oleg, Вы писали:

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

K_O>Только обучение по такому учебнику сродни обучению игры на фортепиано двумя пальцами — быстрый прогресс вначале и ступор при попытке сыграть что-либо серьезное.

Все наоборот. На фортепиано учат постановке рук, удару, простейшим гаммам... Основа, сложнее, еще сложнее... И в программировании К-Р то же самое: простейший пример, сложнее, еще сложнее...

А учебник, состоящий из формальных нотаций в данном случае равносилен трехмесячному сидению за партами и выслушиванию полного курса сольфеджио и техники игры — ни касаясь инструмента, видя его разве что на висящем у доски плакате.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 10.05.04 21:55
Оценка:
Здравствуйте, VladD2, Вы писали:

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


Там в статье было сказано, что лог писался в EPROM, который смогли восстановить и прочитать.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.05.04 22:46
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Ну а вот тут [при желании ] можно и поспорить. Что такое юзабилити, небось знаешь. Вот эти == и = как раз из той оперы. Если вокруг этих операторов столько ошибок, опечаток и сломанных копий, значит решение было неудобное, неестественное.


Ошибки из-за опасных приведений типа. Попробуй сделай подобную ошибку в Шарпе.

ДГ>Это из той же оперы, что i+1 и i++. Запись удобная, но чревата ошибками по забывчивости: i — число или указатель. Взять бы паскалевский inc(i [,amount]) для чисел, добавить next(i [,amount]) для указателей и других итераторов. Вряд ли код сильно потеряет в читабельности (может, даже приобретет), зато так просто перепутать число с указателем уже не получится.


Длч Inc из дельфи тоже по фигу указатель это или что. Самый эффективный способ борьбы с указателями — это полный отказ от них.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 10.05.04 22:52
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Длч Inc из дельфи тоже по фигу указатель это или что.


Я имел в виду не дельфи как таковую, а некий гипотетический язык, где можно было бы раскидать операторы по типам операндов — без перегружаемых методов (так они кажись называются? )

VD>Самый эффективный способ борьбы с указателями — это полный отказ от них.

Это точно. Имхо Java рулит. А вот в C/C++ без них туго — системное программирование блин.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Шахтер Интернет  
Дата: 11.05.04 03:01
Оценка: +1
Здравствуйте, LaptevVV, Вы писали:

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


LVV>>>>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm


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


LVV>>>[/q]


BiТ>>И продолжая мысль — хорошо подготовленные вдохновенные любители сделают и тех, и других ))

LVV>Нет! Разница здесь должна быть такой же, как , например, в музыке. Ни один любитель не может играть так, как играет профессионал. И у нас так же должно быть. А пока — то, что вы сказали. Это — ненормально!

Вы знаете, Рихтер, как ни странно, был любителем. Он в консерватории фактически не учился, его из-за этого несколько раз порывались выгнать. Человек просто Играл. Положив на всех учителей.
А Давида Гильберта преподаватели в университете считали тупым. А Эйнштейн был простым низкооплачиваемым служащим патентного бюро. А Мендель! Ну и т.д.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: AVM Россия  
Дата: 11.05.04 04:04
Оценка: +1
Здравствуйте, VladD2, Вы писали:

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


AVM>>Обычно, все "логи" дублируются на Землю через телеметрию


VD>И как ты себе видишь логирование действий процессора? Это ж каую нужно информацию передавать и чем?


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

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


"Не читайте, батенька, перед обедом советских газет" (c) Преображенский
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 11.05.04 04:37
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>просто счастье, что есть автоматические финалайзеры


.... которые настоятельно не рекомендуется использовать в любых целях, кроме освобождения памяти. Про что многие привыкшие к безопасности программеры забывают и за это потом получают по балде.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.05.04 04:47
Оценка: :)
Здравствуйте, VladD2, Вы писали:
VD>Я конечно все понимаю, но докапаться до == и = не достойно серьезного человека. Ссылка твоя не работат, ты хоть бы назвал бы имя товарища, я в будущем относился к его словам с осторожностью.
Судя по тексту линка, это доклад некоего человека по фамилии Wirth. Я также могу догадаться, что его зовут Niklaus. См. http://www.cs.inf.ethz.ch/~wirth/
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 11.05.04 04:48
Оценка: 1 (1) +5 :)
Здравствуйте, LaptevVV, Вы писали:

LVV>[/q]

LVV>Класссс!!!!!


господа, ну сколько уже можно?
ругать С — это пошло просто до безобразия
тем не менее, им и его потомками пользовались, пользуются и будут пользоваться. Потому что ничего лучше пока не придумали. Языки, созданные теоретиками "на бумажке", почти никогда не оказываются востребованными — просто потому, что теоретики не имеют представления о реальных проблемах программирования и вместо этого борются с ветряными мельницами. А все разговоры о "порочном круге" — это просто паранойя. Появись язык, который реально, а не на словах лучше — все будут пользоваться именно им.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 11.05.04 04:54
Оценка: +3
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Это из той же оперы, что i+1 и i++. Запись удобная, но чревата ошибками по забывчивости: i — число или указатель. Взять бы паскалевский inc(i [,amount]) для чисел, добавить next(i [,amount]) для указателей и других итераторов. Вряд ли код сильно потеряет в читабельности (может, даже приобретет), зато так просто перепутать число с указателем уже не получится.


Если ты путаешь числа и указатели, то никакая запись тебе не поможет.
А откуда inc, ты знаешь? Это борландовское расширение языка, и появилось оно в районе TP 6-7. К Вирту никакого отношения не имеет.
И если уж заговорили про Вирта — за with ему надо бы отрубить руки по самые уши. Вот это точно пример очень плохого двусмысленного кода.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 04:58
Оценка: :))
Здравствуйте, Шахтер, Вы писали:

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

Ш>А Давида Гильберта преподаватели в университете считали тупым. А Эйнштейн был простым низкооплачиваемым служащим патентного бюро. А Мендель! Ну и т.д.

А Гедель был телеграфистом, что не помешало ему сделать Гильберта.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 05:03
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Здравствуйте, Дм.Григорьев, Вы писали:


ДГ>>просто счастье, что есть автоматические финалайзеры


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

Которая, кстати, сама освобождается, так что они как бы и не нужны.

Д> Про что многие привыкшие к безопасности программеры забывают и за это потом получают по балде.

Ну я себя к таким не относил, по крайней мере в части данного глюка... Я в целом про язык: приучает к дисциплине. Вот еще вспомнилось: объявление исключений в заголовках функций. Просто заставляет задумываться о корректной обработке всего, что неохота помещать в заголовок, тогда как на C++ можно было бы просто махнуть рукой и сказать: ну такого вылететь точно не может.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Bigger Российская Империя  
Дата: 11.05.04 05:16
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

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


Высказывание из ряда — Копай Нео, летать научишься (С) Шахтер, по-моему

Почему это код на С/С++ не читаемый, читаемый он, очень даже читаемый.
Я такой бред видел, что караул причем на Паскале, а не на С, на Дельфях то же прикольно бывает.
Ну есть такие конструкции i+++++i, но ведь никто никого так писать не заставляет.

Программист — это шаман..., подарите бубен!
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 11.05.04 05:34
Оценка:
ДГ>Это из той же оперы, что i+1 и i++. Запись удобная, но чревата ошибками по забывчивости: i — число или указатель.

Просветите меня, темного, в чем проблема-то, никак не пойму? Я много всякой гадости читал про С, а вот гадость про оператор ++ первый раз слышу. Во-первых, хоть я и много всяких ошибок делал — но забыть, какого типа переменная — это уж выходит за всякие рамки. А во-вторых — поблема-то когда возникает: когда i число или когда указатель?
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 05:35
Оценка: -1
Здравствуйте, Дарней, Вы писали:

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


LVV>>[/q]

LVV>>Класссс!!!!!


Д>господа, ну сколько уже можно?

Д>ругать С — это пошло просто до безобразия
Д>тем не менее, им и его потомками пользовались, пользуются и будут пользоваться. Потому что ничего лучше пока не придумали. Языки, созданные теоретиками "на бумажке", почти никогда не оказываются востребованными — просто потому, что теоретики не имеют представления о реальных проблемах программирования и вместо этого борются с ветряными мельницами. А все разговоры о "порочном круге" — это просто паранойя. Появись язык, который реально, а не на словах лучше — все будут пользоваться именно им.

Все это уже говорилось не раз. А C/C++ так прочно держится чисто по историческим причинам. Вон, на винде уже все под .NET толпами валят — видать он реально лучше. А unix как был изначально написан на C, так на C/C++ до сих пор и пишется.

Ругать и обсуждать — разные вещи. А в языке действительно масса проблем. Если ты считаешь, что это не так, значит ты просто мало писал на нем и не пробовал другие языки. Попробуй поработать на Java: имхо он гораздо лучше чем C++ (сама идеология языка, сырые библиотеки не в счет), на столько же, насколько C++ лучше старого паскаля.

Лично я думаю, что время C/C++ как языка для прикладных задач подходит к концу. Он будет жить еще долго просто за счет *nix-ов и прочих многолетних наработок, но за время его существования программирование проделало очень большой путь, и синтез этого опыта требует принципиально новых технологий — на данный момент .NET, Java, потом наверняка войдут в обиход математически доказываемые системы, про которые упоминалось в статье-разборе полетов mission-critical глюков. На бедный C++ всего этого уже не навесить, и сфера его использования будет сужаться до низкоуровнего системного программирования в связке с asm.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 05:38
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Здравствуйте, Дм.Григорьев, Вы писали:


ДГ>>Это из той же оперы, что i+1 и i++. Запись удобная, но чревата ошибками по забывчивости: i — число или указатель. Взять бы паскалевский inc(i [,amount]) для чисел, добавить next(i [,amount]) для указателей и других итераторов. Вряд ли код сильно потеряет в читабельности (может, даже приобретет), зато так просто перепутать число с указателем уже не получится.


Д>Если ты путаешь числа и указатели, то никакая запись тебе не поможет.

А ты никогда не путал?

Д>А откуда inc, ты знаешь? Это борландовское расширение языка, и появилось оно в районе TP 6-7. К Вирту никакого отношения не имеет.

Да какая разница? Я говорю о том, что язык должен быть интуитивно понятным. Это юзабилити. Без этого ни одну вещь нельзя нормально юзать.

Д>И если уж заговорили про Вирта — за with ему надо бы отрубить руки по самые уши. Вот это точно пример очень плохого двусмысленного кода.

А вот тут согласен на все сто.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 11.05.04 05:50
Оценка: 81 (4) +1 -1
Здравствуйте, Дм.Григорьев, Вы писали:

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


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

K_O>>Только обучение по такому учебнику сродни обучению игры на фортепиано двумя пальцами — быстрый прогресс вначале и ступор при попытке сыграть что-либо серьезное.

ДГ>Все наоборот. На фортепиано учат постановке рук, удару, простейшим гаммам... Основа, сложнее, еще сложнее... И в программировании К-Р то же самое: простейший пример, сложнее, еще сложнее...


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


К сожалению, так же поставлено в наших вузах обучение высшей математике: формальные определения, строгие теоремы, за которыми не видно сути... Помню, я понял матанализ только когда мне попался учебник Фихтенгольца примерно 1957 года выпуска. Он был написан не то что понятно — я бы сказал: увлекательно. Каждая тема начиналась с простого примера, затем он усложнялся, обобщался и только в конце (когда читателю все понятно) приводилось строгое доказательство теоремы в общем виде. А сейчас обучение начинается с общего вида. Например, дифференциальное уравнение — это уравнение вида: F(x, y(x), y'(x), y''(x), ... yn(x)) = 0 Вам все понятно? Из каких потребностей появилось, для чего оно предназначено, как решается? То же и с предлагаемым учебником по программированию.
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 06:03
Оценка:
Здравствуйте, SWW, Вы писали:

SWW>Помню, я понял матанализ только когда мне попался учебник Фихтенгольца примерно 1957 года выпуска. Он был написан не то что понятно — я бы сказал: увлекательно...


Уж не тот ли это, где на пальцах описываются отличия интеграла Лебега от Римана — на примере функции Дирихле? Хотя нет, тот был кого-то из наших академиков...
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 06:06
Оценка: -1 :)
Здравствуйте, SWW, Вы писали:


ДГ>>Это из той же оперы, что i+1 и i++. Запись удобная, но чревата ошибками по забывчивости: i — число или указатель.


SWW>Просветите меня, темного, в чем проблема-то, никак не пойму? Я много всякой гадости читал про С, а вот гадость про оператор ++ первый раз слышу. Во-первых, хоть я и много всяких ошибок делал — но забыть, какого типа переменная — это уж выходит за всякие рамки. А во-вторых — поблема-то когда возникает: когда i число или когда указатель?


Про тип переменной забыть трудно, а вот про размер объекта, на который она ссылается, можно. Хоть это и ламерская ошибка, но довольно распространенная. Пишешь i++, а указатель на 20 байт сдвигается. Может, это просто дурацкий пример той гадости, о которой я тут уже высказывался: слишком большая семантическая нагрузка на операторы (делающая семантику языковых конструкций сильно контекстно зависимой и потому далекой от интуитивной понятности) и слишком фривольное обращение с типами данных и памятью.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 11.05.04 06:14
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

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

ДГ>Которая, кстати, сама освобождается, так что они как бы и не нужны.

точно. то, что их оставили — это просчет разработчиков языка

Д>> Про что многие привыкшие к безопасности программеры забывают и за это потом получают по балде.

ДГ>Ну я себя к таким не относил, по крайней мере в части данного глюка... Я в целом про язык: приучает к дисциплине.

К дисциплине приучает С++. А Ява просто принудительно не дает косячить
Видел я программы, которые писали явисты на С++ — страшное зрелище....

Д>> Вот еще вспомнилось: объявление исключений в заголовках функций. Просто заставляет задумываться о корректной обработке всего, что неохота помещать в заголовок, тогда как на C++ можно было бы просто махнуть рукой и сказать: ну такого вылететь точно не может.


в С++ эти объявления тоже есть, только мало кем используются
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.05.04 06:27
Оценка: 1 (1)
Здравствуйте, Дарней, Вы писали:
Д>И если уж заговорили про Вирта — за with ему надо бы отрубить руки по самые уши. Вот это точно пример очень плохого двусмысленного кода.
Кстати да. Вариант из VB гораздо прозрачнее.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[10]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 06:29
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>К дисциплине приучает С++. А Ява просто принудительно не дает косячить

Д>Видел я программы, которые писали явисты на С++ — страшное зрелище....

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

А про программы явистов на C++ — к идеологии другого языка всегда трудно привыкать. Поди напиши что-нибудь серьезное на прологе после нескольких лет C++санья. Спецы по прологу тоже плеваться будут. А если те программы структурно кривые, значит такие программисты.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 11.05.04 07:04
Оценка: 1 (1) +2 :)
ДГ>>>Это из той же оперы, что i+1 и i++. Запись удобная, но чревата ошибками по забывчивости: i — число или указатель.

SWW>>Просветите меня, темного, в чем проблема-то, никак не пойму? Я много всякой гадости читал про С, а вот гадость про оператор ++ первый раз слышу. Во-первых, хоть я и много всяких ошибок делал — но забыть, какого типа переменная — это уж выходит за всякие рамки. А во-вторых — поблема-то когда возникает: когда i число или когда указатель?


ДГ>Про тип переменной забыть трудно, а вот про размер объекта, на который она ссылается, можно. Хоть это и ламерская ошибка, но довольно распространенная. Пишешь i++, а указатель на 20 байт сдвигается. Может, это просто дурацкий пример той гадости, о которой я тут уже высказывался: слишком большая семантическая нагрузка на операторы (делающая семантику языковых конструкций сильно контекстно зависимой и потому далекой от интуитивной понятности) и слишком фривольное обращение с типами данных и памятью.


Может я чего-то не понимаю, но по-моему это ерунда какая-то... Да, указатель сдвигается на размер структуры, а если написать i += 10 то на десять размеров структуры — по-моему вполне очевидное поведение: благодая этому указатель всегда указывает на структуру, а не на ее середину. А ты считаешь, было бы удобнее если бы указатель при инкременте сдвигался на один байт? Извини, но это просто глупо.
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 07:19
Оценка: +1 -1
Здравствуйте, SWW, Вы писали:

SWW> Может я чего-то не понимаю, но по-моему это ерунда какая-то... Да, указатель сдвигается на размер структуры, а если написать i += 10 то на десять размеров структуры — по-моему вполне очевидное поведение: благодая этому указатель всегда указывает на структуру, а не на ее середину. А ты считаешь, было бы удобнее если бы указатель при инкременте сдвигался на один байт? Извини, но это просто глупо.


Да нет же! Не надо на указывать на середину! Я пытаюсь протолкнуть идею, что операции над числами и указателями должны отличаться внешне, чтобы увеличить интуитивную понятность кода и избавиться от тех (совершаемых на автопилоте) ошибок, при которых как раз указатели и вылетают за границы данных или указывают на середину структуры.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 11.05.04 07:29
Оценка: +1
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Ругать и обсуждать — разные вещи. А в языке действительно масса проблем. Если ты считаешь, что это не так, значит ты просто мало писал на нем и не пробовал другие языки. Попробуй поработать на Java: имхо он гораздо лучше чем C++ (сама идеология языка, сырые библиотеки не в счет), на столько же, насколько C++ лучше старого паскаля.


Ява? не смешите мои тапочки
Из-за отсутствия шаблонов, нормальной альтернативы деструкторам и проблем с ковариантностью Ява никогда не станет для меня достойным языком... C# выглядит намного лучше, хотя 2.0 я пока руками не трогал
Это как раз идеологические проблемы, знаете ли

ДГ>Лично я думаю, что время C/C++ как языка для прикладных задач подходит к концу. Он будет жить еще долго просто за счет *nix-ов и прочих многолетних наработок, но за время его существования программирование проделало очень большой путь, и синтез этого опыта требует принципиально новых технологий — на данный момент .NET


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

ДГ> потом наверняка войдут в обиход математически доказываемые системы, про которые упоминалось в статье-разборе полетов mission-critical глюков.


очень узкая ниша — это максимум
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 07:38
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Из-за отсутствия шаблонов, нормальной альтернативы деструкторам и проблем с ковариантностью Ява никогда не станет для меня достойным языком... C# выглядит намного лучше, хотя 2.0 я пока руками не трогал

Д>Это как раз идеологические проблемы, знаете ли

Шаблоны скоро будут (может, уже есть). Про остальное спорить не буду — в реальных задачах не пригождалось. C# вообще не видел, но и не говорил я про него.

ДГ>>Лично я думаю, что время C/C++ как языка для прикладных задач подходит к концу. Он будет жить еще долго просто за счет *nix-ов и прочих многолетних наработок, но за время его существования программирование проделало очень большой путь, и синтез этого опыта требует принципиально новых технологий — на данный момент .NET


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


Новый. Попробуй воткни в старый C++ garbage collection — если и получится, то сложность языка зашкалит.

ДГ>> потом наверняка войдут в обиход математически доказываемые системы, про которые упоминалось в статье-разборе полетов mission-critical глюков.

Д>очень узкая ниша — это максимум

На ближайшее будущее — да. Но это самая важная ниша — в ней от глюков люди гибнут.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[11]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 11.05.04 07:38
Оценка: +1
Здравствуйте, Дм.Григорьев, Вы писали:

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


Д>>К дисциплине приучает С++. А Ява просто принудительно не дает косячить

Д>>Видел я программы, которые писали явисты на С++ — страшное зрелище....

ДГ>Я думаю, что без понимания идеологии программирования зеленый C++шник может написть не хуже. Ни один язык не научит писать хорошо структурированные программы. Но принудительный подход Явы мне больше по душе: прежде чем человек, пишуший на C++, приучится к дисциплине (еще не факт, что это вообще произойдет), он имеет шанс взорвать не один десяток космических ракет (конечно я утрирую, но идея, я думаю, понятна).


ДГ>А про программы явистов на C++ — к идеологии другого языка всегда трудно привыкать. Поди напиши что-нибудь серьезное на прологе после нескольких лет C++санья. Спецы по прологу тоже плеваться будут. А если те программы структурно кривые, значит такие программисты.


короче говоря, это выливается в очередной C++ vs Java
смысла в таких спорах все равно нет. Каждую задачу надо решать наиболее подходящим средством, только и всего.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 11.05.04 07:40
Оценка: +1 :)
ДГ>Да нет же! Не надо на указывать на середину! Я пытаюсь протолкнуть идею, что операции над числами и указателями должны отличаться внешне, чтобы увеличить интуитивную понятность кода и избавиться от тех (совершаемых на автопилоте) ошибок, при которых как раз указатели и вылетают за границы данных или указывают на середину структуры.

Интуитивная понятность — понятие субъективное (извини за каламбур). Мне, например, интуитивно понятно, что ++ сдвигает указатель на размер структуры. И то, что выглядит она как и операция над числами, не вызывает никаких проблем. Я вполне допускаю, что начинающему это может показаться неочевидным, но после пары примеров он также согласится, что сделано это правильно. В отличие от, например, приоритета операций &,| и ==,!= к чему я не могу привыкнуть до сих пор (но, к счастью, VC7.1 выдает предупреждения).

Что же касается выхода указатель за границы данных (или индекса за пределы массива, что одно и то же), то эта проблема не имеет ничего общего и инкреметтом указателя и ее решение гораздо сложнее чем принято считать.
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 07:44
Оценка: +1
Здравствуйте, SWW, Вы писали:


SWW>Интуитивная понятность — понятие субъективное (извини за каламбур). Мне, например, интуитивно понятно, что ++ сдвигает указатель на размер структуры. И то, что выглядит она как и операция над числами, не вызывает никаких проблем. Я вполне допускаю, что начинающему это может показаться неочевидным, но после пары примеров он также согласится, что сделано это правильно.



Тебе часто приходится разбираться в чужих исодниках?
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 11.05.04 07:46
Оценка: +1
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Шаблоны скоро будут (может, уже есть). Про остальное спорить не буду — в реальных задачах не пригождалось. C# вообще не видел, но и не говорил я про него.


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

ДГ>Новый. Попробуй воткни в старый C++ garbage collection — если и получится, то сложность языка зашкалит.


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

ДГ>На ближайшее будущее — да. Но это самая важная ниша — в ней от глюков люди гибнут.


не хочу показаться злодеем, но и дальше будут. Только из-за багов в математической модели
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 07:52
Оценка:
Здравствуйте, Дарней, Вы писали:

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


Согласен.

ДГ>>Попробуй воткни в старый C++ garbage collection — если и получится, то сложность языка зашкалит.

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

Ну эта проблема нерешаемая. Человеческий фактор. Потому мне кажется, что будущее за доказываемыми системами. Хотя доказывать для случаев предельной загрузки ресурсов... брр...

ДГ>>На ближайшее будущее — да. Но это самая важная ниша — в ней от глюков люди гибнут.

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

... М-да. Фактически выходит, что имеет смысл описывать модель только крупных блоков, рассматриваемых как черный ящик, иначе сложность модели превысит сложность реализующего ее кода. Воздержусь-ка я лучше от прогнозов.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: LaptevVV Россия  
Дата: 11.05.04 08:02
Оценка:
Здравствуйте, Vadim B, Вы писали:

VB>Ну, вообще говоря, на том фортране (70-х годов) первое не было оператором цикла. Надо было написать что-нибудь типа

VB>
VB>do 10 i=1,100
VB>

VB>где 10 — метка последнего оператора цикла.
Да, конечно! Спасибо! Я забыл, что там должна быть метка поставлена.
VB>Но сути сообщения это, конечно, не меняет .
Именно!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Romkin  
Дата: 11.05.04 08:09
Оценка:
Здравствуйте, VladD2, Вы писали:

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


K_O>>

K_O>>Взрыв 4 июня 1996 г. ракеты Ариан-5, стоившей пол-миллиарда долларов, имел причиной программную ошибку, которую компилятор Оберона/Компонентного Паскаля просто не пропустил бы.


VD>А вот интересно как можно определить от чего взарвалась ракета если ее бортовой компьютер был уничтожен взрывом?


http://www.osp.ru/os/1998/06/21.htm#part_1

Была же ссылка
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 11.05.04 08:13
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Попробуй воткни в старый C++ garbage collection — если и получится, то сложность языка зашкалит.


http://www.rsdn.ru/article/cpp/GCcpp.xml
Автор(ы): Михаил Чащин
Дата: 18.11.2002
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 08:25
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

ДГ>>Попробуй воткни в старый C++ garbage collection — если и получится, то сложность языка зашкалит.

OE>http://www.rsdn.ru/article/cpp/GCcpp.xml
Автор(ы): Михаил Чащин
Дата: 18.11.2002


М-да. С "зашкалит" я погорячился. "__gc" это прикольно, но все равно изврат: ползаешь по коду и вспоминаешь, какие объекты у тебя __gc, а какие надо вручную убивать. Надеюсь, мое исходное утверждение о невозможности до бесконечности наращивать и усложнять существующие технологии возражений не встретит.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 11.05.04 08:33
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>М-да. С "зашкалит" я погорячился. "__gc" это прикольно, но все равно изврат: ползаешь по коду и вспоминаешь, какие объекты у тебя __gc, а какие надо вручную убивать. Надеюсь, мое исходное утверждение о невозможности до бесконечности наращивать и усложнять существующие технологии возражений не встретит.


да, такое есть. На старичок С++ уже слишком много всего навешали, и не всегда хорошо это сделали.
Впрочем, умирать он все равно не собирается
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 11.05.04 08:48
Оценка:
SWW wrote:

> Просветите меня, темного, в чем проблема-то, никак не пойму? Я много

> всякой гадости читал про С, а вот гадость про оператор ++ первый раз
> слышу. Во-первых, хоть я и много всяких ошибок делал — но забыть, какого
> типа переменная — это уж выходит за всякие рамки. А во-вторых — поблема-то
> когда возникает: когда i число или когда указатель?
В редакторе vim тип переменной быстро вспоминается. Жмешь gd и ты прыгаешь к
определению переменной, Ctrl+o — возвращаешься туда, где был. Доли секунды


--
Bitte ein Bit
Posted via RSDN NNTP Server 1.9 alpha
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 11.05.04 08:52
Оценка:
Дм.Григорьев wrote:

> Про тип переменной забыть трудно, а вот про размер объекта, на который она

> ссылается, можно. Хоть это и ламерская ошибка, но довольно
> распространенная. Пишешь i++, а указатель на 20 байт сдвигается.
Прежде всего, указатель сдвигается к следующему элементу, а уже потом
(не поймите это буквально) на 20 байт. Редко соль именно в том, 20 это байт
или не 20. sizeof рулит
--
Bitte ein Bit
Posted via RSDN NNTP Server 1.9 alpha
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: INTP_mihoshi Россия  
Дата: 11.05.04 09:20
Оценка:
Здравствуйте, Дарней, Вы писали:

ДГ>>На ближайшее будущее — да. Но это самая важная ниша — в ней от глюков люди гибнут.


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


Месье не понимает смысла формального доказательства правильности. Если они сделаны не на бумажке, а с применением автоматических систем, вроде HOL или Isabella, то вероятность наличия багов в них меньше, чем вероятности наличия багов в железе или компиляторе. Которое, кстати, в последнее время этими же системами автоматических доказательств и проверяется, по крайней мере Intel.
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: glyph  
Дата: 11.05.04 09:28
Оценка:
Здравствуйте, LaptevVV, Вы писали:
LVV>Композиторы, панимаешь!!!!
LVV>Обрати внимание: в так называемых творческих профессиях много зависит от таланта. В программировании — совершенно не то положение. Программисты гораздо больше похожи на исполнителей. чем на композиторов. Даже
Не согласен. Программист тоже должен обладать талантом. Лингвиста. Почти писателя. Поэты, панимаешь!
Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 09:32
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Месье не понимает смысла формального доказательства правильности. Если они сделаны не на бумажке, а с применением автоматических систем, вроде HOL или Isabella, то вероятность наличия багов в них меньше, чем вероятности наличия багов в железе или компиляторе. Которое, кстати, в последнее время этими же системами автоматических доказательств и проверяется, по крайней мере Intel.


Это те самые, у которых ошибка деления была в пне? Впрочем, это шутка. В те времена наверное таких систем еще не было. Хочется надеятся, что так и есть, как ты сказал.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 11.05.04 10:31
Оценка: +1 -2
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Месье не понимает смысла формального доказательства правильности. Если они сделаны не на бумажке, а с применением автоматических систем, вроде HOL или Isabella, то вероятность наличия багов в них меньше, чем вероятности наличия багов в железе или компиляторе. Которое, кстати, в последнее время этими же системами автоматических доказательств и проверяется, по крайней мере Intel.


нет, это другой месье не понимает. А по каким критериям определяется и доказывается правильность?
Где гарантия, что в них нет ошибок?
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: beretta Россия icq: 138726397
Дата: 11.05.04 11:31
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm


По слухам во французких школах преподают Ocaml. Может он не самый передовой, может из ФЯ как бейсик во времена моей школы (конец 80-х). Но все же показательно.
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Курилка Россия http://kirya.narod.ru/
Дата: 11.05.04 11:36
Оценка:
Здравствуйте, beretta, Вы писали:

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


LVV>>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm


B>По слухам во французких школах преподают Ocaml. Может он не самый передовой, может из ФЯ как бейсик во времена моей школы (конец 80-х). Но все же показательно.


Нифига себе ты окамл с васиком конца 80-х сравнил...
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: beretta Россия icq: 138726397
Дата: 11.05.04 11:48
Оценка:
Здравствуйте, Курилка, Вы писали:

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


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


LVV>>>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm


B>>По слухам во французких школах преподают Ocaml. Может он не самый передовой, может из ФЯ как бейсик во времена моей школы (конец 80-х). Но все же показательно.


К>Нифига себе ты окамл с васиком конца 80-х сравнил...


Не теряй головы, я имею ввиду, что в конце 80 были языки попродвинутее, но нам преподавали бейсик. Так же и Ocaml может быть в этом плане не продвинутее Haskel или Erlang, но по крайней мере это уже ФЯ. Это у них ФЯ, а кто мне скажет что преподают сейчас в наших школах?
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: INTP_mihoshi Россия  
Дата: 11.05.04 12:23
Оценка: +2
Здравствуйте, Дарней, Вы писали:

Д>нет, это другой месье не понимает. А по каким критериям определяется и доказывается правильность?

Д>Где гарантия, что в них нет ошибок?

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

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

Все доказательства в automated proof system (ASP), грубо говоря, состоят из "унификаций" — подставления доказанный утверждений на место свободных переменных в других доказанных утверждений. "Автоматизация" при этом в первую очередь нужна не для поиска решений, а для исключения возможности ошибиться.
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mihailik Украина  
Дата: 11.05.04 13:08
Оценка: :)
ДГ>интеграла Лебега от Римана — на примере функции Дирихле?

Это как так? Дирихле не интегрируется Или это другой Дирихле?

Дирихле(x) = 0, если x рациональное
Дирихле(x) = 1, если x иррациональное
... << RSDN@Home 1.1.3 stable >>
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mihailik Украина  
Дата: 11.05.04 13:08
Оценка:
LVV>Ни один любитель не может играть так, как играет профессионал.

Ну это зря. Как раз для игры нужено не только профессионализм. И есть люди, играющие очень классно, но не считающиеся профессионалами.


LVV>И у нас так же должно быть. А пока — то, что вы сказали. Это — ненормально!


Проблема в том, что наука, которая может дать большое техническое преимущество, пока не готова.
... << RSDN@Home 1.1.3 stable >>
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mihailik Украина  
Дата: 11.05.04 13:08
Оценка: +1
LVV>А вирт ведет речь о массовой подготовке ПРОФЕССИОНАЛОВ, а не про отдельную индивидуальную подготовку. Тут я с ним полнорстью согласен.

Теоретически понятно. А что насчёт практики? Что конкретно может почерпнуть программист, какая такая теория полезная есть в активе?


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

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


По-моему сегодня действительно ценный соцзаказ на образование программиста это целевые тренинги по технологиям. "Технология А", 20 часов, методическая литература. Вот что принесёт отдачу.
... << RSDN@Home 1.1.3 stable >>
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mihailik Украина  
Дата: 11.05.04 13:08
Оценка: :)
B>В общем сверхзадача программирования — сделать так, чтобы программирование
B>как род деятельности с участием человека исчезла бы совсем и стала бы ненужной

Стопудово высказал!
... << RSDN@Home 1.1.3 stable >>
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mihailik Украина  
Дата: 11.05.04 13:08
Оценка:
LVV>

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


А за что дотнет-то так?
... << RSDN@Home 1.1.3 stable >>
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mihailik Украина  
Дата: 11.05.04 13:08
Оценка:
LVV>Видите, чем приходится заниматься!
LVV>

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

Вернее, если обучение даёт прибыль, его наверняка где-то купят.


У меня есть друзья в одном учебном центре в Киеве, подтягивают школьников. Математика в основном. Учат математике детей, которым нафиг эта математика не сдалась. Оно ясное дело, родители послали. Но так оно как-то и выходит, что денег зарабатывают не очень густо. Всё ругаются, что дети тупые. Смешные люди!
... << RSDN@Home 1.1.3 stable >>
Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 13:19
Оценка: 34 (1) +1
Здравствуйте, mihailik, Вы писали:

ДГ>>интеграла Лебега от Римана — на примере функции Дирихле?


M>Это как так? Дирихле не интегрируется Или это другой Дирихле?


M>Дирихле(x) = 0, если x рациональное

M>Дирихле(x) = 1, если x иррациональное

Дирихле не интегрируется по Риману, а по Лебегу — легко.

Интеграл Римана бьет на отрезки ось X, и для каждого отрезка берет среднее значение функции. Чтобы это среднее значение существовало, функция должна быть непрерывно. Иными словами, интеграл Римана работает для непрерывных функций или функций с ограниченным набором точек разрыва (не помню точно, конечным или не более чем счетным).

С другой стороны, интеграл Лебега бьет на отрезки ось Y, и для каждого отрезка подсчитывается мера множества попавших в нее точек. Так вот, мера Лебега нечувствительна к счетным множествам (счетные множества имеют меру ноль), а поскольку множество рациональных чисел счетно, то интеграл Лебега от функции Дирихле равен интегралу функции Y=1.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mihailik Украина  
Дата: 11.05.04 15:27
Оценка:
ДГ>С другой стороны, интеграл Лебега бьет на отрезки ось Y, и для каждого отрезка подсчитывается мера множества попавших в нее точек.

Подлючий какой метод! Таки молодец Лебег, упёк.
... << RSDN@Home 1.1.3 stable >>
Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mihailik Украина  
Дата: 11.05.04 15:27
Оценка:
Класс, продуктивное чтиво.

А всё-таки лучше публиковать ссылку сразу с аннотацией, а не потом прицепом.
... << RSDN@Home 1.1.3 stable >>
Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mihailik Украина  
Дата: 11.05.04 15:27
Оценка: +1

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

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


Учебник нифига не годится. Не твоя правда, Вирт.

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


Нужен работающий подход, дающий реальное преимущество. Нужно на этом подходе сделать проект, два. Размочить буржуев, задать жару толстопузым. И дальше все боссы кинутся в нужную сторону, успевай только с дороги уворачиваться.
... << RSDN@Home 1.1.3 stable >>
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mister-AK Россия  
Дата: 11.05.04 15:54
Оценка:
Здравствуйте, unintruder, Вы писали:

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


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


LVV>>>>>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm


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


LVV>>>>[/q]


BiТ>>>И продолжая мысль — хорошо подготовленные вдохновенные любители сделают и тех, и других ))

LVV>>Нет! Разница здесь должна быть такой же, как , например, в музыке. Ни один любитель не может играть так, как играет профессионал. И у нас так же должно быть. А пока — то, что вы сказали. Это — ненормально!

U>Послушай передачу Троицкий и Ф.М. Достоевский. Артемий предоставлял зрителям альбомы человека, который всю жизнь живет в Финляндии, в лесу, то что он делает надо слышать, или альбом индуса, датированный 1976 годом, электроная музыка "продиджи+Моби" в одном флаконе, саунд более чем современный. Они не профессионалы, в том смысле, как ты это понимаешь, но результат на лицо. Я хотел сказать, что это слишком категоричное заявление, вот если бы ты привел в пример бокс — любительский против профессионального, это наверное более близко выразило твою мысль.


U>все имхо.


ну сколько можно непонимать смысла слов

объясню как могу:

кодер, как и музыкальный-исполнитель ДОЛЖЕН быть ПРОФЕССИОНАЛОМ, как и боксер...
а вот
системный архитектор, как и композитор может быть и индусом, датированным 1976 годом, т.е. электроной музыкой "продиджи+Моби" в одном флаконе
т.е. тут уж многое не только от его проффесионализма, но и от его таланта зависит...

семантику моего смысла уловил?

вот! почти как Михайло Ломоносов последнюю фразу сказанул я — довели до ручки!
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mister-AK Россия  
Дата: 11.05.04 16:02
Оценка: +1
Здравствуйте, Шахтер, Вы писали:

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


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


LVV>>>>>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm


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


LVV>>>>[/q]


BiТ>>>И продолжая мысль — хорошо подготовленные вдохновенные любители сделают и тех, и других ))

LVV>>Нет! Разница здесь должна быть такой же, как , например, в музыке. Ни один любитель не может играть так, как играет профессионал. И у нас так же должно быть. А пока — то, что вы сказали. Это — ненормально!

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


знаем мне вот Рихтера тяжело слушать, потому как он играет при этом как ПОЛНЫЙ ПРОФЕСИОНАЛ (это я в переносном смысле — мне кажется у него очень холодный стиль, в противоположность к ряду приведу Горовица )
в общем — это для размышления — какая разница где учиться? Кулешов то же музшколу не кончал.. сразу в консу пошёл...
но они при этом ПРОФЕССИОНАЛЫ-САМОУЧКИ
а я предпочитаю тех ПРОФЕСИОНАЛОВ, которые уже могут себе позволить побыть немного ЛЮБИТЕЛЯМИ... точнее — профессионально поимпровизировать


Ш>А Давида Гильберта преподаватели в университете считали тупым. А Эйнштейн был простым низкооплачиваемым служащим патентного бюро. А Мендель! Ну и т.д.


а вот это уже не из разряда кодеров
Автор: mister-AK
Дата: 11.05.04

это — из разряда композиторов , которым жить-то на что то надо было
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.05.04 21:03
Оценка: :)
Здравствуйте, Sinclair, Вы писали:

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

S>Судя по тексту линка, это доклад некоего человека по фамилии Wirth. Я также могу догадаться, что его зовут Niklaus. См. http://www.cs.inf.ethz.ch/~wirth/

В общем какя-то Виртуальная личность.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Шахтер Интернет  
Дата: 12.05.04 00:20
Оценка: 27 (1)
Здравствуйте, Дм.Григорьев, Вы писали:

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


ДГ>>>интеграла Лебега от Римана — на примере функции Дирихле?


M>>Это как так? Дирихле не интегрируется Или это другой Дирихле?


M>>Дирихле(x) = 0, если x рациональное

M>>Дирихле(x) = 1, если x иррациональное

ДГ>Дирихле не интегрируется по Риману, а по Лебегу — легко.


ДГ>Интеграл Римана бьет на отрезки ось X, и для каждого отрезка берет среднее значение функции. Чтобы это среднее значение существовало, функция должна быть непрерывно. Иными словами, интеграл Римана работает для непрерывных функций или функций с ограниченным набором точек разрыва (не помню точно, конечным или не более чем счетным).


Если быть точным, функция интегрируема по Риману на отрезке тогда и только тогда, когда она ограничена на этом отрезке и Лебегова мера точек её разрыва равна нулю. Теорема Дарбу, если мне память не изменяет.

ДГ>С другой стороны, интеграл Лебега бьет на отрезки ось Y, и для каждого отрезка подсчитывается мера множества попавших в нее точек. Так вот, мера Лебега нечувствительна к счетным множествам (счетные множества имеют меру ноль), а поскольку множество рациональных чисел счетно, то интеграл Лебега от функции Дирихле равен интегралу функции Y=1.


Угу. Хорошее обяснение.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[10]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Шахтер Интернет  
Дата: 12.05.04 00:20
Оценка:
Здравствуйте, mihailik, Вы писали:

ДГ>>С другой стороны, интеграл Лебега бьет на отрезки ось Y, и для каждого отрезка подсчитывается мера множества попавших в нее точек.


M>Подлючий какой метод! Таки молодец Лебег, упёк.


???
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Шахтер Интернет  
Дата: 12.05.04 00:40
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

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


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


LVV>>>[/q]

LVV>>>Класссс!!!!!


Д>>господа, ну сколько уже можно?

Д>>ругать С — это пошло просто до безобразия
Д>>тем не менее, им и его потомками пользовались, пользуются и будут пользоваться. Потому что ничего лучше пока не придумали. Языки, созданные теоретиками "на бумажке", почти никогда не оказываются востребованными — просто потому, что теоретики не имеют представления о реальных проблемах программирования и вместо этого борются с ветряными мельницами. А все разговоры о "порочном круге" — это просто паранойя. Появись язык, который реально, а не на словах лучше — все будут пользоваться именно им.

ДГ>Все это уже говорилось не раз. А C/C++ так прочно держится чисто по историческим причинам. Вон, на винде уже все под .NET толпами валят — видать он реально лучше. А unix как был изначально написан на C, так на C/C++ до сих пор и пишется.


Да я бы не сказал, что валят. Лучше он только для определённого круга задач.

ДГ>Ругать и обсуждать — разные вещи. А в языке действительно масса проблем. Если ты считаешь, что это не так, значит ты просто мало писал на нем и не пробовал другие языки. Попробуй поработать на Java: имхо он гораздо лучше чем C++ (сама идеология языка, сырые библиотеки не в счет), на столько же, насколько C++ лучше старого паскаля.


ДГ>Лично я думаю, что время C/C++ как языка для прикладных задач подходит к концу.


Как сказал Марк Твен, слухи о моей смерти сильно преувеличены.

ДГ>Он будет жить еще долго просто за счет *nix-ов и прочих многолетних наработок, но за время его существования программирование проделало очень большой путь, и синтез этого опыта требует принципиально новых технологий — на данный момент .NET, Java, потом наверняка войдут в обиход математически доказываемые системы, про которые упоминалось в статье-разборе полетов mission-critical глюков. На бедный C++ всего этого уже не навесить, и сфера его использования будет сужаться до низкоуровнего системного программирования в связке с asm.


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

Вопрос на засыпку -- многие ли программисты знают, что такое интеграл Лебега?
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Шахтер Интернет  
Дата: 12.05.04 01:20
Оценка: 60 (11) -2 :))
Здравствуйте, LaptevVV, Вы писали:

LVV>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm


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

2) По серьёзней. Паскаль разрабатывался в своё время под конкретную технологию компиляции. С c помощью этой технологии откомпилировать нельзя. Вот по этой причине Пакскаль компилируется быстрее, зато люди предпочли писать программы на C. Вирт создал язык для машины, не для человека. Это вопрос не формальной строгости, а психологии восприятия. Вот поэтому он и проиграл.

3) Попробую сформулировать свою мысль. Не уверен, что делаю это вполне ясно.
Возьмем, для примера, современную математику. Математика НЕ строится на базе какого-то формального языка. Хотя технически это можно сделать, причем соответствующий язык будет попроще Паскаля.
Вот только данный путь почему-то не привлекает никого. Потому что если так работать, то доказать можно будет разве что 2+2=4. Не годится такой подход для сложных задач. Математики предпочитают работать с очень усложнённым и не формализованным языком(языками) для выражения своих мыслей. С++ до него ой как далеко (про остальных вообще помалкиваем в тряпочку). Если кто выдел хорошо изданные книги по современной математике -- обратите на количество разных шрифтов, которое там используется.
И в программировании мы наблюдаем то же самое. C++ гораздо более подходит для создания больших и сложных систем, чем всякие Жабы. И я думаю, дальше будет только хуже в этом смысле. Эволюция языков программирования будет идти в сторону сложности и меньшей формальности. Прямо в противоположном направлении, которое хочет тов. Вирт.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[10]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 12.05.04 03:51
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

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


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


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


INT>Все доказательства в automated proof system (ASP), грубо говоря, состоят из "унификаций" — подставления доказанный утверждений на место свободных переменных в других доказанных утверждений. "Автоматизация" при этом в первую очередь нужна не для поиска решений, а для исключения возможности ошибиться.


это всё замечательно звучит, но на практике люди имеют обыкновение ошибаться. Заниматься моделированием, составлением набора аксиом будут все те же люди. Вывод очевиден....
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 12.05.04 03:53
Оценка: :)
Здравствуйте, bkat, Вы писали:

B>В общем сверхзадача программирования — сделать так, чтобы программирование

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

ага. а потом будет skynet и ядерная война
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[11]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Sinclair Россия https://github.com/evilguest/
Дата: 12.05.04 04:24
Оценка:
Здравствуйте, Дарней, Вы писали:
Д>это всё замечательно звучит, но на практике люди имеют обыкновение ошибаться. Заниматься моделированием, составлением набора аксиом будут все те же люди. Вывод очевиден....
Видишь ли, шансов сделать ошибку тем меньше, чем меньше объем работы. Проверить корректность правил вывода достаточно легко, ибо их совсем немного. А дальше все происходит автоматически — ввели исходные аксиомы и получили заведомо правильные теоремы. Аксиом тоже относительно немного.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 12.05.04 05:23
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Вопрос на засыпку -- многие ли программисты знают, что такое интеграл Лебега?


А какое это имеет отношение к флейму C++ vs other-shit?
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 12.05.04 05:30
Оценка:
Ш>1) По мелочи. Вирт -- типичный лузер. Статья его -- просто жалкий вопль человека, проигравшего конкурентную борьбу. Из серии -- гадкий Майкрософт завалил весь мир своими кривыми программами.

Точно! У меня тоже в голове вертелось сравнение с Микрософтом.
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Leonid V. Volnin Россия  
Дата: 12.05.04 06:53
Оценка: +1 -1
On Wed, 12 May 2004 01:20:38 GMT, Шахтер <forum@rsdn.ru> wrote:

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

>
> LVV>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm
>
> 3) Попробую сформулировать свою мысль. Не уверен, что делаю это вполне
> ясно.
> Возьмем, для примера, современную математику. Математика НЕ строится на
> базе какого-то формального языка. Хотя технически это можно
> сделать
, причем соответствующий язык будет попроще Паскаля.

можно я попридираюсь к мелочам?
выделенная фраза очень сильно меня смущает:
А как же теорема Гёделя? Что любая формальная система сложнее
арифметики Пеано с равенством обязательно содержит парадоксы?
как вы собираетесь компилировать код, который может содержать
противоречия?


--
best regards, Leonid V. Volnin.
Posted via RSDN NNTP Server 1.7 "Bedlam"
best regards, Leonid
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: INTP_mihoshi Россия  
Дата: 12.05.04 06:58
Оценка: 18 (1) +2
Здравствуйте, Шахтер, Вы писали:

Месье не понимет

Ш>Возьмем, для примера, современную математику. Математика НЕ строится на базе какого-то формального языка.

Математика строится на основе формального языка.

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

Он вобще состоит только из одного правили — правила вывода одних теорем из других методом подстановки своюодных переменных.

Ш>Вот только данный путь почему-то не привлекает никого.

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

Ш>Потому что если так работать, то доказать можно будет разве что 2+2=4.

ВСЕ теоремы доказываются только так. Если, конечно, доказываются.

Ш>Не годится такой подход для сложных задач.

Действительно сложные задачи решаются либо так, либо неправильно. Современное ПО как раз уперлось в предел сложности, который не перешагнуть без формального контроля правильности кода.
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 12.05.04 10:24
Оценка: 12 (1) +5 -2
Здравствуйте, Шахтер, Вы писали:

Ш>1) По мелочи. Вирт -- типичный лузер. Статья его -- просто жалкий вопль человека, проигравшего конкурентную борьбу.

Сначала неплохо бы сделать столько, сколько Вирт, а уж потом ярлыки клеить.

Ш>Из серии -- гадкий Майкрософт завалил весь мир своими кривыми программами.

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

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

Вообще абсурд какой-то...
Чем сложнее язык, тем сложнее компилятор, тем дольше время компиляции, тем выше вероятность ошибки в самом компиляторе и отпимизаторе, тем выше вероятность ошибки программиста при чтении программы на такой языке, тем выше вероятность наличия "ловушек" в синтаксисе языка, тем дольше время поиска ошибок и отладки, тем дольше общее время разработки, тем выше себестоимость продукта...
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: AVC Россия  
Дата: 12.05.04 10:57
Оценка:
Здравствуйте, Aquary, Вы писали:

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


Ну да, конечно: чукча — не читатель, чукча — писатель...

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

Хоар
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: AVC Россия  
Дата: 12.05.04 11:18
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>2) По серьёзней. Паскаль разрабатывался в своё время под конкретную технологию компиляции. С c помощью этой технологии откомпилировать нельзя. Вот по этой причине Пакскаль компилируется быстрее, зато люди предпочли писать программы на C. Вирт создал язык для машины, не для человека. Это вопрос не формальной строгости, а психологии восприятия. Вот поэтому он и проиграл.


Ну, это просто "брехня"!
Очень многие компиляторы Си (ну хотя бы lcc, на вскидку, из "современных"), включая самый первый компилятор Си, написанный Ритчи, созданы по той же самой "технологии компиляции".
Я понимаю, что Вы имеете в виду различие между LL- и LR-грамматиками, но, однако, факты именно таковы.

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

Хоар
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: ON  
Дата: 12.05.04 14:45
Оценка: 10 (2)
ДГ>Дирихле не интегрируется по Риману, а по Лебегу — легко.

Если методы функционального анализа перенести на дискретные данные то получим логику второго порядка. Которая неполна, противоречива и т.д. и т.п. Красивые идеи и языки в том числе не соответствуют действительности. Красота в том, что некрасивая действительность должна описываться некрасивыми программами. А высокоумные вещи надо знать чтобы во время работы не оторваться от действительности. Если вдруг нашел простое и красивое решение проблемы, значит что-то не понимаешь. Скорее всего все его рассматривали и отказались, иначе ты бы его уже давно знал.

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

А прикладные будут смещаться к семантическому выводу. Программа будет содержать много избыточной информации благодаря чему ошибки исключаются что называется "практически". Уже классический прием это бухгалтерский баланс, двойная запись и сопоставление итогов. Это уже не проектирование машин, тут более интеллектуальные цели и должны быть более интеллектуальыные средства. И нужно это не специалистам, а "массам".
Re[11]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mihailik Украина  
Дата: 12.05.04 15:46
Оценка:
M>>Подлючий какой метод! Таки молодец Лебег, упёк.

Ш>???


Ну, мы такого в школе не проходили.

А вообще я люблю всякие антигуманные методы доказательства. Ну, чтобы мозги сами за себя спотыкались, или же неконструктивные доказательства вроде Канторовской диагонали там.
... << RSDN@Home 1.1.3 stable >>
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mihailik Украина  
Дата: 12.05.04 15:46
Оценка:
LVV>А как же теорема Гёделя? Что любая формальная система сложнее
LVV>арифметики Пеано с равенством обязательно содержит парадоксы?
LVV>как вы собираетесь компилировать код, который может содержать
LVV>противоречия?

А как он сейчас компилируется? Паскаль ведь включает в себя арифметику, то есть под акисомы Пеано спокойно подпадает
... << RSDN@Home 1.1.3 stable >>
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mihailik Украина  
Дата: 12.05.04 15:46
Оценка: :)
Ш>>1) По мелочи. Вирт -- типичный лузер. Статья его -- просто жалкий вопль человека, проигравшего конкурентную борьбу.
K_O>Сначала неплохо бы сделать столько, сколько Вирт, а уж потом ярлыки клеить.

Если бы Вирт действовал так, как ты требуешь, у нас бы сейчас не было Паскаля.
... << RSDN@Home 1.1.3 stable >>
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 12.05.04 20:52
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

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

K_O>Вообще абсурд какой-то...
K_O>Чем сложнее язык, тем сложнее компилятор,
Да.
K_O>тем дольше время компиляции,
Нет. C# сложнее, чем C++, а время компиляции программы на C# ниже. Время компиляции очень слабо связано со сложностью языка.
Уточню: под сложностью языка подразумевается сложность грамматики и количество зарезервированных слов.
K_O>тем выше вероятность ошибки в самом компиляторе и отпимизаторе,
Да. Абсолютно верно.
K_O>тем выше вероятность ошибки программиста при чтении программы на такой языке,
Нет. Пара примеров. Ассемблеры очень просты, как языки, но читать их сложнее самых сложных языков вроде C#, Java, C++. С#, опять же, сложнее C++, но читать программы на C# в общем случае легче. LISP — язык элементарен, но читать сложно. Временами, очень сложно. Forth — аналогично. Можно продолжить.
K_O>тем выше вероятность наличия "ловушек" в синтаксисе языка,
Это вроде if (a = b) в C/C++?
K_O>тем дольше время поиска ошибок
C#/Java => C++ — где дольше время поиска ошибок?
K_O>и отладки,
C#/Java => C++ — ...
K_O>тем дольше общее время разработки,
C#/Java => C++
K_O>тем выше себестоимость продукта...
Не правда ваша. Себестоимость продукта зависит не от сложности языка, а от человекочасов, потраченных на ее написание, отладку, введение в эксплуатацию, документирование, поддержку, маркетинг (опционально) и т.д. и т.д.
... << RSDN@Home 1.1.3 stable >>
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 12.05.04 21:04
Оценка: 2 (2) +3
Здравствуйте, LaptevVV, Вы писали:

соперников — C. Самого недостойного, т.к. в этом языке были нарушены все открытые к тому времени принципы серьезного программирования. Он запутывает студентов, допуская разный смысл для x = y и y = x и принуждая всех писать x = = y вместо обычного x = y. Только за одни эти

Ага, лучше писать := вместо =
... << RSDN@Home 1.1.3 stable >>
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 12.05.04 21:04
Оценка: 1 (1) -1
Здравствуйте, Дарней, Вы писали:

Д>господа, ну сколько уже можно?

Д>ругать С — это пошло просто до безобразия
Наверное, покажусь неоригинальным, но C во многом безобразный язык. И == это самое меньшее, к чему можно было прицепиться. Впрочем, Pascal по-моему еще более безобразный язык.
Д>тем не менее, им и его потомками пользовались, пользуются и будут пользоваться. Потому что ничего лучше пока не придумали. Языки, созданные
Э-э, шутить изволите? Придумали. При чем, еще до появления C.
Д> теоретиками "на бумажке", почти никогда не оказываются востребованными — просто потому, что теоретики не имеют представления о реальных проблемах программирования и вместо этого борются с ветряными мельницами.
А реальные проблемы программирования на C/C++ возникают, в первую очередь, из-за самого языка. Начиная от банального if (a = b), и заканчивая порчей указателей, утечками памяти и прочими-прочими радостями. Да и сам по себе императивный подход к программированию удобен далеко не всегда. Временами, императивный подход очень сильно мешает.
Д>А все разговоры о "порочном круге" — это просто паранойя. Появись язык, который реально, а не на словах лучше — все будут пользоваться именно им.
Один лемминг, что примечательно, ошибается куда реже миллионов.

P.S. Запомните: язык для задачи, а не задача для языка.
... << RSDN@Home 1.1.3 stable >>
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mister-AK Россия  
Дата: 12.05.04 22:50
Оценка: :)
Здравствуйте, mihailik, Вы писали:

Ш>>>1) По мелочи. Вирт -- типичный лузер. Статья его -- просто жалкий вопль человека, проигравшего конкурентную борьбу.

K_O>>Сначала неплохо бы сделать столько, сколько Вирт, а уж потом ярлыки клеить.

M>Если бы Вирт действовал так, как ты требуешь, у нас бы сейчас не было Паскаля.


А кто бы был? Ньютон или Декарт?
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mister-AK Россия  
Дата: 12.05.04 23:01
Оценка:
Здравствуйте, kuj, Вы писали:

kuj>Впрочем, Pascal по-моему еще более безобразный язык.


странно

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

kuj>Э-э, шутить изволите? Придумали. При чем, еще до появления C.

и что это за язык и какой из них красивее?

kuj>А реальные проблемы программирования на C/C++ возникают, в первую очередь, из-за самого языка. Начиная от банального if (a = b), и заканчивая порчей указателей, утечками памяти и прочими-прочими радостями.


Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Шахтер Интернет  
Дата: 13.05.04 00:37
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Здравствуйте, Шахтер, Вы писали:


INT>Месье не понимет


Месье как раз очень хорошо понимает в предмете.

Ш>>Возьмем, для примера, современную математику. Математика НЕ строится на базе какого-то формального языка.

INT>Математика строится на основе формального языка.

Ага, вы это Арнольду скажите. Если успеете увернуться от летящей табуретки, то будете жить.

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

INT>Он вобще состоит только из одного правили — правила вывода одних теорем из других методом подстановки своюодных переменных.

Мда, курс мат. логики вам позорно читали.

Ш>>Вот только данный путь почему-то не привлекает никого.

INT>Не знаю, привлекает или не привлекает, но _доказательства_ должны делаться только на нем. В _измышлениях_, разумеется, можешь пользоваться чем угодно.

Ш>>Потому что если так работать, то доказать можно будет разве что 2+2=4.

INT>ВСЕ теоремы доказываются только так. Если, конечно, доказываются.

Ш>>Не годится такой подход для сложных задач.

INT>Действительно сложные задачи решаются либо так, либо неправильно. Современное ПО как раз уперлось в предел сложности, который не перешагнуть без формального контроля правильности кода.

У меня большая просьба. Если вы действитнльно верите во всё вами написанное, то дайте формальное определение того языка, о котором вы говорили, покажите мат литературу, написанную на этом языке, ну и приведите пример какого-нибудь нетривиального доказательства, сделанного на этом языке.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Шахтер Интернет  
Дата: 13.05.04 00:57
Оценка: 42 (1)
Здравствуйте, Leonid V. Volnin, Вы писали:

LVV>On Wed, 12 May 2004 01:20:38 GMT, Шахтер <forum@rsdn.ru> wrote:


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

>>
>> LVV>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm
>>
>> 3) Попробую сформулировать свою мысль. Не уверен, что делаю это вполне
>> ясно.
>> Возьмем, для примера, современную математику. Математика НЕ строится на
>> базе какого-то формального языка. Хотя технически это можно
>> сделать
, причем соответствующий язык будет попроще Паскаля.

LVV>можно я попридираюсь к мелочам?

LVV>выделенная фраза очень сильно меня смущает:
LVV>А как же теорема Гёделя? Что любая формальная система сложнее
LVV>арифметики Пеано с равенством обязательно содержит парадоксы?

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

По поводу формального языка математики. Можно взять исчисление предикатов, соответствующим образом формилизованное (т.е. надо написать грамматику как минимум), и добавить к нему аксиомы Гёделя-фон Неймана. Ну и можно для полноты картины аксиому Гротендика об универсальном множестве. И это покроет современную математику.

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

LVV>как вы собираетесь компилировать код, который может содержать

LVV>противоречия?


LVV>--

LVV>best regards, Leonid V. Volnin.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Шахтер Интернет  
Дата: 13.05.04 00:57
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

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


Ш>>Вопрос на засыпку -- многие ли программисты знают, что такое интеграл Лебега?


ДГ>А какое это имеет отношение к флейму C++ vs other-shit?


Я имел ввиду, что чтобы пользоваться вот этим математически доказываемые системы наверно, придётся математику подучить. Просто чтобы хорошо понимать, что такое математическое доказательство и научиться их делать.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Шахтер Интернет  
Дата: 13.05.04 01:17
Оценка: 2 (1)
Здравствуйте, Sinclair, Вы писали:

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

Д>>это всё замечательно звучит, но на практике люди имеют обыкновение ошибаться. Заниматься моделированием, составлением набора аксиом будут все те же люди. Вывод очевиден....
S>Видишь ли, шансов сделать ошибку тем меньше, чем меньше объем работы. Проверить корректность правил вывода достаточно легко, ибо их совсем немного. А дальше все происходит автоматически — ввели исходные аксиомы и получили заведомо правильные теоремы. Аксиом тоже относительно немного.

1) Позвольте уточнить, куда ввели и откуда получили.

2) Для справки. Есть такая формальная аксиоматическая теория -- формальная теория элементарной геометрии. Эта теория, как было доказано, разрешима -- т.е. существует алгоритм, который по любому утверждению этой теории может определить -- выводимо оно из аксиом или выводимо его отрицание.
Вот только одна проблема: сложность этого алгоритма -- двойная экспонента.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 13.05.04 04:38
Оценка:
Здравствуйте, kuj, Вы писали:

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


kuj>Наверное, покажусь неоригинальным, но C во многом безобразный язык. И == это самое меньшее, к чему можно было прицепиться. Впрочем, Pascal по-моему еще более безобразный язык.


про Паскаль согласен. Вспоминаю про := и бегины с ендами, и сразу думаю "и эти люди запрещают мне ковыряться в носу?!"

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

kuj>Э-э, шутить изволите? Придумали. При чем, еще до появления C.

а можно с этого места и подробнее?

kuj>А реальные проблемы программирования на C/C++ возникают, в первую очередь, из-за самого языка. Начиная от банального if (a = b), и заканчивая порчей указателей, утечками памяти и прочими-прочими радостями. Да и сам по себе императивный подход к программированию удобен далеко не всегда. Временами, императивный подход очень сильно мешает.


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

kuj>Один лемминг, что примечательно, ошибается куда реже миллионов.


вот как? очень интересная теория

kuj>P.S. Запомните: язык для задачи, а не задача для языка.


хто бы спорил. вот современные задачи и породили C с его потомками
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: _Obelisk_ Россия http://www.ibm.com
Дата: 13.05.04 05:53
Оценка: :)
Здравствуйте, beretta, Вы писали:

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


LVV>>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm


B>По слухам во французких школах преподают Ocaml. Может он не самый передовой, может из ФЯ как бейсик во времена моей школы (конец 80-х). Но все же показательно.


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



Душа обязана трудиться! (с) Н.Заболоцкий.
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 13.05.04 06:08
Оценка: 1 (1) -1
Д>>ругать С — это пошло просто до безобразия
kuj>Наверное, покажусь неоригинальным, но C во многом безобразный язык. И == это самое меньшее, к чему можно было прицепиться.

Если ты хотел лишь сказать, что := лучше чем = а begin/end лучше скобок — то лучше бы и не начинал. Это не то, что стОит многодневных дискуссий.

kuj>А реальные проблемы программирования на C/C++ возникают, в первую очередь, из-за самого языка. Начиная от банального if (a = b), и заканчивая порчей указателей, утечками памяти и прочими-прочими радостями.


Я никак не дождусь одного: а кто же предложит рецепт избавления? Какие принципиальные новшества нужны для того, чтобы программист не ошибся, например, с выходом индекса за пределы массива?
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mihailik Украина  
Дата: 13.05.04 08:45
Оценка: :)
MA>А кто бы был? Ньютон или Декарт?

Кругом была бы одна Ява. И Бабаян пророк её.

... << RSDN@Home 1.1.3 stable >>
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 13.05.04 08:54
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Вопрос на засыпку -- многие ли программисты знают, что такое интеграл Лебега?


Изоморфизм Карри-Ховарда и основы теории категорий для обсуждаемых целей полезнее
Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 13.05.04 09:04
Оценка:
Здравствуйте, mihailik, Вы писали:

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


Кстати, канторовская диагональ — чрезвычайно конструктивное доказательство. Грубо говоря, если кто-то утверждает, что перенумеровал все действительные числа на [0;1), то мы просим его оформить это гениальное открытие в виде функции int f(int i, int j), выдающей j-ю цифру после запятой у i-го числа. Диагональ задается как

int g(int i)
{
  int result = f(i,i) == 4 ? 5 : 4;
  assert(result != f(i,i));
  assert(result != 0 && result != 9);
  return result;
}
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 13.05.04 09:25
Оценка: +1 :)
Здравствуйте, kuj, Вы писали:

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


K_O>>тем дольше время компиляции,

kuj>Нет. C# сложнее, чем C++, а время компиляции программы на C# ниже.
kuj>Время компиляции очень слабо связано со сложностью языка.
Неправильно оценивать сложность языка только количеством ключевых слов.
В C# разве есть шаблоны в том виде, в каком они есть в C++? Разве есть этот отстой в виде обычных, const, volatile и const volatile методов? То же и про переменные. А множественное наследование для классов?
Эти "фичи" на несколько порядков усложняют компилятор.
А здесь можно прочитать рассказ российских разработчиков о том, чего стоит написать компилятор С++.

K_O>>тем выше вероятность наличия "ловушек" в синтаксисе языка,

kuj>Это вроде if (a = b) в C/C++?
ага, или double d = 3,1415;

K_O>>тем дольше время поиска ошибок

kuj>C#/Java => C++ — где дольше время поиска ошибок?
В шаблонах никогда ошибок не искал? Компилятор всегда внятно может сказать, что и где ему не понравилось?

K_O>>и отладки,

kuj>C#/Java => C++ — ...
См. предыдущий пункт.

K_O>>тем дольше общее время разработки,

kuj>C#/Java => C++
На C++ время разработки на порядки дольше. Из-за времени компиляции. Много ты наотлаживаешься, когда проект собирается 45мин. ?

K_O>>тем выше себестоимость продукта...

kuj>Не правда ваша. Себестоимость продукта зависит не от сложности языка, а от человекочасов, потраченных на ее написание, отладку, введение в эксплуатацию, документирование, поддержку, маркетинг (опционально) и т.д. и т.д.
документирование, поддержку, маркетинг (опционально) — это везде одинаково, а вот "человекочасы, потраченных на ее написание, отладку," напрямую зависят от сложности языка и времени компиляции.
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 13.05.04 09:47
Оценка: 80 (6)
Здравствуйте, INTP_mihoshi, Вы писали:

Ш>>Возьмем, для примера, современную математику. Математика НЕ строится на базе какого-то формального языка.

INT>Математика строится на основе формального языка.

Кого начитался — Рассела, Бурбаки или Лема?

- Вы меняете взгляды чаще, чем подштанники! — крикнул обозленный, прямо-таки выведенный из социостатического равновесия лорд Поппер. — Скажи мне, лорд Рассел, что осталось у тебя от дивной поры молодой? Три тома "Principia Mathematica", вымученных за долгие годы. Так вот: спешу сообщить, что Чанг Вэнь или другой какой-нибудь Пинг-Понг — не запоминаю я этих китайских имен — запрограммировал компьютер так, что все доказанное Б.Расселом в его пресловутых "Принципах" машина доказала за восемь минут со средней скоростью самоубийцы, который бросился с девяностого этажа на Юпитере, где, как известно, сила тяжести во столько же раз больше земной, сколько раз домработница господина Тичи ошиблась в счетах из прачечной в свою пользу.


Первая попытка формализации математики (если не считать Фреге) была предпринята Расселом — "1+1=2" доказывается в теореме 110.643 на 83 странице второго тома. Его труд, как известно, не был продолжен.

Вторая попытка — Бурбаки, где число 2 вводится на странице 188 первого тома (в русском издании). но еще на странице 34 сказано, что "построение математики строго в соответствии с этим принципом привело бы к крайне длинным рассуждениям", и в метаматематических рассуждениях сразу же начинают применяться натуральные числа без строгого обоснования. Более того, во введении (стр. 28) изложена политика:

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


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

Третья попытка — исследования последних двадцати лет с помощью доказывалок типа Coq или Isabelle/HOL. Формализм там совершенно другой — вместо теории множеств применяется функциональное программирование через изоморфизм Карри-Ховарда, и получено много интересных результатов, далеко выходящих за пределы проверки трех томов Рассела за восемь минут. Но до формализации, скажем, доказательства теоремы Ферма еще годы, если не десятилетия.
Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mihailik Украина  
Дата: 13.05.04 10:26
Оценка:
_>Кстати, канторовская диагональ — чрезвычайно конструктивное доказательство.

Конструктивное — это если бы он показал, почему действительные числа несчётны.

А он колупнул туда, колупнул сюда и нашёл противоречие. Голову надурил, а не подкопаешься. Получается, неконструктивное доказательство. Верное, но неконструктивное. Класс.
... << RSDN@Home 1.1.3 stable >>
Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 13.05.04 10:44
Оценка:
Здравствуйте, mihailik, Вы писали:

_>>Кстати, канторовская диагональ — чрезвычайно конструктивное доказательство.

M>Конструктивное — это если бы он показал, почему действительные числа несчётны.
M>А он колупнул туда, колупнул сюда и нашёл противоречие. Голову надурил, а не подкопаешься. Получается, неконструктивное доказательство. Верное, но неконструктивное. Класс.

А как можно доказать, например, что на моем столе нет листочка с неприличной картинкой? Взять каждую бумажку, посмотреть на нее и не найти ничего неприличного, потом из частных суждений сформировать общее. Тоже неконструктивно?
Re[15]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mihailik Украина  
Дата: 13.05.04 10:57
Оценка:
_>А как можно доказать, например, что на моем столе нет листочка с неприличной картинкой? Взять каждую бумажку, посмотреть на нее и не найти ничего неприличного, потом из частных суждений сформировать общее. Тоже неконструктивно?

Это как раз конструктивное.

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

Ну, типичное — парадокс Рассела.
... << RSDN@Home 1.1.3 stable >>
Re[16]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 13.05.04 11:09
Оценка: 27 (1)
Здравствуйте, mihailik, Вы писали:

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

M>Это как раз конструктивное.
M>Другое дело, что ты можешь взять свойства стола, необходимые для того, чтобы на нём лежали неприличные картинки, замутить обощение и привести к противоречию. Это уже неконструктивное доказательство.

Правильно. Но доказательство Кантора как раз первого вида. Мы хотим доказать, что не существует биекции между натуральными числами и [0;1). Для этого берем каждую функцию из первого во второе, внимательно смотрим на нее и говорим "ага, а вот этого-то числа здесь и не хватает! значит, не биекция". Как еще конструктивнее доказать, что чего-то не существует?
Re[17]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mihailik Украина  
Дата: 13.05.04 11:19
Оценка:
_>Как еще конструктивнее доказать, что чего-то не существует?

Вроде бы ты прав. Здорово объегорил!

Подумаю ещё на досуге. Надо же, как оно выходит...
... << RSDN@Home 1.1.3 stable >>
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 13.05.04 11:51
Оценка:
Здравствуйте, SWW, Вы писали:

Д>>>ругать С — это пошло просто до безобразия

kuj>>Наверное, покажусь неоригинальным, но C во многом безобразный язык. И == это самое меньшее, к чему можно было прицепиться.
SWW>Если ты хотел лишь сказать, что := лучше чем = а begin/end лучше скобок — то лучше бы и не начинал. Это не то, что стОит многодневных дискуссий.
Нет, я вовсе не это хотел сказать. Сравнивать языки сравнением операторных скобок все-равно что сравнивать оптимизации при компиляции программы "Hello world".

kuj>>А реальные проблемы программирования на C/C++ возникают, в первую очередь, из-за самого языка. Начиная от банального if (a = b), и заканчивая порчей указателей, утечками памяти и прочими-прочими радостями.

SWW>Я никак не дождусь одного: а кто же предложит рецепт избавления?
Рецептов избавления много и существуют они далеко не первый год. Просто Вы, наверное, ничего кроме пары императивных языков вроде C/C++/Pascal не видели. Например, все вышеуказанное в .NET языках в принципе не возможно (кроме как по вине ошибки в JIT-компиляторе или сборщике муссора). А сборщики муссора существовали еще в первых версиях LISP (который, кстати, во много раз старше C/C++/Pascal).
SWW>Какие принципиальные новшества нужны для того, чтобы программист не ошибся, например, с выходом индекса за пределы массива?
Проверка на выход за границы массива существовала еще в Delphi. В .NET ественно она тоже существует.
... << RSDN@Home 1.1.3 stable >>
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 13.05.04 12:45
Оценка: 1 (1) +1
kuj>Рецептов избавления много и существуют они далеко не первый год. Просто Вы, наверное, ничего кроме пары императивных языков вроде C/C++/Pascal не видели. Например, все вышеуказанное в .NET языках в принципе не возможно (кроме как по вине ошибки в JIT-компиляторе или сборщике муссора). А сборщики муссора существовали еще в первых версиях LISP (который, кстати, во много раз старше C/C++/Pascal).

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

Не могу сказать, что я с этим на 100% согласен, но что-то в этом есть.

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

kuj>Проверка на выход за границы массива существовала еще в Delphi. В .NET ественно она тоже существует.

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

Да, паскаль проверяет каждое обращение и при ошибке вывыливается, вежливо сообщив пользователю об ошибке в программе. Много ли радости от этого пользователю? Это можно сравнить с пресловутой ошибкой памяти в первых персоналках, когда система останавливалаь при ошибке в любой ячейке памяти и пользователь даже не мог сохранить свои данные.
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: beretta Россия icq: 138726397
Дата: 13.05.04 13:46
Оценка: +2 :))
Здравствуйте, SWW, Вы писали:

kuj>>Рецептов избавления много и существуют они далеко не первый год. Просто Вы, наверное, ничего кроме пары императивных языков вроде C/C++/Pascal не видели. Например, все вышеуказанное в .NET языках в принципе не возможно (кроме как по вине ошибки в JIT-компиляторе или сборщике муссора). А сборщики муссора существовали еще в первых версиях LISP (который, кстати, во много раз старше C/C++/Pascal).


SWW>Есть мнение, что наличие сборщика мусора расслабляет программиста, он относится к программе легкомысленно, что приводит к появлению программ с уродской архитектурой. А отсутствие сборщика мусора заставляет программиста точно представлять себе сроки жизни каждого объекта, благодаря чему он тщательнее продумывает архиректуру своей программы что в конечном итоге идет ему на пользу.


SWW>Не могу сказать, что я с этим на 100% согласен, но что-то в этом есть.


Одного человека спросили:

— Почему Вы всегда переходите улицу на красный свет?
— Чтоб не расслабляться.
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 13.05.04 14:04
Оценка: :)
Здравствуйте, Шахтер, Вы писали:

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

Только Net и Ява предлагает другую концепцию уменьшающую количество ошибок, скорость разработки и читабельность кода. А это направление как раз созвучно словам Вирта. Причем Net позволяет писать более простые компиляторы в MSIL код, и соответственно появление различных языков решающие различные задачи не загорами.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Larm Украина  
Дата: 13.05.04 15:08
Оценка:
Здравствуйте, desperado_gmbh, Вы писали:


>Но до формализации, скажем, доказательства теоремы Ферма еще годы, если не десятилетия.


А что вы понимаете под "формализацией доказательства теоремы Ферма"?? Она уже давно доказана. Причем строго математически. Или вы что-то другое имеете ввиду??
The God who walks is among us...
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 13.05.04 21:35
Оценка:
Здравствуйте, SWW, Вы писали:

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

LVV>>Начинаться сжатым введением в основные понятия программного проектирования.
LVV>>Использовать лаконичную формальную нотацию, строго определенную не более чем на примерно 20 страницах.
SWW><...>
SWW>Глупости. Это был бы худший учебник, какой только можно придумать. Он был бы понятен только тому, кто уже знает язык.
SWW>Практика же показывает, что лучший учебник — это Керниган-Ритчи, который безо всяких формальных нотаций с первой же страницы предлагает писать простую программу.
Вы не путайте обучение кодированию на конкретном языке программирования с обучением, собственно, самому программированию, которое, вообще говоря, в идеале не должно привязываться к конкретному языку программирования.
... << RSDN@Home 1.1.3 stable >>
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 13.05.04 21:35
Оценка:
Здравствуйте, Дарней, Вы писали:

ДГ>>Ругать и обсуждать — разные вещи. А в языке действительно масса проблем. Если ты считаешь, что это не так, значит ты просто мало писал на нем и не пробовал другие языки. Попробуй поработать на Java: имхо он гораздо лучше чем C++ (сама идеология языка, сырые библиотеки не в счет), на столько же, насколько C++ лучше старого паскаля.

Д>Ява? не смешите мои тапочки
Д>Из-за отсутствия шаблонов,
Шаблоны уже есть. Они конечно далеки от идеала по части реализации (т.к. пораждают overhead), но они есть.
... << RSDN@Home 1.1.3 stable >>
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Шахтер Интернет  
Дата: 14.05.04 02:24
Оценка:
Здравствуйте, desperado_gmbh, Вы писали:

_>Здравствуйте, Шахтер, Вы писали:


Ш>>Вопрос на засыпку -- многие ли программисты знают, что такое интеграл Лебега?


_>Изоморфизм Карри-Ховарда и основы теории категорий для обсуждаемых целей полезнее


Пожалуй. Но я боюсь, программистов, знающих теорию категорий, ещё меньше, чем знающих интеграл Лебега.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 14.05.04 05:27
Оценка: +2
kuj>Вы не путайте обучение кодированию на конкретном языке программирования с обучением, собственно, самому программированию, которое, вообще говоря, в идеале не должно привязываться к конкретному языку программирования.

Обучение самому программированию? Вопрос, конечно, интересный и даже актуальный — но как учить самому программированию не изучив хотя бы один язык программирования? Как можно учить столяра делать мебель, не научив его пользоваться ножовкой и рубанком?
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.05.04 05:32
Оценка:
Здравствуйте, Larm, Вы писали:
L> А что вы понимаете под "формализацией доказательства теоремы Ферма"?? Она уже давно доказана. Причем строго математически. Или вы что-то другое имеете ввиду??
Ну, насчет "давно" ты преувеличиваешь. А речь идет о формальном изложении доказательства не на естественном языке, а на специальном формальном языке.
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 14.05.04 07:30
Оценка:
Здравствуйте, Larm, Вы писали:

>>Но до формализации, скажем, доказательства теоремы Ферма еще годы, если не десятилетия.

L> А что вы понимаете под "формализацией доказательства теоремы Ферма"?? Она уже давно доказана. Причем строго математически.

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

Вот, к примеру, Annals of Mathematics, 141(1995), страница 542:

As the semistable hypothesis implies that all the inertia groups outside 3 in the splitting field of rho_0 have order dividing 3 this means that the splitting field of rho_0 is unramified outside 3. However, Q(sqrt(-3)) has no nontrivial abelian extensions unramified outside 3 and of order prime to 3. So rho_0 itself would factor through an abelian extension of Q and this is a contradiction as rho_0 is assumed odd and irreducible.


Кто возьмется формально доказать правильность этих слов с помощью "правил вывода одних теорем из других методом подстановки свободных переменных"?
Re[4]: Занятная статистика "сравнение СССР и россии"
От: INTP_mihoshi Россия  
Дата: 14.05.04 08:22
Оценка:
Здравствуйте, Шахтер, Вы писали:

INT>>Месье не понимет

Ш>Месье как раз очень хорошо понимает в предмете.
Теперь вижу


Ш>>>Не годится такой подход для сложных задач.

INT>>Действительно сложные задачи решаются либо так, либо неправильно. Современное ПО как раз уперлось в предел сложности, который не перешагнуть без формального контроля правильности кода.

Ш>У меня большая просьба. Если вы действитнльно верите во всё вами написанное, то дайте формальное определение того языка, о котором вы говорили, покажите мат литературу, написанную на этом языке, ну и приведите пример какого-нибудь нетривиального доказательства, сделанного на этом языке.


Я не говорю, что формальное выведение применяют всегда as is. Формальное выведение — это как ассемблер для программирования. Ассемблер сам по себе применяют редко, но если мы хотим, чтобы программа выполнялась, то она должна быть выразима через него.

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

А если тебе нужны примеры формальных доказательств — см. тот же HOL. Например, доказательство бесконечности множества простых чисел в туториале.
Re[5]: Занятная статистика "сравнение СССР и россии"
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 14.05.04 08:36
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

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


У программистов есть компиляторы, а у математиков (пока?) нет. Интересно, школьник, изучающий ершол без компьютера, тоже пишет в конечном счете на ассемблере, даже если ни разу в жизни не написал синтаксически правильной программы? Учитель, конечно, может собрать тетради и дома проверить, но и ему свойственно ошибаться. Вот примерно в таком положении и находится сейчас математика, подтверждение тому — списки опечаток к учебникам (например, в еррате алгебры Dummit&amp;Foote 10 ошибок найдены мной).
Re[6]: Автозаполнитель форм дурит, sorry
От: INTP_mihoshi Россия  
Дата: 14.05.04 08:55
Оценка:
Здравствуйте, desperado_gmbh, Вы писали:

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


_>У программистов есть компиляторы, а у математиков (пока?) нет.


Во-первых, APS (задолбало меня писать "системы автоматичесого жоказательства") на эту роль претендуют. Во-вторых, можно из одних теорем делать другие и использовать уже их. Вполне так себе ФЯ

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


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

_>Вот примерно в таком положении и находится сейчас математика, подтверждение тому — списки опечаток к учебникам (например, в еррате алгебры Dummit&amp;Foote 10 ошибок найдены мной).


А это к вопросу о том, нужно ли использование формальных доказательств
Re[7]: Автозаполнитель форм дурит, sorry
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 14.05.04 10:05
Оценка: +1
Здравствуйте, INTP_mihoshi, Вы писали:

_>>У программистов есть компиляторы, а у математиков (пока?) нет.

INT>Во-первых, APS (задолбало меня писать "системы автоматичесого жоказательства") на эту роль претендуют.

Да, но это только начало пути. Библиотека coq-8.0/theories/Reals еще очень далека даже от первого курса матана.

INT>Во-вторых, можно из одних теорем делать другие и использовать уже их. Вполне так себе ФЯ


Это и есть основная идея изоморфизма Карри-Ховарда.

_>>Вот примерно в таком положении и находится сейчас математика, подтверждение тому — списки опечаток к учебникам (например, в еррате алгебры Dummit&amp;Foote 10 ошибок найдены мной).

INT>А это к вопросу о том, нужно ли использование формальных доказательств

Конечно, нужно. Только вот арифметика и геометрия существуют больше двух тысяч лет, алгебра (Виет, Декарт) и теория чисел (Ферма) — 400, анализ (Ньютон) — 300, абстрактная алгебра (Абель, Галуа) — 180, теория множеств (Кантор) и топология (Пуанкаре) — 100. По принципу "действительно сложные задачи решаются либо так, либо неправильно" объявим все их результаты неправильными?
Re[8]: Автозаполнитель форм дурит, sorry
От: INTP_mihoshi Россия  
Дата: 14.05.04 10:47
Оценка:
Здравствуйте, desperado_gmbh, Вы писали:

_>>>У программистов есть компиляторы, а у математиков (пока?) нет.

INT>>Во-первых, APS (задолбало меня писать "системы автоматичесого жоказательства") на эту роль претендуют.

_>Да, но это только начало пути. Библиотека coq-8.0/theories/Reals еще очень далека даже от первого курса матана.


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

INT>>А это к вопросу о том, нужно ли использование формальных доказательств


_>Конечно, нужно. Только вот арифметика и геометрия существуют больше двух тысяч лет, алгебра (Виет, Декарт) и теория чисел (Ферма) — 400, анализ (Ньютон) — 300, абстрактная алгебра (Абель, Галуа) — 180, теория множеств (Кантор) и топология (Пуанкаре) — 100. По принципу "действительно сложные задачи решаются либо так, либо неправильно" объявим все их результаты неправильными?


Ну, они же теперь формально доказаны? Значит, формально правильны
Re[9]: Автозаполнитель форм дурит, sorry
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 14.05.04 11:34
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>С одной стороны, да. А с другой язык С++ наполовину состоит из APS. Так что, если рассматривать APS как средство написания программ, то они уже давно и широко используются.


Нет. Настоящая APS извлекает код из доказательства спецификации программы. Например, на 271 странице документации к Coq (http://coq.inria.fr) разобран пример извлечения алгоритма сортировки из доказательства теоремы о том, что любой массив некоей перестановкой превращается в отсортированный. В contribs к Coq есть таким же образом доказанные алгоритмы Хаффмана и Бухбергера. К непонятно какой половине C++ это отношения не имеет.

_>>Только вот арифметика и геометрия существуют больше двух тысяч лет, алгебра (Виет, Декарт) и теория чисел (Ферма) — 400, анализ (Ньютон) — 300, абстрактная алгебра (Абель, Галуа) — 180, теория множеств (Кантор) и топология (Пуанкаре) — 100.

INT>Ну, они же теперь формально доказаны?

Нет. Только очень малая часть.
Re[10]: Автозаполнитель форм дурит, sorry
От: INTP_mihoshi Россия  
Дата: 14.05.04 12:06
Оценка:
Здравствуйте, desperado_gmbh, Вы писали:

INT>>С одной стороны, да. А с другой язык С++ наполовину состоит из APS. Так что, если рассматривать APS как средство написания программ, то они уже давно и широко используются.


_>Нет. Настоящая APS извлекает код из доказательства спецификации программы. Например, на 271 странице документации к Coq (http://coq.inria.fr) разобран пример извлечения алгоритма сортировки из доказательства теоремы о том, что любой массив некоей перестановкой превращается в отсортированный. В contribs к Coq есть таким же образом доказанные алгоритмы Хаффмана и Бухбергера. К непонятно какой половине C++ это отношения не имеет.


К контролю типов, константности методов, корректности инициализации, прав доступа.

Скажем, для того, чтобы объявить метод константным, нужно формально доказать, что все используемые в нем операции также являются константными. При этом можно добавлять акиому о правильности некоторого метода ключевым через const_cast. Правда, новых тактик добавлять нельзя

Между прочим, ты не сравнивал Hol, Isabella и Coq? В чем они отличаются и насколько они совместимы?

_>>>Только вот арифметика и геометрия существуют больше двух тысяч лет, алгебра (Виет, Декарт) и теория чисел (Ферма) — 400, анализ (Ньютон) — 300, абстрактная алгебра (Абель, Галуа) — 180, теория множеств (Кантор) и топология (Пуанкаре) — 100.

INT>>Ну, они же теперь формально доказаны?

_>Нет. Только очень малая часть.


Значит, еще не известно, правильны они или нет.
Re[11]: Автозаполнитель форм дурит, sorry
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 14.05.04 12:33
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Скажем, для того, чтобы объявить метод константным, нужно формально доказать, что все используемые в нем операции также являются константными. При этом можно добавлять акиому о правильности некоторого метода ключевым через const_cast. Правда, новых тактик добавлять нельзя


Ага, система доказательства, умеющая доказывать только одну теорему — что программа синтаксически правильна. Она даже не может доказать или опровергнуть, что при выполнении не возникнет undefined behavior и что выполнение вообще завершиться.

INT>Между прочим, ты не сравнивал Hol, Isabella и Coq? В чем они отличаются и насколько они совместимы?


Я работал только с Coq. А у кого-нибудь еще есть windows-версия?

_>>>>Только вот арифметика и геометрия существуют больше двух тысяч лет, алгебра (Виет, Декарт) и теория чисел (Ферма) — 400, анализ (Ньютон) — 300, абстрактная алгебра (Абель, Галуа) — 180, теория множеств (Кантор) и топология (Пуанкаре) — 100.

INT>>>Ну, они же теперь формально доказаны?
_>>Нет. Только очень малая часть.
INT>Значит, еще не известно, правильны они или нет.

Это уже вопрос принципов научного познания. Физику с химией, например, вообще формализовать нельзя (не ту часть, где расчеты — это по сути математика, а ту часть, где эксперименты, подтверждающие законы), но без них компьютер работать не будет и никаких теорем не докажет.
Re[12]: Автозаполнитель форм дурит, sorry
От: INTP_mihoshi Россия  
Дата: 14.05.04 12:42
Оценка:
Здравствуйте, desperado_gmbh, Вы писали:

_>Ага, система доказательства, умеющая доказывать только одну теорему — что программа синтаксически правильна. Она даже не может доказать или опровергнуть, что при выполнении не возникнет undefined behavior и что выполнение вообще завершиться.


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

INT>>Между прочим, ты не сравнивал Hol, Isabella и Coq? В чем они отличаются и насколько они совместимы?


_>Я работал только с Coq. А у кого-нибудь еще есть windows-версия?


У HOL есть. Isabella кто-то компилил под Cygwin и даже описал, как это делается, но у меня сходу не получилосб. А жаль, она мне понравилось использованием более переносимой нотации.

INT>>Значит, еще не известно, правильны они или нет.


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


Согласен, в любом случае все сводится к принципу "хрен знает, но до сих пор работало". Даже, если речь идет о том, взойдет ли солнце завтра
Re[13]: Автозаполнитель форм дурит, sorry
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 14.05.04 12:50
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

_>>Ага, система доказательства, умеющая доказывать только одну теорему — что программа синтаксически правильна. Она даже не может доказать или опровергнуть, что при выполнении не возникнет undefined behavior и что выполнение вообще завершиться.

INT>Но тем не менее это доказывает, что ASP уже давно широко используются, хотя и в сильно (слишком) урезанном виде.

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

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

INT>Согласен, в любом случае все сводится к принципу "хрен знает, но до сих пор работало". Даже, если речь идет о том, взойдет ли солнце завтра

Между "хрен знает, но до сих пор работало" и научным познанием огромная пропасть.
Re[14]: Автозаполнитель форм дурит, sorry
От: INTP_mihoshi Россия  
Дата: 14.05.04 13:17
Оценка:
Здравствуйте, desperado_gmbh, Вы писали:

INT>>Но тем не менее это доказывает, что ASP уже давно широко используются, хотя и в сильно (слишком) урезанном виде.


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


Та "половина языка", которую я имел в виду нужна не для того, чтобы скомпилировать, я для того, чтобы выявлять ошибки дизайна на этапе компиляции. Ограничители доступа к членам класса (private/public/protected/friend etc.), константные методы, различные способы приведения типов (*_cast), чисто виртуальные методы, объявления исключений, бросаемых функцией не нужны для компиляции, но введены в язык для возможности формализации и проверки правильности программы.

INT>>Согласен, в любом случае все сводится к принципу "хрен знает, но до сих пор работало". Даже, если речь идет о том, взойдет ли солнце завтра


_>Между "хрен знает, но до сих пор работало" и научным познанием огромная пропасть.

Научное познание сводится к тому, чтобы свести количество "ХЗНДР" к минимуму, систематизировать и уметь на их основе что-то изучать и прогнозировать
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 14.05.04 16:55
Оценка:
Здравствуйте, SWW, Вы писали:

kuj>>Рецептов избавления много и существуют они далеко не первый год. Просто Вы, наверное, ничего кроме пары императивных языков вроде C/C++/Pascal не видели. Например, все вышеуказанное в .NET языках в принципе не возможно (кроме как по вине ошибки в JIT-компиляторе или сборщике муссора). А сборщики муссора существовали еще в первых версиях LISP (который, кстати, во много раз старше C/C++/Pascal).


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

Напротив, дает время программисту на создание более тщательно продуманной архитектуру.
SWW>А отсутствие сборщика мусора заставляет программиста точно представлять себе сроки жизни каждого объекта, благодаря чему он тщательнее продумывает архиректуру своей программы что в конечном итоге идет ему на пользу.
Более тщательно (а иногда и не очень-то более) продумывает механизмы распределения такого ресурса, как память, что к архитектуре приложения не имеет никакого абсолютно отношения. Зато времени на продумывания архитектуры остается меньше. Впрочем, при наличии smart pointers и умении правильно ими пользоваться в C++ эта проблема более-менее решается.

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

kuj>>Проверка на выход за границы массива существовала еще в Delphi. В .NET ественно она тоже существует.
SWW>Так вопрос не в том, чтобы вбить проверку при каждом обращении к массиву, а в том, как добиться, чтобы программист написал программу, в которой никогда не происходит такой выход! Ну не может это компилятор в принципе, какие языки ни сочиняй.
Да Вы, оказывается, философ. Да, мир неидеален и никогда таковым не станет. Именно для этого выдумываются методы автоматического управления ресурсами.

SWW>Да, паскаль проверяет каждое обращение и при ошибке вывыливается, вежливо сообщив пользователю об ошибке в программе. Много ли радости от этого пользователю?

Ага, лучше, наверное, чтоб вываливался, не сообщив. Тогда не только пользователю, но и разработчику придется локти кусать...
... << RSDN@Home 1.1.3 stable >>
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 14.05.04 16:55
Оценка:
Здравствуйте, Дарней, Вы писали:


kuj>>Наверное, покажусь неоригинальным, но C во многом безобразный язык. И == это самое меньшее, к чему можно было прицепиться. Впрочем, Pascal по-моему еще более безобразный язык.

Д>про Паскаль согласен. Вспоминаю про := и бегины с ендами, и сразу думаю "и эти люди запрещают мне ковыряться в носу?!"
Бегины с эндами это мелочь. Если бы проблема была только в этом, то я бы не назвал паскаль безобразным языком.

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

kuj>>Э-э, шутить изволите? Придумали. При чем, еще до появления C.
Д>а можно с этого места и подробнее?
Можно, но только применительно к конкретным задачам.

kuj>>А реальные проблемы программирования на C/C++ возникают, в первую очередь, из-за самого языка. Начиная от банального if (a = b), и заканчивая порчей указателей, утечками памяти и прочими-прочими радостями. Да и сам по себе императивный подход к программированию удобен далеко не всегда. Временами, императивный подход очень сильно мешает.

Д>я совсем не это имел в виду.
А что Вы имели в виду?

kuj>>Один лемминг, что примечательно, ошибается куда реже миллионов.

Д>вот как? очень интересная теория
Естественно. Толпа существо неразумное.

kuj>>P.S. Запомните: язык для задачи, а не задача для языка.

Д>хто бы спорил. вот современные задачи и породили C с его потомками
Современные породили Java/.NET Languages.
... << RSDN@Home 1.1.3 stable >>
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 14.05.04 16:55
Оценка: :)
Здравствуйте, mister-AK, Вы писали:

kuj>>Впрочем, Pascal по-моему еще более безобразный язык.

MA>странно
А что странного? C++ язык безобразный, но он хоть позволяет родными средствами прикрыть бОльшую часть срамоты. Паскаль не дает и этого.

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

kuj>>Э-э, шутить изволите? Придумали. При чем, еще до появления C.
MA>и что это за язык и какой из них красивее?
См. мое предыдущее сообщение.
... << RSDN@Home 1.1.3 stable >>
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 14.05.04 16:55
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>>>тем дольше время компиляции,

kuj>>Нет. C# сложнее, чем C++, а время компиляции программы на C# ниже.
kuj>>Время компиляции очень слабо связано со сложностью языка.
K_O>Неправильно оценивать сложность языка только количеством ключевых слов.
А где я оценивал сложность языка только количеством ключевых слов?
K_O>В C# разве есть шаблоны в том виде, в каком они есть в C++?
Нет. Пока нет.
K_O>Разве есть этот отстой в виде обычных, const, volatile и const volatile методов? То же и про переменные.
K_O>А множественное наследование для классов?
K_O>Эти "фичи" на несколько порядков усложняют компилятор.
Преувеличиваете. В противовес можно назвать: properties, attributes, delegates, enumerations, arrays, SEH.
Одним словом, как минимум парсер C# сложнее парсера C++ — сравните грамматики этих языков.

K_O>>>тем дольше время поиска ошибок

kuj>>C#/Java => C++ — где дольше время поиска ошибок?
K_O>В шаблонах никогда ошибок не искал? Компилятор всегда внятно может сказать, что и где ему не понравилось?
Так и я о том, что в C#/Java с этим гораздо проще. А ошибки в шаблонах это мелочь в сравнении с порчей указателей, утечками памяти, выходом за границы массива и т.д. и т.п.

K_O>>>и отладки,

kuj>>C#/Java => C++ — ...
K_O>См. предыдущий пункт.

K_O>>>тем дольше общее время разработки,

kuj>>C#/Java => C++
K_O>На C++ время разработки на порядки дольше.
Может и не на порядки, но дольше. Факт. С этим, собственно, никто и не спорил.
K_O>Из-за времени компиляции.

K_O>Много ты наотлаживаешься, когда проект собирается 45мин. ?
Да Вы шутник...

K_O>>>тем выше себестоимость продукта...

kuj>>Не правда ваша. Себестоимость продукта зависит не от сложности языка, а от человекочасов, потраченных на ее написание, отладку, введение в эксплуатацию, документирование, поддержку, маркетинг (опционально) и т.д. и т.д.
K_O>документирование, поддержку, маркетинг (опционально) — это везде одинаково,
Документирование и маркетинг в принципе одинаково. Поддержка программ, использующих управляемый код, обычно проще.
K_O>а вот "человекочасы, потраченных на ее написание, отладку," напрямую зависят от сложности языка
От сложности языка нет прямой зависимости. Еще раз: сравниваем сложность ассемблера (например, x86, положим, MASM), Forth, Lisp.. и того же C#.
K_O>и времени компиляции.
А полный ребилд проекта все-равно делается не так уж часто. Так что от времени компиляции себестоимость зависит очень и очень опосредственно. Тут точно нет прямой зависимости.
... << RSDN@Home 1.1.3 stable >>
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mister-AK Россия  
Дата: 14.05.04 18:09
Оценка: :)
Здравствуйте, mihailik, Вы писали:

MA>>А кто бы был? Ньютон или Декарт?


M>Кругом была бы одна Ява. И Бабаян пророк её.


M>


чуствую — цивилизация многое упустила!

представляю! одна Ява , никаких Галапагосов и Гавай и тем более Австралии нема на горизонте.

фильм похожий какой-то краем глаза однажды видал, кажись называется "Водный мир"...
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 14.05.04 20:52
Оценка:
Здравствуйте, Дарней, Вы писали:

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

kuj>>Э-э, шутить изволите? Придумали. При чем, еще до появления C.
Д>а можно с этого места и подробнее?
kuj>>P.S. Запомните: язык для задачи, а не задача для языка.
Д>хто бы спорил. вот современные задачи и породили C с его потомками

Кстати, очень рекомендую для самообразования поразбираться немного с O`Caml.
... << RSDN@Home 1.1.3 stable >>
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 15.05.04 08:45
Оценка:
Здравствуйте, beretta, Вы писали:

B>Это у них ФЯ, а кто мне скажет что преподают сейчас в наших школах?


В школах у нас обычно в плане IT считай что вобще ничего не преподают, а в институте у нас был пролог.
... << RSDN@Home 1.1.3 beta 2 (mobile station) >>
AVK Blog
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: lightSource Италия  
Дата: 15.05.04 19:25
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>>>тем выше вероятность наличия "ловушек" в синтаксисе языка,

kuj>>Это вроде if (a = b) в C/C++?
K_O>ага, или double d = 3,1415;

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

K_O>>>тем дольше общее время разработки,

kuj>>C#/Java => C++
K_O>На C++ время разработки на порядки дольше. Из-за времени компиляции. Много ты наотлаживаешься, когда проект собирается 45мин. ?

Для этого есть IncrediBuild, который мы с успехом используем и который снижает время компиляции с 45 до 10 — 15 минут. Конечно до скорости Delphi ему далеко, это не идеальное но приемлимое решение проблемы. Тем более что ты rebuild ты запускаешь не так часто, а простой build идёт гораздо быстрее.
silent
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 16.05.04 15:59
Оценка:
Здравствуйте, lightSource, Вы писали:

K_O>>>>тем выше вероятность наличия "ловушек" в синтаксисе языка,

kuj>>>Это вроде if (a = b) в C/C++?
K_O>>ага, или double d = 3,1415;

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


Зато "ловушка" вполне корректна. Подобных граблей в C/C++ раскидано великое множество. Поэтому без опыта в C/C++ делать нечего.
... << RSDN@Home 1.1.3 stable >>
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 16.05.04 15:59
Оценка:
Здравствуйте, AndrewVK, Вы писали:

B>>Это у них ФЯ, а кто мне скажет что преподают сейчас в наших школах?

AVK>В школах у нас обычно в плане IT считай что вобще ничего не преподают, а в институте у нас был пролог.
LISP (и вариации на тему AutoLISP) тоже сейчас преподают, на сколько я знаю. Правда, OCaml, как ФЯ, поинтереснее будет.
... << RSDN@Home 1.1.3 stable >>
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 16.05.04 16:12
Оценка:
Здравствуйте, SWW, Вы писали:

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


SWW>Обучение самому программированию? Вопрос, конечно, интересный и даже актуальный — но как учить самому программированию не изучив хотя бы один язык программирования? Как можно учить столяра делать мебель, не научив его пользоваться ножовкой и рубанком?


Следует выбрать минимальное множество языков, максимально отображающих каждую современную концепцию программирования и преподавать их параллельно. Императивное процедурное — паскаль или бейсик (скорее бейсик); императивное ООП — Java, C#, VB.NET, smalltalk, Object Pascal (какой-то из первых трех предпочтительнее); функциональное — OCaml, ML, LISP (OCaml предпочтительнее); декларативное — пожалуй, Prolog без вариантов. После основ совсем неплохо ввести отдельный курс по патернам проектирования, по структурам данных и основным алгоритмам (сортировки, поиск, регулярные выражения, списки, деревья, стеки, деки, очереди и т.д.). Затем можно и более специфичное: БД, сети, распределенные системы, компиляторы, компьютерная графика (база, OGl, D3D) и т.д. и т.п.
... << RSDN@Home 1.1.3 stable >>
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Sergey Россия  
Дата: 17.05.04 08:30
Оценка:
Hello, kuj!
You wrote on Fri, 14 May 2004 16:55:13 GMT:

k> attributes, delegates, enumerations, arrays, SEH. Одним словом, как

k> минимум парсер C# сложнее парсера C++ — сравните грамматики этих языков.

Сравните до кучи еще и disambiguation rules, которые из парсера C++ делают полный кошмар.

Best regards,
Sergey.
Posted via RSDN NNTP Server 1.9 alpha
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 17.05.04 08:51
Оценка:
Здравствуйте, lightSource, Вы писали:

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


K_O>>>>тем выше вероятность наличия "ловушек" в синтаксисе языка,

kuj>>>Это вроде if (a = b) в C/C++?
K_O>>ага, или double d = 3,1415;

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

Приведенная ошибка — результат несоответствия ЯП и человеческого языка. Приведенная ошибка — это маразм компилятора, который проглатывает выражения типа:
1415;

Что означает эта конструкция?

K_O>>>>тем дольше общее время разработки,

kuj>>>C#/Java => C++
K_O>>На C++ время разработки на порядки дольше. Из-за времени компиляции. Много ты наотлаживаешься, когда проект собирается 45мин. ?

S>Для этого есть IncrediBuild, который мы с успехом используем и который снижает время компиляции с 45 до 10 — 15 минут. Конечно до скорости Delphi ему далеко, это не идеальное но приемлимое решение проблемы. Тем более что ты rebuild ты запускаешь не так часто, а простой build идёт гораздо быстрее.


Мы тоже им пользуемся, но перед линковкой (20 мин.) IncrediBuild пасует.
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 17.05.04 12:25
Оценка:
Здравствуйте, SWW, Вы писали:

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

SWW>Обучение самому программированию? Вопрос, конечно, интересный и даже актуальный — но как учить самому программированию не изучив хотя бы один язык программирования? Как можно учить столяра делать мебель, не научив его пользоваться ножовкой и рубанком?
Следует использовать абстрактные ножовку и рубанок.
... << RSDN@Home 1.1.3 stable >>
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: lightSource Италия  
Дата: 17.05.04 12:51
Оценка:
Здравствуйте, kuj, Вы писали:

kuj>Зато "ловушка" вполне корректна. Подобных граблей в C/C++ раскидано великое множество. Поэтому без опыта в C/C++ делать нечего.


Без опыта в программировании вообще делать нечего. Ровно как и в любой другой серьёзной области деятельности.
... << RSDN@Home 1.1.3 stable >>
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: lightSource Италия  
Дата: 17.05.04 12:51
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

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


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


K_O>>>>>тем выше вероятность наличия "ловушек" в синтаксисе языка,

kuj>>>>Это вроде if (a = b) в C/C++?
K_O>>>ага, или double d = 3,1415;

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

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

Как будто в Паскале нет ничего похожего и он являет собой образец для подражания. Если нужен естественноподобный язык — пиши на SPL(Shakespeare Programming Language). В любом языке, даже естественном есть свои правила, если эти правила не соблюдать — далеко не уедешь.

K_O>
K_O>1415;
K_O>

K_O>Что означает эта конструкция?

Не вырывай из контекста а рассматривай в целом 3, 1415 — а вот это уже перечисление, список если позволите — вполне определённая языковая конструкция. Если тебе непривычно — не говори что неудобно.

K_O>>>>>тем дольше общее время разработки,

kuj>>>>C#/Java => C++
K_O>>>На C++ время разработки на порядки дольше. Из-за времени компиляции. Много ты наотлаживаешься, когда проект собирается 45мин. ?

S>>Для этого есть IncrediBuild, который мы с успехом используем и который снижает время компиляции с 45 до 10 — 15 минут. Конечно до скорости Delphi ему далеко, это не идеальное но приемлимое решение проблемы. Тем более что ты rebuild ты запускаешь не так часто, а простой build идёт гораздо быстрее.


K_O>Мы тоже им пользуемся, но перед линковкой (20 мин.) IncrediBuild пасует.

Ещё раз повторюсь, ты rebuild не так часто запускаешь.
... << RSDN@Home 1.1.3 stable >>
Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 17.05.04 13:18
Оценка: +2
Здравствуйте, lightSource, Вы писали:

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

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

S>Как будто в Паскале нет ничего похожего и он являет собой образец для подражания.

Вот что сказал компилятор Delphi, на эту же конструкцию:
[Error] Unit1.pas(65): Statement expected, but expression of type 'Integer' found

S>Если нужен естественноподобный язык — пиши на SPL(Shakespeare Programming Language). В любом языке, даже естественном есть свои правила, если эти правила не соблюдать — далеко не уедешь.

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

K_O>>
K_O>>1415;
K_O>>

K_O>>Что означает эта конструкция?

S>Не вырывай из контекста а рассматривай в целом

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

S> 3, 1415 — а вот это уже перечисление, список если позволите — вполне определённая языковая конструкция. Если тебе непривычно — не говори что неудобно.

Да!!! Мне, знаете ли, непривычно, когда "перечисление, список если позволите" приваивается переменной типа double!

S>>>Для этого есть IncrediBuild, который мы с успехом используем и который снижает время компиляции с 45 до 10 — 15 минут. Конечно до скорости Delphi ему далеко, это не идеальное но приемлимое решение проблемы. Тем более что ты rebuild ты запускаешь не так часто, а простой build идёт гораздо быстрее.


K_O>>Мы тоже им пользуемся, но перед линковкой (20 мин.) IncrediBuild пасует.

S>Ещё раз повторюсь, ты rebuild не так часто запускаешь.
Я не понял, ты что ли рядом сидишь, коли знаешь, как часто мы rebuild запускаем? Так вот, говорю, обычная отладка — найти в отладчике проблему, исправить пару строчек кода в одном файле и снова собрать проект (build, а не rebuild) — занимает 25 мин.
5 мин — компиляция на IncrediBuilde, 20 мин — линковка.
Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 17.05.04 14:09
Оценка:
Здравствуйте, lightSource, Вы писали:

kuj>>Зато "ловушка" вполне корректна. Подобных граблей в C/C++ раскидано великое множество. Поэтому без опыта в C/C++ делать нечего.

S>Без опыта в программировании вообще делать нечего. Ровно как и в любой другой серьёзной области деятельности.
Перефразирую: без большого количества опыта. Программирование на C++ требует значительно более высокий уровень квалификации, чем, скажем, программирование на VB.
... << RSDN@Home 1.1.3 stable >>
Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 17.05.04 19:36
Оценка: -1
Здравствуйте, lightSource, Вы писали:

S>Как будто в Паскале нет ничего похожего и он являет собой образец для подражания. Если нужен естественноподобный язык — пиши на SPL(Shakespeare Programming Language). В любом языке, даже естественном есть свои правила, если эти правила не соблюдать — далеко не уедешь.

Если уж на то пошло, грамматика любого естественного языка куда сложнее грамматик ЯП.
... << RSDN@Home 1.1.3 stable >>
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: amark  
Дата: 18.05.04 07:32
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

S>> 3, 1415 — а вот это уже перечисление, список если позволите — вполне определённая языковая конструкция. Если тебе непривычно — не говори что неудобно.

K_O>Да!!! Мне, знаете ли, непривычно, когда "перечисление, список если позволите" приваивается переменной типа double!

М-м-м. Вопрос можно ? Какой С/С++ компилятор позволяет это сделать ? Я имею в виду — пропустит конструкцию
double pi = 3,1415;


без (как минимум) warning'a ?
Re[10]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Курилка Россия http://kirya.narod.ru/
Дата: 18.05.04 07:38
Оценка:
Здравствуйте, amark, Вы писали:

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


S>>> 3, 1415 — а вот это уже перечисление, список если позволите — вполне определённая языковая конструкция. Если тебе непривычно — не говори что неудобно.

K_O>>Да!!! Мне, знаете ли, непривычно, когда "перечисление, список если позволите" приваивается переменной типа double!

A>М-м-м. Вопрос можно ? Какой С/С++ компилятор позволяет это сделать ? Я имею в виду — пропустит конструкцию

A>
A>double pi = 3,1415;
A>


A>без (как минимум) warning'a ?


ИМХО — любой, т.к. конструкция вполне корректна в соотв. с C++ (и C)
Re[11]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: amark  
Дата: 18.05.04 07:49
Оценка:
Здравствуйте, Курилка, Вы писали:

A>>М-м-м. Вопрос можно ? Какой С/С++ компилятор позволяет это сделать ? Я имею в виду — пропустит конструкцию

A>>
A>>double pi = 3,1415;
A>>


A>>без (как минимум) warning'a ?


К>ИМХО — любой, т.к. конструкция вполне корректна в соотв. с C++ (и C)


А проверить ? VC 6.0 не пропустил это ни как С, ни как С++
Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Ka3a4oK  
Дата: 18.05.04 08:21
Оценка:
Здравствуйте, amark, Вы писали:

A>Здравствуйте, Курилка, Вы писали:


A>>>М-м-м. Вопрос можно ? Какой С/С++ компилятор позволяет это сделать ? Я имею в виду — пропустит конструкцию

A>>>
A>>>double pi = 3,1415;
A>>>


A>>>без (как минимум) warning'a ?


К>>ИМХО — любой, т.к. конструкция вполне корректна в соотв. с C++ (и C)


A>А проверить ? VC 6.0 не пропустил это ни как С, ни как С++


Отдели инициализацию от определения...

double pi;
pi= 3,1415;


... и любой VC компилятор схавает и не поперхнется даже на 4 уровне варнинга.
Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Курилка Россия http://kirya.narod.ru/
Дата: 18.05.04 08:22
Оценка:
Здравствуйте, amark, Вы писали:

A>Здравствуйте, Курилка, Вы писали:


A>>>М-м-м. Вопрос можно ? Какой С/С++ компилятор позволяет это сделать ? Я имею в виду — пропустит конструкцию

A>>>
A>>>double pi = 3,1415;
A>>>


A>>>без (как минимум) warning'a ?


К>>ИМХО — любой, т.к. конструкция вполне корректна в соотв. с C++ (и C)


A>А проверить ? VC 6.0 не пропустил это ни как С, ни как С++


Под рукой 7.1, так что хз что с 6-кой, но и вправду пример некорректный, т.к. приоритет у "=" выше чему у ",".
Поэтому попробуй скомпилять вот такое:

double pi;
pi = 3,1415;


тупо, но учти, что 1 и 2 строка могут быть отнюдь не одна за другой в тексте программы.
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: mister-AK Россия  
Дата: 18.05.04 16:30
Оценка:
Здравствуйте, Шахтер, Вы писали:

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


_>>Здравствуйте, Шахтер, Вы писали:


Ш>>>Вопрос на засыпку -- многие ли программисты знают, что такое интеграл Лебега?


_>>Изоморфизм Карри-Ховарда и основы теории категорий для обсуждаемых целей полезнее


Ш>Пожалуй. Но я боюсь, программистов, знающих теорию категорий, ещё меньше, чем знающих интеграл Лебега.


Вот покапал эту сеть :
то что здесь написано это кажись все, что дает хоть какое-то представленине о этой теории?

Почему бы кому-нить, кто затрагивал в ВУЗе данный предмет и разберется в терминологических тонкостях, не попереводить материал на родной язык, который выложен хотя бы вот тут ... коли это так полезно знать программистам Отечество вас незабудет, дорогие патриоты
Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: amark  
Дата: 18.05.04 16:34
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Под рукой 7.1, так что хз что с 6-кой, но и вправду пример некорректный, т.к. приоритет у "=" выше чему у ",".

К>Поэтому попробуй скомпилять вот такое:

К>
К>double pi;
К>pi = 3,1415;
К>


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


Таки да Еще один аргумент в пользу использования const вместо DEFINE. Ну а о том, что численные значения констант использовать в выражениях — дурной тон, спорить, надеюсь не будем ?
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: lightSource Италия  
Дата: 18.05.04 17:44
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

S>>Как будто в Паскале нет ничего похожего и он являет собой образец для подражания.

K_O>Вот что сказал компилятор Delphi, на эту же конструкцию:
K_O>[Error] Unit1.pas(65): Statement expected, but expression of type 'Integer' found

Я сказал похожего, а не этого. Не надо принимать всё буквально.

S>>Если нужен естественноподобный язык — пиши на SPL(Shakespeare Programming Language). В любом языке, даже естественном есть свои правила, если эти правила не соблюдать — далеко не уедешь.

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

Извини, а ты хотел вот так наскоком выучить язык программирования?

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


Ну знаешь. Всё зависит от того сколько ты писал на С++. Такие ошибки ловятся на лету. Если они для тебя трудны, значит ты просто не привык.

S>>Не вырывай из контекста а рассматривай в целом

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

Я знаю что компиляемая. Ты программист или где? Вам в универе дискретную математику преподавали? Тебя никогда не смущало определение терма для предикатов? Здесь точно такая же ситуация. Однако там значит хорошо, а здесь — плохо? Никогда такого не будет, чтобы можно было написать "Хочу чтобы всё работало" — и оно работало!

K_O>>>Мы тоже им пользуемся, но перед линковкой (20 мин.) IncrediBuild пасует.

S>>Ещё раз повторюсь, ты rebuild не так часто запускаешь.
K_O>Я не понял, ты что ли рядом сидишь, коли знаешь, как часто мы rebuild запускаем? Так вот, говорю, обычная отладка — найти в отладчике проблему, исправить пару строчек кода в одном файле и снова собрать проект (build, а не rebuild) — занимает 25 мин.
K_O>5 мин — компиляция на IncrediBuilde, 20 мин — линковка.

Криво настроеный Incredibuild — хуже любого встроеного компилятора. Как я понимаю, при обычной отладке ты каждый раз меняешь h-шник, от которого зависит туча файлов, а не cpp файл, как все нормальные люди на сборку и прилинковку которого при включенном incremental linking уходит пару секунд. Это уже знаете ли болезнь архитектуры и в этом случае тебя никакой язык не спасёт.
... << RSDN@Home 1.1.3 stable >>
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: lightSource Италия  
Дата: 18.05.04 17:44
Оценка:
Здравствуйте, kuj, Вы писали:

kuj>Перефразирую: без большого количества опыта. Программирование на C++ требует значительно более высокий уровень квалификации, чем, скажем, программирование на VB.


Да. Высокая квалификация — это только плюс.
... << RSDN@Home 1.1.3 stable >>
Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Шахтер Интернет  
Дата: 18.05.04 23:23
Оценка:
Здравствуйте, mister-AK, Вы писали:

MA>Здравствуйте, Шахтер, Вы писали:


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


_>>>Здравствуйте, Шахтер, Вы писали:


Ш>>>>Вопрос на засыпку -- многие ли программисты знают, что такое интеграл Лебега?


_>>>Изоморфизм Карри-Ховарда и основы теории категорий для обсуждаемых целей полезнее


Ш>>Пожалуй. Но я боюсь, программистов, знающих теорию категорий, ещё меньше, чем знающих интеграл Лебега.


MA>Вот покапал эту сеть :

MA>то что здесь написано это кажись все, что дает хоть какое-то представленине о этой теории?

Боюсь, что этот текст никакого представления о теории категорий не даёт.

MA>Почему бы кому-нить, кто затрагивал в ВУЗе данный предмет и разберется в терминологических тонкостях, не попереводить материал на родной язык, который выложен хотя бы вот тут ...


Этот сайт посвящен K-теории, а не теории категорий.

MA>коли это так полезно знать программистам


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

MA>Отечество вас незабудет, дорогие патриоты


Забыло напрочь. Даже в советские времена на русский язык переводилось явно недостаточное количество зарубежной научной литературы. После краха СССР это вообще прекратилось.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: beretta Россия icq: 138726397
Дата: 19.05.04 06:11
Оценка:
Здравствуйте, Шахтер, Вы писали:

MA>>Отечество вас незабудет, дорогие патриоты


Ш>Забыло напрочь. Даже в советские времена на русский язык переводилось явно недостаточное количество зарубежной научной литературы. После краха СССР это вообще прекратилось.


Для производства шоколадных батончиков, теория категорий непригодилась. А жаль.
Re[10]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: INTP_mihoshi Россия  
Дата: 19.05.04 06:20
Оценка:
Здравствуйте, lightSource, Вы писали:

S>Извини, а ты хотел вот так наскоком выучить язык программирования?


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


S>Ну знаешь. Всё зависит от того сколько ты писал на С++. Такие ошибки ловятся на лету. Если они для тебя трудны, значит ты просто не привык.


А с чего вообще возникла эта мода учить языки программирования вместо того, чтобы учиться программированию? Если язык вредит вместо того, чтобы помогать, то "подумай, нужен ли тебе такой муж" (с)

Язык — это просто одно из средств программиста. Осваивать возможности инструмента, учиться эффективнее его использовать — это да, это нужно. Но почему я должен тратить свое время только из-за кривизны инструмента?
Re[11]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 19.05.04 06:35
Оценка: +1
Здравствуйте, INTP_mihoshi, Вы писали:

INT>А с чего вообще возникла эта мода учить языки программирования вместо того, чтобы учиться программированию? Если язык вредит вместо того, чтобы помогать, то "подумай, нужен ли тебе такой муж" (с)


INT>Язык — это просто одно из средств программиста. Осваивать возможности инструмента, учиться эффективнее его использовать — это да, это нужно. Но почему я должен тратить свое время только из-за кривизны инструмента?


учиться программировать "вообще", без к-л языка это, imho, тоже что учиться говорить "вообще", ни на каком языке конкретно
Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: INTP_mihoshi Россия  
Дата: 19.05.04 07:15
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

INT>>А с чего вообще возникла эта мода учить языки программирования вместо того, чтобы учиться программированию? Если язык вредит вместо того, чтобы помогать, то "подумай, нужен ли тебе такой муж" (с)


OE>учиться программировать "вообще", без к-л языка это, imho, тоже что учиться говорить "вообще", ни на каком языке конкретно


Да. Учиться говорить вообще важнее, чем на каком-то языке конкретно.
Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Mink Россия  
Дата: 19.05.04 08:05
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Здравствуйте, Odi$$ey, Вы писали:


INT>>>А с чего вообще возникла эта мода учить языки программирования вместо того, чтобы учиться программированию? Если язык вредит вместо того, чтобы помогать, то "подумай, нужен ли тебе такой муж" (с)


OE>>учиться программировать "вообще", без к-л языка это, imho, тоже что учиться говорить "вообще", ни на каком языке конкретно


INT>Да. Учиться говорить вообще важнее, чем на каком-то языке конкретно.


Каким образом? Собственно, понятие говорить неотделимо от языка.
Сила, она в ньютонах
Re[11]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 19.05.04 08:15
Оценка:
INT>Язык — это просто одно из средств программиста. Осваивать возможности инструмента, учиться эффективнее его использовать — это да, это нужно. Но почему я должен тратить свое время только из-за кривизны инструмента?

Потому что любой инструмент кажется кривым и неудобным когда ты его еще не освоил. А после того как привыкнешь, кривыми будут казаться любые новые инструменты, пока не приспособишься к ним.
Тут кто-то возмущался тем, что оператор ++ примененный к указателю на структуру мнеяет ее значение не на 1, а на размер структуры. Если он до этого программировал на асме, то это не удивительно.
P.S. А может кривой вовсе не инструмент, а руки?
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 19.05.04 08:40
Оценка: 2 (1)
Здравствуйте, Шахтер, Вы писали:

Ш>Забыло напрочь. Даже в советские времена на русский язык переводилось явно недостаточное количество зарубежной научной литературы. После краха СССР это вообще прекратилось.


Кстати, в этом году вышло второе издание знаменитых "Категорий для работающего математика" Маклейна в переводе В.А.Артамонова (оригинал — 1998 год). Хороший перевод, качественная верстка, практически нет ошибок. И есть надежда, что у "Физматлита" когда-нибудь кончатся советские переводы для перепечатки, и ему придется заняться новыми.
Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: INTP_mihoshi Россия  
Дата: 19.05.04 10:55
Оценка:
Здравствуйте, SWW, Вы писали:

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

SWW>Тут кто-то возмущался тем, что оператор ++ примененный к указателю на структуру мнеяет ее значение не на 1, а на размер структуры. Если он до этого программировал на асме, то это не удивительно.
SWW>P.S. А может кривой вовсе не инструмент, а руки?

Все кривое, кроме пчел Да и пчелы, вобщем-то...

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

С++ — гениальная вещь как набор практик и решений. Но, так как он строился инкрементно и тащит на себе все старые решения, на настоящий день отточенная семантика погребена под разлагающимся синтаксисом. Например, generic programming вообще и функциональное программирование в частности загноблены именно им.
Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.05.04 11:00
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>С++ — гениальная вещь как набор практик и решений. Но, так как он строился инкрементно и тащит на себе все старые решения, на настоящий день отточенная семантика погребена под разлагающимся синтаксисом. Например, generic programming вообще и функциональное программирование в частности загноблены именно им.


А можно чуть подробнее — каким образом C++ загнобил ФП, не являясь функциональным языком? ИМХО в этом может быть повинно только лишь неспособность самим ФЯ составить реальную конкуренцию...
Опровергни меня.
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 19.05.04 11:08
Оценка: +1 -2
Здравствуйте, kuj, Вы писали:


kuj>>>P.S. Запомните: язык для задачи, а не задача для языка.

Д>>хто бы спорил. вот современные задачи и породили C с его потомками
kuj>Современные породили Java/.NET Languages.
В которую Delphi вписывается элементарно. Более того C# и Delphi настолько похожи, что не взирая на С синтаксис дельфисты считают его почти родным языком. Как впрочеим и Java. И поверь это не мое единичное мнение. И суть не в синтаксисе.
Но все доводы применяемые против Delphi можно применить и к Java и Net, но именно они будут править бал.
Все достаточно субъективно, и нужно оценивать сегодняшнюю ситуацию. А вот влияние Вирта на их развитие очень большое, как и других основоположников. А с точки зрения программирования язык должен легко читатся, не иметь разночтений, и быть достаточно гибким.
Каков идеальный язык я не знаю, посмотрим.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: INTP_mihoshi Россия  
Дата: 19.05.04 11:15
Оценка:
Здравствуйте, Mink, Вы писали:

INT>>Да. Учиться говорить вообще важнее, чем на каком-то языке конкретно.


M>Каким образом? Собственно, понятие говорить неотделимо от языка.


От какого языка? От русского? Или от английского? Будет ли человек, умеющий излагать мысли на одном языке уметь это и на другом, ему известном? Поможет ли знание одного языка лучше пользоваться другим? Сводится ли филология к изучению языка?

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

Впрочем, это все (почти) оффтоп.
Re[15]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Mink Россия  
Дата: 19.05.04 11:26
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

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


INT>>>Да. Учиться говорить вообще важнее, чем на каком-то языке конкретно.


M>>Каким образом? Собственно, понятие говорить неотделимо от языка.


INT>От какого языка? От русского? Или от английского? Будет ли человек, умеющий излагать мысли на одном языке уметь это и на другом, ему известном? Поможет ли знание одного языка лучше пользоваться другим? Сводится ли филология к изучению языка?


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


INT>Впрочем, это все (почти) оффтоп.


По существу не согласен, но согласен, что офф топ, поэтому не буду развивать тему
Сила, она в ньютонах
Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: INTP_mihoshi Россия  
Дата: 19.05.04 11:29
Оценка:
Здравствуйте, Курилка, Вы писали:

INT>>С++ — гениальная вещь как набор практик и решений. Но, так как он строился инкрементно и тащит на себе все старые решения, на настоящий день отточенная семантика погребена под разлагающимся синтаксисом. Например, generic programming вообще и функциональное программирование в частности загноблены именно им.


К>А можно чуть подробнее — каким образом C++ загнобил ФП, не являясь функциональным языком? ИМХО в этом может быть повинно только лишь неспособность самим ФЯ составить реальную конкуренцию...

К>Опровергни меня.

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

Я говорю о шаблонах. Современные ФЯ — это языки, которые целиком построены на технологии, эквивалентной шаблонам в С++. В ML даже видны "хвосты" этой реализации в синтаксисе — ключевое слово rec, которое используется при определении рекурсивных функций, из-за того что их нельзя напрямую реализовать через шаблоны.
Re[15]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.05.04 13:35
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Здравствуйте, Курилка, Вы писали:


К>>А можно чуть подробнее — каким образом C++ загнобил ФП, не являясь функциональным языком? ИМХО в этом может быть повинно только лишь неспособность самим ФЯ составить реальную конкуренцию...

К>>Опровергни меня.

INT>С++ — самый настоящий функциональный язык. Он позволяет делать практически все то, что есть в "классических" функциональных языках. Отличие только в том, что то, в ML и Haskell является основой языка и поддержано синтаксисом по самое не могу, в С++ является поздней нашлепкойи сделано по принципу "чтоб було и самые видные дыры закрывало".


INT>Я говорю о шаблонах. Современные ФЯ — это языки, которые целиком построены на технологии, эквивалентной шаблонам в С++. В ML даже видны "хвосты" этой реализации в синтаксисе — ключевое слово rec, которое используется при определении рекурсивных функций, из-за того что их нельзя напрямую реализовать через шаблоны.


Ты на вопрос-то не ответил! Как загнобил-то?
Ну можно на нём в терминах ФЯ программить, это есть, но это :
1. не обязательно
2. нигде особо не офишируется и не ассоциируется наподобие — "C++ — самый ходовой ФЯ"
Re[15]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Sergey Россия  
Дата: 19.05.04 13:43
Оценка:
Hello, INTP_mihoshi!
You wrote on Wed, 19 May 2004 11:29:27 GMT:

Im> С++ — самый настоящий функциональный язык. Он позволяет делать

Im> практически все то, что есть в "классических" функциональных языках.
Im> Отличие только в том, что то, в ML и Haskell является основой языка и
Im> поддержано синтаксисом по самое не могу, в С++ является поздней
Im> нашлепкойи сделано по принципу "чтоб було и самые видные дыры
Im> закрывало".

Im> Я говорю о шаблонах. Современные ФЯ — это языки, которые целиком

Im> построены на технологии, эквивалентной шаблонам в С++. В ML даже видны
Im> "хвосты" этой реализации в синтаксисе — ключевое слово rec, которое
Im> используется при определении рекурсивных функций, из-за того что их
Im> нельзя напрямую реализовать через шаблоны.

Только ты забыл добавить, что этот ФЯ — исключительно компайл-тайм язык.

Best regards,
Sergey.
Posted via RSDN NNTP Server 1.9 alpha
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 19.05.04 14:52
Оценка: :)
Здравствуйте, Serginio1, Вы писали:

kuj>>>>P.S. Запомните: язык для задачи, а не задача для языка.

Д>>>хто бы спорил. вот современные задачи и породили C с его потомками
kuj>>Современные породили Java/.NET Languages.
S> В которую Delphi вписывается элементарно. Более того C# и Delphi настолько похожи,
Ага, похожи. Только вся их похожесть заканчивается на операторах as, is.
S>что не взирая на С синтаксис дельфисты считают его почти родным языком.
S>Как впрочеим и Java.
Наши дельфисты вовсе так не считают. И правильно делают.
S>И поверь это не мое единичное мнение.
Верю. Но это не значит, что все так думают.
S> Но все доводы применяемые против Delphi можно применить и к Java и Net,
Вот сие есть грубая неправда.
... << RSDN@Home 1.1.3 stable >>
Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 19.05.04 15:02
Оценка: -1
Здравствуйте, kuj, Вы писали:

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


kuj>>>>>P.S. Запомните: язык для задачи, а не задача для языка.

Д>>>>хто бы спорил. вот современные задачи и породили C с его потомками
kuj>>>Современные породили Java/.NET Languages.
S>> В которую Delphi вписывается элементарно. Более того C# и Delphi настолько похожи,
kuj>Ага, похожи. Только вся их похожесть заканчивается на операторах as, is.
Я уже более мегабайта кода перевел с Delphi на C# и обратно и поверь это небольшая проблема.
S>>что не взирая на С синтаксис дельфисты считают его почти родным языком.
S>>Как впрочеим и Java.
kuj>Наши дельфисты вовсе так не считают. И правильно делают.
Это их проблемы. Мои баттерфляисты мнения.
S>>И поверь это не мое единичное мнение.
kuj>Верю. Но это не значит, что все так думают.
Согласен.
S>> Но все доводы применяемые против Delphi можно применить и к Java и Net,
kuj>Вот сие есть грубая неправда.
Пусть будет так. Но на всякий случай с Днем Пионерии!!!
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: kuj  
Дата: 19.05.04 20:06
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Без базару, C++ — очень красивый и очень выразительный язык,

Это даже не смешно...
... << RSDN@Home 1.1.3 stable >>
Re[10]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Шахтер Интернет  
Дата: 20.05.04 00:43
Оценка:
Здравствуйте, desperado_gmbh, Вы писали:

_>Здравствуйте, Шахтер, Вы писали:


Ш>>Забыло напрочь. Даже в советские времена на русский язык переводилось явно недостаточное количество зарубежной научной литературы. После краха СССР это вообще прекратилось.


_>Кстати, в этом году вышло второе издание знаменитых "Категорий для работающего математика" Маклейна в переводе В.А.Артамонова (оригинал — 1998 год). Хороший перевод, качественная верстка, практически нет ошибок.


А я и не знал, что Маклейна переводили. Я в своё время читал его в подлиннике.

_>И есть надежда, что у "Физматлита" когда-нибудь кончатся советские переводы для перепечатки, и ему придется заняться новыми.


Скорее бы.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: gbear Россия  
Дата: 20.05.04 03:18
Оценка:
Здравствуйте, SWW, Вы писали:

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


LVV>>Начинаться сжатым введением в основные понятия программного проектирования.

LVV>>Использовать лаконичную формальную нотацию, строго определенную не более чем на примерно 20 страницах.
SWW><...>

SWW>Глупости. Это был бы худший учебник, какой только можно придумать. Он был бы понятен только тому, кто уже знает язык.

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

День добрый...
Какой язык?! Человек предлагает учить не языку, но программированию — как конструктивному мышлению. А вы про язык.

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

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

---
С уважением, Сиваков Константин.
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: gbear Россия  
Дата: 20.05.04 04:15
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>3) Попробую сформулировать свою мысль. Не уверен, что делаю это вполне ясно.

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

День добрый...

В математике, есть единая формальная нотация — сиречь формальный язык. Это означает, что любое математическое выражение на любом — естественном или искуственном языках — всегда СВОДИТСЯ к выражению или цепочки выражений в этой натации — его можно выразить в этой натации. Эта нотация действительно "попроще Паскаля" — т.к. вдоль и поперёк формализована — это огромный плюс, т.к. такая нотация не терпит исключений и не допускает разночтений.

Ш>Вот только данный путь почему-то не привлекает никого. Потому что если так работать, то доказать можно будет разве что 2+2=4. Не годится такой подход для сложных задач.


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

Ш>Математики предпочитают работать с очень усложнённым и не формализованным языком(языками) для выражения своих мыслей. С++ до него ой как далеко (про остальных вообще помалкиваем в тряпочку). Если кто выдел хорошо изданные книги по современной математике -- обратите на количество разных шрифтов, которое там используется.


Примеры в студию. "Количество разных шрифтов, которое там используется" — не есть доказательство сложности и не формализованности. Лишь показатель того что в конкретном шрифте отсутсвует тот или иной знак нотации, а в другом он есть

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


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

Попытаюсь ещё раз пояснить свое видение смысла статьи... У математиков есть математическа нотация, у музыкантов — нотная (можно ряд продолжить и дальше) — все это вещи предназначенные для ясного и однозначного (не допускающего разночтений) выражения мысли. У программистов — у нас — такой вещи нет. А очень бы хотелось.
---
С уважением, Сиваков Константин.
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 20.05.04 09:32
Оценка: -1
G>Какой язык?! Человек предлагает учить не языку, но программированию — как конструктивному мышлению. А вы про язык.

G>Проблема-то как раз в том, что все "учебники" по программированию — суть пособие по какому-либо языку.


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

G> А это вытекает из того, что нет единой нотации — той у которой упоминает Вирт, что "не более чем на примерно 20 страницах" — которую можно и нужно вводить.


А для этого никакая нотация не нужна.

А то, что предлагает Вирт — это попытка лузера снова протолкнуть свой паскаль под другим соусом, раз уж он не состоялся как язык программирования.
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 20.05.04 09:43
Оценка: -2
G> У математиков есть математическа нотация, у музыкантов — нотная (можно ряд продолжить и дальше) — все это вещи предназначенные для ясного и однозначного (не допускающего разночтений) выражения мысли.

С одной стороны, математическая нотация не так уж однозначна: достаточно сказать, что в одних странах в качестве десятичного разделителя используется точка, в других — запятая. Если в таком простом вопросе нет единства, что уж говорить о более сложных вещах.
С другой стороны, язык С достаточно строго формализован — по крайней мере достаточно для того, чтобы описывать на нем алгоритмы и при этом программисты разных стран тебя понимали.

G> У программистов — у нас — такой вещи нет. А очень бы хотелось.


Есть такая вещь!
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: INTP_mihoshi Россия  
Дата: 20.05.04 11:13
Оценка:
Здравствуйте, SWW, Вы писали:

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


ИМХО любая текстовая или графическая нотация либо неоднозначна, либо громоздка. Но в математике есть точная семантическая нотация, т.е. совокупность однозначно интерпретируемых понятий. Например, поле, или там, целое число — имеют однозначный смысл. А вот в программировании такие, скажем, базовые понятия, как класс и функция понимаются в каждом языке по разному.

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


G>> У программистов — у нас — такой вещи нет. А очень бы хотелось.


SWW>Есть такая вещь!


Что именно ты имеешь в виду? Я лично вижу две системы: UML и Z-notation. Разумеется, в них многого не хватает, но как база вполне годиться. Особенно, если к UML, наконец, прикрутят стандартное текстовое представление.
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: folk Россия  
Дата: 20.05.04 13:04
Оценка: :)
Здравствуйте, Kh_Oleg, Вы писали:

B>>Ну тогда вообще надо предать анафеме идею полиморфизма.

B>>Ато привыкли, понимаешь, символ + и для сложения int и double ипользовать.
B>>Некоторые извращенцы перегружают + для строк и пытаются
B>>таким образом конкатенировать строки

K_O>Не надо впадать в крайности. "+" — это символ сложения. В повседеневной жизни мы обычно складываем числа.

K_O>А вот "++" — это операция инкремента. Еще нужно объяснять, что это за операция такая, и что для чисел она означает увеличение на единицу. Ну а перегрузка операторов — это вообще из серии "некоторое действие, которое выглядит как сложение, но делает то, что знаю только я!"

Ну а самое большое зло из этой серии — использование свойств вместо прямого доступа к переменной.
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 20.05.04 16:49
Оценка: +3
Здравствуйте, Kh_Oleg, Вы писали:

K_O>Не надо впадать в крайности. "+" — это символ сложения. В повседеневной жизни мы обычно складываем числа.

K_O>А вот "++" — это операция инкремента. Еще нужно объяснять, что это за операция такая, и что для чисел она означает увеличение на единицу. Ну а перегрузка операторов — это вообще из серии "некоторое действие, которое выглядит как сложение, но делает то, что знаю только я!"
Ну если тебе так хочется то ты можешь продолжать писать на языках которые ни чего не умеют, а я буду использовать язык который позволяет мне выражать свои мысли так как я хочу.
Например на С++ можно написать шаблон такого массива что... короче пример
int size=10000;
array_t<float> a(size);
array_t<float> b(size);
array_t<float> c(size);
array_t<float> d(size);
array_t<float> e(size);
array_t<float> f(size);
float x;
float y;
float z;
//тут инициализация
f*=(a/x+5)*b-(y*c-d/5)/e-z;
//что эквивалентно (без перегрузки операторов)
for(int i=0;i<size;++i)
    f.at(i)*=(a.at(i)/x+5)*b.at(i)-(y*c.at(i)-d.at(i)/5)/e.at(i)-z;

те не будет создано ни одного временного массива.
подробности в книге "Шаблоны С++. Стравочник разработчика" Вандевурд и Джосаттис

Тоже со строками
string s1;
string s2;
string s3;
string s4;
string s5;
//тут инициализация
string s6=s1+s2+s3+s4+s5;
//что эквивалентно (без перегрузки операторов)
string s6=string_cat(s1, string_cat(s2, string_cat(s3, string_cat(s4, s5))));

Тоже с векторами и матрицами
vector v1;
vector v2;
matrix m;
//тут инициализация
vector v3=(v1-v2)*m;
//что эквивалентно (без перегрузки операторов)
vector v2=mul_vector_matrix(sub_vector_vector(v1, v2), m);


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

ЗЫ Судя по тому что ты говоришь для тебя лучший язык это ассемблер. Простой, понятный, нет неоднозначностей. Просто чудо, а не язык...
ЗЗЫ А тех кто перегружает операторы не интуетивным образом надо сжигать на костре и предавать анафиме... Но такие индивиды не повод отказыватся от перегрузки операторов вобще.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: gbear Россия  
Дата: 21.05.04 04:03
Оценка: +1
Здравствуйте, SWW, Вы писали:

G>>Какой язык?! Человек предлагает учить не языку, но программированию — как конструктивному мышлению. А вы про язык.

G>>Проблема-то как раз в том, что все "учебники" по программированию — суть пособие по какому-либо языку.

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


Угу... Вот только, скажем так, "придумывание алгоритмов" — не суть программирование

G>> А это вытекает из того, что нет единой нотации — той у которой упоминает Вирт, что "не более чем на примерно 20 страницах" — которую можно и нужно вводить.


SWW>А для этого никакая нотация не нужна.


Для этого — это для чего? Для описания алгоритмов? Может быть... в большинсве своем, для этой задачи достаточно математической нотации. Хотя, опять же, в большинстве своем, получается грамоздко и не прозрачно.

SWW>А то, что предлагает Вирт — это попытка лузера снова протолкнуть свой паскаль под другим соусом, раз уж он не состоялся как язык программирования.


Хм... Вы не согласны с тем, что Паскаль более подходит для обучения программированию (с "нуля" естественно), чем С?!

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

---
С уважением, Сиваков Константин.
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: gbear Россия  
Дата: 21.05.04 04:21
Оценка: 1 (1)
Здравствуйте, SWW, Вы писали:


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


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


Гы... Скажите пожалуйста, с точки зрения математической нотации есть разница (возможность различного понимания) между:
x = 1.0001 и x = 1,0001
Именно, с точки зрения математической нотации? Думаю, что ответ очевиден — нет... и то и то, десячитная дробь — нотации обсалютно по барабану, какой символ используется в виде десятичного разделителя. Точно также как грамматика не зависит от алфавита а лишь "базируется" на нем.


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


Ещё раз — не достаточно он формализован!!! Как можно говорить о достаточно формализации языка когда в его синтаксисе есть неоднозначности!!!

На вскидку — некоторые конструкции можно трактовать — либо как объявление, либо как оператор. И это Вы называете — "достаточно формализованный язык"?!

Цитирую по памяти — сильно не пинать...

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

И что-то типа: "если конструкция выглядит как объявление, то это и есть объявление. В противном случае это оператор".

Я когда читал — плакал...


G>> У программистов — у нас — такой вещи нет. А очень бы хотелось.

SWW>Есть такая вещь!

Уж просвятите меня сирого.

---
С уважением, Сиваков Константин.
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: gbear Россия  
Дата: 21.05.04 04:42
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

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


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


INT>ИМХО любая текстовая или графическая нотация либо неоднозначна, либо громоздка. Но в математике есть точная семантическая нотация, т.е. совокупность однозначно интерпретируемых понятий. Например, поле, или там, целое число — имеют однозначный смысл. А вот в программировании такие, скажем, базовые понятия, как класс и функция понимаются в каждом языке по разному.


Дело не только и не столько в семантике — хотя это тоже проблема.

Но, что за смысл Вы вкладываете в понятие "текстовая или графическая нотация" — ИМХО, любая нотация либо то, либо другое

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

Но опять же... повторюсь... в этом вопросе мы напоминаем мне филогов с их определением ямба и хрея С их точки зрения, наверное, оно тоже "достаточно формализованно"... покрайней мере моя жена так и не поняла почему я долго над этим определением смеялся... Рискну процетировать (не пинать за оффтоп, пожалуйста, ИМХО, оно весьма поучительно).

Упрощённо это выглядит так:

Ямб — это когда ударение на четных слогах. Но может быть и на нечетных.
Хорей — это когда ударение на нечетных слогах. Но может быть и на четных.


Ничего не напоминает?

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

Так и мы — вполне можем понимать друг друга... невзирая даже на отсутсвие четкой терминологии... но вот "объяснить другим"... и смотрим на введение формализации, как на излишнее усложнение
---
С уважением, Сиваков Константин.
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 21.05.04 08:39
Оценка: -2
Здравствуйте, WolfHound, Вы писали:

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


K_O>>Не надо впадать в крайности. "+" — это символ сложения. В повседеневной жизни мы обычно складываем числа.

K_O>>А вот "++" — это операция инкремента. Еще нужно объяснять, что это за операция такая, и что для чисел она означает увеличение на единицу. Ну а перегрузка операторов — это вообще из серии "некоторое действие, которое выглядит как сложение, но делает то, что знаю только я!"
WH>Ну если тебе так хочется то ты можешь продолжать писать на языках которые ни чего не умеют, а я буду использовать язык который позволяет мне выражать свои мысли так как я хочу.
WH>Например на С++ можно написать шаблон такого массива что... короче пример
WH>
WH>int size=10000;
WH>array_t<float> a(size);
WH>array_t<float> b(size);
WH>array_t<float> c(size);
WH>array_t<float> d(size);
WH>array_t<float> e(size);
WH>array_t<float> f(size);
WH>float x;
WH>float y;
WH>float z;
WH>//тут инициализация
WH>f*=(a/x+5)*b-(y*c-d/5)/e-z;
WH>//что эквивалентно (без перегрузки операторов)
WH>for(int i=0;i<size;++i)
WH>    f.at(i)*=(a.at(i)/x+5)*b.at(i)-(y*c.at(i)-d.at(i)/5)/e.at(i)-z;
WH>

WH>те не будет создано ни одного временного массива.
WH>подробности в книге "Шаблоны С++. Стравочник разработчика" Вандевурд и Джосаттис
Два замечания:
Во-первых, в выражении использованы значения всех переменных, кроме массива f. Причем использованы без инициализации. Понятно, что в реальном проекте ты уж наверняка все бы проинициализировал. Только это как-то... неаккуратненько. А потом на форуме и всплывают вопросы, а почему это у меня в Debug все работает, а в Release — нет.
Второе, в твоем "кратком" выражении, за которое ты ратуешь, ни фига не понятно, где переменная типа double, а где — элемент массива. Упаси Бог, когда-нибудь отлаживать ошибку в таком выражении. Зачем нужна такая краткость в ущерб читабельности?
Но и это не главное.
Цитирую сам себя:

некоторое действие, которое выглядит как сложение, но делает то, что знаю только я!

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

WH>Тоже со строками

WH>
WH>string s1;
WH>string s2;
WH>string s3;
WH>string s4;
WH>string s5;
WH>//тут инициализация
WH>string s6=s1+s2+s3+s4+s5;
WH>//что эквивалентно (без перегрузки операторов)
WH>string s6=string_cat(s1, string_cat(s2, string_cat(s3, string_cat(s4, s5))));
WH>

Оператор сложения для строк, означающий конкатенацию — это, пожалуй, единственное применение перегрузки операторов, где оно действительно необходимо. А все потому, что в ЯП строка должна быть базовым типом! Таким как char, int, double. Так и string.
Вот для базовых (примитивных) типов операторы должны быть определены. Но не для составных типов, определяемых программистом!

WH>Тоже с векторами и матрицами

WH>
WH>vector v1;
WH>vector v2;
WH>matrix m;
WH>//тут инициализация
WH>vector v3=(v1-v2)*m;
WH>//что эквивалентно (без перегрузки операторов)
WH>vector v2=mul_vector_matrix(sub_vector_vector(v1, v2), m);
WH>

Умножение матриц — это целый алгоритм, к тому же, перемножение матриц, операция некоммутативная (A*B != B*A), а из текста этого не видно. Понятно, что часто хочется записать выражение в программе в виде, близком к виду формулы из книги. Но тогда, для того, чтобы понять, что здесь происходит надо будет эту самую книгу перечитать.

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

На том, на котором можно более кратно, точно и понятно выразить свою мысль. В этих примерах было кратко, не совсем точно (неинициализированные переменные) и непонятно.

WH>ЗЫ Судя по тому что ты говоришь для тебя лучший язык это ассемблер. Простой, понятный, нет неоднозначностей. Просто чудо, а не язык...

Точно, одна беда — слишком уж он низкоуровневый

WH>ЗЗЫ А тех кто перегружает операторы не интуетивным образом надо сжигать на костре и предавать анафиме...

Но почему язык позволяет таким индивидуумам так хулиганить?
Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 21.05.04 09:48
Оценка: 1 (1)
Здравствуйте, Kh_Oleg, Вы писали:

K_O>Два замечания:

K_O>Во-первых, в выражении использованы значения всех переменных, кроме массива f. Причем использованы без инициализации.
1)Во всех трех примерах написано //тут инициализация. Тебе что больше не кчему предратся?
2)Если ты посмотришь внимательно то значение массива f тоже использовано. Оператор *=
K_O>Понятно, что в реальном проекте ты уж наверняка все бы проинициализировал. Только это как-то... неаккуратненько.
А нахрена в примерах писать гору не относящегося к делу кода?
K_O>Второе, в твоем "кратком" выражении, за которое ты ратуешь, ни фига не понятно, где переменная типа double, а где — элемент массива. Упаси Бог, когда-нибудь отлаживать ошибку в таком выражении. Зачем нужна такая краткость в ущерб читабельности?
А что должно быть понятно в выражении которое писано от балды? В реальной программе будут вполне себе говорящие имена.

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

Один раз читаем доку в которой написано что-то типа

Для типа array_t перегружены все арифметические операторы так что запись вида arr1*arr2 трактуется как поэлементное умножение массивов. А запись вида const*arr трактуется как поэлементное умножение массива на константу.

Я знаю что из меня плохой писатель хелпов. Но скажи что тебе после прочтения этого будет не понятно в выражении тапа
arr1=arr2*const1-arr3/const2;
Ы?
K_O>Оператор сложения для строк, означающий конкатенацию — это, пожалуй, единственное применение перегрузки операторов, где оно действительно необходимо. А все потому, что в ЯП строка должна быть базовым типом! Таким как char, int, double. Так и string.
На сччет того должны быть строки одним из базовых типов языка или нет это тема для отдельного флейма.
K_O>Вот для базовых (примитивных) типов операторы должны быть определены. Но не для составных типов, определяемых программистом!
Категорически не согласен. Допустим я реализовал библиотеку для работы с числами в несколько сотен быйт и что мне теперь для них нельзя операторы перегрузить?
А взят тотже boost::spirit когда надо быстро написать не сложный парсер то эта штука очень удобна. Но он небыл бы возможен без перегрузки операторов.

K_O>Умножение матриц — это целый алгоритм, к тому же, перемножение матриц, операция некоммутативная (A*B != B*A), а из текста этого не видно. Понятно, что часто хочется записать выражение в программе в виде, близком к виду формулы из книги. Но тогда, для того, чтобы понять, что здесь происходит надо будет эту самую книгу перечитать.

Я вобще не понимаю как можно писать программу для предметной области хотябы поверхностно не разобравшись в ней? И вобще С++ это Язык ВЫСОКОГО Уровня, а ЯВУ были созданы для того чтобы сложные действия можно было записать просто.

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

Это на каком если не секрет?
K_O>В этих примерах было кратко,
K_O>не совсем точно (неинициализированные переменные)
Это не аргумент. см выше.
K_O>и непонятно.
Такой чувство что ты на принци пошол. Что тут не понятного?

K_O> Но почему язык позволяет таким индивидуумам так хулиганить?

А тут либо полный запрет на перегрузку и тогда нельзя писать интуитивно понятные бибииотеки. Либо есть шанс что один придурок из тысячи перегрузит операторы так что можно будет складывать метры с килограммами. Но так-как таких орлов практически нет то я предпочитаю чтобы была возможность перегружать операторы.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.05.04 10:00
Оценка:
Здравствуйте, WolfHound, Вы писали:


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

Перегрузка не всегда понятна и очевидна. Кроме того при поиске кода в исходниках по функции легче найти ее исходный код.
и чем Equals хуже == ????? И другие эквивалентные операторы. Дольше писать согласен (да и то при подсказке через точку нет проблем),
хуже читать — нет. Так думай перегружен метод для == или это ReferenceEquals.
Я лично предпочитаю единые по написанию функции четко определяющие вид операции вместо перегруженных операций.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 21.05.04 10:31
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


K_O>>Два замечания:

K_O>>Во-первых, в выражении использованы значения всех переменных, кроме массива f. Причем использованы без инициализации.
WH>1)Во всех трех примерах написано //тут инициализация. Тебе что больше не кчему предратся?
WH>2)Если ты посмотришь внимательно то значение массива f тоже использовано. Оператор *=
K_O>>Понятно, что в реальном проекте ты уж наверняка все бы проинициализировал. Только это как-то... неаккуратненько.
WH>А нахрена в примерах писать гору не относящегося к делу кода?
А что, для того, чтобы проинициализировать такой супер краткий шаблон надо "гору кода" писать? Так толку тогда с таких кратких выражений...

K_O>>Второе, в твоем "кратком" выражении, за которое ты ратуешь, ни фига не понятно, где переменная типа double, а где — элемент массива. Упаси Бог, когда-нибудь отлаживать ошибку в таком выражении. Зачем нужна такая краткость в ущерб читабельности?

WH>А что должно быть понятно в выражении которое писано от балды? В реальной программе будут вполне себе говорящие имена.
Я говорю не про имена переменных, а про то, что не понятно, где просто переменная, а где массив.

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

WH>Один раз читаем доку в которой написано что-то типа
WH>

WH>Для типа array_t перегружены все арифметические операторы так что запись вида arr1*arr2 трактуется как поэлементное умножение массивов. А запись вида const*arr трактуется как поэлементное умножение массива на константу.

WH>Я знаю что из меня плохой писатель хелпов. Но скажи что тебе после прочтения этого будет не понятно в выражении тапа
WH>arr1=arr2*const1-arr3/const2;
WH>Ы?
Я вообще-то не очень люблю доки читать. Если надо в чем-то разобраться — смотрю в исходники. Доки часто просто отстают от реализации или там не все нюансы отражены. Но дело не в этом. Для того, чтобы понять как работает приведенный тобой шаблон я должен смотреть либо в доки, либо в исходники. А вот если бы вместо "*" использовался метод, скажем, MultiplyItemByItem, то никуда не надо было лезть и в чем-то разбираться. Такой код читался бы проще.

K_O>>Вот для базовых (примитивных) типов операторы должны быть определены. Но не для составных типов, определяемых программистом!

WH>Категорически не согласен. Допустим я реализовал библиотеку для работы с числами в несколько сотен быйт и что мне теперь для них нельзя операторы перегрузить?
Я бы не стал так делать. Потому как работа с такими числами — это нетривиальные алгоритмы, которые, думается мне, потребуют особого порядка их использования и будут обладать некоторыми ограничениями. Все равно мне придется найти доп. инфу по ним, чтобы эффективно использовать твою библиотеку. Так пусть эта инфа находится прямо в тексте программы в виде имени метода.

WH>А взят тотже boost::spirit когда надо быстро написать не сложный парсер то эта штука очень удобна. Но он небыл бы возможен без перегрузки операторов.

Не видел, не знаю.

K_O>>Умножение матриц — это целый алгоритм, к тому же, перемножение матриц, операция некоммутативная (A*B != B*A), а из текста этого не видно. Понятно, что часто хочется записать выражение в программе в виде, близком к виду формулы из книги. Но тогда, для того, чтобы понять, что здесь происходит надо будет эту самую книгу перечитать.

WH>Я вобще не понимаю как можно писать программу для предметной области хотябы поверхностно не разобравшись в ней?
Да не об этом речь...
Я говорю о том, что разные по реализации алгоритмы должны и в тексте программы выглядеть по-разному, т.е. иметь разные имена.
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: INTP_mihoshi Россия  
Дата: 21.05.04 10:42
Оценка:
Здравствуйте, gbear, Вы писали:

G>Дело не только и не столько в семантике — хотя это тоже проблема.


G>Но, что за смысл Вы вкладываете в понятие "текстовая или графическая нотация" — ИМХО, любая нотация либо то, либо другое


Текстовая нотация — это подмножество графической.

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


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

G>Но опять же... повторюсь... в этом вопросе мы напоминаем мне филогов с их определением ямба и хрея С их точки зрения, наверное, оно тоже "достаточно формализованно"... покрайней мере моя жена так и не поняла почему я долго над этим определением смеялся... Рискну процетировать (не пинать за оффтоп, пожалуйста, ИМХО, оно весьма поучительно).


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

Подробнее сейчас описывать времени нет, но я как раз сейчас это направление исследую. Если интересно могу расписать подробнее. "Понятия" в моем посте о "минимальных контекстно-независимых решениях" как раз относится к этой теме.
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: INTP_mihoshi Россия  
Дата: 21.05.04 11:46
Оценка:
Здравствуйте, WolfHound, Вы писали:

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

WH>Один раз читаем доку в которой написано что-то типа
WH>

WH>Для типа array_t перегружены все арифметические операторы так что запись вида arr1*arr2 трактуется как поэлементное умножение массивов. А запись вида const*arr трактуется как поэлементное умножение массива на константу.


Кстати, такие вещи вроде-бы принято через итераторы делать... Тогда ты не будешь привязан к представлению контейнера.
Re[10]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 21.05.04 12:00
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>А что, для того, чтобы проинициализировать такой супер краткий шаблон надо "гору кода" писать? Так толку тогда с таких кратких выражений...

Зачем писать код который не относится к теме?

K_O>Я говорю не про имена переменных, а про то, что не понятно, где просто переменная, а где массив.

А я тебе говорю что из имен переменных ясно где что.

K_O>Я вообще-то не очень люблю доки читать. Если надо в чем-то разобраться — смотрю в исходники. Доки часто просто отстают от реализации или там не все нюансы отражены.

Плохой пожход. Если доки есть то их надо прочитать. Даже если они и отстали то всеравно будет легче разобратся с исходниками.
K_O>Но дело не в этом. Для того, чтобы понять как работает приведенный тобой шаблон я должен смотреть либо в доки, либо в исходники. А вот если бы вместо "*" использовался метод, скажем, MultiplyItemByItem, то никуда не надо было лезть и в чем-то разбираться. Такой код читался бы проще.

f*=(a/x+5)*b-(y*c-d/5)/e-z;
или
MultiplyAssignItemByItem(f, SubtractItemByScalar(SubtractItemByItem(MultiplyItemByItem(AddItemByScalar(DivideItemByScalar(a, x), 5), b)), DivideItemByItem(SubstractItemByItem(MSI(y, c), DivideItemByScalar(d, 5)), e), z));

Это не то что прочитать... это написать трудно
Человек просто запутается в такой записи.
даже если переписать так(пока переписывал исправил несколько ошибок)
    MultiplyAssignItemByItem
        (f
        ,SubtractItemByScalar
            (SubtractItemByItem
                (MultiplyItemByItem
                    (AddItemByScalar
                        (DivideItemByScalar
                            (a
                            ,x
                            )
                        ,5
                        )
                    ,b
                    )
                ,DivideItemByItem
                    (SubstractItemByItem
                        (MultiplyScalarByItem
                            (y
                            ,c
                            )
                        ,DivideItemByScalar
                            (d
                            ,5
                            )
                        ,e
                        )
                    ,z
                    )
                )
            )
        );

то всеравно до читабельности
f*=(a/x+5)*b-(y*c-d/5)/e-z;

ой как далеко.
WH>>А взят тотже boost::spirit когда надо быстро написать не сложный парсер то эта штука очень удобна. Но он небыл бы возможен без перегрузки операторов.
K_O>Не видел, не знаю.
А ты скачай boost да посмотри.
Например так задается грамматика калькулятора
struct calculator : public grammar<calculator>
{
    template <typename ScannerT>
    struct definition
    {
        definition(calculator const& /*self*/)
        {
            expression
                =   term
                    >> *(   ('+' >> term)[&do_add]
                        |   ('-' >> term)[&do_subt]
                        )
                ;

            term
                =   factor
                    >> *(   ('*' >> factor)[&do_mult]
                        |   ('/' >> factor)[&do_div]
                        )
                ;

            factor
                =   lexeme_d[(+digit_p)[&do_int]]
                |   '(' >> expression >> ')'
                |   ('-' >> factor)[&do_neg]
                |   ('+' >> factor)
                ;
        }

        rule<ScannerT> expression, term, factor;

        rule<ScannerT> const&
        start() const { return expression; }
    };
};

EBNF грамматика прямо на С++...
Да по исходникам ты в ней не разберешься... Их там очень много(1,433,069 байт)... Читайте доки. Они рулез.
Зато как клиентский код выглядит... просто прелесть.

K_O>Я говорю о том, что разные по реализации алгоритмы должны и в тексте программы выглядеть по-разному, т.е. иметь разные имена.

Зачем?
Какая разница что складывать два вектора или два числа? И то и другое сложение. Дык зачем для векторов вводить ужасную функцию типа AddVectorVector?
Я еще понимаю если ввести для векторов функции dot и cross ибо умножение векторов бывает скалярное и векторное.
Причем dot и cross можно и без всяких префиксов если поместить их в один неймспейс с вектором тогда будет работать ADL
namespace vectors
{
    template<class T>
    struct vector3
    {
        vector3()
            :x()
            ,y()
            ,z()
        {}
        vector3(T _x, T _y, T _z)
            :x(_x)
            ,y(_y)
            ,z(_z)
        {}
        T x;
        T y;
        T z;
        vector3<T>& operator+=(vector3<T> const& that)
        {
            x+=that.x;
            y+=that.y;
            z+=that.z;
            return *this;
        }
    };
    template<class T>
    vector3<T> operator+(vector3<T> const& l, vector3<T> const& r)
    {
        return vector3<T>(l)+=r;
    }
    template<class T>
    T dot(vector3<T> const& l, vector3<T> const& r)
    {
        return l.x*r.x+l.y*r.y+l.z*r.z;
    }
    template<class T>
    vector3<T> cross(vector3<T> const& l, vector3<T> const& r)
    {
        return vector3<T>
            (l.y*r.z-l.z*r.y
            ,l.z*r.x-l.x*r.z
            ,l.x*r.y-l.y*r.x
            );
    }
}
int main()
{
    vectors::vector3<float> v1;
    vectors::vector3<float> v2;
    vectors::vector3<float> v3;
    v1=v2+v3;
    float f=dot(v1+v2, v2+cross(v3, v1));
}

Argument Depended Lookup рулез
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 21.05.04 12:15
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

WH>>

WH>>Для типа array_t перегружены все арифметические операторы так что запись вида arr1*arr2 трактуется как поэлементное умножение массивов. А запись вида const*arr трактуется как поэлементное умножение массива на константу.


INT>Кстати, такие вещи вроде-бы принято через итераторы делать... Тогда ты не будешь привязан к представлению контейнера.

В данном случае весь смысл этой библиотеки в том чтобы не писать циклы ручками. И уж темболие для случая
int size=10000;
array_t<float> a(size);
array_t<float> b(size);
array_t<float> c(size);
array_t<float> d(size);
array_t<float> e(size);
array_t<float> f(size);
float x;
float y;
float z;
//тут инициализация
f*=(a/x+5)*b-(y*c-d/5)/e-z;//Этот велосипед нужен только ради такой записи
//что эквивалентно (без перегрузки операторов)
for(int i=0;i<size;++i)
    f.at(i)*=(a.at(i)/x+5)*b.at(i)-(y*c.at(i)-d.at(i)/5)/e.at(i)-z;

не связоватся с итераторами ибо код будет не просто страшным, а очень страшным.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 21.05.04 12:15
Оценка: 1 (1)
Здравствуйте, Serginio1, Вы писали:

S> Перегрузка не всегда понятна и очевидна. Кроме того при поиске кода в исходниках по функции легче найти ее исходный код.

В кривой либе может быть. Но то что некоторые орлы криво используют перегрузку не повод от нее отказыватся.
S> и чем Equals хуже == ????? И другие эквивалентные операторы. Дольше писать согласен (да и то при подсказке через точку нет проблем),
Тем что писать дольше. И выразительность меньше.
S> хуже читать — нет. Так думай перегружен метод для == или это ReferenceEquals.
В С++ таких проблем нет. Ибо всегда сравниваются объекты. Указатели тоже объекты.
S> Я лично предпочитаю единые по написанию функции четко определяющие вид операции вместо перегруженных операций.
см соседнй пост
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.05.04 12:33
Оценка:
Здравствуйте, WolfHound, Вы писали:

W
WH>f*=(a/x+5)*b-(y*c-d/5)/e-z;
WH>или
WH>MultiplyAssignItemByItem(f, SubtractItemByScalar(SubtractItemByItem(MultiplyItemByItem(AddItemByScalar(DivideItemByScalar(a, x), 5), b)), DivideItemByItem(SubstractItemByItem(MSI(y, c), DivideItemByScalar(d, 5)), e), z));
Ну зачем так
f= a.div(x).add(5).mull(b).sub( y.mull(c).sub(d.div(5))).div(e).sub(z)
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[11]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 21.05.04 12:40
Оценка:
Здравствуйте, WolfHound, Вы писали:

K_O>>Я говорю не про имена переменных, а про то, что не понятно, где просто переменная, а где массив.

WH>А я тебе говорю что из имен переменных ясно где что.

K_O>>Я вообще-то не очень люблю доки читать. Если надо в чем-то разобраться — смотрю в исходники. Доки часто просто отстают от реализации или там не все нюансы отражены.

WH>Плохой пожход. Если доки есть то их надо прочитать. Даже если они и отстали то всеравно будет легче разобратся с исходниками.
Качественно оформленный исходный код — лучшая документация. И на 100% отражает суть реализации.

K_O>>Но дело не в этом. Для того, чтобы понять как работает приведенный тобой шаблон я должен смотреть либо в доки, либо в исходники. А вот если бы вместо "*" использовался метод, скажем, MultiplyItemByItem, то никуда не надо было лезть и в чем-то разбираться. Такой код читался бы проще.

WH>
WH>
WH>f*=(a/x+5)*b-(y*c-d/5)/e-z;
WH>или
WH>MultiplyAssignItemByItem(f, SubtractItemByScalar(SubtractItemByItem(MultiplyItemByItem(AddItemByScalar(DivideItemByScalar(a, x), 5), b)), DivideItemByItem(SubstractItemByItem(MSI(y, c), DivideItemByScalar(d, 5)), e), z));
WH>

WH>Это не то что прочитать... это написать трудно
WH>Человек просто запутается в такой записи.
Здесь так: если отстаивать свою точку зрения путем доведения до идиотизма доводов оппонента, то лучше сразу закончить дискуссию.
Я надеюсь, что разговариваю с человеком, умеющим аргументированно спорить.

А возражение по теме таково:
for (int i = 0; i < array_size; i++)
  f[i] *= (a[i] / x + 5) * b[i] - (y * c[i] - d[i] / 5) / e[i] - z;


WH>>>А взят тотже boost::spirit когда надо быстро написать не сложный парсер то эта штука очень удобна. Но он небыл бы возможен без перегрузки операторов.

K_O>>Не видел, не знаю.
WH>А ты скачай boost да посмотри.
Мне уже и STL'ного отстоя хватает, это время пригодится для более важных целей.

WH>Например так задается грамматика калькулятора

WH>
WH>   Skipped.
WH>

WH>EBNF грамматика прямо на С++...
Ты им часто пользуешься?

WH>Да по исходникам ты в ней не разберешься...

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

K_O>>Я говорю о том, что разные по реализации алгоритмы должны и в тексте программы выглядеть по-разному, т.е. иметь разные имена.

WH>Зачем?
WH>Какая разница что складывать два вектора или два числа? И то и другое сложение.
Общего у них только название. Сложение чисел и сложение векторов — принципиально разные операции даже в математике.

WH>Дык зачем для векторов вводить ужасную функцию типа AddVectorVector?

Математический термин "сложение векторов" по-английски звучит так: composition of vectors.
Стало быть не AddVectorVector, а Compose.
WH>Я еще понимаю если ввести для векторов функции dot и cross ибо умножение векторов бывает скалярное и векторное.
И не dot и cross, а SclarProduct и CrossProduct.

Здесь хочу сказать еще вот что: важность правильного именования идентификаторов трудно переоценить. Причем очень важно добиваться того, чтобы имя метода не примерно отражало реализацию, а в точности соответствовало ей. Порой добиться этого непросто. Но зато такая тщательность приводит к тому, что код становится читабельным и понятным.
Re[11]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 21.05.04 12:46
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>>>

WH>>>Для типа array_t перегружены все арифметические операторы так что запись вида arr1*arr2 трактуется как поэлементное умножение массивов. А запись вида const*arr трактуется как поэлементное умножение массива на константу.


INT>>Кстати, такие вещи вроде-бы принято через итераторы делать... Тогда ты не будешь привязан к представлению контейнера.


WH>f*=(a/x+5)*b-(y*c-d/5)/e-z;//Этот велосипед нужен только ради такой записи

WH>//что эквивалентно (без перегрузки операторов)
WH>for(int i=0;i<size;++i)
WH> f.at(i)*=(a.at(i)/x+5)*b.at(i)-(y*c.at(i)-d.at(i)/5)/e.at(i)-z;
WH>[/ccode]
WH> В данном случае весь смысл этой библиотеки в том чтобы не писать циклы ручками.

Так все эти перегрузки операторов нужны только для того, чтобы сэкономить ОДНУ (!!!!) строчку?

Я скажу еще вот что: без перегрузки мы имеем один цикл, а с перегрузкой — столько циклов, сколько использовано перегруженных операторов. Из-за сомнительной красоты кода мы еще жертвуем и производительностью.
Re[11]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.05.04 12:50
Оценка: -1
Здравствуйте, WolfHound, Вы писали:


WH> В С++ таких проблем нет. Ибо всегда сравниваются объекты. Указатели тоже объекты.

Согласно принципам ООП
f*=(a/x+5)*b-(y*c-d/5)/e-z;

Ну зачем так
f= f.mull( a.div(x).add(5).mull(b).sub( y.mull(c).sub(d.div(5)) ).div(e).sub(z) )

Чуть длинее, но понимание это уже дело привычки.
Кроме того, теже mull,add,sub могут быть сами перегружены, а если им давать нормальные имена то вполне.
Небольшой пример из C#. Свойства индексаторы могут быть только this (Items). И различаться только параметрами.
Но реально это могут быть различные свойства. Зачем там нужна перегрузка??? Кроме того разные свойства но с одинаковыми параметрами в этом случае не прокатывают.
Я во многом с тобой согласен, но к перегрузке операторов как и функций нужно подходить очень акуратно и выверенно.
Equals легко заменяет ==, и по читабельности ну ни коим образом не уступает.
А с точки зрения шаблонов будет проходить и тот и другой код.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[11]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 21.05.04 12:51
Оценка:
S>> и чем Equals хуже == ????? И другие эквивалентные операторы.

Тем что текст становится меньше похож на математическую формулу. (Только пожалуйста, не надо в сотый раз про паскалевское сравнение). Кстати, MOD вместо % хуже по той же причине.
Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 21.05.04 13:22
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>Так все эти перегрузки операторов нужны только для того, чтобы сэкономить ОДНУ (!!!!) строчку?

Ну одну а столько сколько выражений есть в программе.
K_O>Я скажу еще вот что: без перегрузки мы имеем один цикл, а с перегрузкой — столько циклов, сколько использовано перегруженных операторов. Из-за сомнительной красоты кода мы еще жертвуем и производительностью.
Ты недооцениваешь С++. Цикл будет один.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 21.05.04 13:22
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

WH>>Плохой пожход. Если доки есть то их надо прочитать. Даже если они и отстали то всеравно будет легче разобратся с исходниками.

K_O>Качественно оформленный исходный код — лучшая документация. И на 100% отражает суть реализации.
А кто спорит? Просто если есть дока то из нее гораздо проще понять общию идеологию системы. И тогда разобратся с исходниками будет на порядок проще. Как бы они небыли хорошо оформлунны.
K_O>>>Но дело не в этом. Для того, чтобы понять как работает приведенный тобой шаблон я должен смотреть либо в доки, либо в исходники. А вот если бы вместо "*" использовался метод, скажем, MultiplyItemByItem, то никуда не надо было лезть и в чем-то разбираться. Такой код читался бы проще.
K_O>Здесь так: если отстаивать свою точку зрения путем доведения до идиотизма доводов оппонента, то лучше сразу закончить дискуссию.
Это была лишь демонстрация предложеного тобой метода.

K_O>А возражение по теме таково:

K_O>
K_O>for (int i = 0; i < array_size; i++)
K_O>  f[i] *= (a[i] / x + 5) * b[i] - (y * c[i] - d[i] / 5) / e[i] - z;
K_O>

А теперь добавь сюда дебужную проверку того что размер всех массивов в выражении одинаковый.

WH>>А ты скачай boost да посмотри.

K_O>Мне уже и STL'ного отстоя хватает, это время пригодится для более важных целей.
А слабо аргументировано обосновать отстойность STL?
Я надеюсь, что разговариваю с человеком, умеющим аргументированно спорить.(С) Ты.

WH>>EBNF грамматика прямо на С++...

K_O>Ты им часто пользуешься?
Не очень. Но иногда бывает.

WH>>Да по исходникам ты в ней не разберешься...

K_O>Это вообще приговор библиотеке и выговор разработчикам. Если я по исходникам не разберусь, то и сами разработчики этой либы через некоторое время отсутствия практики работы с boost перестанут понимать в чем дело.
Для того чтобы разобратся в полутра метрах исходников даже учитывая что они очень качественно написаны, да еще и не прочитав предварительно доки Не реально.
А прочитав доку к спириту исходники изучать уже не обязательно.
А написана она очень качественно.

K_O>Общего у них только название. Сложение чисел и сложение векторов — принципиально разные операции даже в математике.

Не вижу принципиальной разници. Да и в математике они записываются одинаково.

K_O>И не dot и cross, а SclarProduct и CrossProduct.

А в D3DX они называются D3DXVec3Dot и D3DXVec3Cross соответственно.
Я взял терминологию от туда.

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

Говоришь то ты правильно но твом методы добится этого мягко говоря сомнительны.
Не плодите сущьности без необходимости (С) Не помню.
Зачем вводить сущьность ComposeVectorVector когда есть всем понятная сущьность + ? Не понимаю.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 21.05.04 13:22
Оценка: :)
Здравствуйте, Serginio1, Вы писали:

S> f= a.div(x).add(5).mull(b).sub( y.mull(c).sub(d.div(5))).div(e).sub(z)

А y это float...
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: folk Россия  
Дата: 21.05.04 13:23
Оценка: +1
Здравствуйте, Kh_Oleg, Вы писали:

[]

K_O>Оператор сложения для строк, означающий конкатенацию — это, пожалуй, единственное применение перегрузки операторов, где оно действительно необходимо. А все потому, что в ЯП строка должна быть базовым типом! Таким как char, int, double. Так и string.

K_O>Вот для базовых (примитивных) типов операторы должны быть определены. Но не для составных типов, определяемых программистом!

Я практически не вижу разницы между перегрузкой операторов и перегрузкой функций. Функция "divide" не имеет никаких преимуществ перед оператором "/" для пользовательского типа. Как раз наоборот.

Перегрузка функций (операторов) может быть проявлением статическго полиморфизма. Такой полиморфизм подразумевает поддержку операций над объектами различного типа с использованием общего синтаксиса (соответствующие функции/операторы имеют одинаковые имена, кол-во аргументов).

Представим класс-тип BigNumber, для которого перегружены мат. операторы "+", "/", etc, вместо того чтобы определять функции "add", "divide", etc. Таким образом BigNumber поддерживает статический интерфейс встроенных числовых типов. Что это дает:

1. Пользователь может использовать привычный интуитивно понятный синтаксис для выражений с объектами BigNumber.

2. Достаточно совсем небольших изменений, чтобы код, использующий BigNumber стал работать с int или с VeryBigNumber. И не надо лазить по всему коду и править "divide" на "/".

3. В С++ эти зачатки статического полиморфизма с помощью шаблонов (или, прости Господи, макросов) мы можем использовать по полной. Например классом BigNumber можно будет параметризировать шаблон complex. Действительная и мнимая части будут храниться в двух переменных типа BigNumber, а комплексная арифметика реализована в терминах мат. операторов над этими переменными.

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

[]

WH>>ЗЗЫ А тех кто перегружает операторы не интуетивным образом надо сжигать на костре и предавать анафиме...

K_O> Но почему язык позволяет таким индивидуумам так хулиганить?

Язык позволяет хулиганить с функциями ничуть не меншье.

ЗЫ И мне непонятно, чего ты стал придираться к неинициализированным переменным у WH. Если бы он использовал функции вместо операторов, то эти переменные инициализировались бы сами собой?
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.05.04 13:50
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


S>> f= a.div(x).add(5).mull(b).sub( y.mull(c).sub(d.div(5))).div(e).sub(z)

WH>А y это float...
А вот еще и перегрузка методов
Тады
f= a.div(x).add(5).mull(b).sub( c.mull(y).sub(d.div(5))).div(e).sub(z)
Но лучше тогда
f= a.VectorDiv(x).IntAdd(5).VectorMull(b).VectorSub( c.FloatMull(y).VectorSub(d.IntDiv(5))).VectorDiv(e).VectorSub(z)
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.05.04 14:06
Оценка:
Здравствуйте, SWW, Вы писали:

S>>> и чем Equals хуже == ????? И другие эквивалентные операторы.


SWW>Тем что текст становится меньше похож на математическую формулу. (Только пожалуйста, не надо в сотый раз про паскалевское сравнение). Кстати, MOD вместо % хуже по той же причине.

А вот здесь уже дело привычки. То есть ты считаешь,
что ассемблерная комада была бы предпочтительней в таком виде
% EAX,ECX
/ EAX,ECX
<< EAX,ECX
>> EAX,ECX

и ^ лучше чем XOR ???? Причем в разных языках эти закорючки могут обозначать разные вещи.
И ты против введения булева типа, когда в С
float g;
if (g) нормальное явление и более читабельно чем if ( g.IsNull ) (делая проверку на погрешность) ????
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 21.05.04 14:06
Оценка:
Здравствуйте, folk, Вы писали:

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


F>[]


K_O>>Оператор сложения для строк, означающий конкатенацию — это, пожалуй, единственное применение перегрузки операторов, где оно действительно необходимо. А все потому, что в ЯП строка должна быть базовым типом! Таким как char, int, double. Так и string.

K_O>>Вот для базовых (примитивных) типов операторы должны быть определены. Но не для составных типов, определяемых программистом!

F>Я практически не вижу разницы между перегрузкой операторов и перегрузкой функций. Функция "divide" не имеет никаких преимуществ перед оператором "/" для пользовательского типа. Как раз наоборот.


"/" — это только divide. Тогда как в случае с методом я могу в имени отразить особенности реализации: SafeDivide, IntDivide, FloatDivide.

WH>>>ЗЗЫ А тех кто перегружает операторы не интуетивным образом надо сжигать на костре и предавать анафиме...

K_O>> Но почему язык позволяет таким индивидуумам так хулиганить?
F>Язык позволяет хулиганить с функциями ничуть не меншье.

F>ЗЫ И мне непонятно, чего ты стал придираться к неинициализированным переменным у WH. Если бы он использовал функции вместо операторов, то эти переменные инициализировались бы сами собой?

Нет, конечно. Просто это привычка.
Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 21.05.04 14:08
Оценка:
Здравствуйте, WolfHound, Вы писали:

K_O>>Я скажу еще вот что: без перегрузки мы имеем один цикл, а с перегрузкой — столько циклов, сколько использовано перегруженных операторов. Из-за сомнительной красоты кода мы еще жертвуем и производительностью.

WH> Ты недооцениваешь С++. Цикл будет один.
Тогда, видно, не С++, а оптимизатор. Только все равно непонятно — можно подробней?
Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 21.05.04 14:10
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


S>> f= a.div(x).add(5).mull(b).sub( y.mull(c).sub(d.div(5))).div(e).sub(z)

WH>А y это float...

Ну я ж говорил, что нельзя будет отличить переменные от массивов...
Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 21.05.04 14:23
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Но лучше тогда

S> f= a.VectorDiv(x).IntAdd(5).VectorMull(b).VectorSub( c.FloatMull(y).VectorSub(d.IntDiv(5))).VectorDiv(e).VectorSub(z)
А с — и / что будешь делать?
Короче очень скоро получишь вариант еще хуже чем я привел...
И разве оно того стоит?
К томуже этот вариант не эквивалентен моему ибо не f= а f*= остальное проверять в лом ибо прочитать это совершенно не возможно.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 21.05.04 14:23
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>"/" — это только divide. Тогда как в случае с методом я могу в имени отразить особенности реализации: SafeDivide, IntDivide, FloatDivide.

учитывая то как правило нет ни каких SafeDivide, IntDivide, FloatDivide..., а есть только divide то какой смысл?
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 21.05.04 14:23
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> А вот здесь уже дело привычки. То есть ты считаешь,

S> что ассемблерная комада была бы предпочтительней в таком виде
Вот только не надо путать асм и С++ ладно.
то во что превращается С++ если перегрузку операторов заменить на функции я уже показал.
S> И ты против введения булева типа, когда в С
В С++ есть булеа тип bool называется.
S> if (g) нормальное явление и более читабельно чем if ( g.IsNull ) (делая проверку на погрешность) ????
И в каком язые так можно писать? И какую погрешьность брать?
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.05.04 14:44
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


S>> А вот здесь уже дело привычки. То есть ты считаешь,

S>> что ассемблерная комада была бы предпочтительней в таком виде
WH>Вот только не надо путать асм и С++ ладно.
Вообщето речь не идет о конкретном языке, а о языке для обучения
WH>то во что превращается С++ если перегрузку операторов заменить на функции я уже показал.
И при этом ничем не лучше для понимания, считаю мой пример более читабелен
S>> И ты против введения булева типа, когда в С
WH>В С++ есть булеа тип bool называется.
S>> if (g) нормальное явление и более читабельно чем if ( g.IsNull ) (делая проверку на погрешность) ????
WH>И в каком язые так можно писать? И какую погрешьность брать?
Еще раз разговор идет только об идеальном языке для обучения.
Для вещественных типов погрешность относительная величина правильнее конечно писать что типа
if ( g.IsNull(1) )
как и g.Equqls(g2)
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[15]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.05.04 14:44
Оценка: -1
Здравствуйте, WolfHound, Вы писали:

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


S>> Но лучше тогда

S>> f= a.VectorDiv(x).IntAdd(5).VectorMull(b).VectorSub( c.FloatMull(y).VectorSub(d.IntDiv(5))).VectorDiv(e).VectorSub(z)
WH>А с — и / что будешь делать?
WH>Короче очень скоро получишь вариант еще хуже чем я привел...
WH>И разве оно того стоит?
WH>К томуже этот вариант не эквивалентен моему ибо не f= а f*= остальное проверять в лом ибо прочитать это совершенно не возможно.
Ну это легко
f= f.VectorMull( a.VectorDiv(x).IntAdd(5).VectorMull(b).VectorSub( c.FloatMull(y).VectorSub(d.IntDiv(5)) ).VectorDiv(e).VectorSub(z))

Но дело в том, что и твой пример не блещет понятливостью.
А здесь понятны все действия без лишних перегрузок.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 21.05.04 15:17
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

S>>> f= a.div(x).add(5).mull(b).sub( y.mull(c).sub(d.div(5))).div(e).sub(z)

WH>>А y это float...
K_O>Ну я ж говорил, что нельзя будет отличить переменные от массивов...
А если имена будут говорящие? тиа arr1, arr2, arr3... scalar1, scalar2...
Ы? А программы которые состоят из односимвольных переменных всеравно ни кто прочитать не может.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 21.05.04 15:17
Оценка: 6 (1)
Здравствуйте, Kh_Oleg, Вы писали:

WH>> Ты недооцениваешь С++. Цикл будет один.

K_O>Тогда, видно, не С++, а оптимизатор. Только все равно непонятно — можно подробней?
Не оптимизатор(хотя и ему тоже поработать немного придется), а именно С++.
Фишка в том что тут используются ленивые вычисления те оператор не производит никаких дествий, а только запоминает ссылки на то что ему попало и возвращает структуру которая содержит эти ссылки.
В книжке это все лучше описано.
Поясняю не пальцах:
Шаблон массива параметризуется не только типом но и хранилищем для этого типа. По умолчанию я взял std::vector
template<class type_t, class container_t=std::vector<type_t> >
struct array_t
{
    array_t(size_t size)
        :cont_(size)
    {}
    array_t(container_t const& cont)
        :cont_(cont)
    {}
    type_t& operator[](size_t i)
    {
        return cont_[i];
    }
    type_t operator[](size_t i)const
    {
        return cont_[i];
    }
    size_t size()const
    {
        return cont_.size();
    }
    container_t const& get()const
    {
        return cont_;
    }
    template<class container1_t>
    array_t& operator=(const array_t<type_t, container1_t>& that)
    {
        assert(size()==that.size());
        for(size_t i=0;i<size();++i)
            (*this)[i]=that[i];
        return *this;
    }
    template<class container1_t>
    array_t& operator*=(const array_t<type_t, container1_t>& that)
    {
        assert(size()==that.size());
        for(size_t i=0;i<size();++i)
            (*this)[i]*=that[i];
        return *this;
    }
    ...
private:
    container_t cont_;
};

Определение операторов и прочие детали раелизации опущены.
    array_t<int> x(1000);
    array_t<int> y(1000);
//для особо придирчивых поясняю ИНИЦИАЛИЗАЦИЯ опуща ибо не имеет отношения к делу :)))
    x=5*y+x*y;

5*x возвращает структуру типа
array_t
    <int
    ,array_mul_t
        <int
        ,array_scalar_t<int>
        ,std::vector<int, std::allocator<int> >
        >//долбаная раскраска(без этого заклинания съедается закрывающея скобка шаблона :( )
    >//долбаная раскраска

далие с учетом приоритета операторов x*y возвращает структуру типа
array_t
    <int
    ,array_mul_t
        <int
        ,std::vector<int, std::allocator<int> >
        ,std::vector<int, std::allocator<int> >
        >//долбаная раскраска
    >//долбаная раскраска

оператор + возвращает структуру типа
array_t
    <int
    ,array_add_t
        <int
        ,array_mul_t
            <int
            ,array_scalar_t<int>
            ,std::vector<int, std::allocator<int> >
            >//долбаная раскраска
        ,array_mul_t
            <int
            ,std::vector<int, std::allocator<int> >
            ,std::vector<int, std::allocator<int> > 
            >//долбаная раскраска
        >//долбаная раскраска
    >//долбаная раскраска

Далие в операторе = уже выполняется один цикл... тут уже в дело вступает оптимизатор он просто инлайнит все вызовы оператора [].
Вот такие дела
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[16]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 21.05.04 15:28
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> f= f.VectorMull( a.VectorDiv(x).IntAdd(5).VectorMull(b).VectorSub( c.FloatMull(y).VectorSub(d.IntDiv(5)) ).VectorDiv(e).VectorSub(z))


S> Но дело в том, что и твой пример не блещет понятливостью.

Нда?
S> А здесь понятны все действия без лишних перегрузок.
только перегрузка исходника дикая

И ты не ответил на вопрос что с - и / делать будешь те например
arr1=const1/(const2-arr2);
или
arr1=5/(6-arr2);


В любом случае не состоятельность твоей методики из-за дичайшой перегрузки текста лишними подробностями ИМХО очевидна.

болие того см мой пост Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
Автор: WolfHound
Дата: 21.05.04
твоя реализация без перегрузок не будет обладать тойже эффективностью.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[17]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.05.04 15:46
Оценка:
Здравствуйте, WolfHound, Вы писали:



WH>И ты не ответил на вопрос что с - и / делать будешь те например


WH>
WH>arr1=const1/(const2-arr2);
WH>или
WH>arr1=5/(6-arr2);
WH>


WH>В любом случае не состоятельность твоей методики из-за дичайшой перегрузки текста лишними подробностями ИМХО очевидна.


WH>болие того см мой пост Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
Автор: WolfHound
Дата: 21.05.04
твоя реализация без перегрузок не будет обладать тойже эффективностью.

Мне лично непонятны сами действия.
Надо понимать это выглядит так
for (int i=0; i< arr.Length; i++)
{

arr[i]= 5/(6-arr[i]);
}

И прошу прощения такая записись мне лично больше понятна. Причем математически она буде выглядеть так же , только без for Конечно можно извращяться как угодно, но
ты пытаешься выразить математическое описание (векторную алгебру) средствами С++. А здесь нужен подход ФЯ. И запись должна быть четкой и понятной.
Твоя же запись не выражает общего смысла.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[15]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 21.05.04 16:09
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>>> Ты недооцениваешь С++. Цикл будет один.

K_O>>Тогда, видно, не С++, а оптимизатор. Только все равно непонятно — можно подробней?
WH>Не оптимизатор(хотя и ему тоже поработать немного придется), а именно С++.
WH>Фишка в том что тут используются ленивые вычисления.......
WH> Мно-ого skipped
WH>Вот такие дела

Е-мое, "и эти люди запрещают мне ковыряться в носу?!"
И это все ради того, чтобы вместо Add писать +, опускать индексы у массивов и не писать явно оператор цикла?!

Моя крыша слегка съехала...
Re[17]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.05.04 16:19
Оценка:
Здравствуйте, WolfHound, Вы писали:

Кроме того считаю, что в программирование легко ввести и математическую запись, ничто этому не мешает.
И тем же студентам легче и читабельность выше, а с точки зрения тезнического Вуза это куда важнее, т.к. там не нужны программисты, но нужно средство для решения конкретных задач. Кстати многие пользуются MathCad или как его там. Хотя бы в определенных вставках типа asm.
Развитие же языков идет ввиде совершенствования старых языков, которые сами по себе морально устарели, но мало делается в плане развития других подходов или вернее не развиваются и не внедряются должным образом.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 21.05.04 16:37
Оценка:
Здравствуйте, WolfHound, Вы писали:

K_O>>А возражение по теме таково:

K_O>>
K_O>>for (int i = 0; i < array_size; i++)
K_O>>  f[i] *= (a[i] / x + 5) * b[i] - (y * c[i] - d[i] / 5) / e[i] - z;
K_O>>

WH>А теперь добавь сюда дебужную проверку того что размер всех массивов в выражении одинаковый.
А это еще что за проверка, куда копать?
Тем не менее, зачем смотреть на debug издержки? Заказчику Debug не поставляется.

WH>>>А ты скачай boost да посмотри.

K_O>>Мне уже и STL'ного отстоя хватает, это время пригодится для более важных целей.
WH> А слабо аргументировано обосновать отстойность STL?
WH>Я надеюсь, что разговариваю с человеком, умеющим аргументированно спорить.(С) Ты.
Точно, я.
Да все тоже — нечитабельные исходники, наворочено куча всего, flexibility офигенная, а usability страдает.
Больше половины фич используются крайне редко. Лично я кроме string, exception, vector'a и map'a ничего и не использовал.
Шаблоны, опять-таки — допустишь ошибку где-то у себя, а компилятор посылает куда-то в недра STL...
Короче, это тема отдельного флейма.

WH>>>Да по исходникам ты в ней не разберешься...

K_O>>Это вообще приговор библиотеке и выговор разработчикам. Если я по исходникам не разберусь, то и сами разработчики этой либы через некоторое время отсутствия практики работы с boost перестанут понимать в чем дело.
WH>Для того чтобы разобратся в полутра метрах исходников даже учитывая что они очень качественно написаны, да еще и не прочитав предварительно доки Не реально.
Ну почему нереально? — во-первых, мне не надо разбираться во всем, а только в той ма-аленькой части, которая интересует в данный момент; во-вторых, полтора метра — это немного, в VCL более семи метров и ничего, не только можно разобраться, но и для своих задач ценные идеи почерпнуть.

K_O>>Общего у них только название. Сложение чисел и сложение векторов — принципиально разные операции даже в математике.

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

K_O>>И не dot и cross, а ScalarProduct и CrossProduct. // <== Опечатка вкралась

WH>А в D3DX они называются D3DXVec3Dot и D3DXVec3Cross соответственно.
WH>Я взял терминологию от туда.
Это что ли, пример хорошего идентификатора? Когда 4 символа — это префикс.

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

WH>Говоришь то ты правильно но твом методы добится этого мягко говоря сомнительны.
WH>Не плодите сущьности без необходимости (С) Не помню.
WH>Зачем вводить сущьность ComposeVectorVector когда есть всем понятная сущьность + ? Не понимаю.
Не ComposeVectorVector, а Compose(Vector v1, Vector v2) или Vector.Compose(Vector v)
Re[11]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 21.05.04 16:43
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


K_O>>"/" — это только divide. Тогда как в случае с методом я могу в имени отразить особенности реализации: SafeDivide, IntDivide, FloatDivide.

WH>учитывая то как правило нет ни каких SafeDivide, IntDivide, FloatDivide..., а есть только divide то какой смысл?
Как правило они есть! Только неявные, что порождает еще массу ошибок.
int a = 1, b = 2;
double aa = 1, bb = 2;

выражения a/b и aa/bb дадут сильно разные результаты.
Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.05.04 16:56
Оценка:
Здравствуйте, WolfHound, Вы писали:



K_O>>А возражение по теме таково:

K_O>>
K_O>>for (int i = 0; i < array_size; i++)
K_O>>  f[i] *= (a[i] / x + 5) * b[i] - (y * c[i] - d[i] / 5) / e[i] - z;
K_O>>

WH>А теперь добавь сюда дебужную проверку того что размер всех массивов в выражении одинаковый.

Но если напрмер определить тип
using int[30] Vector30;
Vector30 a,b,c,d;
можно и динамически
то
запись типа
for(int i= vector30.LoBound; i<=vector30.HiBound; i++)
f[i] *= (a[i] / x + 5) * b[i] — (y * c[i] — d[i] / 5) / e[i] — z;

Не вызывала бы дебужную проверку.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[16]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 21.05.04 17:07
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>Е-мое, "и эти люди запрещают мне ковыряться в носу?!"

K_O>И это все ради того, чтобы вместо Add писать +, опускать индексы у массивов и не писать явно оператор цикла?!
Если это используется один раз то это одно, а если подобних выражений сотни?
K_O>Моя крыша слегка съехала...
Если твоя крыша начала ехать на таком примитиве то я тебе крайне не рекомендую изучать спирит по его исходникам.
Ибо там для генерации парсера используется подобные технологии.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 21.05.04 17:50
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>А это еще что за проверка, куда копать?

ну типа
ASSERT(a.size()==b.size()&&b.size()==c.size()&&c.size()==d.size() и так далие...);
K_O>Тем не менее, зачем смотреть на debug издержки? Заказчику Debug не поставляется.
Но он нужен разработчику. Ведь язык это же для разработчика, ане для заказчика. Ему как правило пофигу на чем написана программа главное чтобу работала и была написана в срок.

K_O>Да все тоже — нечитабельные исходники, наворочено куча всего,

С этим ни чего не поделать. Стандарт обязывает так страшно именовать детали реализации STL чтобы не пересечся с клиентским кодом. Долбаные макросы
K_O>flexibility офигенная,
Дык это же хорошо.
K_O>а usability страдает.
Хм. ИМХО вполне достаточно.
K_O>Больше половины фич используются крайне редко.
Это проблема всех библиотек общего назначения.
K_O>Лично я кроме string, exception, vector'a и map'a ничего и не использовал.
Я еще использую list, set, алгоритмы+boost::lambda, а также пока не стандартные hash_map и hash_set
Ты какой компилятор используешь? Например VC++7.1 позволяет перейти не в недра STL а туда откуда пошла бага.

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

Концепцию спирита из исходников не читая доков востановить очень сложно. Но прочитав доки и поняв что и для чего исходники читаются довольно легко.
K_O>во-вторых, полтора метра — это немного, в VCL более семи метров и ничего, не только можно разобраться, но и для своих задач ценные идеи почерпнуть.
Тут надо учитывать что VCL это паскаль... А выразительность паскаля на единицу кода гораздо меньше чем у С++. Это раз.
Спирит это шаблонная библиотека которая использует метапрограммирование на всю катушку. А это абстрации несколько иного порядка чем VCL. Это два.
Спирит на дельфе написать не возможно. Это три.

K_O>Сложение чисел проходят в первом классе, а векторов — почему-то в седьмом.

Ну ты попробуй обьяснить что такое вектор первокласнику
K_O>Да еще всякие разные приемы используют, типа правило треугольника, правило паралелограмма.
K_O>А операция вычитания векторов — так ли она очевидна, как вычитание чисел?
Да и при чем тут это?

K_O>Это что ли, пример хорошего идентификатора? Когда 4 символа — это префикс.

А я разве говорил что это хорошие идентификаторы? Я сказал что взял терминологию от туда. Кстати не знаю как в других областях но в трехмерной графике используют термин dot product, а не scalar product.

K_O>Не ComposeVectorVector, а Compose(Vector v1, Vector v2) или Vector.Compose(Vector v)

А чем оно лучше + я всеравно не понимаю.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[15]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 21.05.04 18:16
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Ты какой компилятор используешь? Например VC++7.1 позволяет перейти не в недра STL а туда откуда пошла бага.

Его, но и он не всегда справляется.

WH>Тут надо учитывать что VCL это паскаль... А выразительность паскаля на единицу кода гораздо меньше чем у С++. Это раз.

А это еще что за бегемотопотам? Давай не использовать понятия без их предварительного определения.
Что такое единица кода?
Что такое выразительность ЯП на единицу кода?

WH>Спирит это шаблонная библиотека которая использует метапрограммирование на всю катушку. А это абстрации несколько иного порядка чем VCL. Это два.

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

WH>Спирит на дельфе написать не возможно. Это три.

Спорить здесь будем или сразу в "Священные войны"?

WH>Да и при чем тут это?

Да при том, что в ЯП ты предлагаешь операцию вычитания векторов обозначать символом "-". А операция-то не такая уж и простая...

K_O>>Не ComposeVectorVector, а Compose(Vector v1, Vector v2) или Vector.Compose(Vector v)

WH>А чем оно лучше + я всеравно не понимаю.
Короче имя метода.
Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Dax  
Дата: 21.05.04 18:37
Оценка: 112 (6) :))) :))) :)
Здравствуйте ЗАПЯТАЯ Serginio1 ЗАПЯТАЯ Вы писали ДВОЕТОЧИЕ

S> Но лучше тогда

S> f= a.VectorDiv(x).IntAdd(5).VectorMull(b).VectorSub( c.FloatMull(y).VectorSub(d.IntDiv(5))).VectorDiv(e).VectorSub(z)

Мне почему ДЕФИС то кажется ЗАПЯТАЯ что использование операторов несколько повышает читабельность кода ЗАПЯТАЯ при этом не только минимизируя пространство ЗАПЯТАЯ но и приближая синтаксис выражение к более привычному виду ТОЧКА ПЕРЕВОД_КАТЕРКИ

КРАСНАЯ_СТРОКА Для меня кажется диким использование
foo.Equals(bar)


потому как

foo dot Equals leftBracket bar rightBracket


гораздо еффективнее выражает мысль и однозначно подчеркивает мнение автора о читатетеле в целом и его интеллекте в частности

... << silent >>
Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: folk Россия  
Дата: 22.05.04 07:12
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>>>"/" — это только divide. Тогда как в случае с методом я могу в имени отразить особенности реализации: SafeDivide, IntDivide, FloatDivide.

WH>>учитывая то как правило нет ни каких SafeDivide, IntDivide, FloatDivide..., а есть только divide то какой смысл?
K_O>Как правило они есть! Только неявные, что порождает еще массу ошибок.
K_O>
K_O>int a = 1, b = 2;
K_O>double aa = 1, bb = 2;
K_O>

K_O>выражения a/b и aa/bb дадут сильно разные результаты.

Результаты не просто разные, а имеют разные типы. Тип результата определяется типом опрерандов, также как в выражениях 1 + 1 и "1" + "1".
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 22.05.04 11:52
Оценка:
S> А вот здесь уже дело привычки. То есть ты считаешь,
S> что ассемблерная комада была бы предпочтительней в таком виде
S> % EAX,ECX
S> / EAX,ECX
S> << EAX,ECX

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

Во-вторых, если зашла речь об улучшении ассемблера, то гораздо понятнее была бы такая запись:
EAX = EAX + ECX
И между прочим, ассемблеры сигнальных процессоров выглядят именно так. Поскольку предназначены они исключительно для вычислений, их ассемблеры разработаны такими, чтобы программа максимально походила на математические формулы.
Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 22.05.04 12:19
Оценка: +1
K_O>Как правило они есть! Только неявные, что порождает еще массу ошибок.
K_O>
K_O>int a = 1, b = 2;
K_O>double aa = 1, bb = 2;
K_O>


Блин, как меня бесят эти рассуждения о том, что в программировании порождает ошибки! А кто-нибудь пытался привести статистику ошибок? Может вы боретесь с ветряными мельницами? Каких ошибок больше: целочисленного деления или выхода индекса за пределы массива? Для борьбы с ошибками придумываются средства, которые сами потом становятся источником еще более трудноуловимых ошибок. Как, например, здесь.
Автор: Vamp
Дата: 14.10.03


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

P.S. Не сочни за личный наезд. Это больше касается Страуструпа и STL
Re[15]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 23.05.04 09:38
Оценка:
Здравствуйте, Dax, Вы писали:


Тогда тогда лучше вспомнить скалярное и векторное умножение векторов, их сложение, и прменять нормальную математическую запись
По этому поводу уже говорилось в http://www.rsdn.ru/forum/Message.aspx?mid=650377&amp;only=1
Автор: Serginio1
Дата: 21.05.04
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 23.05.04 09:38
Оценка:
Здравствуйте, SWW, Вы писали:

S>> А вот здесь уже дело привычки. То есть ты считаешь,

S>> что ассемблерная комада была бы предпочтительней в таком виде
S>> % EAX,ECX
S>> / EAX,ECX
S>> << EAX,ECX

SWW>Во-первых, ассемблер не предназначен для написания математических формул. А ЯВУ изначально предназначались именно для этого. И хотя С предназначен не только для этого, сведЕние его к ассемблеру не улучшит читаемости.


SWW>Во-вторых, если зашла речь об улучшении ассемблера, то гораздо понятнее была бы такая запись:

SWW>EAX = EAX + ECX
SWW>И между прочим, ассемблеры сигнальных процессоров выглядят именно так. Поскольку предназначены они исключительно для вычислений, их ассемблеры разработаны такими, чтобы программа максимально походила на математические формулы.
Ради бога. B какой математической записи присутствуют <<>>^& и насколько они выразительнее shl,shr,xor, and.
Это общепринятые понятия побитовых и булевых операций.
Давай введем ы,ъ,ё для их обозначения.
Обучение программированию должно начинаться с ассемблера, а он в нормальном виде отвечает всем процессам происходящем в ЭВМ.
Зачем вводить то, что не соответству реалиям, т.к. на сигнальные процессоры мало кто использует, а стековая архитектура ближе к регистровой.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[15]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 24.05.04 05:30
Оценка:
S> Ради бога. B какой математической записи присутствуют <<>>^& и насколько они выразительнее shl,shr,xor, and.

Об этом хорошо сказал Dax
Автор: Dax
Дата: 21.05.04
Re[16]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 24.05.04 07:40
Оценка: 1 (1)
Здравствуйте, Kh_Oleg, Вы писали:

K_O>Его, но и он не всегда справляется.

Мне всегда информации хватало.

K_O>Что такое выразительность ЯП на единицу кода?

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

K_O>"Проблемы негров шерифа не колышут". Если нельзя написать просто, то почему сложность реализации рассматривается как достоинство?

Приччем тут сложно? Спирит простая либа но не возможноя на дельфе потомучто там нет шаблонов.
2Serginio1 генерики ни когда не будут обладать такой гибкостию.

K_O>Спорить здесь будем или сразу в "Священные войны"?

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

K_O>Да при том, что в ЯП ты предлагаешь операцию вычитания векторов обозначать символом "-". А операция-то не такая уж и простая...

И что? Следуя этой логике мы придум к тому что что операторы вобще использовать нельзя.
Тк сложить два DWORD'а операция болие сложная чем сложить два BYTE'а.
А сложение чисел с плавующей точкой это вобще агхи тижолая операция, а сложение чисел разных типов это вобще ужас ибо производится конвертация типов перед сложением.
А конкатинация строк это вобще явление из другой оперы и к математике не относися следовательно не может обазначаться оператором +. А если вспомнить что там происходит динамическое выделение памяти и копирование произвольного объема данных...
Итого: оператор + можно использовать только для BYTE'ов, а если его можно использовать только для одного типа то на кой он вобще нужен?

Я считаю что если для данного типа данных оператор ИНТУИТИВНО понятен то он должен быть перегружен.
Те в математике вектора складывают оператором + так почему в языке программирования ВЫСОКОГО уровня нельзя складывать вектора оператором +?
Зачем писать v=subtract(compose(subtract(compose(v1, v2), v3), v4), v5); когда можно написать v=v1+v2-v3+v4-v5;?
Взять тотже спирит там операторы перегружены так чтобы синтаксис был максимально близок к сантаксису EBNF и это очень удобно.

ЯВУ для того и придумали чтобы сложные вещи можно было написать просто. Дык зачем на ЯВУ писать сложно?
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[17]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 24.05.04 09:18
Оценка:
Здравствуйте, WolfHound, Вы писали:

K_O>>"Проблемы негров шерифа не колышут". Если нельзя написать просто, то почему сложность реализации рассматривается как достоинство?

WH>Приччем тут сложно? Спирит простая либа но не возможноя на дельфе потомучто там нет шаблонов.
WH>2Serginio1 генерики ни когда не будут обладать такой гибкостию.

Это не значит, что на Delphi этого нельзя сделать. По большому счету шаблоны нужны, но дженерики более читабельны.
А шаблонное программирование, это отдельная техника не для слабонервных оссобенно в С++ синтаксисе. Если смортеть на проект R# то он мне очень импонирует. Смотрим на развите паттернов и их развитие на примере тугеза. Развите Шаблонов должны идти в сторону читабельности и проверки кода на этапе кодирования. В том же виде в каком они сейчас далеки от идеала. Вступай в ряды R#. И я буду наслаждаться плодами твоего труда.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[17]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: gbear Россия  
Дата: 24.05.04 09:40
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Я считаю что если для данного типа данных оператор ИНТУИТИВНО понятен то он должен быть перегружен.

WH>Те в математике вектора складывают оператором + так почему в языке программирования ВЫСОКОГО уровня нельзя складывать вектора оператором +?

Проблема в том, что глядя на запись в мат. нотации ты всегда отличаещь вектор от скаляра. Соотвтесвенно — сложно спутать операцию сложения скаляров, и сложение векторов.

А вот, например, для опреаций над множествами (отличить в мат. натации множество, от того же скаляра не так просто, как скаляр от вектора... согласитесь) введены специальные символы... Хотя, + в случае объеденения множеств, тоже весьма "ИНТУИТИВНО понятен"... наверное.

---
С уважением, Сиваков Константин.
Re[17]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: INTP_mihoshi Россия  
Дата: 24.05.04 10:15
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Я считаю что если для данного типа данных оператор ИНТУИТИВНО понятен то он должен быть перегружен.

WH>Те в математике вектора складывают оператором + так почему в языке программирования ВЫСОКОГО уровня нельзя складывать вектора оператором +?
WH>Зачем писать v=subtract(compose(subtract(compose(v1, v2), v3), v4), v5); когда можно написать v=v1+v2-v3+v4-v5;?
WH>Взять тотже спирит там операторы перегружены так чтобы синтаксис был максимально близок к сантаксису EBNF и это очень удобно.

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

Операторы в некоторых случаях чуть более осмысленны, так как имеют устойчивое значение, соответствующее их значению в математике. Т.е. оператор "+" предполагает по крайней мере ассоциативность, оператор "-" — операцию, противоположну "+" и т.д. А вот функция "add" не имеет вообще никакой смысловой нагрузки и обозначать может что угодно.

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

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

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

При написании программы мы задаем, что слово, например, "datastream" соответствует понятию с guid "поток данных", а "streamend" — понятию "конец потока".
Тогда если мы видим в тексте выражение типа datastream int, то мы знаем, например, что он возвращает значение типа int либо streamend и ничего больше.

Более того, мы не только сами это видим, но и можем "рассказать" это средствам, которые работают с этим кодом. Например, система документирования кода может взять где-нибудь по guid полное описание понятия и использовать его при описании используюших его функций и объектов. Мы можем описывать методы, которые работают для всех функций типа datastream. И т.д.
Re[17]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 24.05.04 10:39
Оценка:
Здравствуйте, WolfHound, Вы писали:

K_O>>Что такое выразительность ЯП на единицу кода?

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

Кстати, если этот вывод сделан только на основании необходимости писать begin-end и procedure, function, property, да Integer вместо int, то это не агрумент.
Re[18]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: INTP_mihoshi Россия  
Дата: 24.05.04 11:25
Оценка: +1 :)
Здравствуйте, Kh_Oleg, Вы писали:

K_O>Кстати, если этот вывод сделан только на основании необходимости писать begin-end и procedure, function, property, да Integer вместо int, то это не агрумент.


Вспоминатеся, кстати:

Проанализировав статистику боев с японцами в 1941-1945 годах, американе обнаружили, что несмотря на равенство сил оные американе побеждали чаще. Причину нашли — в английском языке средняя длина слова — 5 букв, в японском 13. То есть пока японец объяснит что к чему, американе уже стреляют... После этого как раз появилась у американ привычка давать короткие названия-клички как своим так и чужим самолетам, кораблям и т.п. Когда эта информация дошла до русских, то они вычислили среднюю длину слова в русском языке — 7 букв...
А далее просто выписка из конспекта "Но! В процессе управления боем КОМАНДИР АВТОМАТИЧЕСКИ ПЕРЕХОДИТ НА МАТ, И ИНФОРМАТИВНОСТЬ РЕЧИ ВОЗРАСТАЕТ В 2-3 РАЗА
Re[18]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: gbear Россия  
Дата: 24.05.04 11:34
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

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


INT>ИМХО принципиальной разницы между операторами и функциями нет вообще. Смысловая нагрузка у них минимальна. Единственная их функция — служить псевдонимом адреса в виртуальной таблице.


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

INT>Операторы в некоторых случаях чуть более осмысленны, так как имеют устойчивое значение, соответствующее их значению в математике. Т.е. оператор "+" предполагает по крайней мере ассоциативность, оператор "-" — операцию, противоположну "+" и т.д. А вот функция "add" не имеет вообще никакой смысловой нагрузки и обозначать может что угодно.


Я бы сказал, что оператор — "фраза" языка, определяющая законченный этап (в отличие, например от "функции" — в "пределе" последовательности операторов). Применительно к программисткой нотации можно сказать, что в состав операторов, как операнды, входят (или, могут входить) данные, функции и т.п.

INT>Если говорить о "непринципиальных" отичиях, то использование слов помогает при знакомсве с новым средством/библиотекой. Но если ты уже "в теме", то обилие повторяющихся слов скорее мешает понять смысл всего выражения. Хотелось бы иметь возможность выбора между этими двумя представлениями.


Другими словами... чем больше операторов, тем легче читается, но труднее понимается... так что ли?! Или на оборот?! Имхо, что-то тут не то

INT>Я сейчас работаю над моделью языка с глобально-уникальными идентификаторами в качестве терминалов. Т.е. языка, где элементарные элементы — не буквы, а понятия, смысл которых определен независимо от конкретного языка или библиотекии икоторые имеют каждый свой guid (аналогично интерфейсам COM).


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


INT>При написании программы мы задаем, что слово, например, "datastream" соответствует понятию с guid "поток данных", а "streamend" — понятию "конец потока".

INT>Тогда если мы видим в тексте выражение типа datastream int, то мы знаем, например, что он возвращает значение типа int либо streamend и ничего больше.

Имхо, ничего принципиального в этом нет Определение — это определение... я и так определяя ф-цию — определяю тип возвращаемого ей значения. Проблема-то в том, что при использовании ф-ции тип возвращаемого значения не очевиден. В метематике такой проблемы просто нет, так как понятие (в нашем смысле) "типа" — нивелированно. А у нас, в частности, при перегрузке операторов возникает праблема идентификации записи вида: A = B() + C()... что бы четко представлять себе ЧТО реально делает "+" нужно знать какие типы возвращают B() и C().

INT>Более того, мы не только сами это видим, но и можем "рассказать" это средствам, которые работают с этим кодом. Например, система документирования кода может взять где-нибудь по guid полное описание понятия и использовать его при описании используюших его функций и объектов. Мы можем описывать методы, которые работают для всех функций типа datastream. И т.д.


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

А так хочется, чтоб минимальным иструментарием были карандаш и листок бумаги

---
С уважением, Сиваков Константин.
Re[18]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 24.05.04 11:41
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>Ну а что такое "количество логики"?

Да то и значит. Что одно и тоже написать на С++ и на паскале то на С++ за счет грамотного использования шаблонов и макросов получается значительно компактней.
K_O>Кстати, если этот вывод сделан только на основании необходимости писать begin-end и procedure, function, property, да Integer вместо int, то это не агрумент.
Ты меня за кого держишь? Я тебе не Вирт который на == ополчился...
Взять хотябы туже сортировку для произвольного типа данных. На дельфе возможен только полиморфный вариант, а это
1)Не удобно
2)Не безопасно
3)Медленней чем для конкретного типа
шаблонная сортировка этим не страдает. А размер бинарника сейчас ни кого не волнует.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[19]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 24.05.04 11:52
Оценка: +1 -1
Здравствуйте, WolfHound, Вы писали:

K_O>>Ну а что такое "количество логики"?

WH>Да то и значит. Что одно и тоже написать на С++ и на паскале то на С++ за счет грамотного использования шаблонов и макросов получается значительно компактней. А размер бинарника сейчас ни кого не волнует.
Шаблоны — это автоматизированный Copy-Paste.
Может размер бинарника и не такая уж критическая вещь, но вот время линковки — это, по крайней мере, в нашем проекте, самое узкое место. А все из-за шаблонов и макросов...
Re[18]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: gbear Россия  
Дата: 24.05.04 11:52
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

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


K_O>>>Что такое выразительность ЯП на единицу кода?

WH>>Грубо говоря колличество логики которое можно уместить в одном килобайте кода без потери читабельности и расширяемости.
K_O>Ну а что такое "количество логики"?

K_O>Кстати, если этот вывод сделан только на основании необходимости писать begin-end и procedure, function, property, да Integer вместо int, то это не агрумент.


Может быть WolfHound говорит о избыточности языка? Хотя вряд ли... к "кол-ву логики" это не одним боком...

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

---
С уважением, Сиваков Константин.
Re[19]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: gbear Россия  
Дата: 24.05.04 12:16
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

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


K_O>>Ну а что такое "количество логики"?

WH>Да то и значит. Что одно и тоже написать на С++ и на паскале то на С++ за счет грамотного использования шаблонов и макросов получается значительно компактней.

Осмелюсь заметить, что такая "выразительность" — суть обратное.

K_O>>Кстати, если этот вывод сделан только на основании необходимости писать begin-end и procedure, function, property, да Integer вместо int, то это не агрумент.

WH>Ты меня за кого держишь? Я тебе не Вирт который на == ополчился...

И правильно делает... Ну скажите мне... так ли трудно зтедать оператор "=" контекснто зависимым? Всмысле, в условном контексте это сравнение на равенство, в безусловном — присваивание. Хотя бы так (хотя в этом смысле, Паскалевское ":=" тоже не фонтан... это извиняет лишь то, что новый оператор ввели для НОВОГО понятия, а не стали эти понятия подменять... и это тоже гораздо более логичней и понятней, чем использование для сравнения оператора "==". Витр на это не пошел, хотя наверное прекрасно знает что присваивание используется гораздо чаще сравнения). Контекстную зависимость принять и понять гораздо легче, чем понять почему понятный до этого символ = (дефакто, интерпритирующийся как сравнение на равенство) не может использоваться для сравнения на равенство!!!

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

---
С уважением, Сиваков Константин.
Re[20]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kluev  
Дата: 24.05.04 13:09
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

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


K_O>>>Ну а что такое "количество логики"?

WH>>Да то и значит. Что одно и тоже написать на С++ и на паскале то на С++ за счет грамотного использования шаблонов и макросов получается значительно компактней. А размер бинарника сейчас ни кого не волнует.
K_O>Шаблоны — это автоматизированный Copy-Paste.
K_O>Может размер бинарника и не такая уж критическая вещь, но вот время линковки — это, по крайней мере, в нашем проекте, самое узкое место. А все из-за шаблонов и макросов...

Ерунду несете. На время линковки шаблоны и т.б. макросы никак не влияют. И вообщем-то на скорость компиляции тоже. То что у вас что-то тормозит это следствие плохой изоляции. Там где надо сделать опережающее описание:
class Foo;

делается:
#include "Foo.h"

Небольшее изменение и все пересобирается.

По моему опыту шаблоны, при их грамотном употреблении, не влияют существенно на скорость компиляции. Все проблемы со скоростью компиляции/линковки исключительно результат криворукости.
Re[20]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 24.05.04 13:18
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>Шаблоны — это автоматизированный Copy-Paste.

А ну-ну. Так можно в конце концов договорится до того что шаблоны==препроцессор, а любой компилятор это препроцессор языка программирования в машинный код...
K_O>Может размер бинарника и не такая уж критическая вещь, но вот время линковки — это, по крайней мере, в нашем проекте, самое узкое место. А все из-за шаблонов и макросов...
Я не знаю что вы там в своем проекте делаете что он линкуется черт знает сколько времени. Сколько у вас исходников? 500 метров чтоли?
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[21]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 24.05.04 13:54
Оценка:
Здравствуйте, WolfHound, Вы писали:

K_O>>Шаблоны — это автоматизированный Copy-Paste.

WH>А ну-ну. Так можно в конце концов договорится до того что шаблоны==препроцессор,
А в чем принципиальная разница?

K_O>>Может размер бинарника и не такая уж критическая вещь, но вот время линковки — это, по крайней мере, в нашем проекте, самое узкое место. А все из-за шаблонов и макросов...

WH>Я не знаю что вы там в своем проекте делаете что он линкуется черт знает сколько времени. Сколько у вас исходников? 500 метров чтоли?
Намного меньше, но порядок угадан верно.
Re[21]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 24.05.04 13:54
Оценка: 1 (1)
Здравствуйте, Kluev, Вы писали:

K_O>>Может размер бинарника и не такая уж критическая вещь, но вот время линковки — это, по крайней мере, в нашем проекте, самое узкое место. А все из-за шаблонов и макросов...


K>Ерунду несете. На время линковки шаблоны и т.б. макросы никак не влияют. И вообщем-то на скорость компиляции тоже. То что у вас что-то тормозит это следствие плохой изоляции. Там где надо сделать опережающее описание:

K>
K>class Foo;
K>

K>делается:
K>
K>#include "Foo.h"
K>

K>Небольшее изменение и все пересобирается.

K>По моему опыту шаблоны, при их грамотном употреблении, не влияют существенно на скорость компиляции. Все проблемы со скоростью компиляции/линковки исключительно результат криворукости.

Аккуратнее с выводами, сделанных на основе Вами же придуманных предпосылок.

Насчет forward declarations рассказывать не надо — у нас является обязательным использовать forward declarations вместо include там где это возможно. Но оно невозможно при: а) наследовании; б) объявлении поля данного типа (не указателя на тип).

А шаблоны влияют на скорость компиляции и линковки вот почему:
Допустим есть у нас шаблон, который очень много где используется. Например, собственная реализация auto_ptr<T>. Будучи шаблоном, он, естественно, описан целиком в *.h файле. Для того, чтобы использовать такой шаблон, я должен во все файлы, где от используется включить этот (назовем его, Auto.h) файл. Файлов в проекте (считаем только *.cpp), около тысячи. Итого имеем, тысячекратную компиляцию практически идентичного кода (для каждого *.cpp файла). И это в том случае, если в каждом *.cpp только по одной специализации шаблона. Но это только компиляция. Итак, проект откомпилирован, на диске лежит тысяча *.obj файлов. Теперь за дело берется линковщик. Его задача — найти во всей тысяче файлов дублирующийся код и удалить дубликаты так, чтобы для каждой специализации шаблона осталось только по одному экземпляру кода. Вот и получается, что сначала генерится ненужный мусор, а потом на линковщик взваливается бремя уборки за компилятором.

А уж если в проекте много подобных шаблонов...
Re[22]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kluev  
Дата: 24.05.04 14:02
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>А шаблоны влияют на скорость компиляции и линковки вот почему:

/*поскипано*/
K_O>...., что сначала генерится ненужный мусор, а потом на линковщик взваливается бремя уборки за компилятором.

K_O>А уж если в проекте много подобных шаблонов...

Значит надо на DLL проект бить, хотя судя по постингу вы, наверное, и сами это прекрасно знаете. Или проект не позволяет?
Re[22]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: WolfHound  
Дата: 24.05.04 15:00
Оценка: :)
Здравствуйте, Kh_Oleg, Вы писали:

WH>>А ну-ну. Так можно в конце концов договорится до того что шаблоны==препроцессор,

K_O>А в чем принципиальная разница?
А в чем принципиальная разница между компилятором и препроцессором?

WH>>Я не знаю что вы там в своем проекте делаете что он линкуется черт знает сколько времени. Сколько у вас исходников? 500 метров чтоли?

K_O>Намного меньше, но порядок угадан верно.
А конкретней можно? Надеюсь статистика проекта не является коммерчиской тайной.

Я тут небольшой тест сделал.
Сгенерил 1000 файлов такого соержания
#include "..\stdafx.h"
struct c_0
{
    typedef c_0 self_t;
    int i;
    virtual void f(){}
    friend bool operator<(self_t const& l, self_t const& r)
    {
        return r.i<l.i;
    }
};
void f_0()
{
    std::list<c_0> l;
    l.sort();
}

#include "..\stdafx.h"
struct c_1
{
    typedef c_1 self_t;
    int i;
    virtual void f(){}
    friend bool operator<(self_t const& l, self_t const& r)
    {
        return r.i<l.i;
    }
};
void f_1()
{
    std::list<c_1> l;
    l.sort();
}

...
релиз без опции инкрементал линк:
общее время билда 8:13 из которых 0:43 заняла линьковка.
изменение одного файла и линковка примерно 0:30
дебуг с опцией инкрементал линк:
общее время билда 12:40 из которых 1:00 заняла линьковка.
изменение одного файла и линковка примерно 0:02

ЗЫ Может вы всетки инкрементал линк включить забыли?
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.05.04 07:03
Оценка: 6 (1)
Здравствуйте, Kh_Oleg, Вы писали:
K_O>Ну я ж говорил, что нельзя будет отличить переменные от массивов...
Как насчет редактора, который будет подсвечивать типы? Ну там для векторов сверху -> рисовать, всякие шрифты для матриц, домики там и т.п. См. Фихтенгольц, к примеру. А?
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[19]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: INTP_mihoshi Россия  
Дата: 25.05.04 07:51
Оценка:
Здравствуйте, gbear, Вы писали:

G>Другими словами... чем больше операторов, тем легче читается, но труднее понимается... так что ли?! Или на оборот?! Имхо, что-то тут не то


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

Кстати, хорошая анлогия (да, да, люблю я аналогии — Меню и горячие клавиши в приложениях. "Новичку" удобнее меню, "профессионалу" — горячие клавиши. Хорошо написанное приложение предоставляет удобные средства управления и для тех, и для других.
Re[23]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 25.05.04 09:24
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>>>А ну-ну. Так можно в конце концов договорится до того что шаблоны==препроцессор,

K_O>>А в чем принципиальная разница?
WH>А в чем принципиальная разница между компилятором и препроцессором?
В том, компилятор на основе текста программы на ЯП, генерирует команды процессора, а препроцессор всего лишь заменяет в тексте программы одни строки на другие.
Так вот, каждая специализация шаблона — это новая копия класса с заменой одного идентификатора на другой.

WH>ЗЫ Может вы всетки инкрементал линк включить забыли?

не забыли, там загвоздка в опции "Generate Debug Info", если ее отключить, то линкуется минуты за полторы, но отладчик, ессно, не работает .
Re[20]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: gbear Россия  
Дата: 25.05.04 09:31
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

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


G>>Другими словами... чем больше операторов, тем легче читается, но труднее понимается... так что ли?! Или на оборот?! Имхо, что-то тут не то


INT>Нет, я имел в виду, что разные варианты лучше при разном уровне пользоавтеля. Т.е. для "новичка" который только знакомится с библиотекой лучше развернутые имена функций чтобы не искать их каждый раз в доках. А для "профессионала" (т.е. пользователя с более чем недельным-месячным "стажем"), который уже хорошо знаком с библиотекой удобнее операторы чтобы текст проще было охватить глазом (и головой).


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

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

Вот и получается что, "операторный код" — легче прочитать (субъективно, он "не режет глаз") — но, в случае с возможностью перегрузки операторов, "потенциальная запутанность" такого кода выше


INT>Кстати, хорошая анлогия (да, да, люблю я аналогии — Меню и горячие клавиши в приложениях. "Новичку" удобнее меню, "профессионалу" — горячие клавиши. Хорошо написанное приложение предоставляет удобные средства управления и для тех, и для других.


Аналогия несколько не та.

---
С уважением, Сиваков Константин.
Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kisloid Мухосранск  
Дата: 17.10.04 08:46
Оценка: :)
Здравствуйте, LaptevVV, Вы писали:

LVV>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm



После полугода агонии — как для отца, так и для сына — я посоветовал сыну бросить этот курс.

Всего то полгода ! И сразу бросили =) Так они никогда программистами не станут =)
((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))
Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 18.10.04 05:17
Оценка: +1 -2
Здравствуйте, LaptevVV, Вы писали:

LVV>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm


Читаю выступление, и всё жду, когда же начнутся восхваления Паскаля.
Оп-па — вот и они
ИМХО, всё написанное — сплошное словоблудие без единой конструктивной мысли.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 18.10.04 07:43
Оценка:
если у кого-то есть желание понаставить минусов — аргументы в студию, плиз!
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Евгений Коробко  
Дата: 18.10.04 07:46
Оценка:
Глупости написаны. Период жёсткого формализма закончен. Современные программы слишком сложны, чтобы можно было провести формальное доказательство корректности. Да что там программирования, похожая ситуация в математике. Современные численные методы эмпирические. Их сходимость не доказана. В них нарушаются математические правила. Чтобы не быть голословным — в градиентных методах (CG, SCG, BiCG, BiCGStab) используется эренгетическая норма по некоторой матрице, которая, по определению, должна быть симметричной и положительно определённой. Для того, чтобы применить его к произвольной матрице, строят специальную, вдвое большей размерности, коорая заведомо симетрична. Но не положительно определена. Метод, чья правильность (сходимость и аппроксимация) доказана для положительно определённых матриц абсолютно незаконно применяется для произвольных матриц. И на этом алгоритме работают модели АЭС, самолётов, космических кораблей. Вроде работает...
Posted via RSDN NNTP Server 1.9 gamma
Евгений Коробко
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 18.10.04 08:38
Оценка: +2
очень понравился этот пассаж:

Мой сын не мог понять, почему x = y должно отличаться от y = x

Это наверно должно убедить всех, что надо писать не x = y, а x := y :lol:
Вот хоть убейте, не вижу никакой разницы. Если человек не можеть понять, что такое переменная, то никакие различия в нотации ему уже не помогут.

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

Я сам прекрасно понимаю, что современное положение вещей в отрасли содержит огромное количество проблем. Вот только решение их лежит в совершенно другой стороне.
Печально это всё. Похоже, что теоретики от информатики окончательно и бесповоротно утратили все связи с реальностью и живут в своем воображаемом мире с воображаемыми проблемами.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[4]: _
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 18.10.04 09:44
Оценка: 1 (1) +1
Здравствуйте, Дарней, Вы писали:

Д>EBNF поможет "чайникам"


А кого Вы называете "чайниками"? По моему, наоборот, тот кто не знает EBNF, тот и есть "чайник" или другими словами "кул-хацкер" знакомый с программированием по журналу "Хакер" и раскидывающий понты!

Д>теоретики от информатики


Это Вы Вирта, что ли, назвали теоретиком? Если теоретиком называть человека создавшего несколько языков программирования и несколько операционных систем, то кого же тогда называть практиком?

Если бы меня спросили, кого я считаю оторванными от реальности теоретиками, то я бы назвал UML-щиков.
Re[5]: _
От: Дарней Россия  
Дата: 18.10.04 10:58
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:

СГ>А кого Вы называете "чайниками"? По моему, наоборот, тот кто не знает EBNF, тот и есть "чайник" или другими словами "кул-хацкер" знакомый с программированием по журналу "Хакер" и раскидывающий понты!


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

СГ>Это Вы Вирта, что ли, назвали теоретиком? Если теоретиком называть человека создавшего несколько языков программирования и несколько операционных систем, то кого же тогда называть практиком?


единственный стоящий упоминания (в практическом плане) это Pascal, точнее — Delphi Да и его роль тоже невелика. Хотя в свое время Паскаль и правда был довольно хорошо, особенно для обучения. Но те времена давно прошли, прогресс ушел далеко вперед, и это надо бы понимать.

СГ>Если бы меня спросили, кого я считаю оторванными от реальности теоретиками, то я бы назвал UML-щиков.


Не собираюсь это оспаривать. Я раньше тоже не понимал, зачем это нужно. А еще я не понимал, зачем вообще нужно греть себе голову дизайном и писать лишний код, который мне не нужен прямо вот сейчас. В общем, глупый был совсем.
Но с тех пор я немного поумнел
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[6]: _
От: Quintanar Россия  
Дата: 18.10.04 11:49
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>единственный стоящий упоминания (в практическом плане) это Pascal, точнее — Delphi Да и его роль тоже невелика. Хотя в свое время Паскаль и правда был довольно хорошо, особенно для обучения. Но те времена давно прошли, прогресс ушел далеко вперед, и это надо бы понимать.



Там же написано, что его Модула используется в каких-то там аэрокосмических проектах. Там, короче, где кульность и "современность" языка никому нафиг не нужна, а нужна сверхнадежность. Да и вообще военные, например, предпочитают довольно консервативные языки, а не новомодные фишки.
Прогресс в практическом программировании никуда особенно далеко не ушел. Просто практика, наконец, доросла до некоторых идей, которым уже не один десяток лет.
Re[6]: _
От: LaptevVV Россия  
Дата: 18.10.04 11:59
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>единственный стоящий упоминания (в практическом плане) это Pascal, точнее — Delphi Да и его роль тоже невелика. Хотя в свое время Паскаль и правда был довольно хорошо, особенно для обучения. Но те времена давно прошли, прогресс ушел далеко вперед, и это надо бы понимать.

Algol-W — впервые в строго определенном языке появились записи.
Eiler — Эйлер так пишется? К сожалению, ничего не знаю про этот язык
PL-360 — язык высокого уровня для программирования как на ассемблере. Регистры входили в описание языка
Pascal -!!!!!!!
Modula, Modula-2, Modula-3
Oberon, Oberon-2.
Это только то, что я знаю.
Нифига себе теоретик!!!!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[7]: _
От: Дарней Россия  
Дата: 18.10.04 12:25
Оценка:
Здравствуйте, Quintanar, Вы писали:

Q>Там же написано, что его Модула используется в каких-то там аэрокосмических проектах. Там, короче, где кульность и "современность" языка никому нафиг не нужна, а нужна сверхнадежность. Да и вообще военные, например, предпочитают довольно консервативные языки, а не новомодные фишки.


Про это я уже много раз слышал. Правда, никто не уточнял, что это за проекты и что за программы на ней реализованы. Может быть, это просто прога для расчета зарплат персоналу?
Хотелось бы более детальной информации.

Q>Прогресс в практическом программировании никуда особенно далеко не ушел. Просто практика, наконец, доросла до некоторых идей, которым уже не один десяток лет.


Ничто не ново под луной.
Тем не менее, то, что они дошли до практической реализации — это безусловно прогресс
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[6]: _
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 18.10.04 12:31
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Я как раз и написал, что с EBNF мало кто знаком, уж тем более — среди начинающих.


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


Д>единственный стоящий упоминания (в практическом плане) это Pascal, точнее — Delphi


Из этой фразы я делаю заключение о том, что Вы не компетентны в этой области. (Вирт не имеет отношения к Delphi. Delphi создал Андерс Хейльсберг, кстати, он же создал C#. Вирт создал Pascal, Modula, Modula-2, Oberon + различные клоны Оберона в соавторстве с другими людьми, в том числе OLGA, Oberon-2, Component Pascal, Active Oberon и т.д; а также ряд операционных систем).



Д>Но с тех пор я немного поумнел


Поздравляю Вас!
Re[7]: _
От: Дарней Россия  
Дата: 18.10.04 12:46
Оценка: +1
Здравствуйте, LaptevVV, Вы писали:

LVV>Algol-W — впервые в строго определенном языке появились записи.

LVV>Eiler — Эйлер так пишется? К сожалению, ничего не знаю про этот язык
LVV>PL-360 — язык высокого уровня для программирования как на ассемблере. Регистры входили в описание языка

(интересно, а чем плох макроассемблер?)

LVV>Pascal -!!!!!!!

LVV>Modula, Modula-2, Modula-3
LVV>Oberon, Oberon-2.
LVV>Это только то, что я знаю.

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

LVV>Нифига себе теоретик!!!!


И где же сейчас все эти языки?
Да, конечно, порочный круг — я понимаю. НО тем не менее, новые языки появляются и принимаются общественностью. При одном условии — если они действительно решают насущные проблемы и при этом не требуют выбросить на свалку все существующие наработки.
Значит — просто что-то было сделано не так, где-то развитие пошло не в нужном направлении.

Что касается критики C — то это выглядит просто смехотворно. Разносить язык в пух и прах за мелочи вроде = и == и при этом оставить "за кадром" кучу действительно серьезных проблем?
Возможно, паскалевская нотация выглядит немного более естественной для математика. (вопрос только — насколько много настоящих математиков среди программистов? )
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[7]: _
От: Дарней Россия  
Дата: 18.10.04 13:00
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

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


Они достаточно грамотны, чтобы выполнять свою работу.

СГ>Из этой фразы я делаю заключение о том, что Вы не компетентны в этой области. (Вирт не имеет отношения к Delphi. Delphi создал Андерс Хейльсберг, кстати, он же создал C#. Вирт создал Pascal, Modula, Modula-2, Oberon + различные клоны Оберона в соавторстве с другими людьми, в том числе OLGA, Oberon-2, Component Pascal, Active Oberon и т.д; а также ряд операционных систем).


Ваши выводы настолько же поспешны, насколько и однобоки. Вероятно, моя некомпетентность очень сильно бы Вас утешила
Я просто привел пример единственного практически успешного творения Вирта (пусть и только в какой-то степени — его).
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[8]: _
От: Quintanar Россия  
Дата: 18.10.04 14:37
Оценка:
Здравствуйте, Дарней, Вы писали:

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

Д>Я просто привел пример единственного практически успешного творения Вирта (пусть и только в какой-то степени — его).

А что этого мало? Вот когда ты создашь язык, на котором будет программировать больше пары десятков человек, тогда и поговорим о теоретиках и практиках. А пока, прости, мнение Вирта на несколько порядков весомее твоего.
Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Dervish Россия http://www.dervish.ru
Дата: 18.10.04 17:23
Оценка: 53 (6) +1
Здравствуйте, Все, Вы писали...

[поскипано]

Вот ведь какие бурные дебаты вызвали откровения г-на Вирта...

Позвольте и мне мои пять копеек!

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

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

Точно так же и в индустрии ПО. Вы заметили, как именно называется раздел форума для таких споров на RSDN? Очень точное название, "Священные войны"! Священные!

А между тем, в Москве, например, действует закон, согласно которому улицам можно давать названия знаменитых людей только по прошествии 10 лет с момента их смерти (правда, в отношении Кадырова сами же власти этот закон нарушили и не поморщились, но это уже совсем другая история).

На мой взгляд, очень хороший закон. Большое видится на расстоянии. Ведь через 100 лет неизвестно, будут ли вообще потомки помнить про С++? Будут ли помнить про Паскаль (Модулу, Оберон и прочая и прочая)? Или это будет таким же дремучим раритетом для них, как для нас сейчас языки программируемых калькуляторов?

Впервые с Паскалем мне довелось познакомиться в 1984 году, когда на втором курсе института мне попал в руки учебник по этому языку и методам объектно-ориентированного программирования. До этого мне приходилось сталкиваться с ассемблером, Фортраном и Бейсиком, причём именно в такой последовательности. Вы представляете, насколько я был поражён Паскалем? Я зачитывался этой книжкой, несколько раз перечитывал её, затёр от корки до корки. И это при том, что у меня в это время не было компилятора под рукой. Это была настоящая программистская любовь!

Но прошло время. Прошла любовь, завяли помидоры. На смену старому увлечению пришло новое. Было увлечение Адой (до сих пор дома книжки лежат по ней). Перечитал море литературы по самым разным языкам, многие из них искренне нравились. Кстати, интересно наблюдать, как знакомые конструкции одного языка проявляются в других. Скажем, регэкспы Перла вызвали явное узнавание Снобола-4 (не берусь утвержать, что именно оттуда пришло, но, чёрт возьми, до чего же похоже!).

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

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

Вот почему лично моё отношение к статье г-на Вирта таково: принято к сведению. Ни больше и ни меньше.

И напоследок. Друзья, давайте не будем тратить своё время на священные войны, нам ведь ещё столько предстоит сделать...
... << RSDN@Home 1.1.4 beta 3 rev. 194>>
Re[9]: _
От: Дарней Россия  
Дата: 19.10.04 04:04
Оценка:
Здравствуйте, Quintanar, Вы писали:

Q>А что этого мало? Вот когда ты создашь язык, на котором будет программировать больше пары десятков человек, тогда и поговорим о теоретиках и практиках. А пока, прости, мнение Вирта на несколько порядков весомее твоего.


поживем — увидим
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: LaptevVV Россия  
Дата: 19.10.04 04:28
Оценка:
Здравствуйте, Dervish, Вы писали:

D>Друзья мои, скажите, пожалуйста, какая разница, что именно написал уважаемый г-н Вирт? Разве это окажет влияние на индустрию программного обеспечения? Сейчас окажет? Потом окажет? Разве можно "столкнуть" с выбранного направления уже прилично разогнавшийся паровозик?

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

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


D>А такие люди как г-н Вирт (искренне мною уважаемый) выполняют, на самом деле, важную функцию: пусть в небольших пределах, но они всё-таки корректируют главную линию развития индустрии. Да, паровозик не столкнуть, но хоть чуть-чуть повернуть его. Сделать так, чтобы оператор присваивания записывался как :=, а не как просто = и то уже будет неплохо. И не нужно его (Вирта) строго за это судить, он имеет на это право.

D>Вот почему лично моё отношение к статье г-на Вирта таково: принято к сведению. Ни больше и ни меньше.

D>И напоследок. Друзья, давайте не будем тратить своё время на священные войны, нам ведь ещё столько предстоит сделать...

Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Xenia США  
Дата: 19.10.04 04:51
Оценка:
Здравствуйте, Serginio1, Вы писали:

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



WH>> В С++ таких проблем нет. Ибо всегда сравниваются объекты. Указатели тоже объекты.

S> Согласно принципам ООП
S>f*=(a/x+5)*b-(y*c-d/5)/e-z;

S>Ну зачем так

S>f= f.mull( a.div(x).add(5).mull(b).sub( y.mull(c).sub(d.div(5)) ).div(e).sub(z) )

S> Чуть длинее, но понимание это уже дело привычки.


Вот уж действительно — человек ко всему привыкает
Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 19.10.04 05:32
Оценка:
Здравствуйте, LaptevVV, Вы писали:
LVV>Уже оказал. Не было б паскаля — сидели бы мы сейчас на Алголе-68!

а как же K&R?

LVV>Блестящий язык, но как же сложно с него полного писать транслятор!


Да уж.. хотя кажется мне, у С++ с этим всё намного хуже
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 19.10.04 05:38
Оценка:
Здравствуйте, Dervish, Вы писали:

D>Споры о достоинствах и недостатках тех или иных платформ (языков) мне жутко напоминают религиозные споры (между протестантами и католиками, между исламистами и христианами, между идолопоклонниками и атеистами — тоже вера, разве нет?).


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

D>На мой взгляд, очень хороший закон. Большое видится на расстоянии. Ведь через 100 лет неизвестно, будут ли вообще потомки помнить про С++?


Наверняка будут. В качестве примера, как не надо проектировать языки :-D

D>Впервые с Паскалем мне довелось познакомиться в 1984 году, когда на втором курсе института мне попал в руки учебник по этому языку и методам объектно-ориентированного программирования. До этого мне приходилось сталкиваться с ассемблером, Фортраном и Бейсиком, причём именно в такой последовательности. Вы представляете, насколько я был поражён Паскалем? Я зачитывался этой книжкой, несколько раз перечитывал её, затёр от корки до корки. И это при том, что у меня в это время не было компилятора под рукой. Это была настоящая программистская любовь!


Аналогичная последовательность — хотя Паскаль особого впечталения не произвел. А вот C — это да

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


Главное, чтобы эта цель была правильно поставлена

D>Сделать так, чтобы оператор присваивания записывался как :=, а не как просто = и то уже будет неплохо.


Вот уж не надо, спасибо-спасибо, как-нибудь без этого

D>И напоследок. Друзья, давайте не будем тратить своё время на священные войны, нам ведь ещё столько предстоит сделать...


И то верно... надо найти наконец достаточно времени и проверить некоторые идеи
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[2]: *
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 19.10.04 06:58
Оценка: :)
Здравствуйте, Dervish, Вы писали:

D>Друзья мои, скажите, пожалуйста, какая разница, что именно написал уважаемый г-н Вирт? Разве это окажет влияние на индустрию программного обеспечения? Сейчас окажет? Потом окажет? Разве можно "столкнуть" с выбранного направления уже прилично разогнавшийся паровозик?


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

Кроме того, программирование — это важнейшая дисциплина постиндустриальной эпохи, следовательно в 21 веке программистов на нашей планете будет жить больше чем когда-либо до этого, а значит в 21 веке ожидается написание такого огромного количества всякого разного софта, какого раньше еще никто не видел. Кто будет писать это потрясающее воображение количество софта? Его писать будут те, кто сейчас еще ходит в школу. Кем они вырастут: грамотными специалистами во главу угла ставящие надежность и дисциплину или "кул-хацкерами" которым лишь бы повыпендриваться, а потом хоть трава не расти?

Вот именно, что сейчас отрасль ПО всего лишь "разогнавшийся паровозик", а через 50 лет, этот паровозик экспоненциально вырастет до супер-гига-архипаровозища...
Re[3]: *
От: FR  
Дата: 19.10.04 07:50
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:


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


Объясни пожалуйста чем именно Оберон лучше C++.
И почему именно Оберон, ведь и без него много альтернатив.
Может лучше учить Ocaml или Python или ... ?

СГ>Кроме того, программирование — это важнейшая дисциплина постиндустриальной эпохи, следовательно в 21 веке программистов на нашей планете будет жить больше чем когда-либо до этого, а значит в 21 веке ожидается написание такого огромного количества всякого разного софта, какого раньше еще никто не видел. Кто будет писать это потрясающее воображение количество софта? Его писать будут те, кто сейчас еще ходит в школу. Кем они вырастут: грамотными специалистами во главу угла ставящие надежность и дисциплину или "кул-хацкерами" которым лишь бы повыпендриваться, а потом хоть трава не расти?


А что грамотность специалиста так сильно зависит от используемого языка?

СГ>Вот именно, что сейчас отрасль ПО всего лишь "разогнавшийся паровозик", а через 50 лет, этот паровозик экспоненциально вырастет до супер-гига-архипаровозища...


Через 50 лет мир может так сильно изменится, что я не решился бы прогнозировать на такой срок
... << RSDN@Home 1.1.3 stable >>
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Dervish Россия http://www.dervish.ru
Дата: 19.10.04 07:55
Оценка:
Здравствуйте, Дарней, Вы писали:

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

LVV>>Уже оказал. Не было б паскаля — сидели бы мы сейчас на Алголе-68!
LVV>>Блестящий язык, но как же сложно с него полного писать транслятор!

Д>Да уж.. хотя кажется мне, у С++ с этим всё намного хуже


Это вам только кажется, уверяю вас! Наверное вы не видели "Пересмотренное сообщение об Алголе-68". Читать это просто невозможно.

Что касательно компилятора, то мне доводилось читать мотивированное мнение специалиста по теории компиляции, который утверждал, что для компиляции Алгола-68 требуется минимум три прохода. А для С++, если не ошибаюсь, вполне достаточно одного. Не стопроцентный, но всё же показатель, вы не находите?
... << RSDN@Home 1.1.4 beta 3 rev. 194>>
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 19.10.04 08:58
Оценка:
Здравствуйте, Dervish, Вы писали:

D>Это вам только кажется, уверяю вас! Наверное вы не видели "Пересмотренное сообщение об Алголе-68". Читать это просто невозможно.


нет, не видел... хотя это наверно и к лучшему?

D>Что касательно компилятора, то мне доводилось читать мотивированное мнение специалиста по теории компиляции, который утверждал, что для компиляции Алгола-68 требуется минимум три прохода. А для С++, если не ошибаюсь, вполне достаточно одного. Не стопроцентный, но всё же показатель, вы не находите?


Совершенно верно — одного. Другой вопрос только, какой ценой это достигается.
Лучше уж многопроходный компилятор, чем та порнография, которая существует сейчас в C++. Куча усилий уходит просто на то, чтобы уменьшить количество связей между файлами при компиляции. А уж скорость оной — это просто песня. Время полной компиляции проекта в сутки — это еще не предел Даже "заплатки" в виде предкомпилированных хэдеров не всегда помогают.
Ну и это не говоря еще о тех конструкциях языка, которые при одинаковой нотации могут обозначать совершенно разные вещи.
В общем, слишком велик груз прошлого, который тянет C++ на дно Вот только Оберона я в нашем будущем все равно не вижу. Скорее уж — C#

PS Кстати, довольно забавный факт. Не очень много знаю про Active Oberon, поэтому могу в чем то и ошибаться. Но похожая концепция — активные объекты — широко используется в ОС Symbian. Что самое интересное, реализованы они там поверх (кто бы мог подумать) — C++ Хотя этот диалект C++ во многом отличается от стандартного. Ну а для переключения контекстов там используются fibers. И даже придумывать под активные объекты специальное железо не понадобилось, как это делают некоторые особо рьяные реформаторы
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[7]: _
От: WolfHound  
Дата: 19.10.04 09:02
Оценка: 15 (4) +2
Здравствуйте, Сергей Губанов, Вы писали:

Д>>Я как раз и написал, что с EBNF мало кто знаком, уж тем более — среди начинающих.

СГ>Что и требовалось доказать. И заметьте, я Вас за язык не тянул. Вы сами согласились с Виртом в том что большинство современных программистов малограмотны.
1)Все начинающие программисты малограмотны.
2)Я не вижу объективных причин благодаря которым знание EBNF помогает писать программы. Ибо это специфические знания необходимые при разработке компиляторов.
Что действительно нужно всем программистам так это знание алгоритмов и паттернов.

Д>>единственный стоящий упоминания (в практическом плане) это Pascal, точнее — Delphi

СГ>Из этой фразы я делаю заключение о том, что Вы не компетентны в этой области. (Вирт не имеет отношения к Delphi.
Дельфи прямой потомок паскаля. Болие того язык этой среды довольно долго назывался object-pascal'ем.
Короче как ни крути но в дельфе очень много Виртовского.
СГ>Delphi создал Андерс Хейльсберг, кстати, он же создал C#.
ИМХО зря его к .NET и C# вобще пустили. В этой системе совершенно не учтена необходимость детерминированой финализации. А она необходима как не крути. И не надо мне расказывать про всякие чисто теоритические поделки типа оберонОС где все на ГЦ. Ну не работает ГЦ на распределенных системах. Ну ни как.
Да и реалтайм ни кто не отменял, а он не совместим с ГЦ. Ибо реалтайм это гарантированое время отклика, а когда начнет работать ГЦ и когда он закончит предсказать не возможно тут уже ни о каких гарантиях говорить нельзя.
СГ>Вирт создал Pascal, Modula, Modula-2, Oberon + различные клоны Оберона в соавторстве с другими людьми, в том числе OLGA, Oberon-2, Component Pascal, Active Oberon и т.д; а также ряд операционных систем).
Один мой друг тоже создал несколько языков и написал операционку... И что с того? Этим занимаются все кому не лень.
Вирт застрял на уровне чуть выше ассемблера и ГЦ ему не поможет. Сложность современных систем такова что этого мягко говоря не достаточно.

Короче ИмеюМнениеХренОспоришь:
Сейчас нужны языки которые позволяют как можно сильнее повышать абстракцию. И старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами справляется с этим на порядок лучше любой Виртовской поделки. А рассуждения типа = vs == это ламерство!
... << RSDN@Home 1.1.4 rev. 185 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: *
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 19.10.04 09:47
Оценка:
Здравствуйте, FR, Вы писали:

FR>Объясни пожалуйста чем именно Оберон лучше C++.


Своей целостностью.

FR>И почему именно Оберон, ведь и без него много альтернатив.


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

FR>А что грамотность специалиста так сильно зависит от используемого языка?


Мы думаем на том же языке что и говорим. Корявый язык принуждает коряво думать. Грамотность связана с тем как человек думает.
Re[16]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: vdimas Россия  
Дата: 19.10.04 09:55
Оценка: 1 (1)
Здравствуйте, Kh_Oleg, Вы писали:

K_O>Е-мое, "и эти люди запрещают мне ковыряться в носу?!"

K_O>И это все ради того, чтобы вместо Add писать +, опускать индексы у массивов и не писать явно оператор цикла?!

Есть такое правило проектирования — интерфейс важнее реализации.
Реализация однократна, а интерфейс может быть использован несчетное количество раз.
Re[8]: _
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 19.10.04 10:29
Оценка: 14 (1) :)
Здравствуйте, WolfHound, Вы писали:

WH>2)Я не вижу объективных причин благодаря которым знание EBNF помогает писать программы. Ибо это специфические знания необходимые при разработке компиляторов.


Все знания о том что такое EBNF умещаются на одной странице. Это элементарщина которую в школе надо давать, а Вы о ней говорите как о высокой науке.


WH>ИМХО зря его к .NET и C# вобще пустили.


Вас не спросили!


WH>Один мой друг тоже создал несколько языков и написал операционку... И что с того?


Ну и как, создав их он понял как надо их грамотно создавать? Скольких студентов и аспирантов он научил тому как надо грамотно создавать языки и операционки? Кстати, Питер Мюллер (создатель Aos) был аспирантом у Вирта и Гуткнехта.


WH>Вирт застрял на уровне чуть выше ассемблера и ГЦ ему не поможет.


Сами поняли что сказали?

WH>Короче ИмеюМнениеХренОспоришь:

WH>Сейчас нужны языки которые позволяют как можно сильнее повышать абстракцию. И старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами справляется с этим на порядок лучше любой Виртовской поделки. А рассуждения типа = vs == это ламерство!

Правильно, надо повышать абстракцию. Вот Оберон ее и повышает. Например, еще со времен Модулы, в этом языке есть такая абстракция как "модуль" — это не только единица компиляции, но и динамически линкующаяся и загружаемая единица исполнения (в Си++ такой абстракции нет и не будет). Еще пример высокого уровня абстракции — "активный объект" (в Си++ такой абстракции нет и не будет). А Вы только посмотрите сколько новых абстракций в Zonnon — Оберон для .NET. Одни DEFINITION чего стоят. А еще, совсем убойная для всех рептилоидов вещь, там, представьте себе, какой ужас, протокол обмена сообщениями между двумя активностями пишется прямо в EBNF, то есть тот кто не знает EBNF не сможет писать программы на языке Zonnon!

11.3 Protocol EBNF
The definition of an activity can include a formal syntax specification of a communication protocol in EBNF as a modifier to an enumeration type which defines the alphabet of terminal tokens of the syntax. The name of an activity and its enumeration type constitute the activity’s signature. Note that in EBNF protocol specifications the communication of an item from the callee to the caller is prefixed by a ‘?’.

definition Fighter;
  activity (* Syntax of the protocol, in this case it is recursive too *)
    { fight    = { attack ( { defense attack } | RUNAWAY [ ?CHASE] | KO | fight ) }.
      attack   = ATTACK strike.
      defense  = DEFENSE strike.
      strike   = bodypart [ strength ].
      bodypart = LEG | NECK | HEAD.
      strength = integer. }
      Karate   = (RUNAWAY, CHASE, KO, ATTACK, DEFENSE, LEG, NECK, HEAD);
end Fighter.

object Opponent implements Fighter;
  activity Karate implements Fighter.Karate;
    var t: object;

    procedure fight;
    begin
      while t is ATTACK do
        receive t;
        while t is DEFENSE do receive t; strike
          if t is ATTACK then strike else halt(13) end
        end;
        if t is RUNAWAY then
          if (*not exhausted*) then send Karate.CHASE end;
          return (* fight over *)
        elsif t is KO then return (* fight over *)
        elsif t is ATTACK then fight (* recursion, continue the fight *)
        else halt(13) (* protocol error *)
        end
      end
    end fight;

    procedure strike;
    begin
      if (t is LEG) or (t is NECK) or (t is HEAD) then
        receive t;
        if t is integer then (* unusual strength *) receive t end
      end
    end strike;

    begin (* Karate*)
      receive t;
      fight
    end Karate;

end Opponent.


object Challenger;
  import Opponent, Fighter;
  var opp: Opponent; f: Fighter.Karate;
  begin
    opp := new Opponent; (* create opponent *) …
    f := new opp.Fighter.Karate; (* create dialog *)
    send Fighter.Karate.ATTACK => f; … (* fight according to the dialog protocol *)
    ... 
  
end Challenger.


Спрашивается, а как может повысить уровень абстракции старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами?
Re[9]: _
От: Дарней Россия  
Дата: 19.10.04 10:52
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Все знания о том что такое EBNF умещаются на одной странице. Это элементарщина которую в школе надо давать, а Вы о ней говорите как о высокой науке.


Другой вопрос — насколько много неспециалистов смогут ее понять и применить на практике. Если для них даже концепция переменной невообразимо сложна

СГ>Например, еще со времен Модулы, в этом языке есть такая абстракция как "модуль" — это не только единица компиляции, но и динамически линкующаяся и загружаемая единица исполнения (в Си++ такой абстракции нет и не будет).


э.... DLL?

СГ>Еще пример высокого уровня абстракции — "активный объект" (в Си++ такой абстракции нет и не будет).


Забавно, что как раз недавно я про это писал
http://gzip.rsdn.ru/Forum/Message.aspx?mid=858130&amp;only=1
Автор: Дарней
Дата: 19.10.04
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[5]: *
От: FR  
Дата: 19.10.04 10:53
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, FR, Вы писали:


FR>>Объясни пожалуйста чем именно Оберон лучше C++.


СГ>Своей целостностью.


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

FR>>И почему именно Оберон, ведь и без него много альтернатив.


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


Если поискать то найдется наример "D" http://www.digitalmars.com/d/index.html
да и императивное подмножество Ocaml тоже удовлетворяет тому что ты перечислил.

FR>>А что грамотность специалиста так сильно зависит от используемого языка?


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


А ты думаешь что все люди думают одинаково?
Да еще почему практически все человеческие языки такие корявые и нелогичные? Может все-таки это как раз и естественно для человеческого мышления? И может именно поэтому корявый и не логичный, но выразительный C++ стал таким массовым?
... << RSDN@Home 1.1.3 stable >>
Re[10]: _
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 19.10.04 10:59
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>э.... DLL?


Что DLL? Вот именно, что "э....". В самом языке Си++ такой абстракции нет, а в Оберонах MODULE — есть еще со времен Модулы. Вот Вам и высокая абстракция!
Re[11]: _
От: Дарней Россия  
Дата: 19.10.04 11:27
Оценка: 1 (1) +3
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Что DLL? Вот именно, что "э....". В самом языке Си++ такой абстракции нет, а в Оберонах MODULE — есть еще со времен Модулы. Вот Вам и высокая абстракция!


как раз эта возможность в С++ прекрасно эмулируется, так что не вижу тут никаких особых преимуществ у Модулы. Активные объекты тоже эмулируются, при наличии желания.
Действительно серьезные проблемы у языка совсем другие, чем это думают теоретики.
И пока они будут парить в облаках, паровоз будет ехать как ему удобнее А они могут и дальше сколько угодно рассуждать о порочном круге и прочих приятных для их слуха вещах.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Где собака зарыта???
От: prVovik Россия  
Дата: 19.10.04 12:28
Оценка:
Здравствуйте, FR, Вы писали:

FR>И может именно поэтому корявый и не логичный, но выразительный C++ стал таким массовым?


А вот, кстати, ты поднял очень интересный вопрос. Почему же популярность завоевал, не паскаль, а именно такой ужасный и корявый С/С++, несмотря на то, что паскаль появился раньше ??? И почему именно на основе синтаксисв С/С++ сделали и Java и C#? Может быть товарищу Вурту следовало бы сначала разобраться с этими вопросами, прежде чем придумывать свой очередной идеальный язак программирования.
... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re: Где собака зарыта???
От: Nick_ Россия  
Дата: 19.10.04 13:09
Оценка: 2 (2) +1
Здравствуйте, prVovik, Вы писали:

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


FR>>И может именно поэтому корявый и не логичный, но выразительный C++ стал таким массовым?


V>А вот, кстати, ты поднял очень интересный вопрос. Почему же популярность завоевал, не паскаль, а именно такой ужасный и корявый С/С++, несмотря на то, что паскаль появился раньше ??? И почему именно на основе синтаксисв С/С++ сделали и Java и C#? Может быть товарищу Вурту следовало бы сначала разобраться с этими вопросами, прежде чем придумывать свой очередной идеальный язак программирования.


Все просто. Популярность завоевал не Си, а UNIX. Если бы UNIX был написан на другом языке, то сейчас был бы популярен другой язык.
Re: Где собака зарыта???
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 19.10.04 13:25
Оценка: 1 (1) +1 :)
Здравствуйте, prVovik, Вы писали:

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


FR>>И может именно поэтому корявый и не логичный, но выразительный C++ стал таким массовым?


V>А вот, кстати, ты поднял очень интересный вопрос. Почему же популярность завоевал, не паскаль, а именно такой ужасный и корявый С/С++, несмотря на то, что паскаль появился раньше ??? И почему именно на основе синтаксисв С/С++ сделали и Java и C#? Может быть товарищу Вурту следовало бы сначала разобраться с этими вопросами, прежде чем придумывать свой очередной идеальный язак программирования.


Потому что: "Легче погасить в себе свет, чем рассеять тьму вокруг" "Ночной Дозор"
Re[9]: _
От: Kluev  
Дата: 19.10.04 13:54
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Спрашивается, а как может повысить уровень абстракции старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами?


А зачем его повышать? Абстракции ради абстракций нам не нужны. Более того совсем недавно писал кусок программы и в котороый раз приятно поразился насколько С++ с его тупыми шаблонами и анахронизмами идеально подошел для решаемой задачи:

template <int Dims, class T>
    class NurbsCurve
{
    typedef HPoint<Dims,T>     THPoint;
    typedef Point<Dims,T>      TPoint;
    typedef ValVector<T>       KnotVector;
    typedef ValVector<THPoint> PointVector;

    int           p;
    int           n;
    KnotVector    U;
    PointVector   Pw;

public:
    void point( TPoint &out, T u )
    {
        TmpVector<T> N(p + 1);
        THPoint v, h;

        int span = knot_span( u );
        basis_functions( N, u, span );

        for( int i = 0; i <= p; ++i )    {
            v = Pw[span-p+i] * N[i];
            h = h + v;
        } 
        out = h.euclid();
    }
};

// а теперь хотим кривую в пространстве, пожалуйста:
typedef NurbsCurve<3,double>    NurbsCurve3d;

// нужна на плоскости? нет проблем:
typedef NurbsCurve<2,double>    NurbsCurve2d;

// хотим во флотах:
typedef NurbsCurve<2,float> NurbsCurve2f;


И вот получается что старый тупой старичок С++ опять всех опередил. На каком языке вы еще сможете написать это так же кратко, ясно, просто и понятно?
Re[4]: *
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 19.10.04 13:58
Оценка: :)
Здравствуйте, FR, Вы писали:

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


FR>Объясни пожалуйста чем именно Оберон лучше C++.


Фрагмент из того самого текста, который обсуждается в этой ветке форума:

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

Оберон, в отличие от Си++ позволяет обучать студентов образцовому дизайну не отвлекаясь при этом на внутриязыковые грабли, поскольку в Обероне внутриязыковых граблей нет.
Re[10]: _
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.10.04 13:58
Оценка:
Здравствуйте, Kluev, Вы писали:

K>Здравствуйте, Сергей Губанов, Вы писали:


СГ>>Спрашивается, а как может повысить уровень абстракции старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами?


K>А зачем его повышать? Абстракции ради абстракций нам не нужны. Более того совсем недавно писал кусок программы и в котороый раз приятно поразился насколько С++ с его тупыми шаблонами и анахронизмами идеально подошел для решаемой задачи:


K>
<skipped/>
K>


K>И вот получается что старый тупой старичок С++ опять всех опередил. На каком языке вы еще сможете написать это так же кратко, ясно, просто и понятно?


Да, хотелось бы увидеть аналог на Обероне, который "делает" плюсы...
Re[6]: *
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 19.10.04 13:59
Оценка: :)
Здравствуйте, FR, Вы писали:

СГ>>Своей целостностью.


FR>Какие преимущества для разработчика это дает?


Разработчику остается думать лишь о предметной области, а не о том как преодолевать внутриязыковые грабли самого языка.
Re[5]: *
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.10.04 14:02
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

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


Ты уверен на все 200%?
А может быть просто грабли ещё не нашли, а лежат они в кустах?
Имхо, идеала нет, можно только к нему стремиться...
Re[7]: *
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.10.04 14:07
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, FR, Вы писали:


СГ>>>Своей целостностью.


FR>>Какие преимущества для разработчика это дает?


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


А можно без пустого пафоса, а предметно?
Re[6]: *
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 19.10.04 14:13
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Здравствуйте, Сергей Губанов, Вы писали:


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


К>Ты уверен на все 200%?

К>А может быть просто грабли ещё не нашли, а лежат они в кустах?

Уверен. В Обероне граблей нет. Если не верите, то можете поискать.
Re[7]: *
От: Kluev  
Дата: 19.10.04 14:17
Оценка: +3
Здравствуйте, Сергей Губанов, Вы писали:

К>>Ты уверен на все 200%?

К>>А может быть просто грабли ещё не нашли, а лежат они в кустах?

СГ>Уверен. В Обероне граблей нет. Если не верите, то можете поискать.


Гы. Тогда напишите нам на обероне тот кусок с NurbsCurve который я привел. А мы посмотрим и сравним.
Re[7]: *
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.10.04 14:17
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, Курилка, Вы писали:


К>>Здравствуйте, Сергей Губанов, Вы писали:


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


К>>Ты уверен на все 200%?

К>>А может быть просто грабли ещё не нашли, а лежат они в кустах?

СГ>Уверен. В Обероне граблей нет. Если не верите, то можете поискать.


Может он ещё и математически доказываемые правильные программы генерирует?
А если серьёзней — на чём основана уверенность?
Я вот нисколько не удивлюсь, если тот же вирт через 5 лет придумает ещё какой-нибудь язычёк, который будет ну несказанно правильным.
Re[2]: Где собака зарыта???
От: prVovik Россия  
Дата: 19.10.04 14:18
Оценка: 1 (1)
Здравствуйте, Nick_, Вы писали:

N_>Все просто. Популярность завоевал не Си, а UNIX. Если бы UNIX был написан на другом языке, то сейчас был бы популярен другой язык.

Ну дак почему же UNIX не был написан на паскале?
... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re[2]: Где собака зарыта???
От: prVovik Россия  
Дата: 19.10.04 14:18
Оценка: 1 (1) +2
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Потому что: "Легче погасить в себе свет, чем рассеять тьму вокруг" "Ночной Дозор"


Хм, какое глубокомысленное замечание!
А если серьезно, то я знаю кучу народа (я в их числе), которые после перехода с турбо паскаля на борланд с++ поняли, что поступили правильно . При чем обратный переход — это жутко редкая экзотика. Интересно, почему?
... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re[8]: *
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.10.04 14:19
Оценка:
Здравствуйте, Kluev, Вы писали:

K>Здравствуйте, Сергей Губанов, Вы писали:


К>>>Ты уверен на все 200%?

К>>>А может быть просто грабли ещё не нашли, а лежат они в кустах?

СГ>>Уверен. В Обероне граблей нет. Если не верите, то можете поискать.


K>Гы. Тогда напишите нам на обероне тот кусок с NurbsCurve который я привел. А мы посмотрим и сравним.


+ ещё бы посмотреть на код, котоырй в результате сгенерится и сравнить, ну и бенчмарки само собой...
Re[8]: *
От: Kluev  
Дата: 19.10.04 14:22
Оценка:
Здравствуйте, Kluev, Вы писали:

K>Здравствуйте, Сергей Губанов, Вы писали:


К>>>Ты уверен на все 200%?

К>>>А может быть просто грабли ещё не нашли, а лежат они в кустах?

СГ>>Уверен. В Обероне граблей нет. Если не верите, то можете поискать.


K>Гы. Тогда напишите нам на обероне тот кусок с NurbsCurve который я привел. А мы посмотрим и сравним.


Да, в том куске Point<Dims,T> это

template <int Dims, class T>
    struct Point;

// точка на плоскости
template <class T>
    struct Point<2,T>
{
    T    x, y;
    //далеее поскипано
};

// в пространстве
template <class T>
    struct HPoint<3,T>
{
    T    x, y, z
    //далеее поскипано
};
Re[3]: Где собака зарыта???
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.10.04 14:22
Оценка:
Здравствуйте, prVovik, Вы писали:

V>Здравствуйте, Сергей Губанов, Вы писали:


СГ>>Потому что: "Легче погасить в себе свет, чем рассеять тьму вокруг" "Ночной Дозор"


V>Хм, какое глубокомысленное замечание!

V>А если серьезно, то я знаю кучу народа (я в их числе), которые после перехода с турбо паскаля на борланд с++ поняли, что поступили правильно . При чем обратный переход — это жутко редкая экзотика. Интересно, почему?

Ну и переход Хейлсберга в лагерь C# (тоже по идее близко к C++) много о чём говорит.
Re[9]: _
От: WolfHound  
Дата: 19.10.04 14:30
Оценка: +3
Здравствуйте, Сергей Губанов, Вы писали:

WH>>2)Я не вижу объективных причин благодаря которым знание EBNF помогает писать программы. Ибо это специфические знания необходимые при разработке компиляторов.

СГ>Все знания о том что такое EBNF умещаются на одной странице. Это элементарщина которую в школе надо давать, а Вы о ней говорите как о высокой науке.
Попробуй человеку который не умеет программировать объяснить что такое указатель. Поверь мне ты офигеешь. А ведь что может быть проще указателя? Уж не EBNF ли?

СГ>Вас не спросили!

А надо было!

СГ>Ну и как, создав их он понял как надо их грамотно создавать?

А ты уверен что Вирт понял?
СГ>Скольких студентов и аспирантов он научил тому как надо грамотно создавать языки и операционки?
А ты уверен что Вирт научил их создавать языки и операционки _грамотно_?

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

СГ>Сами поняли что сказали?

Сам то я понял. А ты меня упорно не понимаешь.

СГ>Правильно, надо повышать абстракцию.

Ага...
СГ>Вот Оберон ее и повышает.
В каком месте?
СГ>Например, еще со времен Модулы, в этом языке есть такая абстракция как "модуль" — это не только единица компиляции, но и динамически линкующаяся и загружаемая единица исполнения (в Си++ такой абстракции нет и не будет).
Ну насчет не будет это ты погорячился. К томуже я не вижу как это может повысить абстракцию.
СГ>Еще пример высокого уровня абстракции — "активный объект" (в Си++ такой абстракции нет и не будет).
А зачем оно надо?
СГ>А Вы только посмотрите сколько новых абстракций в Zonnon — Оберон для .NET. Одни DEFINITION чего стоят. А еще, совсем убойная для всех рептилоидов вещь, там, представьте себе, какой ужас, протокол обмена сообщениями между двумя активностями пишется прямо в EBNF, то есть тот кто не знает EBNF не сможет писать программы на языке Zonnon!
А тебе не кажется что это проблемы языка Zonnon!?
СГ>

СГ>11.3 Protocol EBNF
СГ>The definition of an activity can include a formal syntax specification of a communication protocol in EBNF as a modifier to an enumeration type which defines the alphabet of terminal tokens of the syntax. The name of an activity and its enumeration type constitute the activity’s signature. Note that in EBNF protocol specifications the communication of an item from the callee to the caller is prefixed by a ‘?’.

Вот смотрю я на этот пример и думаю на кой черт описывать протокол если его тутже приходится реализовывать ручками? Или ты хочешь сказать что компилятор проверит корректность реализации протокола?
Вот еслибы пример выглядел примерно так
definition Fighter;
    activity (* Syntax of the protocol, in this case it is recursive too *)
        { 
            fight       = { attack ( { defense attack } | escape | knock_out | fight ) }.
            knock_out   = KO
            escape      = RUNAWAY [ ?CHASE]
            attack      = ATTACK strike.
            defense     = DEFENSE strike.
            strike(part : Karate)   
                        = part := bodypart.
            strike(part : Karate, damage : integer)   
                        = part := bodypart damage := strength.
            bodypart : Karate
                        = LEG | NECK | HEAD.
            strength : integer
                        = integer. 
        }
        Karate   = (RUNAWAY, CHASE, KO, ATTACK, DEFENSE, LEG, NECK, HEAD);
end Fighter.

object Opponent implements Fighter;
    activity Karate implements Fighter.Karate;
    var 
        t   : object;
        hp  : integer;

    procedure knock_out;
    begin
        activity end
    end knock_out;

    procedure escape;
    begin
        if hp > 0 then 
            send Karate.CHASE 
        end;
        activity end
    end escape;

    procedure strike(part : Karate);
    begin
        hp := hp - 1
    end escape;

    procedure strike(part : Karate, damage : integer);
    begin
        hp := hp - damage
    end escape;

    begin (* Karate*)
        hp := 100;
        activity begin fight
    end Karate;
end Opponent.

object Challenger;
    import Opponent, Fighter;
    var 
        opp : Opponent; 
        f   : Fighter.Karate;
    begin
        opp := new Opponent; (* create opponent *) …
        f := new opp.Fighter.Karate; (* create dialog *)
        send Fighter.Karate.ATTACK => f; … (* fight according to the dialog protocol *)
        ... 
    
end Challenger.

Я бы сказал: Круто хотя всеравно не понятно на кой оно надо.

СГ>Спрашивается, а как может повысить уровень абстракции старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами?

Во превых что значит повышение абстракции? Это уменьшение колличества деталей. Так?
Вот например берем тотже STL там есть шаблон сортироваки std::sort (абстракция раз) которому нужны два итератора произвольного доступа (абстракция два) и опционально предикат сравнения (абстакция три).
По этим данным компилятор постороит максимально эффективный код сортировки. Причем в реализацию библиотеки можно внести все возможные оптимизации для конкретных типов и что гораздо важнее для типов обладающих некоторыми свойствами.
И это только цветочки. До чего можно дойти и как это сделать я тебе расказывать не буду ибо это потянет на книгу, а то и не на одну. И не надо ехидничать ибо это уже программирование программы.
... << RSDN@Home 1.1.4 rev. 185 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: *
От: prVovik Россия  
Дата: 19.10.04 14:30
Оценка: 1 (1) +1 :))) :)
Здравствуйте, Курилка, Вы писали:

К>А можно без пустого пафоса, а предметно?


А предметно уже все объяснили. Дело в том, что:

":=" круче, чем "="



... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re[3]: Где собака зарыта???
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 19.10.04 14:31
Оценка:
Здравствуйте, prVovik, Вы писали:

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


N_>>Все просто. Популярность завоевал не Си, а UNIX. Если бы UNIX был написан на другом языке, то сейчас был бы популярен другой язык.

V>Ну дак почему же UNIX не был написан на паскале?

Так ведь создатели языка Си и создатели UNIX — это одни и те же товарищи из Bell Labs, а именно Брайан Керниган, Кен Томпсон и Деннис Ричи (Страуструп тогда аспирантом там был). Они тогда были молодыми и горячими. Наворотили дел. Потом они повзрослели и осознали свои ошибки. От языка Си открестились. Вместо него создали обероноподобный язык Limbo и написали на нем, опять же, обероноподобную операционку Inferno. Но было уже поздно. Миру вполне хватало древнего UNIX, а более продвинутая Inferno на широкий рынок так и не пробилась.

http://www.itc.ua/article.phtml?ID=9367&amp;IDw=31&amp;pid=50
Re[10]: _
От: WolfHound  
Дата: 19.10.04 15:02
Оценка:
Здравствуйте, Kluev, Вы писали:

K>С++ с его тупыми шаблонами и анахронизмами

Это мои слова. И я действительно так считаю.
Если интересно можно поговорить на эту тему в отдельной ветке.
... << RSDN@Home 1.1.4 rev. 185 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: *
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 19.10.04 15:02
Оценка:
Здравствуйте, Kluev, Вы писали:

K>Здравствуйте, Сергей Губанов, Вы писали:


К>>>Ты уверен на все 200%?

К>>>А может быть просто грабли ещё не нашли, а лежат они в кустах?

СГ>>Уверен. В Обероне граблей нет. Если не верите, то можете поискать.


K>Гы. Тогда напишите нам на обероне тот кусок с NurbsCurve который я привел. А мы посмотрим и сравним.

...
public:
    void point( TPoint &out, T u )
    {
        TmpVector<T> N(p + 1);
        THPoint v, h;

        int span = knot_span( u );
        basis_functions( N, u, span );

        for( int i = 0; i <= p; ++i )    {
            v = Pw[span-p+i] * N[i];
            h = h + v;
        } 
        out = h.euclid();
    }



Поскольку шаблонов в обычном Обероне нет, то писанины будет больше. Надо будет расписать отдельно для 2D и отдельно для 3D.
TYPE
  NurbsCurve3D = RECORD
    p : INTEGER;
    Pw: PointVector3D;
  END;



PROCEDURE (IN Self: NurbsCurve3D) Point (OUT out: TPoint3D; u: REAL), NEW;
VAR N: ARRAY OF REAL; 
    h: THPoint3D;
    span: INTEGER;
BEGIN
  NEW(N, Self.p + 1);
  span := knot_span(u);
  basis_functions(N, u, span);  
  h.x := 0; h.y := 0; h.z := 0;
  FOR i := 0 TO Self.p DO
    h.x := h.x + N[i] * Self.Pw[span - Self.p + 1].x;
    h.y := h.y + N[i] * Self.Pw[span - Self.p + 1].y; 
    h.z := h.z + N[i] * Self.Pw[span - Self.p + 1].z
  END;
  out := h.euclid()
END Point;


И как Вы хотите это сравнивать?
Re[9]: *
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.10.04 15:09
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, Kluev, Вы писали:


...

СГ>Поскольку шаблонов в обычном Обероне нет, то писанины будет больше. Надо будет расписать отдельно для 2D и отдельно для 3D.


Ну дак о чём речь тогда?
Это и есть "крутость"???
Re[5]: *
От: FR  
Дата: 19.10.04 16:43
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, FR, Вы писали:


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


FR>>Объясни пожалуйста чем именно Оберон лучше C++.


СГ>Фрагмент из того самого текста, который обсуждается в этой ветке форума:

СГ>

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

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

А точно нет?
... << RSDN@Home 1.1.3 stable >>
Re[7]: *
От: FR  
Дата: 19.10.04 16:43
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, FR, Вы писали:


СГ>>>Своей целостностью.


FR>>Какие преимущества для разработчика это дает?


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


А вот мне кажется что ему придется мучатся выражая предметную область на более бедном языке.
... << RSDN@Home 1.1.3 stable >>
Re[2]: Где собака зарыта???
От: FR  
Дата: 19.10.04 16:43
Оценка: :))
Здравствуйте, Сергей Губанов, Вы писали:

FR>>>И может именно поэтому корявый и не логичный, но выразительный C++ стал таким массовым?


V>>А вот, кстати, ты поднял очень интересный вопрос. Почему же популярность завоевал, не паскаль, а именно такой ужасный и корявый С/С++, несмотря на то, что паскаль появился раньше ??? И почему именно на основе синтаксисв С/С++ сделали и Java и C#? Может быть товарищу Вурту следовало бы сначала разобраться с этими вопросами, прежде чем придумывать свой очередной идеальный язак программирования.


СГ>Потому что: "Легче погасить в себе свет, чем рассеять тьму вокруг" "Ночной Дозор"


А не религиозные аргументы будут ?
... << RSDN@Home 1.1.3 stable >>
Re[10]: _
От: Quintanar Россия  
Дата: 19.10.04 17:16
Оценка:
Здравствуйте, Kluev, Вы писали:

K>И вот получается что старый тупой старичок С++ опять всех опередил. На каком языке вы еще сможете написать это так же кратко, ясно, просто и понятно?


На Лиспе с помощью макросов, но общественность не поверит, что это ясно и просто.
Re[11]: _
От: prVovik Россия  
Дата: 19.10.04 18:21
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


K>>С++ с его тупыми шаблонами и анахронизмами

WH>Это мои слова. И я действительно так считаю.
WH>Если интересно можно поговорить на эту тему в отдельной ветке.
А вот, кстати, интересно.
... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re[16]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 19.10.04 18:47
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>Е-мое, "и эти люди запрещают мне ковыряться в носу?!"

K_O>И это все ради того, чтобы вместо Add писать +, опускать индексы у массивов и не писать явно оператор цикла?!

K_O>Моя крыша слегка съехала...

Вот для того, чтобы она не съезжала и перекрывают операторы.
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[9]: _
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 19.10.04 19:02
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Ну и как, создав их он понял как надо их грамотно создавать? Скольких студентов и аспирантов он научил тому как надо грамотно создавать языки и операционки? Кстати, Питер Мюллер (создатель Aos) был аспирантом у Вирта и Гуткнехта.



WH>>Короче ИмеюМнениеХренОспоришь:

WH>>Сейчас нужны языки которые позволяют как можно сильнее повышать абстракцию. И старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами справляется с этим на порядок лучше любой Виртовской поделки. А рассуждения типа = vs == это ламерство!

СГ>Правильно, надо повышать абстракцию. Вот Оберон ее и повышает. Например, еще со времен Модулы, в этом языке есть такая абстракция как "модуль" — это не только единица компиляции, но и динамически линкующаяся и загружаемая единица исполнения (в Си++ такой абстракции нет и не будет). Еще пример высокого уровня абстракции — "активный объект" (в Си++ такой абстракции нет и не будет). А Вы только посмотрите сколько новых абстракций в Zonnon — Оберон для .NET. Одни DEFINITION чего стоят. А еще, совсем убойная для всех рептилоидов вещь, там, представьте себе, какой ужас, протокол обмена сообщениями между двумя активностями пишется прямо в EBNF, то есть тот кто не знает EBNF не сможет писать программы на языке Zonnon!

СГ>

СГ>11.3 Protocol EBNF
СГ>The definition of an activity can include a formal syntax specification of a communication protocol in EBNF as a modifier to an enumeration type which defines the alphabet of terminal tokens of the syntax. The name of an activity and its enumeration type constitute the activity’s signature. Note that in EBNF protocol specifications the communication of an item from the callee to the caller is prefixed by a ‘?’.

СГ>
СГ>definition Fighter;
СГ>  activity (* Syntax of the protocol, in this case it is recursive too *)
СГ>    { fight    = { attack ( { defense attack } | RUNAWAY [ ?CHASE] | KO | fight ) }.
СГ>      attack   = ATTACK strike.
СГ>      defense  = DEFENSE strike.
СГ>      strike   = bodypart [ strength ].
СГ>      bodypart = LEG | NECK | HEAD.
СГ>      strength = integer. }
СГ>      Karate   = (RUNAWAY, CHASE, KO, ATTACK, DEFENSE, LEG, NECK, HEAD);
СГ>end Fighter.
СГ> ... [skipped] ...
СГ>


Хммм... а как насчёт полиморфизма элементов протокола? А что у нас по части создания шаблонов грамматик и их специализации?

СГ>Спрашивается, а как может повысить уровень абстракции старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами?


Увы и ах. Именно благодаря темплейтам, множественному наследованию и возможности перегрузки операторов можно создавать пусть не идеальные, но очень неплохо заточенные под конкретные задачи (т.е. — высокоабстрактные) реализации языков. Можно и BNF-описания залудить. А их потом записать в виде шаблона и агрегировать в рантайме.
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[11]: _
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 19.10.04 19:02
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

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


Д>>э.... DLL?


СГ>Что DLL? Вот именно, что "э....". В самом языке Си++ такой абстракции нет, а в Оберонах MODULE — есть еще со времен Модулы. Вот Вам и высокая абстракция!


Поганая это абстракция. Deployment-unit, чем по сути и является модуль, есть ни что иное, как совокупность интерфейса и схемы деплоймента. Физическая схема деплоймента может быть какой угодно: и статической либой и динамической. Это зависит от линковщика (а не от компилятора) и на этом можно кое во что играть. А запихивать всё в язык... Ну, был такой, PL/1 назывался. И где он сейчас?
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 19.10.04 19:28
Оценка:
Здравствуйте, Дарней, Вы писали:

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

Д>Лучше уж многопроходный компилятор, чем та порнография, которая существует сейчас в C++. Куча усилий уходит просто на то, чтобы уменьшить количество связей между файлами при компиляции. А уж скорость оной — это просто песня. Время полной компиляции проекта в сутки — это еще не предел Даже "заплатки" в виде предкомпилированных хэдеров не всегда помогают.

Ну а что тут такого? Как-никак — пересобирается полная программа, а не набор заплаток, собираемых в рантайме. Всё в порядке — чудес не бывает. Сборка делается либо в компайл-тайме, либо в рантайме. Но её же всё равно нужно сделать!
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[9]: *
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 19.10.04 19:28
Оценка: +3
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Поскольку шаблонов в обычном Обероне нет, то писанины будет больше. Надо будет расписать отдельно для 2D и отдельно для 3D.

[...]
СГ>И как Вы хотите это сравнивать?

Никак. Именно поэтому те, кто перешли на C++ крайне редко возвращаются к паскалю. Я — из их числа, между прочим.
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[7]: *
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 20.10.04 01:47
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

К>>Ты уверен на все 200%?

К>>А может быть просто грабли ещё не нашли, а лежат они в кустах?

СГ>Уверен. В Обероне граблей нет. Если не верите, то можете поискать.


Угу. Это не грабли. Это — рояли в кустах.
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[9]: *
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.10.04 03:30
Оценка: :))) :)))
Здравствуйте, prVovik, Вы писали:

V>

Ну, на самом деле это не все. Паскаль — неизмеримо круче плюсов потому, что
  1. := гораздо понятнее, чем =
  2. ^. гораздо понятнее, чем ->
  3. строковые константы ограничиваются одинарными, а не двойными кавычками (в ДВА раза меньше штрихов!)
  4. в If можно писать на одну пару скобок меньше
Хотя, конечно, главное — все-таки то, что преподавание языка, где присваивание выполняется при помощи "=" означает выставить себя посмешищем.
З.Ы. В самом популярном языке программирования для персоналок вообще оператор присваивания не отличается от оператора сравнения на равенство. Что не мешает миллионам людей осваивать его безо всяких Виртов.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: *
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.10.04 03:41
Оценка: 14 (1) +3
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Уверен. В Обероне граблей нет. Если не верите, то можете поискать.


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

Собственно, это-то и не нравится у Вирта. От него откровений ждали, а он "=" критикует. Ну не смешно ли?
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 20.10.04 05:10
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Ну а что тут такого? Как-никак — пересобирается полная программа, а не набор заплаток, собираемых в рантайме. Всё в порядке — чудес не бывает. Сборка делается либо в компайл-тайме, либо в рантайме. Но её же всё равно нужно сделать!


Проблема в том, что перед компиляцией любого файла в C++ сначала делается препроцессинг, и даже самый мелкий файл после включения в него всех хэдеров превращается в многомегабайтного монстра. Что самое поганое, парсинг каждого хэдера производится заново после включения его в каждый cpp-файл
Учитывая еще зависимости между хэдерами, все становится совсем плохо. (я знаю, что эти зависимости можно и нужно уменьшать — но на это уходит лишнее время, и это возможно не всегда).
В качестве пищи для размышлений советую сравнить компиляцию примерно одинаковых по сложности прог на VC++ и на C#. Разница по времени компиляции обычно на порядки, и совсем не в пользу C++
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: LaptevVV Россия  
Дата: 20.10.04 05:30
Оценка:
Здравствуйте, Дарней, Вы писали:

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

LVV>>Уже оказал. Не было б паскаля — сидели бы мы сейчас на Алголе-68!

Д>а как же K&R?

Транслятор С писали профессиональные программисты-системщики, а транслятор с паскаля написал СТУДЕНТ! Под руководством Вирта (и уверяю, вирт не написал ни строчки — сам такой руководитель, знаю).

LVV>>Блестящий язык, но как же сложно с него полного писать транслятор!


Д>Да уж.. хотя кажется мне, у С++ с этим всё намного хуже

Транслятор С++ — одно проходной, как и транслятор с паскаля. Хотя лично я сделал бы его двух проходным. Глядишь, и с темплейтами меньше заморочек было бы
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Где собака зарыта???
От: LaptevVV Россия  
Дата: 20.10.04 05:34
Оценка:
Здравствуйте, prVovik, Вы писали:

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


FR>>И может именно поэтому корявый и не логичный, но выразительный C++ стал таким массовым?


V>А вот, кстати, ты поднял очень интересный вопрос. Почему же популярность завоевал, не паскаль, а именно такой ужасный и корявый С/С++, несмотря на то, что паскаль появился раньше ??? И почему именно на основе синтаксисв С/С++ сделали и Java и C#? Может быть товарищу Вурту следовало бы сначала разобраться с этими вопросами, прежде чем придумывать свой очередной идеальный язак программирования.

Керниган написал об этом статью "Почему паскаль не является моим любимым языком". Но от себя добавлю — все же в свое время главной целью паскаля было обучение. И демонстрация того, что язык может быть простой, и транслятор с него может быть простой.
Отнюдь не профессиональное программирование.
А С — это профессиональный язык для профессионалов — так он и разрабатывался.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Где собака зарыта???
От: LaptevVV Россия  
Дата: 20.10.04 05:35
Оценка:
Здравствуйте, prVovik, Вы писали:

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


N_>>Все просто. Популярность завоевал не Си, а UNIX. Если бы UNIX был написан на другом языке, то сейчас был бы популярен другой язык.

V>Ну дак почему же UNIX не был написан на паскале?
А Windows, между прочим — была!!!!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[8]: *
От: LaptevVV Россия  
Дата: 20.10.04 05:42
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Собственно, это-то и не нравится у Вирта. От него откровений ждали, а он "=" критикует. Ну не смешно ли?

Это все потому. что он — преподаватель. А Керниган и Ричи с Томсоном — профессиональные прогроаммисты. которые (скорее всего) преподаванием занимались ОЧЕНЬ МАЛО
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Где собака зарыта???
От: Дарней Россия  
Дата: 20.10.04 06:06
Оценка: :)
Здравствуйте, LaptevVV, Вы писали:

LVV>А Windows, между прочим — была!!!!

LVV>

Неудивительно, что она такая кривая получилась :-D
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[2]: Где собака зарыта???
От: Дарней Россия  
Дата: 20.10.04 06:12
Оценка:
Здравствуйте, LaptevVV, Вы писали:

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


Простота хуже воровства (С)

На самом деле это конечно шутка, но предел упрощению тоже должен быть.
И кстати говоря, упорный борец за простоту и понятность Вирт придумал такую замечательную вещь, как with. И не стыдно ему было других критиковать после этого?
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[5]: Где собака зарыта???
От: Евгений Коробко  
Дата: 20.10.04 06:16
Оценка:
А ты не сталкивался, когда какой-нибудь GTK с гномом чуть в версиях разошлись и у пары функций изменился набор параметров. А голый С это дело не проверяет, и всё падает в рантайме. Зашибись, как некоряво
Евгений Коробко
Re[3]: Где собака зарыта???
От: Евгений Коробко  
Дата: 20.10.04 06:26
Оценка: :)))
Д>На самом деле это конечно шутка, но предел упрощению тоже должен быть.
Д>И кстати говоря, упорный борец за простоту и понятность Вирт придумал такую замечательную вещь, как with. И не стыдно ему было других критиковать после этого?

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

with conn.execute('select * from table') do
while not eof do
begin
next;
end

А если функция должна вернуть большой объём данных? На С++ нужно объявлять переменную (которая либо останется неинициализированной, либо вызовется как правило не нужны в данном месте конструктор), потом передавать её по ссылке.

string s;
getString(&s);
s.substr(...);

Или

with GetString do
substr(...);
Евгений Коробко
Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 20.10.04 06:43
Оценка: :))) :)
ГВ>>...Как-никак — пересобирается полная программа...

Д>... перед компиляцией любого файла в C++ сначала делается препроцессинг...


А еще тормоза компиляции происходят из-за того что в Си/Си++ можно влюбом месте программы написать:
{
  extern void XerZnaetKakayaFunkciyaFigZnaetGdeOnaOpredelena();
  XerZnaetKakayaFunkciyaFigZnaetGdeOnaOpredelena();
}

(Кстати, по смыслу это очень близко к инструкции goto) Компилятор замучается бегать по всем файлам проекта и искать где же определена эта функция (причем ему еще надо убедиться в том что эта функция определена не более одного раза). А в модульных языках программирования компилятор с самого начала знает из какого модуля какая функция вызывается и не тратит время на ее поиск.
MODULE MyModule;

IMPORT L := StdLog;

BEGIN
  L.String("Привет!"); (* Компилятору сразу видно что вызывается процедура String() из модуля L := StdLog *)
END MyModule.
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 20.10.04 06:47
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV> уверяю, вирт не написал ни строчки — сам такой руководитель, знаю


Вот за себя и отвечайте.

Кстати, мог ли человек не написавший ни строчки написать вот это:
http://www.uni-vologda.ac.ru/oberon/infoart/proj0.htm
Re[2]: Где собака зарыта???
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 20.10.04 07:06
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Керниган написал об этом статью "Почему паскаль не является моим любимым языком".


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


Вот некоторая часть дерева эволюции оберонов:
Алгол -> Паскаль* -> Модула -> Модула-2 -> Оберон -> Оберон-2 -> Component Pascal
                                             |
                                             +-----> Active Oberon

*Статья Кернигана была посвящена критике языка Паскаль, того который сразу после Алгол.

Более подробное генеалогическое дерево оберонов представлено сдесь: http://www.oberon.ethz.ch/genealogy.html
Re[17]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 20.10.04 07:10
Оценка:
Здравствуйте, vdimas, Вы писали:

K_O>>Е-мое, "и эти люди запрещают мне ковыряться в носу?!"

K_O>>И это все ради того, чтобы вместо Add писать +, опускать индексы у массивов и не писать явно оператор цикла?!

V>Есть такое правило проектирования — интерфейс важнее реализации.

V>Реализация однократна, а интерфейс может быть использован несчетное количество раз.

Иди ты! А я ж и не знал! Но, мил человек, есть и еще одно правило: интерфейс должен быть недвусмысленным и самодостаточным.
Сие означает, что, глядя на интерфейс, я должен абсолютно четко представлять, что и как данная функция делает; если она использует в интерфейсе структуры данных — то для чего они нужны и как внутри используются. И чтобы при этом никаких side-эффектов не было.

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

И коль уж воскресили древнюю тему, то повторюсь: мне не нравится, что в вышеприведенном примере операции над элементами массива выглядят точно также как и над одиночными переменными. Более того, то выражение, выглядящее как обычное математическое выражение над несколькими переменными на самом деле мало того, что работает с эелементами массивов, так еще и внутри себя содержит цикл.
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Dervish Россия http://www.dervish.ru
Дата: 20.10.04 07:24
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>А еще тормоза компиляции происходят из-за того что в Си/Си++ можно влюбом месте программы написать:

СГ>
СГ>{
СГ>  extern void XerZnaetKakayaFunkciyaFigZnaetGdeOnaOpredelena();
СГ>  XerZnaetKakayaFunkciyaFigZnaetGdeOnaOpredelena();
СГ>}
СГ>

СГ>(Кстати, по смыслу это очень близко к инструкции goto) Компилятор замучается бегать по всем файлам проекта и искать где же определена эта функция (причем ему еще надо убедиться в том что эта функция определена не более одного раза).

Сергей, это вы что-то преувеличили... Компилятору в данном случае нет необходимости искать определение этой функции, ему вообще ничего не надо искать. Функция объявлена, сигнатура известна, компилятор просто вставит в объектный модуль ссылку на эту сигнатуру, а искать её будет уже компоновщик (линкер). И, кстати, поскольку компоновщику нет нужды делать синтаксический анализ, поскольку компоновщик получает уже готовые сигнатуры "на блюдечке", то связывание функций не будет трудоёмким.

Так что, извините, никак не могу согласиться с вами в этом вопросе.
... << RSDN@Home 1.1.4 beta 3 rev. 194>>
Re[9]: *
От: WolfHound  
Дата: 20.10.04 07:27
Оценка: 3 (1) +2
Здравствуйте, LaptevVV, Вы писали:

S>>Собственно, это-то и не нравится у Вирта. От него откровений ждали, а он "=" критикует. Ну не смешно ли?

LVV>Это все потому. что он — преподаватель. А Керниган и Ричи с Томсоном — профессиональные прогроаммисты. которые (скорее всего) преподаванием занимались ОЧЕНЬ МАЛО
Так получилось что я тоже немного попредовал... дык вот с = у людей ВОБЩЕ НИКАКИХ ПРОБЛЕМ НЕ ВОЗНИКЛО. Тоесть абсолютно никаких. Все это надуманый бред!
А приципился Вирт к этому по тому что не может придумать нормальных аргументов проив С/С++. Теоретик блин. И еще других учить пытается.

ЗЫ Прочитай "Эффективное программирование на С++" Кёниг и Му... Оказывается и С++ можно преподовать не сложнее паскаля. Ну и кому после этого нужен Вирт со своими выкидонами?
... << RSDN@Home 1.1.4 rev. 185 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: *
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 20.10.04 07:35
Оценка: -1
Здравствуйте, Sinclair, Вы писали:

S>Ну, на самом деле это не все. Паскаль — неизмеримо круче плюсов потому, что

S>

    S>
  1. := гораздо понятнее, чем =
    S>
  2. ^. гораздо понятнее, чем ->
    S>
  3. строковые константы ограничиваются одинарными, а не двойными кавычками (в ДВА раза меньше штрихов!)
    S>
  4. в If можно писать на одну пару скобок меньше
    S>
S>Хотя, конечно, главное — все-таки то, что преподавание языка, где присваивание выполняется при помощи "=" означает выставить себя посмешищем.
S>З.Ы. В самом популярном языке программирования для персоналок вообще оператор присваивания не отличается от оператора сравнения на равенство. Что не мешает миллионам людей осваивать его безо всяких Виртов.

Вы под словом Паскаль понимаете тот язык программирования который был сразу после Алгола. С тех пор много воды утекло. Вот некоторая часть дерева эволюции оберонов:
Алгол -> Паскаль* -> Модула -> Модула-2 -> Оберон -> Оберон-2 -> Component Pascal
                                                |
                                                +-----> Active Oberon

Звездочкой отмечен тот Паскаль о котором говорите Вы.

Ну а теперь развеем Ваше невежество.

1)
S>
  • ^. гораздо понятнее, чем ->
    В оберонах обращение к полям записей через указатель на запись не требует указывания знака "^" можно просто писать p.x := 0; а не p^.x := 0;

    2)
    S>
  • строковые константы ограничиваются одинарными, а не двойными кавычками (в ДВА раза меньше штрихов!)

    Да будет Вам известно, в оберонах строковые константы ограничиваются именно двойными кавычками!
    VAR str: ARRAY 80 OF CHAR;
    BEGIN
      str := "Привет!";


    3)
    S>
  • в If можно писать на одну пару скобок меньше

    Да будет Вам известно, что в оберонах используется конструкция IF ... THEN ... END — с явным END в конце (без BEGIN). Такая конструкция, в отличие от конструкции if then begin end или аналогичной ей if(){ } лишена неоднозначности возникающей при нескольких вложенных друг в друга if-ов и else.

    Все структурные операторы оберона лишены каких бы то ни было неоднозначностей:

    IF . THEN ............................ END
    IF . THEN ...ELSE ... ELSIF . THEN ... END
    WHILE . DO ........................... END
    LOOP ................................. END
    REPEAT ............................. UNTIL
    FOR . TO . DO ........................ END
    FOR . TO . BY . DO ................... END
    CASE . OF v1: ... | v2: ..... ELSE ... END
    WITH v: T1 DO ... | v: T2.... ELSE ....END


    4)
    S>
  • := гораздо понятнее, чем =
    Оператор "=" обозначает математическую операцию сравнения, если x = y, то y = x.

    Кстати, для выхода из процедуры в оберонах используется инструкция RETURN.


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

    Подробнее о Кернигане там: http://www.rsdn.ru/Forum/Message.aspx?mid=859711&amp;only=1
    Автор: Сергей Губанов
    Дата: 20.10.04
  • Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Dervish Россия http://www.dervish.ru
    Дата: 20.10.04 07:38
    Оценка: +1
    Здравствуйте, LaptevVV, Вы писали:

    LVV>>>Уже оказал. Не было б паскаля — сидели бы мы сейчас на Алголе-68!


    Д>>а как же K&R?


    LVV>Транслятор С писали профессиональные программисты-системщики, а транслятор с паскаля написал СТУДЕНТ!


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

    Кроме того, вопрос Дарнея касался немного другого. Если я его правильно понял, он засомневался, что в отсутствие Паскаля мы работали на Алголе-68 и предположил, что мы все работали бы на С (С++).

    LVV>Под руководством Вирта (и уверяю, вирт не написал ни строчки — сам такой руководитель, знаю).


    А оно вам нужно, писать эти строчки? У вас, как я понимаю, другая задача. И (моё личное имхо), таких хороших преподавателей как вы, вообще ещё поискать нужно. Сам факт вашего постоянного участия в RSDN вызывает уважение.
    ... << RSDN@Home 1.1.4 beta 3 rev. 194>>
    Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Dervish Россия http://www.dervish.ru
    Дата: 20.10.04 07:38
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    LVV>> уверяю, вирт не написал ни строчки — сам такой руководитель, знаю


    СГ>Вот за себя и отвечайте.


    Грубовато.
    ... << RSDN@Home 1.1.4 beta 3 rev. 194>>
    Re[9]: *
    От: Kluev  
    Дата: 20.10.04 07:44
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Поскольку шаблонов в обычном Обероне нет, то писанины будет больше. Надо будет расписать отдельно для 2D и отдельно для 3D.

    СГ>
    СГ>TYPE
    СГ>  NurbsCurve3D = RECORD
    СГ>    p : INTEGER;
    СГ>    Pw: PointVector3D;
    СГ>  END;
    
    
    
    СГ>PROCEDURE (IN Self: NurbsCurve3D) Point (OUT out: TPoint3D; u: REAL), NEW;
    СГ>VAR N: ARRAY OF REAL; 
    СГ>    h: THPoint3D;
    СГ>    span: INTEGER;
    СГ>BEGIN
    СГ>  NEW(N, Self.p + 1);
    СГ>  span := knot_span(u);
    СГ>  basis_functions(N, u, span);  
    СГ>  h.x := 0; h.y := 0; h.z := 0;
    СГ>  FOR i := 0 TO Self.p DO
    СГ>    h.x := h.x + N[i] * Self.Pw[span - Self.p + 1].x;
    СГ>    h.y := h.y + N[i] * Self.Pw[span - Self.p + 1].y; 
    СГ>    h.z := h.z + N[i] * Self.Pw[span - Self.p + 1].z
    СГ>  END;
    СГ>  out := h.euclid()
    СГ>END Point;
    СГ>


    СГ>И как Вы хотите это сравнивать?


    Очень просто. Получается что для вполне реальной задачи старый добрый С++ подошел очень хорошо: все строго типизированно, лаконично, кратко, ясно и понятно. А в модном обероне мне пришлось бы заюзать копи-псате и потом еще два раза отлаживать два разных класса. Между прочим недецких по обьему кода. А на плюсах получилось это делается по принципу выстрелил и забыл
    Re[10]: _
    От: _Obelisk_ Россия http://www.ibm.com
    Дата: 20.10.04 07:46
    Оценка: 19 (2)
    Здравствуйте, WolfHound, Вы писали:

    WH>Здравствуйте, Сергей Губанов, Вы писали:


    WH> Попробуй человеку который не умеет программировать объяснить что такое указатель. Поверь мне ты офигеешь. А ведь что может быть проще указателя? Уж не EBNF ли?


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



    Душа обязана трудиться! (с) Н.Заболоцкий.
    Re[3]: А Вы хоть знаете что такое WITH?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.10.04 07:48
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>На самом деле это конечно шутка, но предел упрощению тоже должен быть.

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

    А Вы хоть знаете что такое оператор WITH? Или это Вы взяли with из того паскаля, который был сразу после Алгола?

    На всякий случай напишу что такое оператор WITH. В оберонах WITH — это оператор конкретизации типа.
    TYPE
      Base = EXTENSIBLE RECORD
        ...
      END;
    
      T1 = RECORD (Base)
        ...
      END;
    
      T2 = RECORD (Base)
        ...
      END;
    
    PROCEDURE MyProc(VAR x: Base);
    BEGIN
      WITH x: T1 DO S1 | x: T2 DO S2 ELSE S3 END
    END MyProc;


    S1 — последовательность действий при которых x имеет тип T1
    S2 — последовательность действий при которых x имеет тип T2
    S3 — последовательность действий при которых динамический тип x не установлен.

    Смысл: Если динамический тип полиморфной переменной x оказался T1, то выполняется S1 внутри которой x рассматривается как переменная типа T1; в противном случае если динамический тип полиморфной переменной x оказался T2, то выполняется S2 внутри которой x рассматривается как переменная типа T2; в противном случае выполняется S3.

    TYPE
      Base = EXTENSIBLE RECORD END;
    
      T1 = RECORD (Base)
        Str: ARRAY 80 OF CHAR;
      END;
    
      T2 = RECORD (Base)
        Value: INTEGER;
      END;
    
    PROCEDURE MyProc(VAR x: Base);
    BEGIN
      WITH x: T1 DO StdLog.String(x.Str) | x: T2 DO StdLog.Int(x.Value) ELSE StdLog.String("Не известный тип!") END
    END MyProc;
    Re[8]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.10.04 07:50
    Оценка: -1
    Здравствуйте, FR, Вы писали:

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


    Обероны являются достаточными языками. Весь необходимый для работы арсенал средств в них присутсвует. Они не бедные, а минимально достаточные.
    Re[4]: А Вы хоть знаете что такое WITH?
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 20.10.04 07:52
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Д>>На самом деле это конечно шутка, но предел упрощению тоже должен быть.

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

    СГ>А Вы хоть знаете что такое оператор WITH? Или это Вы взяли with из того паскаля, который был сразу после Алгола?


    <skipped/>

    Ну прикольное ключ. слово (разве это оператор???), но ты давай нормальный пример, где бы оно было полезно, логично и "делало" бы полиморфизм.
    Тогда можешь заслужить аплодисменты, а так пока — пустой трёп, извиняюсь за выражения...
    Re[9]: *
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 20.10.04 07:54
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, FR, Вы писали:


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


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


    Для чего?
    Сергей, заканчивай мысли, чтобы логика была, а то получаются только пустые слова, не более.
    Re[10]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.10.04 07:58
    Оценка: +1
    Здравствуйте, Dervish, Вы писали:

    D>Сергей, это вы что-то преувеличили... Компилятору в данном случае нет необходимости искать определение этой функции, ему вообще ничего не надо искать. Функция объявлена, сигнатура известна, компилятор просто вставит в объектный модуль ссылку на эту сигнатуру, а искать её будет уже компоновщик (линкер). И, кстати, поскольку компоновщику нет нужды делать синтаксический анализ, поскольку компоновщик получает уже готовые сигнатуры "на блюдечке", то связывание функций не будет трудоёмким.


    Ну, извиняюсь, употребил слово "компилятор" имея ввиду весь механизм который берет кучу исходных файлов и выдает готовый экзешник. Конечно, это тормоза линковки, которые добавляют свое лишнее время ожидания получения готового экзешника, а в модульных языках этой добавки нет.
    Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Kh_Oleg  
    Дата: 20.10.04 07:58
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    LVV>> уверяю, вирт не написал ни строчки — сам такой руководитель, знаю


    Неправда ваша: Michael Franz, Oberon &mdash; The Overlooked Jewel, раздел 2.

    Особо хочу обратить внимание на место, где Франц рассказывает о решении Вирта заменить двоичное дерево поиска линейным списком и чем он это обосновал. Вот на каких примерах надо учить сегодняшних студентов!
    Re[18]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: vdimas Россия  
    Дата: 20.10.04 08:00
    Оценка: +1
    Здравствуйте, Kh_Oleg, Вы писали:

    K_O>И коль уж воскресили древнюю тему, то повторюсь: мне не нравится, что в вышеприведенном примере операции над элементами массива выглядят точно также как и над одиночными переменными. Более того, то выражение, выглядящее как обычное математическое выражение над несколькими переменными на самом деле мало того, что работает с эелементами массивов, так еще и внутри себя содержит цикл.


    Знаешь, посылать друг-друга не вежливо и не профессионально, но не могу удержаться, чтобы не послать тебя посмотреть на MatLab, на признанного лидера среди математических инструментов. Там операции над векторами и матрицами именно так и записываются, в обычном виде, почти как профессором на доске на лекции по вышке.

    Всем это кажется удобным, хотя твое мнение, очевидно, иное.
    Re[10]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.10.04 08:08
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Для чего?

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

    Для написания программ общего назначения, разумеется. Самый первый Оберон-1 можно рассматривать как кросплатформенный крос-архитектурный объектно ориентированный ассемблер на базе которого можно создавать новые расширения языка более удобные для той или иной предметной области.
    Re[11]: *
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 20.10.04 08:12
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Курилка, Вы писали:


    К>>Для чего?

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

    СГ>Для написания программ общего назначения, разумеется. Самый первый Оберон-1 можно рассматривать как кросплатформенный крос-архитектурный объектно ориентированный ассемблер на базе которого можно создавать новые расширения языка более удобные для той или иной предметной области.


    Ну коли они достаточные, то скажи тогда по твоему примеру — как на нём реализуется функциональность аналогичная шаблонам C++?
    Вот это уже покажет какую-то "достаточность" (хотя и не докажет), а простыми заявлениями и я кидаться могу, факты важнее, имхо.
    Re[11]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Dervish Россия http://www.dervish.ru
    Дата: 20.10.04 08:18
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Сергей, поправка принимается, но мне хотелось бы отметить ещё два момента:

    1. Линковка не создаёт тормозов. Реально. Конечно, это зависит от проекта к проекту, но по моим субъективным ощущениям вряд ли линковка будет занимать более 10% от общего времени компиляции проекта. Это довольно быстрая и не накладная процедура.

    2. В любом случае линковка выполняется всего один раз. Её не нужно делать всякий раз при запуске программы. А если один раз, то время, затраченное на ликовку вообще становится несущественным (в разумных пределах). Скажем, лично меня не напрягут лишние 5 секунд, если я знаю, что это нужно сделать всего один раз.

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

    На самом деле, в С++ есть понятие namespace, которое позволяет точно так же разбивать названия функций на группы. Да и для функций-членов класса, если угодно в сигнатуре учитывается название класса.

    Так что в этом вопросе "модульные" языки не имеют никакого преимущества.
    ... << RSDN@Home 1.1.4 beta 3 rev. 194>>
    Re[19]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Kh_Oleg  
    Дата: 20.10.04 08:22
    Оценка:
    Здравствуйте, vdimas, Вы писали:

    K_O>>И коль уж воскресили древнюю тему, то повторюсь: мне не нравится, что в вышеприведенном примере операции над элементами массива выглядят точно также как и над одиночными переменными. Более того, то выражение, выглядящее как обычное математическое выражение над несколькими переменными на самом деле мало того, что работает с эелементами массивов, так еще и внутри себя содержит цикл.


    V>Знаешь, посылать друг-друга не вежливо и не профессионально, но не могу удержаться, чтобы не послать тебя посмотреть на MatLab, на признанного лидера среди математических инструментов. Там операции над векторами и матрицами именно так и записываются, в обычном виде, почти как профессором на доске на лекции по вышке.


    V>Всем это кажется удобным, хотя твое мнение, очевидно, иное.


    Я давно не пользовался MathLab, поэтому могу ошибаться, однако, насколько я помню данный продукт является специализированной системой для обработки математических выражений: взятие интегралов в аналитическом виде, решение огромных СЛАУ, решение дифференциальных уравнений больших порядков, вычисление пределов и проч., т.е. то, что математик (физик, химик, ученый или инженер другой специальности) вычислит и сам на бумажке, но у него на это уйдет много времени. Цель данного продукта — сэкономить время на решении трудоемких математических задач. Отсюда — иные средства, иной язык более удобный для математика, нежели для программиста, иные особенности. Математику достаточно знать, что вот это — матрица, с такими-то значениями, и требуемая операция над ней должна быть выполнена за относительно приемлемое время. А для ряда задач время выполнения вообще роли не играет — лишь бы посчиталось.

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

    Так что твой пример неудачный, с языками программирования общего назначения имеет мало общего.
    Re[5]: А Вы хоть знаете что такое WITH?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.10.04 08:22
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>но ты давай нормальный пример


    WITH используется в обработчиках сообщений. Пусть тип View — потомок от базового типа у которого есть (виртуальный) абстрактный метод HandleMsg (VAR msg: Message), где Message — базовый тип сообщений. Тогда реализация этого метода может быть такой:
    PROCEDURE (v: View) HandleMsg (VAR msg: Message);
    BEGIN
      WITH 
        msg: SomeMsg    DO ... ля-ля-ля ... |
        msg: AnotherMsg DO ... трали-вали...|
        ELSE (* игнорирование всех остальных сообщений *) 
      END;
    END HandleMsg;

    Где типы SomeMsg и AnotherMsg есть расширения (потомки) типа Message.
    Re[12]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.10.04 08:31
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Ну коли они достаточные, то скажи тогда по твоему примеру — как на нём реализуется функциональность аналогичная шаблонам C++?

    К>Вот это уже покажет какую-то "достаточность" (хотя и не докажет), а простыми заявлениями и я кидаться могу, факты важнее, имхо.

    Ну, знаете...., перефразируя фразу Клюева об абстракциях, скажу что шаблоны ради шаблонов нам не нужны. Шаблоны не добавляют программе новых возможностей. Во время исполнения программы никаких шаблонов нет. Шаблоны позволяют меньше ручками по клавиатуре долбить.
    Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Kh_Oleg  
    Дата: 20.10.04 08:34
    Оценка:
    Здравствуйте, Dervish, Вы писали:

      D>
    1. Линковка не создаёт тормозов. Реально. Конечно, это зависит от проекта к проекту, но по моим субъективным ощущениям вряд ли линковка будет занимать более 10% от общего времени компиляции проекта. Это довольно быстрая и не накладная процедура.

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

    О, как вы неправы, создает и еще как! Для больших С++ проектов после появления IncrediBuilda это — самый больной вопрос. Линковка в течении 40 минут на современном компе — это далеко не фантастика. Более того, это один из главных тормозов в разработке сложных систем. Проверено на собственной шкуре.

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


    Нет, в модульных языках есть одно существенное отличие — информация о типах данного модуля содержится в скомпилированных объектных файлах. Эта информация доступна компилятору при компиляции другого модуля, который содержит секцию импорта из другого модуля. В результате — каждая строка в исходном тексте программы обрабатывается компилятором ровно один раз.
    А теперь вопрос: сколько раз при компиляции большого С++ проекта компилятор обрабатывает, скажем, файл stdio.h?

    D>На самом деле, в С++ есть понятие namespace, которое позволяет точно так же разбивать названия функций на группы. Да и для функций-членов класса, если угодно в сигнатуре учитывается название класса.


    Namespace решает только проблему конфликтов имен, к организации процесса компиляции он отношения не имеет.
    Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Дарней Россия  
    Дата: 20.10.04 08:37
    Оценка:
    Здравствуйте, Dervish, Вы писали:

    D>Кроме того, вопрос Дарнея касался немного другого. Если я его правильно понял, он засомневался, что в отсутствие Паскаля мы работали на Алголе-68 и предположил, что мы все работали бы на С (С++).


    Я говорил именно об этом. Роль паскаля в современной индустрии близка к нулю, так что его отстутствие не повлияло бы практически ни на что. Может быть только, еще больше склонило бы чашу весов в сторону C/C++
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[4]: А Вы хоть знаете что такое WITH?
    От: Дарней Россия  
    Дата: 20.10.04 08:38
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А Вы хоть знаете что такое оператор WITH? Или это Вы взяли with из того паскаля, который был сразу после Алгола?


    из того самого паскаля, который использует на порядок большее количество людей, чем Оберон — из Object Pascal AKA Delphi.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Дарней Россия  
    Дата: 20.10.04 08:40
    Оценка: +3
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А еще тормоза компиляции происходят из-за того что в Си/Си++ можно влюбом месте программы написать:

    СГ>
    СГ>{
    СГ>  extern void XerZnaetKakayaFunkciyaFigZnaetGdeOnaOpredelena();
    СГ>  XerZnaetKakayaFunkciyaFigZnaetGdeOnaOpredelena();
    СГ>}
    СГ>

    СГ>(Кстати, по смыслу это очень близко к инструкции goto) Компилятор замучается бегать по всем файлам проекта и искать где же определена эта функция (причем ему еще надо убедиться в том что эта функция определена не более одного раза). А в модульных языках программирования компилятор с самого начала знает из какого модуля какая функция вызывается и не тратит время на ее поиск.

    ну это — просто хит. Сразу выдает глубочайшие познания о принципах работы компиляторов вообще и компилятора С++ в частности
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Kluev  
    Дата: 20.10.04 08:45
    Оценка: 1 (1)
    Здравствуйте, Kh_Oleg, Вы писали:

    K_O>О, как вы неправы, создает и еще как! Для больших С++ проектов после появления IncrediBuilda это — самый больной вопрос. Линковка в течении 40 минут на современном компе — это далеко не фантастика. Более того, это один из главных тормозов в разработке сложных систем. Проверено на собственной шкуре.


    Да, механизм компиляции в С++ устарел до безобразия. С этим никто не спорит.
    Кстати а что мешает в таком крупном проекте заюзать dll?
    Re[13]: *
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 20.10.04 08:46
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Курилка, Вы писали:


    К>>Ну коли они достаточные, то скажи тогда по твоему примеру — как на нём реализуется функциональность аналогичная шаблонам C++?

    К>>Вот это уже покажет какую-то "достаточность" (хотя и не докажет), а простыми заявлениями и я кидаться могу, факты важнее, имхо.

    СГ>Ну, знаете...., перефразируя фразу Клюева об абстракциях, скажу что шаблоны ради шаблонов нам не нужны. Шаблоны не добавляют программе новых возможностей. Во время исполнения программы никаких шаблонов нет. Шаблоны позволяют меньше ручками по клавиатуре долбить.


    Не соглашусь, тут не есть абстракция только ради абстракции.
    Тут есть полиморфизм повыше обычного ООПшного, т.е. полиморфизм типов очень близкий к функциональному программированию, т.е. вот реализуй полиморфную для любых типов ф-цию swap?
    В STL она есть, на любом функциональном языке или есть, или реализуется очень элементарно.
    Покажи как это реализуется на обероне?
    Re[11]: _
    От: WolfHound  
    Дата: 20.10.04 08:48
    Оценка:
    Здравствуйте, _Obelisk_, Вы писали:

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

    Нет ты всетки попробуй.
    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[4]: А Вы хоть знаете что такое WITH?
    От: WolfHound  
    Дата: 20.10.04 08:48
    Оценка: +4
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А Вы хоть знаете что такое оператор WITH? Или это Вы взяли with из того паскаля, который был сразу после Алгола?

    Да-да тот самый маразм...
    СГ>На всякий случай напишу что такое оператор WITH. В оберонах WITH — это оператор конкретизации типа.
    А ну значит не все так плохо... хоть что-то понял...

    СГ>Смысл: Если динамический тип полиморфной переменной x оказался T1, то выполняется S1 внутри которой x рассматривается как переменная типа T1; в противном случае если динамический тип полиморфной переменной x оказался T2, то выполняется S2 внутри которой x рассматривается как переменная типа T2; в противном случае выполняется S3.

    И зачем ради этого вводить специальную конструкцию в язык? Это что так часто нужно? Вот в С++ есть dynamic_cast и его хватает на все случаи жизни. Да и нужен он очень редко. Ибо виртуальный функции рулят.
    Вобще говоря знать динамический тип объекта нужно на столько редко что введение в язык конструкции которая позволяет проверить объект на принадлежность к нескольким типам заставляет задуматься очень не хорошими мыслями об авторе этого языка...

    ЗЫ Ловкость рук и...
    #define with(dest, src, type)if(type* dest = dynamic_cast<type*>(src))
    void MyProc(base* p)
    {
        with(x, p, T1)
            std::cout << x.Str << std::endl;
        else with(x, p, T2)
            std::cout << x.Value << std::endl;
        else 
            std::cout << "Че за хрень?" << std::endl;
    }

    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[11]: *
    От: WolfHound  
    Дата: 20.10.04 08:48
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Для написания программ общего назначения, разумеется.

    Для этого достаточно машины Тьюринга.
    СГ>Самый первый Оберон-1 можно рассматривать как кросплатформенный крос-архитектурный объектно ориентированный ассемблер на базе которого можно создавать новые расширения языка более удобные для той или иной предметной области.
    Ну С++ для этих целей подходит по крайней мере не хуже. А если учесть шаблоны то обероны и рядом не валялись.
    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Dervish Россия http://www.dervish.ru
    Дата: 20.10.04 08:49
    Оценка:
    Здравствуйте, Kh_Oleg, Вы писали:

    K_O>О, как вы неправы, создает и еще как! Для больших С++ проектов после появления IncrediBuilda это — самый больной вопрос. Линковка в течении 40 минут на современном компе — это далеко не фантастика. Более того, это один из главных тормозов в разработке сложных систем. Проверено на собственной шкуре.


    Ну хорошо, давайте уточним, а что такое "большой проект"? Это сколько строк кода? И на какой машине делается сборка?

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


    K_O>Нет, в модульных языках есть одно существенное отличие — информация о типах данного модуля содержится в скомпилированных объектных файлах. Эта информация доступна компилятору при компиляции другого модуля, который содержит секцию импорта из другого модуля. В результате — каждая строка в исходном тексте программы обрабатывается компилятором ровно один раз.

    K_O>А теперь вопрос: сколько раз при компиляции большого С++ проекта компилятор обрабатывает, скажем, файл stdio.h?

    Не пробовали использовать precompiled headers? Один раз. Всего один раз.

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

    СГ>А еще тормоза компиляции происходят из-за того что в Си/Си++ можно влюбом месте программы написать:

    СГ>
    СГ>{
    СГ>  extern void XerZnaetKakayaFunkciyaFigZnaetGdeOnaOpredelena();
    СГ>  XerZnaetKakayaFunkciyaFigZnaetGdeOnaOpredelena();
    СГ>}
    СГ>


    Что тут нужно искать в объектных файлах кроме сигнатуры функции? Зачем в этом случае информация о типах?
    ... << RSDN@Home 1.1.4 beta 3 rev. 194>>
    Re[5]: А Вы хоть знаете что такое WITH?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.10.04 08:49
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>из того самого паскаля, который использует на порядок большее количество людей, чем Оберон — из Object Pascal AKA Delphi.


    А к Вирту тогда какие претензии? Вирт к Object Pascal-ю отношения не имеет.

    Object Pascal-евский with
    with TMyObj.Create() do begin 
      DoSmth;
      Free;
    end;


    Виртовский WITH:
    WITH
      msg: SomeMsg    DO .... |
      msg: AnotherMsg DO ....
      ELSE ..
    END;

    Они разные не только по смыслу, но и по написанию всей конструкции.
    Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Dervish Россия http://www.dervish.ru
    Дата: 20.10.04 08:53
    Оценка:
    Здравствуйте, Дарней, Вы писали:

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


    Д>Я говорил именно об этом. Роль паскаля в современной индустрии близка к нулю, так что его отстутствие не повлияло бы практически ни на что. Может быть только, еще больше склонило бы чашу весов в сторону C/C++


    Насчёт роли Паскаля мне кажется неоднозначно. Конечно, я не могу судить о больших, промышленных комплексах, но мне кажется, что если посмотреть по download-серверам, то там очень много продуктов, написанных на Дельфи. Возможно, что больше, чем на С++.

    Повторюсь, я не знаю и не могу знать процент крупных "промышленных" проектов, выполняемый на Паскале (Дельфи).
    ... << RSDN@Home 1.1.4 beta 3 rev. 194>>
    Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Dervish Россия http://www.dervish.ru
    Дата: 20.10.04 08:53
    Оценка:
    Здравствуйте, Kluev, Вы писали:

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


    K_O>>О, как вы неправы, создает и еще как! Для больших С++ проектов после появления IncrediBuilda это — самый больной вопрос. Линковка в течении 40 минут на современном компе — это далеко не фантастика. Более того, это один из главных тормозов в разработке сложных систем. Проверено на собственной шкуре.


    K>Да, механизм компиляции в С++ устарел до безобразия. С этим никто не спорит.


    Ну вот, приплыли. С чего бы это? И какие будут предложения по его замене?

    K>Кстати а что мешает в таком крупном проекте заюзать dll?


    Кстати, да. Тут соглашусь.
    ... << RSDN@Home 1.1.4 beta 3 rev. 194>>
    Re[4]: Где собака зарыта???
    От: Дарней Россия  
    Дата: 20.10.04 08:54
    Оценка: +3
    Здравствуйте, Евгений Коробко, Вы писали:

    ЕК>Да вы что! Это же замечательная вещь. Можно работать с неименованной переменной без копирования в локальную переменную. Это и быстро (х.з. сможет компилятор ли соптимизировать лишее копирование), и красиво — не загромождаем код лишними переменными.


    ага, просто великолепно — пока не получишь граблями по лбу. Особенно интересно может получиться, когда одинаковое имя есть в нескольких контекстах
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[5]: А Вы хоть знаете что такое WITH?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.10.04 09:02
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>И зачем ради этого вводить специальную конструкцию в язык?


    А зачем вводить в язык оператор switch (или CASE) если его можно эмулировать с помощью цепочки if-else?

    А зачем вводить в язык несколько циклов WHILE, REPEAT, FOR, LOOP если достаточно одного?

    Это нужно для написания более оптимальных программ.

    В обероне WITH — это тот же самый CASE но только CASE — работает с перечислимыми типами, а WITH работает со внутренним тегом в котором зашифрована RTTI информация о динамическом типе полиморфной переменной. Теоретически (я не проверял) WITH должен работать быстрее чем цепочка dynamic_cast-ов, равно как swith теоретически должен работать быстрее цепочки if-else. Плюс к этому — большая структуризация текста программы.
    Re[6]: А Вы хоть знаете что такое WITH?
    От: Дарней Россия  
    Дата: 20.10.04 09:03
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    Д>>из того самого паскаля, который использует на порядок большее количество людей, чем Оберон — из Object Pascal AKA Delphi.


    честно говоря — не помню уже, как оно в Дельфи с этим with
    в паскале Вирта это ключевое слово позволяет писать обращения к полям записей — без явного указания в обращении, какой из записей они принадлежат
    еще в том самом древнем учебнике, который я читал в школе, было предострежение о проблемах при совпадении имен
    вот за этот самый with ему и должно было быть стыдно
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[15]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Kluev  
    Дата: 20.10.04 09:07
    Оценка: 1 (1) +2
    Здравствуйте, Dervish, Вы писали:

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


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


    K_O>>>О, как вы неправы, создает и еще как! Для больших С++ проектов после появления IncrediBuilda это — самый больной вопрос. Линковка в течении 40 минут на современном компе — это далеко не фантастика. Более того, это один из главных тормозов в разработке сложных систем. Проверено на собственной шкуре.


    K>>Да, механизм компиляции в С++ устарел до безобразия. С этим никто не спорит.


    D>Ну вот, приплыли. С чего бы это? И какие будут предложения по его замене?


    Основная проблемма в препроцессоре и инклюдах. от этого пора отказыватся, другое дело что так просто это не сделать. ИМХО пора делать новый язык на базе С++. Избавится от препроцессора, некоторых откровено устаревших фич. Небольшой косметический ремонт типа this — не указатель а ссылка. И сам механизм компиляции тоже требует радикальных изменений. Дабы избежать появления разных диалектов языка, хорошо бы иметь стандартный фронт-энд, который парзит файлы и создает AST(abstract syntax tree) в како-мнить стандартизированном формате. Это бы убило сразу всех зайцев. Фактически отдельным компилер-девелоперам не пришлось бы каждый раз писать парзер, а только кодогенератор, а во вторых какой был бы простор для разных визардов и тулзов? Надо выташить что-нить из кода, пжста — есть готовое AST. Можно узнать о коде все до мельчайших подробностей.

    K>>Кстати а что мешает в таком крупном проекте заюзать dll?


    D>Кстати, да. Тут соглашусь.
    Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Kh_Oleg  
    Дата: 20.10.04 09:08
    Оценка: 18 (1) -1
    Здравствуйте, Kluev, Вы писали:

    K_O>>О, как вы неправы, создает и еще как! Для больших С++ проектов после появления IncrediBuilda это — самый больной вопрос. Линковка в течении 40 минут на современном компе — это далеко не фантастика. Более того, это один из главных тормозов в разработке сложных систем. Проверено на собственной шкуре.


    K>Да, механизм компиляции в С++ устарел до безобразия. С этим никто не спорит.

    K>Кстати а что мешает в таком крупном проекте заюзать dll?

    Две вещи — требование, чтобы продукт работал одновременно на Windows и на Unix платформе и, как ни странно, сам С++.

    Из DLL можно экспортировать только функции, но не объекты (расширения Microsoft здесь не годятся), а стало быть, для того, чтобы выделить некоторую общую часть, реализованную на С++ с использованием ООП в отдельную DLL, надо либо оборачивать все в С-шные функции wrapper'ы, либо реализовывать свой COM, потому как нету его на Иксах.

    На самом деле это о-очень давняя проблема и не мы первые с ней столкнулись. COM — как раз и явилось попыткой Microsoft разбить свои С++ проекты на DLL'ки. Получилось не слишком красиво и не очень удобно, следующим шагом стал .NET, что уже гораздо лучше. Только для этого потребовалось изменить язык. С++ оказался непригодным для создания сложных, расширяемых, кроссплатформенных систем.

    И, кстати, пару слов о Стандарте, который здесь очень часто упоминают. Чтобы решить данную проблему потребовалось внести изменения в язык. Но в С++ нельзя самовольно (даже для Microsoft ) внести изменения, потому как такой компилятор до принятия нового стандарта не может называться С++'ом. Получается, что этот самый Стандарт и тормозит развитие языка. Уже в .NET сделано по-другому: MSIL стардартизирован, чтобы можно было всем, кому не лень свои языки создавать, а вот C# — нет, заявка на стандартизацию была, но ее отозвали.
    Re[6]: А Вы хоть знаете что такое WITH?
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 20.10.04 09:08
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, WolfHound, Вы писали:


    WH>>И зачем ради этого вводить специальную конструкцию в язык?


    СГ>А зачем вводить в язык оператор switch (или CASE) если его можно эмулировать с помощью цепочки if-else?


    СГ>А зачем вводить в язык несколько циклов WHILE, REPEAT, FOR, LOOP если достаточно одного?


    СГ>Это нужно для написания более оптимальных программ.


    Оптимальных с какой т.зр.?
    По скорости? По объёму бинарника? По объёму кода?
    Re[14]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.10.04 09:10
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Тут есть полиморфизм повыше обычного ООПшного


    Шаблоны — это статический полиморфизм — его нет во время работы программы.
    А в ООП динамический полиморфизм — он есть во время работы программы.

    К>вот реализуй полиморфную для любых типов ф-цию swap?


    Если шаблонов нет, как я ее реализую? Никак. Чего тогда спрашиваешь?
    Re[15]: *
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 20.10.04 09:12
    Оценка: 1 (1) +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Курилка, Вы писали:


    К>>Тут есть полиморфизм повыше обычного ООПшного


    СГ>Шаблоны — это статический полиморфизм — его нет во время работы программы.

    СГ>А в ООП динамический полиморфизм — он есть во время работы программы.

    т.е. ООП — священная корова, так?
    И другие идеи суть ересь?

    К>>вот реализуй полиморфную для любых типов ф-цию swap?


    СГ>Если шаблонов нет, как я ее реализую? Никак. Чего тогда спрашиваешь?


    И это ты называешь оптимальным языком без грабель?
    Re[16]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Kluev  
    Дата: 20.10.04 09:14
    Оценка: +1
    Здравствуйте, Kluev, Вы писали:

    K>Основная проблемма в препроцессоре и инклюдах. от этого пора отказыватся, другое дело что так просто это не сделать. ИМХО пора делать новый язык на базе С++. Избавится от препроцессора, некоторых откровено устаревших фич. Небольшой косметический ремонт типа this — не указатель а ссылка. И сам механизм компиляции тоже требует радикальных изменений. Дабы избежать появления разных диалектов языка, хорошо бы иметь стандартный фронт-энд, который парзит файлы и создает AST(abstract syntax tree) в како-мнить стандартизированном формате. Это бы убило сразу всех зайцев. Фактически отдельным компилер-девелоперам не пришлось бы каждый раз писать парзер, а только кодогенератор, а во вторых какой был бы простор для разных визардов и тулзов? Надо выташить что-нить из кода, пжста — есть готовое AST. Можно узнать о коде все до мельчайших подробностей.


    Более того такое разделение компилера на отдельные куски, позволит писать компилер целой толпой, по кусочкам. Одна группа занимается стандартизацией — делает парзер в стандартный AST, другая например из AST в стандартный IL-код, третья, пятая, десятая уже кодогенераторы для конкретных платформ. Все это может со временем не подецки вырасти в целую индустрию, например вокруг AST — всякие тулзы визарды IDE и т.п. Вокруг IL — кода профайлеры, чекеры и т.п.

    P.S. Гы, эк я размечтался-то? Целые воздушные замки соорудил
    Re[7]: А Вы хоть знаете что такое WITH?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.10.04 09:16
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Оптимальных с какой т.зр.?

    К>По скорости? По объёму бинарника? По объёму кода?

    А это уже вопросы которые надо адресовать к конкретным компиляторам, а не к самому языку как таковому. Язык предполагает, а компилятор располагает.
    Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Kh_Oleg  
    Дата: 20.10.04 09:18
    Оценка:
    Здравствуйте, Dervish, Вы писали:

    K_O>>О, как вы неправы, создает и еще как! Для больших С++ проектов после появления IncrediBuilda это — самый больной вопрос. Линковка в течении 40 минут на современном компе — это далеко не фантастика. Более того, это один из главных тормозов в разработке сложных систем. Проверено на собственной шкуре.


    D>Ну хорошо, давайте уточним, а что такое "большой проект"? Это сколько строк кода? И на какой машине делается сборка?

    P4-1800, 1Gb RAM — как видите, не самый хилый комп. Кода — около 100 Mb.

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


    K_O>>Нет, в модульных языках есть одно существенное отличие — информация о типах данного модуля содержится в скомпилированных объектных файлах. Эта информация доступна компилятору при компиляции другого модуля, который содержит секцию импорта из другого модуля. В результате — каждая строка в исходном тексте программы обрабатывается компилятором ровно один раз.

    K_O>>А теперь вопрос: сколько раз при компиляции большого С++ проекта компилятор обрабатывает, скажем, файл stdio.h?

    D>Не пробовали использовать precompiled headers? Один раз. Всего один раз.

    Пробовали — нету их на Unix'ax! Вот такой облом... К тому же к линковке они отношения не имеют.
    Re[16]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Дарней Россия  
    Дата: 20.10.04 09:21
    Оценка: +1
    Здравствуйте, Kluev, Вы писали:

    K>Основная проблемма в препроцессоре и инклюдах. от этого пора отказыватся, другое дело что так просто это не сделать. ИМХО пора делать новый язык на базе С++. Избавится от препроцессора, некоторых откровено устаревших фич. Небольшой косметический ремонт типа this — не указатель а ссылка. И сам механизм компиляции тоже требует радикальных изменений. Дабы избежать появления разных диалектов языка, хорошо бы иметь стандартный фронт-энд, который парзит файлы и создает AST(abstract syntax tree) в како-мнить стандартизированном формате. Это бы убило сразу всех зайцев. Фактически отдельным компилер-девелоперам не пришлось бы каждый раз писать парзер, а только кодогенератор, а во вторых какой был бы простор для разных визардов и тулзов? Надо выташить что-нить из кода, пжста — есть готовое AST. Можно узнать о коде все до мельчайших подробностей.


    Вот это правильно. Я даже думаю, что давно пора отказаться от хранения исходников в виде плоского текста, вместо этого — структурированное хранилище с AST внутри. Это очень упростило бы создание множества замечательных вещей
    (сейчас тут наверно появится VladD2 и R# )
    И это — не говоря уже о повышении скорости компиляции на несколько порядков.

    А про this в виде ссылки — это наверно зря. Тогда нельзя будет сделать delete this, а это нужно при освобождении объектов по счетчику ссылок, например.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[8]: А Вы хоть знаете что такое WITH?
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 20.10.04 09:27
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Курилка, Вы писали:


    К>>Оптимальных с какой т.зр.?

    К>>По скорости? По объёму бинарника? По объёму кода?

    СГ>А это уже вопросы которые надо адресовать к конкретным компиляторам, а не к самому языку как таковому. Язык предполагает, а компилятор располагает.


    Ну о какой оптимальности такой ты говоришь тогда, я не пойму?
    Это как отпимальность сферического коня в вакууме чтоли?
    Re[10]: *
    От: LaptevVV Россия  
    Дата: 20.10.04 09:34
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>ЗЫ Прочитай "Эффективное программирование на С++" Кёниг и Му... Оказывается и С++ можно преподовать не сложнее паскаля. Ну и кому после этого нужен Вирт со своими выкидонами?

    Ну, я лично к нему отношусь с большим уважением — все-таки не всякому удается такой след в истории ИТ оставить. Большинство из тех, кто относится к нему с пренебрежением, не удасться и тысячной доли того, что сделал он. А потом, может именно в борьбе противоположностей С и С++ стали такими, какие они есть сейчас. Ведь не было бы с чем сравнивать — неизвестно, как все повернултось бы.
    А Кенига и МУ, я конечно, читал. Минус там один, как я уже писал в рецензии — нет привязки к конкретной среде. Это для русских студентов трудности создает с русским языком в программах.
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[11]: *
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 20.10.04 11:07
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Ну а теперь развеем Ваше невежество.

    Ну а теперь поговорим о Вашей невнимательности. Я уже заметил, что вам хоть Джава говори — слышите вы только слово "Оберон". Я говорил именно о языке Паскаль. Поэтому вся аргументация по поводу Оберона здесь, мягко говоря, не к месту.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[12]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.10.04 12:13
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Ну а теперь поговорим о Вашей невнимательности. Я уже заметил, что вам хоть Джава говори — слышите вы только слово "Оберон". Я говорил именно о языке Паскаль. Поэтому вся аргументация по поводу Оберона здесь, мягко говоря, не к месту.


    Эта ветка посвящена обсуждению статьи Вирта о том как хорошо было бы преподавать студентам Оберон, так, спрашивается, а зачем тогда Вы стали в этой ветке говорить о допотопном Паскале?
    Re[11]: *
    От: WolfHound  
    Дата: 20.10.04 12:46
    Оценка: 24 (2) +1
    Здравствуйте, LaptevVV, Вы писали:

    WH>>ЗЫ Прочитай "Эффективное программирование на С++" Кёниг и Му... Оказывается и С++ можно преподовать не сложнее паскаля. Ну и кому после этого нужен Вирт со своими выкидонами?

    LVV>Ну, я лично к нему отношусь с большим уважением — все-таки не всякому удается такой след в истории ИТ оставить.
    Ну Герострата до сих прор помнят. Не аргумент.
    LVV>Большинство из тех, кто относится к нему с пренебрежением, не удасться и тысячной доли того, что сделал он.
    А что он сделал? Несколько ни кому не нужных языков которые по сути не далеко ушли от ассемблера? Развел кучу тупых наездов на С/С++ из серии := vs = ? Создал культ поклонения Оберону? Ты посмотри на Губанова... он же просто фанатеет от оберонов.
    LVV>А потом, может именно в борьбе противоположностей С и С++ стали такими, какие они есть сейчас.
    Не понял кто с кем борится? Вес всех Виртовских поделок и близко не стоял с весом одного С++.
    LVV>Ведь не было бы с чем сравнивать — неизвестно, как все повернултось бы.
    Что с чем сравнивать? С++ с Паскалем? Да С++ от функциональных языков взял больше чем от паскаля. Если от паскаля вобще что-то взял.

    LVV>А Кенига и МУ, я конечно, читал. Минус там один, как я уже писал в рецензии — нет привязки к конкретной среде.

    Ну знаетели... ИМХО не аргумент. И тем болие не аргумент в пользу Виртовских поделок.
    LVV>Это для русских студентов трудности создает с русским языком в программах.
    Ну за это надо бить ичключительно переводчиков.
    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[6]: А Вы хоть знаете что такое WITH?
    От: WolfHound  
    Дата: 20.10.04 12:46
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А зачем вводить в язык оператор switch (или CASE) если его можно эмулировать с помощью цепочки if-else?

    А в самом деле зачем? Если раз в год понадобится и на том спасибо. В прочем switch как и goto могут понадобиться при машинной кодогенерации. Например при генерации парсеров.

    СГ>А зачем вводить в язык несколько циклов WHILE, REPEAT, FOR, LOOP если достаточно одного?

    Вот я тоже не понимаю зачем? Мне for'а в С++ хватает за глаза. Ну иногда еще while использую. Но если бы его не было то я бы не растроился.

    СГ>Это нужно для написания более оптимальных программ.

    Чего чего??? Блин скажи это оптимизатору или в оберонах он отсутствует как класс? Ну если так тогда понятно.

    СГ>В обероне WITH — это тот же самый CASE но только CASE — работает с перечислимыми типами, а WITH работает со внутренним тегом в котором зашифрована RTTI информация о динамическом типе полиморфной переменной. Теоретически (я не проверял) WITH должен работать быстрее чем цепочка dynamic_cast-ов, равно как swith теоретически должен работать быстрее цепочки if-else. Плюс к этому — большая структуризация текста программы.

    Ты не кружи. Ты скажи на кой черт оно надо? У меня вобще ни разу жилания не возниколо воспользоваться подобной штукой.
    В чем практический смысл этой конструкции? Я конечно понимаю что если конструкция есть то ее можно задействовать. Но водить в язык конструкции которые практически не востребованы...

    Кстати объясни пожалуйста почему
      FOR i := 0 TO Self.p DO
        h.x := h.x + N[i] * Self.Pw[span - Self.p + 1].x;
        h.y := h.y + N[i] * Self.Pw[span - Self.p + 1].y; //тут точка с запятой нужна
        h.z := h.z + N[i] * Self.Pw[span - Self.p + 1].z  //А тут нет
      END;

    В чем тайный смысл?
    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[15]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: FR  
    Дата: 20.10.04 13:58
    Оценка:
    Здравствуйте, Kh_Oleg, Вы писали:

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


    K_O>>>О, как вы неправы, создает и еще как! Для больших С++ проектов после появления IncrediBuilda это — самый больной вопрос. Линковка в течении 40 минут на современном компе — это далеко не фантастика. Более того, это один из главных тормозов в разработке сложных систем. Проверено на собственной шкуре.


    K>>Да, механизм компиляции в С++ устарел до безобразия. С этим никто не спорит.

    K>>Кстати а что мешает в таком крупном проекте заюзать dll?

    K_O>Две вещи — требование, чтобы продукт работал одновременно на Windows и на Unix платформе и, как ни странно, сам С++.


    не мешает.

    K_O>Из DLL можно экспортировать только функции, но не объекты (расширения Microsoft здесь не годятся), а стало быть, для того, чтобы выделить некоторую общую часть, реализованную на С++ с использованием ООП в отдельную DLL, надо либо оборачивать все в С-шные функции wrapper'ы, либо реализовывать свой COM, потому как нету его на Иксах.


    Я не понял причем тут расширения ms? Тот же gcc тоже спокойно позволяет экспортировать классы в динамических библиотеках (если это не так то stlport'овая dll собраная мной на mingw наверно мне приснилась ). И вообще кто мешает сделать не dll а обычную статическую библиотеку?
    ... << RSDN@Home 1.1.3 stable >>
    Re[7]: А Вы хоть знаете что такое WITH?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.10.04 14:02
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>В чем тайный смысл?


    Тайный смысл в том, что ";" нужна для разделения инструкций, но END — это тоже разделитель, так сказать. Поэтому после последней команды, т.е. перед END точку с запятой ставить необязательно, но если сильно хочеться, то ставить разрешается, это не является ошибкой, а считается как пустой оператор, который ничего не делает.
    Re[7]: А Вы хоть знаете что такое WITH?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.10.04 14:16
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>А зачем вводить в язык оператор switch (или CASE) если его можно эмулировать с помощью цепочки if-else?


    WH>А в самом деле зачем?



    Про оптимизацию оператора switch по сравнению с обычной цепочкой if-else можно почитать, например. там:

    http://www.wasm.ru/print.php?article=1009002

    .... последовательная обработка всех операторов case крайне непроизводительная. Хорошо, если их всего четыре-пять штук, а если программист натолкает в switch сотню — другую case? Процессор совсем запарится, пока их все проверит (а по закону бутерброда нужный case будет в самом конце). Вот компилятор и "утрамбовывает" дерево, уменьшая его высоту. Вместо одной ветви, изображенной на рис. 30, транслятор в нашем случае построил две, поместив в левую только числа не большие двух, а в правую – все остальные. Благодаря этому, ветвь "666h" из конца дерева была перенесена в его начало. Данный метод оптимизации поиска значений называют "методом вилки", но не будет сейчас на нем останавливаться, а лучше разберем его в главе "Обрезка длинных деревьев"....


    Ни что не мешает делать аналогичную оптимизацию для WITH по сравнению с цепочкой dynamic_cast-ов.
    Re[16]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Kh_Oleg  
    Дата: 20.10.04 14:23
    Оценка:
    Здравствуйте, FR, Вы писали:

    K_O>>Из DLL можно экспортировать только функции, но не объекты (расширения Microsoft здесь не годятся), а стало быть, для того, чтобы выделить некоторую общую часть, реализованную на С++ с использованием ООП в отдельную DLL, надо либо оборачивать все в С-шные функции wrapper'ы, либо реализовывать свой COM, потому как нету его на Иксах.


    FR>Я не понял причем тут расширения ms? Тот же gcc тоже спокойно позволяет экспортировать классы в динамических библиотеках (если это не так то stlport'овая dll собраная мной на mingw наверно мне приснилась ).


    Какая версия компилятора, платформа и, если можно, пример экспорта класса? Да, попутно, наследование поддерживается? Exceptions нормально снизу-вверх летают?

    FR>И вообще кто мешает сделать не dll а обычную статическую библиотеку?

    Ну дык статические библиотеки и линкуются в экзешник 40 минут.
    Re[20]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 20.10.04 14:34
    Оценка: 1 (1) +2
    Здравствуйте, Kh_Oleg, Вы писали:

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


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

    Ну, если об этом говорить, то грех не вспомнить Джоэля с его дырявыми абстракциями. Это вообще всегда так: как только ты делаешь так, чтобы А выглядело как Б, то есть риск, что на самом деле кому-то несущественное отличие А от Б было как раз очень важным.

    Да, есть принцип наименьшего удивления, который не рекомендует скрывать за простыми с виду интерфейсами всякие сложные вещи. Тем не менее, очень трудно провести границу между допустимым уровнем абстракции и грубым обманом.
    Страуструп, кстати, насколько я помню, отдельно упоминал об этом как раз применительно к переопределению операторов. Правда, он не заходил настолько далеко, чтобы запрещать использовать циклы в операторах. Он всего лишь предостерегал от слишком радикального изменения смысла операторов.
    Тем не менее, практически любой пользователь С++ мат.библиотеки, например, ожидает, что она будет умножать матрицы при помощи оператора умножения, а не функции MultiplyMyMatrices.
    И что стоимость операции умножения векторов будет немножко больше, чем стоимость операции умножения целых чисел.
    Так что критику данного конкретного случая считаю несправедливой.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[13]: *
    От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
    Дата: 20.10.04 14:47
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Ну, знаете...., [...] Во время исполнения программы никаких шаблонов нет.


    1. Во время исполнения программы есть только процессор и объектный код в памяти. Ну, ещё — внешние устройства.

    СГ>Шаблоны позволяют меньше ручками по клавиатуре долбить.


    2. Процедуры, функции, и прочее подобное предназначены для того же. И что из этого следует?
    ... << RSDN@Home 1.1.3 stable >>
    Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
    P.S.: Винодельческие провинции — это есть рулез!
    Вы чего!!!
    От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
    Дата: 20.10.04 15:02
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>S1 — последовательность действий при которых x имеет тип T1

    СГ>S2 — последовательность действий при которых x имеет тип T2
    СГ>S3 — последовательность действий при которых динамический тип x не установлен.

    СГ>Смысл: Если динамический тип полиморфной переменной x оказался T1, то выполняется S1 внутри которой x рассматривается как переменная типа T1; в противном случае если динамический тип полиморфной переменной x оказался T2, то выполняется S2 внутри которой x рассматривается как переменная типа T2; в противном случае выполняется S3.


    Перестаньте позорить чистое имя Вирта наглым пренебрежением к LSP!!! За подобные последовательности в нормальном промышленном коде нужно обрывать руки и предавать анафеме до конца семестра.
    ... << RSDN@Home 1.1.3 stable >>
    Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
    P.S.: Винодельческие провинции — это есть рулез!
    Re[17]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: FR  
    Дата: 20.10.04 15:19
    Оценка: +1
    Здравствуйте, Kh_Oleg, Вы писали:

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


    K_O>>>Из DLL можно экспортировать только функции, но не объекты (расширения Microsoft здесь не годятся), а стало быть, для того, чтобы выделить некоторую общую часть, реализованную на С++ с использованием ООП в отдельную DLL, надо либо оборачивать все в С-шные функции wrapper'ы, либо реализовывать свой COM, потому как нету его на Иксах.


    FR>>Я не понял причем тут расширения ms? Тот же gcc тоже спокойно позволяет экспортировать классы в динамических библиотеках (если это не так то stlport'овая dll собраная мной на mingw наверно мне приснилась ).


    K_O>Какая версия компилятора, платформа и, если можно, пример экспорта класса? Да, попутно, наследование поддерживается? Exceptions нормально снизу-вверх летают?


    Платформа win32 gcc version 3.2.3 (mingw special 20030504-1)
    Exceptions летают нормально, наследование подерживается но не проверял и не вижу причин почему оно не должно работать. Классы экспортируются через #define _STLP_CLASS_EXPORT_DECLSPEC __attribute__((dllexport))
    ... << RSDN@Home 1.1.3 stable >>
    Re[20]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: vdimas Россия  
    Дата: 20.10.04 15:23
    Оценка: +1
    Здравствуйте, Kh_Oleg, Вы писали:

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


    Так, каша... приплыли...
    давай разгребать.

    Ты — это кто? Разработчик библиотеки или ее пользователь?

    Если первое, то все в твоих руках. И ты отдаешь себе отчет, что суть ТВОИХ алгоритмов не поменяется, назови ты их operator*() или MyltiplyByAnotherMatrix().

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

    K_O>Пример, о котором я говорю, большинство требуемой информации от меня скрывает.

    Можно подумать, что смена имени метода с operator*() на MyltiplyByAnotherMatrix() тебе что-то откроет.
    Любишь ковыряться в исходниках — наздоровье! Насколько я знаю, любители ковыряться в исходниках меньше всего обращают свое внимание на название методов, ибо это тонкости.

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


    Опять, ты с позиции разработчика библиотеки или с позиции пользователя? Если второе, то ты должен быть заинтересован в том, чтобы синтаксис прикладной части программы был МАКСИМАЛЬНО приближен к твоей предметной области.
    Приведенный пример был из этой области.
    Re[21]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Kh_Oleg  
    Дата: 20.10.04 16:05
    Оценка: :)
    Здравствуйте, vdimas, Вы писали:

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


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


    V>Так, каша... приплыли...

    V>давай разгребать.

    V>Ты — это кто? Разработчик библиотеки или ее пользователь?

    Я — программист, изучающий чужой код, коротый достался мне, скажем, по наследству. И вот я встречаю конструкцию:

    f*=(a/x+5)*b-(y*c-d/5)/e-z;

    Вопрос: как быстро можно догадаться, что здесь идет обработка массивов, да еще и в цикле? В какой из двух десятков подключаемых заголовочных файлов смотреть?
    Re[18]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Kh_Oleg  
    Дата: 20.10.04 16:10
    Оценка:
    Здравствуйте, FR, Вы писали:

    FR>>>Я не понял причем тут расширения ms? Тот же gcc тоже спокойно позволяет экспортировать классы в динамических библиотеках (если это не так то stlport'овая dll собраная мной на mingw наверно мне приснилась ).


    K_O>>Какая версия компилятора, платформа и, если можно, пример экспорта класса? Да, попутно, наследование поддерживается? Exceptions нормально снизу-вверх летают?


    FR>Платформа win32 gcc version 3.2.3 (mingw special 20030504-1)

    FR>Exceptions летают нормально, наследование подерживается но не проверял и не вижу причин почему оно не должно работать. Классы экспортируются через #define _STLP_CLASS_EXPORT_DECLSPEC __attribute__((dllexport))

    Не совсем понял, этот подход portable? Gcc на Windows, Gcc на Solaris, Gcc на Linux и MSVC++ его одинаково нормально скушают?

    К тому же я просил о другом: как в Dll объявить свой класс, как его экспортировать, с какими опциями компиляться и как использовать такую dll в екзешнике?
    Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: LaptevVV Россия  
    Дата: 20.10.04 16:22
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, LaptevVV, Вы писали:


    LVV>> уверяю, вирт не написал ни строчки — сам такой руководитель, знаю


    СГ>Вот за себя и отвечайте.


    СГ>Кстати, мог ли человек не написавший ни строчки написать вот это:

    СГ>http://www.uni-vologda.ac.ru/oberon/infoart/proj0.htm
    Внимательно прочитайте! Я говорю, что как руководитель при написании ПЕРВОГО ТРАНСЛЯТОРА с ПАСКАЛЯ он не написал ни строчки! А то, что он вообще не писал программ — я не утверждаю. Он много чего написал. Я Вирта, в отличие от некоторых товарищей на этом сайте, уважаю. Хотя бы за собственное мнение в программировании, и за вклад в наше дело.
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: LaptevVV Россия  
    Дата: 20.10.04 16:23
    Оценка:
    Здравствуйте, Dervish, Вы писали:

    D>А оно вам нужно, писать эти строчки? У вас, как я понимаю, другая задача. И (моё личное имхо), таких хороших преподавателей как вы, вообще ещё поискать нужно. Сам факт вашего постоянного участия в RSDN вызывает уважение.

    Ну спаибо на добром слове!
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: LaptevVV Россия  
    Дата: 20.10.04 16:29
    Оценка:
    Здравствуйте, Дарней, Вы писали:

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


    D>>Кроме того, вопрос Дарнея касался немного другого. Если я его правильно понял, он засомневался, что в отсутствие Паскаля мы работали на Алголе-68 и предположил, что мы все работали бы на С (С++).


    Д>Я говорил именно об этом. Роль паскаля в современной индустрии близка к нулю, так что его отстутствие не повлияло бы практически ни на что. Может быть только, еще больше склонило бы чашу весов в сторону C/C++

    Ага! Значит роль Вирта — тож ноль! Он же ничего не создал толкового! Но уже один только факт, что мы спорим о нем — говорит о противоположном!
    И Дейкстра тож нифига, кроме семафоров не оставил. А уж о грисе вообще можно не говорить, так же как о Хоаре. Или о Шелле — подуманешь, сортировку придумал, блин! Да фигня полная!
    Так что ли?

    А если дальше пойти, то вообще Ньютона можно с дерьмом смешать — у него сплошые ошибки, блин! Все неправильно!
    Вот и подумайте. О себе, в первую очередь, а не о Вирте.
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[19]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: FR  
    Дата: 20.10.04 16:37
    Оценка:
    Здравствуйте, Kh_Oleg, Вы писали:

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


    FR>>>>Я не понял причем тут расширения ms? Тот же gcc тоже спокойно позволяет экспортировать классы в динамических библиотеках (если это не так то stlport'овая dll собраная мной на mingw наверно мне приснилась ).


    K_O>>>Какая версия компилятора, платформа и, если можно, пример экспорта класса? Да, попутно, наследование поддерживается? Exceptions нормально снизу-вверх летают?


    FR>>Платформа win32 gcc version 3.2.3 (mingw special 20030504-1)

    FR>>Exceptions летают нормально, наследование подерживается но не проверял и не вижу причин почему оно не должно работать. Классы экспортируются через #define _STLP_CLASS_EXPORT_DECLSPEC __attribute__((dllexport))

    K_O>Не совсем понял, этот подход portable? Gcc на Windows, Gcc на Solaris, Gcc на Linux и MSVC++ его одинаково нормально скушают?


    K_O>К тому же я просил о другом: как в Dll объявить свой класс, как его экспортировать, с какими опциями компиляться и как использовать такую dll в екзешнике?


    Я в Unix'ах не разбираюсь, но под windows все распрастраненные компиляторы (vc, bcc, gcc) нормально подерживают экспорт — импорт классов(и даже конкретных специализаций шаблонов) из dll (конечно скомпилированную на vc dll нельзя использовать например в gcc, но собранные одним и тем же компилятором без проблем). Я не вижу причин почему в unix'ах это не должно работать, зачем тогда воообще искаженние имен придумали.
    ... << RSDN@Home 1.1.3 stable >>
    Re[20]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Kh_Oleg  
    Дата: 20.10.04 16:53
    Оценка: -2
    Здравствуйте, FR, Вы писали:

    FR>Я в Unix'ах не разбираюсь,

    В принципе, дальше можно не продолжать...
    Но как же ж, блин, мы пофлеймить любим!

    FR>но под windows все распрастраненные компиляторы (vc, bcc, gcc) нормально подерживают экспорт — импорт классов(и даже конкретных специализаций шаблонов) из dll (конечно скомпилированную на vc dll нельзя использовать например в gcc, но собранные одним и тем же компилятором без проблем).


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

    FR>Я не вижу причин почему в unix'ах это не должно работать, зачем тогда воообще искаженние имен придумали.

    К твоему сведению, нормальная поддержка компилятором gcc exceptions в многопоточных программах появилась относительно недавно, кажется, с версии 3.0. Это к вопросу: "Ну раз на винде работает, то почему на Иксах не должно."

    А ты в курсе, что gcc не допускает forward declarations для enum'ов?

    Список таких невинных "особенностей" можно продолжать еще долго.

    Ну так как насчет простенького примера экспорта собственного класса? Мне просто любопытно на это взглянуть...
    Re[21]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: FR  
    Дата: 20.10.04 17:56
    Оценка:
    Здравствуйте, Kh_Oleg, Вы писали:

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


    FR>>Я в Unix'ах не разбираюсь,

    K_O>В принципе, дальше можно не продолжать...
    K_O>Но как же ж, блин, мы пофлеймить любим!

    ну не я же заявлял что C++ этого не позволяет в принципе

    FR>>но под windows все распрастраненные компиляторы (vc, bcc, gcc) нормально подерживают экспорт — импорт классов(и даже конкретных специализаций шаблонов) из dll (конечно скомпилированную на vc dll нельзя использовать например в gcc, но собранные одним и тем же компилятором без проблем).


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


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

    FR>>Я не вижу причин почему в unix'ах это не должно работать, зачем тогда воообще искаженние имен придумали.

    K_O>К твоему сведению, нормальная поддержка компилятором gcc exceptions в многопоточных программах появилась относительно недавно, кажется, с версии 3.0. Это к вопросу: "Ну раз на винде работает, то почему на Иксах не должно."

    K_O>А ты в курсе, что gcc не допускает forward declarations для enum'ов?


    нет, только какое это отношение имеет к экспорту классов?

    K_O>Список таких невинных "особенностей" можно продолжать еще долго.


    я сам могу такие списки составить, и не уверен что они будут подмножествами твоих
    (перевод: в общем не стоит зря гнуть пальцы )

    K_O>Ну так как насчет простенького примера экспорта собственного класса? Мне просто любопытно на это взглянуть...


    Я же тебе привел уже пример STLPort, глюков не наблюдал.

    Простеший пример:

    #ifndef _DLL_H_
    #define _DLL_H_
    
    #if BUILDING_DLL
    # define DLLIMPORT __attribute__((dllexport))
    #else /* Not BUILDING_DLL */
    # define DLLIMPORT __attribute__((dllimport))
    #endif /* Not BUILDING_DLL */
    
    
    class DLLIMPORT DllClass
    {
      public:
        DllClass();
        virtual ~DllClass(void);
    
        int Method();
        virtual int VirtualMethod();
    
      private:
    
    };
    
    
    #endif /* _DLL_H_ */


    def файл:

    LIBRARY     LIB.DLL
    
    EXPORTS
        _ZN8DllClass13VirtualMethodEv  @8   
        _ZN8DllClass6MethodEv          @1   
        _ZN8DllClassC1Ev               @2   
        _ZN8DllClassC2Ev               @3   
        _ZN8DllClassD0Ev               @4   
        _ZN8DllClassD1Ev               @5   
        _ZN8DllClassD2Ev               @6   
        _ZTV8DllClass                  @7
    ... << RSDN@Home 1.1.3 stable >>
    Re[22]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: prVovik Россия  
    Дата: 20.10.04 17:58
    Оценка: +1 :)
    Здравствуйте, Kh_Oleg, Вы писали:

    K_O>Я — программист, изучающий чужой код, коротый достался мне, скажем, по наследству. И вот я встречаю конструкцию:


    K_O>
    K_O>f*=(a/x+5)*b-(y*c-d/5)/e-z;
    K_O>

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

    Достаточно глянуть на типы.
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[8]: А Вы хоть знаете что такое WITH?
    От: WolfHound  
    Дата: 20.10.04 17:59
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Ни что не мешает делать аналогичную оптимизацию для WITH по сравнению с цепочкой dynamic_cast-ов.

    Уф... Ты мне объясни на кой черт нужна эта цепочка if'ов вобще? Не надо мне объяснять как это работает. Поверь мне я это не хуже тебя знаю. Ты мне скажи зачем в язык введена конструкция которая не нужна.
    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Дарней Россия  
    Дата: 21.10.04 04:25
    Оценка: +2
    Здравствуйте, LaptevVV, Вы писали:

    LVV>Ага! Значит роль Вирта — тож ноль! Он же ничего не создал толкового! Но уже один только факт, что мы спорим о нем — говорит о противоположном!

    LVV>И Дейкстра тож нифига, кроме семафоров не оставил. А уж о грисе вообще можно не говорить, так же как о Хоаре. Или о Шелле — подуманешь, сортировку придумал, блин! Да фигня полная!
    LVV>Так что ли?

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

    LVV>Вот и подумайте. О себе, в первую очередь, а не о Вирте.


    Как сказал Марк Твен (если не ошибаюсь) — даже если я не снес за свою жизнь ни одного яйца, это не отнимает у меня право оценивать качество омлета.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[21]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 21.10.04 05:57
    Оценка: +1
    Здравствуйте, Kh_Oleg, Вы писали:

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

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

    С точки зрения теории кристалла, нет никаких ограничений на динамическое связывание классов/объектов. Точно так же, как введение ООП в плюсы не потребовало никаких изменений в линкере, никаких изменений не потребуется и от модели DLL или что там вместо них в унихах. Банально потому, что функции отложенной линковки сводятся к поиску адреса по имени. Точка. А что это за адрес — процедура, метод, VMT, или объект — рантайму по барабану.
    Так что твои заявления об ограничениях DLL — не более чем проявление некомпетентности.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[22]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Kh_Oleg  
    Дата: 21.10.04 06:48
    Оценка:
    Здравствуйте, FR, Вы писали:

    K_O>>Ну так как насчет простенького примера экспорта собственного класса? Мне просто любопытно на это взглянуть...


    FR>Я же тебе привел уже пример STLPort, глюков не наблюдал.


    FR>Простеший пример:


    FR>
    FR>#ifndef _DLL_H_
    FR>#define _DLL_H_
    
    FR>#if BUILDING_DLL
    FR># define DLLIMPORT __attribute__((dllexport))
    FR>#else /* Not BUILDING_DLL */
    FR># define DLLIMPORT __attribute__((dllimport))
    FR>#endif /* Not BUILDING_DLL */
    
    
    FR>class DLLIMPORT DllClass
    FR>{
    FR>  public:
    FR>    DllClass();
    FR>    virtual ~DllClass(void);
    
    FR>    int Method();
    FR>    virtual int VirtualMethod();
    
    FR>  private:
    
    FR>};
    
    
    FR>#endif /* _DLL_H_ */
    FR>


    Если я не ошибаюсь, выделенные места являются compiler-specific. MSVC++ 7.1 здесь поперхнулся.

    FR>def файл:


    FR>
    FR>LIBRARY     LIB.DLL
    
    FR>EXPORTS
    FR>    _ZN8DllClass13VirtualMethodEv  @8   
    FR>    _ZN8DllClass6MethodEv          @1   
    FR>    _ZN8DllClassC1Ev               @2   
    FR>    _ZN8DllClassC2Ev               @3   
    FR>    _ZN8DllClassD0Ev               @4   
    FR>    _ZN8DllClassD1Ev               @5   
    FR>    _ZN8DllClassD2Ev               @6   
    FR>    _ZTV8DllClass                  @7   
    FR>


    Хм.... Эту абракадабру я сам должен писать?

    Ну и наконец, как в другом экзешнике заиспользовать этот класс? Смогу ли я, просто подключив dll.h у себя написать:
    DllClass* pClass = new DllClass();
    
    class MyDllClass : public DllClass
    {
      ...
    };


    И все нормально скомпиляется (в этом я не сомневаюсь), слинкуется и запустится?
    Re[22]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Kh_Oleg  
    Дата: 21.10.04 07:10
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>С точки зрения теории кристалла, нет никаких ограничений на динамическое связывание классов/объектов. Точно так же, как введение ООП в плюсы не потребовало никаких изменений в линкере, никаких изменений не потребуется и от модели DLL или что там вместо них в унихах. Банально потому, что функции отложенной линковки сводятся к поиску адреса по имени. Точка. А что это за адрес — процедура, метод, VMT, или объект — рантайму по барабану.


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

    S>Так что твои заявления об ограничениях DLL — не более чем проявление некомпетентности.


    Уважаемые, мне не нужны ваши теоретические измышления. Есть проблема — разделить программу на С++ на Dll'ки. Причем, сделать это так, чтобы компилировалось и работало на одних и тех же исходниках и по крайней мере на тех четырех компиляторах, о которых я сказал. Если кто-нибудь сталкивался с подобным — расскажите, как это можно сделать, если подобного опыта нет — нечего сотрясать воздух.

    Два решения я уже озвучил — С-подобные функции-врапперы и создание собственного COM'а. Ни то, ни другое не подходит ввиду огромного объема работы, которую придется проделать.
    Re[23]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Kluev  
    Дата: 21.10.04 07:24
    Оценка:
    Здравствуйте, Kh_Oleg, Вы писали:

    K_O>Уважаемые, мне не нужны ваши теоретические измышления. Есть проблема — разделить программу на С++ на Dll'ки. Причем, сделать это так, чтобы компилировалось и работало на одних и тех же исходниках и по крайней мере на тех четырех компиляторах, о которых я сказал. Если кто-нибудь сталкивался с подобным — расскажите, как это можно сделать, если подобного опыта нет — нечего сотрясать воздух.


    Как правило делают конфиг-h файл куда выносят все компилер-специфик вещи
    типа __declspec(dllexport) или __attribute__(dllexport) и т.п. Это можно сделать т.к. живет же QT под линуксом и под виндой в dll-ях.
    Более того я бы позаботился о обратной двоичной совместимости, т.е. для классов хорошо бы заюзать расширенный паттерн p-impl с поддержкой наследования.

    class MyClass {
       void   *pImpl_; // указатель на структуру данных этого класса
    public:
       void foo();
       void zoo();
       void bar();
    };


    тогда можно будет править реализацию не ломая интерфейс и не перекомпилируя клиента этой DLL
    Re[23]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: FR  
    Дата: 21.10.04 07:25
    Оценка:
    Здравствуйте, Kh_Oleg, Вы писали:


    K_O>Если я не ошибаюсь, выделенные места являются compiler-specific. MSVC++ 7.1 здесь поперхнулся.


    Ну я уже не знаю чего ты хочешь, ты же пример для gcc просил вроде.
    Если gcc >= 3.0 (или 2.9 не помню уже) то он понимает и ms вариант того же объявления, то есть:

    #if BUILDING_DLL
    # define DLLIMPORT __declspec (dllexport)
    #else /* Not BUILDING_DLL */
    # define DLLIMPORT __declspec (dllimport)
    #endif /* Not BUILDING_DLL */


    этот вариант нормально работает и на bcc, то есть на всех распрастранненых в windows компиляторах.

    K_O>Хм.... Эту абракадабру я сам должен писать?


    нет это само генерируется, я привел как пример, что получается на выходе, вот более
    подробный листинг:

    EXPORTS
        _ZN8DllClass6MethodEv @ 1 ; DllClass::Method()
        _ZN8DllClassC1Ev @ 2 ; DllClass::DllClass()
        _ZN8DllClassC2Ev @ 3 ; DllClass::DllClass()
        _ZN8DllClassD0Ev @ 4 ; DllClass::~DllClass()
        _ZN8DllClassD1Ev @ 5 ; DllClass::~DllClass()
        _ZN8DllClassD2Ev @ 6 ; DllClass::~DllClass()
        _ZTV8DllClass @ 7 DATA ; vtable for DllClass
        _ZN8DllClass13VirtualMethodEv @ 8 ; DllClass::VirtualMethod()


    K_O>Ну и наконец, как в другом экзешнике заиспользовать этот класс? Смогу ли я, просто подключив dll.h у себя написать:

    K_O>
    K_O>DllClass* pClass = new DllClass();
    
    K_O>class MyDllClass : public DllClass
    K_O>{
    K_O>  ...
    K_O>};
    K_O>


    K_O>И все нормально скомпиляется (в этом я не сомневаюсь), слинкуется и запустится?


    Нормально все работает, на этом уже кучи программ и библиотек построены. Главное не забыть компилировать и dll и exe с одной и той же динамичесой версией RTL.
    Вообще посмотри плюсовые RTL dll от ms или борланд, экспортируются кучи классов типа std::fstream, std::string и т. п.
    ... << RSDN@Home 1.1.3 stable >>
    Re[9]: А Вы хоть знаете что такое WITH?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.10.04 08:07
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Ни что не мешает делать аналогичную оптимизацию для WITH по сравнению с цепочкой dynamic_cast-ов.

    WH>Уф... Ты мне объясни на кой черт нужна эта цепочка if'ов вобще? Не надо мне объяснять как это работает. Поверь мне я это не хуже тебя знаю. Ты мне скажи зачем в язык введена конструкция которая не нужна.

    Вы в курсе, что изначально ООП основывается вовсе не на трех китах 1) наследование, 2) полиморфизм, 3) инкапсуляция; а всего на одной простой идее: все есть объекты и объекты обмениваются друг с другом сообщениями? Вот пришло к объекту сообщение закодированное в виде числа, как объекту догадаться что это за сообщение? Ему надо либо цепочкой if-else проверить это число с теми числами сообщений которые он понимает, либо сделать это с помощью CASE.


    Вариант 1:
    IF msg_code = 6 THEN 
      сделать_одно_действие
    ELSIF msg_code = 234 THEN 
      сделать_другое_действие
    ELSIF msg_code = 902 THEN 
      сделать_третье_действие
    END;


    Вариант 2:
    CASE msg_code OF
      6  : сделать_одно_действие   |
      234: сделать_другое_действие |
      902: сделать_третье_действие
    ELSE
      (* данная сообщение не опознано *)
    END;


    Допустим, есть N-вариантов. Тогда цепочка IF-ELSE будет в худшем случае делать O(N) проверок, в то время как CASE будет выполнять не более O(Log(N)) проверок.

    Например, вполне реальное число N = 20, Log(20) = 4.3, т.е. разница что-то около 5 раз, нужна такая конструкция в языке или нет?

    А WITH — это тот же CASE, но только по типам с учетом иерархии наследования.
    TYPE
      Message = EXTENSIBLE RECORD 
        (* ... *)
      END;
    
      SomeMsg = RECORD (Message)
        (* ... *)
      END;
    
      AnotherMsg = RECORD (Message)
        (* ... *)
      END;
    
      ThirdMsg = RECORD (Message)
        (* ... *)
      END;
    
    PROCEDURE (v: View) HandleMsg (VAR msg: Message);
    BEGIN
      WITH 
        msg: SomeMsg    DO сделать_одно_действие   |
        msg: AnotherMsg DO сделать_другое_действие |
        msg: ThirdMsg   DO сделать_третье_действие
      ELSE 
        (* данная сообщение не опознано *)
      END;
    END HandleMsg;

    Причем внутри блока кода "сделать_XXX_действие" переменная msg трактуется так как буд-то ее статический тип есть тот тип который и был опознан. Например, внутри блока кода "сделать_одно_действие" статический тип переменной msg есть тип "SomeMsg", а вовсе не просто "Message".
    Re: Вы чего!!!
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.10.04 08:12
    Оценка:
    Здравствуйте, Геннадий Васильев, Вы писали:

    ГВ>Перестаньте позорить чистое имя Вирта наглым пренебрежением к LSP!!! За подобные последовательности в нормальном промышленном коде нужно обрывать руки и предавать анафеме до конца семестра.


    Простите, Вы с чем-то не согласны?
    Re[14]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.10.04 08:17
    Оценка: :)))
    Здравствуйте, Геннадий Васильев, Вы писали:

    СГ>>Шаблоны позволяют меньше ручками по клавиатуре долбить.


    ГВ>2. Процедуры, функции, и прочее подобное предназначены для того же. И что из этого следует?


    Процедуры и функции во время исполнения программы таки есть (помните такую команду call)? А вот шаблонов нет, то есть шаблоны не увеличивают возможностей программы.
    Re[24]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Kh_Oleg  
    Дата: 21.10.04 08:17
    Оценка:
    Здравствуйте, Kluev, Вы писали:

    K>Это можно сделать т.к. живет же QT под линуксом и под виндой в dll-ях.


    А ведь и в самом деле... Надо будет посмотреть, что там да как.
    Re[10]: А Вы хоть знаете что такое WITH?
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 21.10.04 08:37
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Например, вполне реальное число N = 20, Log(20) = 4.3, т.е. разница что-то около 5 раз, нужна такая конструкция в языке или нет?

    А почему бы компилятору не привести в обоих случаях код к одинаковому виду? Ты почему-то начинаешь делать какие-то предположения о исполнении программы на ЯВУ. В общем случае говорить об оптимальности какой-либо конструкции такого языка — вообще бред. Особенно сравнивая две семантически эквивалентных конструкции.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[15]: *
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 21.10.04 08:37
    Оценка: 14 (3) +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Процедуры и функции во время исполнения программы таки есть (помните такую команду call)?

    Ну при чем здесь сall? Уберите call — будут делать push/jump. Кстати, техника с джампами применяется в компилерах направо и налево. А инлайнинг? Вообще состояние физической машины во время исполнения весьма косвенным образом связано с текстом исходной программы.
    СГ>А вот шаблонов нет, то есть шаблоны не увеличивают возможностей программы.
    Вот это вообще бред. Все возможности программы были внятно описаны еще до второй мировой войны. Ты с тезисом Черча знаком? Так вот никакие техники программирования, известные на данный момент, ничего не добавляют к понятию вычислимости, введенному сто лет назад.

    Тем не менее, программирование на месте не стоит. Потому, что нас интересует увеличение возможностей программиста, а не программы. И вот шаблоны эти возможности как раз увеличивают. Равно как и процедуры, функции, объекты, классы, делегаты, функторы и прочие абстракции.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[12]: *
    От: Alex Reyst Россия  
    Дата: 21.10.04 08:42
    Оценка: 7 (1) +1
    Здравствуйте, WolfHound, Вы писали:

    WH>А что он сделал? Несколько ни кому не нужных языков которые по сути не далеко ушли от ассемблера? Развел кучу тупых наездов на С/С++ из серии := vs = ? Создал культ поклонения Оберону? Ты посмотри на Губанова... он же просто фанатеет от оберонов.


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

    И то, что сейчас его действительно "зашкаливает", — это отнюдь не повод относиться неуважительно к человеку, прервавшего в свое время весьма порочную ассоциацию "программирование = Фортран".
    Все, что здесь сказано, может и будет использоваться против меня...
    Re[15]: *
    От: prVovik Россия  
    Дата: 21.10.04 08:46
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:


    СГ>Процедуры и функции во время исполнения программы таки есть (помните такую команду call)? А вот шаблонов нет, то есть шаблоны не увеличивают возможностей программы.


    Ну а какие дополнительные возможности предоставляет команда call? Что мешает руками запихать адрес возврата в стек и сделать jmp? То есть нет никаких дополнительных возможностей.
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[10]: А Вы хоть знаете что такое WITH?
    От: Дарней Россия  
    Дата: 21.10.04 08:48
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Вы в курсе, что изначально ООП основывается вовсе не на трех китах 1) наследование, 2) полиморфизм, 3) инкапсуляция; а всего на одной простой идее: все есть объекты и объекты обмениваются друг с другом сообщениями? Вот пришло к объекту сообщение закодированное в виде числа, как объекту догадаться что это за сообщение? Ему надо либо цепочкой if-else проверить это число с теми числами сообщений которые он понимает, либо сделать это с помощью CASE.


    Когда нужно делать такое большое количество проверок, цепочку из if-else пишут только самые начинающие. Если у человека есть хоть какой-то опыт, то он будет использовать дерево поиска или хэш-таблицу, и получит то же самое быстродействие. Рекомендую ознакомиться с реализацией оконных функций в MFC — там именно так и сделано.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[11]: А Вы хоть знаете что такое WITH?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.10.04 09:30
    Оценка:
    Здравствуйте, Дарней, Вы писали:


    Д>Когда нужно делать такое большое количество проверок, цепочку из if-else пишут только самые начинающие. Если у человека есть хоть какой-то опыт, то он будет использовать дерево поиска или хэш-таблицу, и получит то же самое быстродействие. Рекомендую ознакомиться с реализацией оконных функций в MFC — там именно так и сделано.


    Для пользовательских типов да, так и надо сделать, но для перечислимых типов компилятор сам превратит CASE/switch в хэш таблицу или в дерево поиска! Так как перечислимые типы используются очень часто, то и была придумана структурирующая конструкция CASE/swicth.

    Вот и получаем, что раз нет разницы, то зачем платить больше...
    Re[11]: А Вы хоть знаете что такое WITH?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.10.04 09:41
    Оценка: -2
    Здравствуйте, Sinclair, Вы писали:

    S>Здравствуйте, Сергей Губанов, Вы писали:


    S>А почему бы компилятору не привести в обоих случаях код к одинаковому виду?


    А потому что язык императивный. Когда программист пишет цепочку ELSIF то он именно требует от компьютера того чтобы сначала было проверено первое условие, если оно ложно, то после него надо проверить именно второе условие и т.д. ПОСЛЕДОВАТЕЛЬНО по цепочке.
    IF b1 THEN s1 ELSIF b2 THEN s2 ELSIF b3 THEN s3 ELSE sDefault END

    Проверка условия b1, теоретически, может изменять состояние системы, что в свою очередь, может влиять на результаты выполнения условий b2 и b3. Поэтому, если в программе указана именно такая цепочка, то компьютер и должен проверять условия именно так как указано. Если программисту все равно в каком порядке проверять условия, то он должен использовать операцию множественного выбора условия, т.е. CASE/switch. Это же азбука, основа построения алгоритмов, а Вы по ней вопросы задаете. И как после этого не согласиться с утверждением, что большинство программистов малограмотны...
    Re[12]: А Вы хоть знаете что такое WITH?
    От: Kluev  
    Дата: 21.10.04 09:42
    Оценка:
    СГ>Здравствуйте, Дарней, Вы писали:

    Д>>Когда нужно делать такое большое количество проверок, цепочку из if-else пишут только самые начинающие. Если у человека есть хоть какой-то опыт, то он будет использовать дерево поиска или хэш-таблицу, и получит то же самое быстродействие. Рекомендую ознакомиться с реализацией оконных функций в MFC — там именно так и сделано.


    switch-case по типам весьма полезная штука. Т.к. if + dynamic_cast компилер не прооптимизирует.
    Re[12]: А Вы хоть знаете что такое WITH?
    От: WolfHound  
    Дата: 21.10.04 10:16
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А потому что язык императивный.

    И что с того?
    СГ>Когда программист пишет цепочку ELSIF то он именно требует от компьютера того чтобы сначала было проверено первое условие, если оно ложно, то после него надо проверить именно второе условие и т.д. ПОСЛЕДОВАТЕЛЬНО по цепочке.
    Ну если расматривать сферического коня в вакууме то да.
    А если функцию вида
    int foo(int i)
    {
        if(i == 1)    return 2;
        if(i == 2)    return 5;
        if(i == 3)    return 3;
        if(i == 4)    return 38;
        if(i == 5)    return 20;
        if(i == 6)    return 50;
        if(i == 7)    return 30;
        if(i == 8)    return 380;
        return 255;
    }

    то здесь явно видно что интересующая нас часть машины не изменится и ни что не мешает компилятору этим воспользоваться. Болие того в данном случае не сложно определить что это чистая функция со всеми вытекающими.

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

    Во-во... учите матчасть... А также пятый пункт обязательных правил RSDN.
    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[13]: А Вы хоть знаете что такое WITH?
    От: Kluev  
    Дата: 21.10.04 10:28
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>А потому что язык императивный.

    WH>И что с того?
    СГ>>Когда программист пишет цепочку ELSIF то он именно требует от компьютера того чтобы сначала было проверено первое условие, если оно ложно, то после него надо проверить именно второе условие и т.д. ПОСЛЕДОВАТЕЛЬНО по цепочке.
    WH>Ну если расматривать сферического коня в вакууме то да.
    WH>А если функцию вида
    WH>
    WH>int foo(int i)
    WH>{
    WH>    if(i == 1)    return 2;
    WH>    if(i == 2)    return 5;
    WH>    if(i == 3)    return 3;
    WH>    if(i == 4)    return 38;
    WH>    if(i == 5)    return 20;
    WH>    if(i == 6)    return 50;
    WH>    if(i == 7)    return 30;
    WH>    if(i == 8)    return 380;
    WH>    return 255;
    WH>}
    WH>

    WH>то здесь явно видно что интересующая нас часть машины не изменится и ни что не мешает компилятору этим воспользоваться. Болие того в данном случае не сложно определить что это чистая функция со всеми вытекающими.

    Когда у нас кодец вида:
    if ( A *a = dynamic_cast<A*>(p)) return ...;
    if ( B *b = dynamic_cast<B*>(p)) return ...;

    То компилер это не прооптимизирует. А встроенный свитч по типам наверное бы смог. Так что это фича весьма полезная в некоторых случаях. Например какойнить протокол обмена из 5х-10и сообщений. Когда делать хеш будет в лом. if — будет криво, а встроенный свитч по типам весьма бы подошел.
    Re[16]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.10.04 10:37
    Оценка: -3 :))
    Здравствуйте, Sinclair, Вы писали:

    СГ>>А вот шаблонов нет, то есть шаблоны не увеличивают возможностей программы.

    S>Вот это вообще бред. Все возможности программы были внятно описаны еще до второй мировой войны. Ты с тезисом Черча знаком? Так вот никакие техники программирования, известные на данный момент, ничего не добавляют к понятию вычислимости, введенному сто лет назад.

    Я и говорю — не увеличивают! А Вы в ответ — "бред, хотя, впрочем, ничто не увеличивает...". И как Вас понимать? Вы согласны с тем, что не увеличивают, и одновременно говорите, что это бред!

    Вот, например, циклы — возможности программы увеличивают. Уберите из императивного языка программирования все конструкции циклов — получите инвалида. Процедуры увеличивают возможности программы — уберите из языка программирования процедуры, и лишитесь рекурсии. Уберите из языка программирования указатели (ссылки), и Вы лишитесь динамических структур данных. Уберите из языка программирования процедурные переменные (указатели на процедуры) и Вы лишитесь того что называется (динамическим) полиморфизмом. А что далеко за примерами ходить — уберите из императивного языка программирования вообще все переменные, оставьте только константы, будет не язык, а не поймешь что. А вот шаблоны, что их в язык добавь, что их от туда удали — ничего не изменится, от них только программеру мешьше по клаве ботать. Что они в языке есть, что их нет, мощность языка от этого не меняется. От этого меняется отношение программиста к языку.
    Re[16]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.10.04 10:42
    Оценка: -4 :)
    Здравствуйте, prVovik, Вы писали:


    V>Ну а какие дополнительные возможности предоставляет команда call? Что мешает руками запихать адрес возврата в стек и сделать jmp? То есть нет никаких дополнительных возможностей.

    V>

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

    Подробнее там:
    http://www.rsdn.ru/Forum/Message.aspx?mid=862197&amp;only=1
    Автор: Сергей Губанов
    Дата: 21.10.04
    Re[17]: Что дают шаблоны?
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 21.10.04 10:44
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Для тебя это ничего не меняется (может быть инвалид не язык, а человек его использующий? ), для меня убирание шаблонов выкинет из языка статический полиморфизм, вот C++ станет при этом инвалидом имхо...
    Ну про стат. полиморфизм в ФЯ я вообще молчу — там без этого вообще делать нечего.
    Re[17]: *
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 21.10.04 10:46
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, prVovik, Вы писали:



    V>>Ну а какие дополнительные возможности предоставляет команда call? Что мешает руками запихать адрес возврата в стек и сделать jmp? То есть нет никаких дополнительных возможностей.

    V>>

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


    Это твоё мнение, а не общепризнанный факт, шаблоны — вещь очень мощная и полезная с т.зр. абстракции типов, хотя может быть тебе только процедур достаточно, тогда сорри
    Re[14]: А Вы хоть знаете что такое WITH?
    От: eugals Россия  
    Дата: 21.10.04 10:48
    Оценка: 1 (1) +2
    Здравствуйте, Kluev, Вы писали:

    K>Когда у нас кодец вида:

    K>
    K>if ( A *a = dynamic_cast<A*>(p)) return ...;
    K>if ( B *b = dynamic_cast<B*>(p)) return ...;
    K>

    K>То компилер это не прооптимизирует. А встроенный свитч по типам наверное бы смог.
    Может и смог бы. Но врял ли в Обероне — там (со слов СГ) все модули допускают линковку на рантайме, следовательно, на этапе разбора конструкции WITH, компилер не имеет права делать однозначные утверждения об иерархической принадлежности используемых в коде внешних классов.
    ... << RSDN@Home 1.1.4 beta 2 >>
    Re[17]: Что дают шаблоны?
    От: WolfHound  
    Дата: 21.10.04 11:22
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Я и говорю — не увеличивают! А Вы в ответ — "бред, хотя, впрочем, ничто не увеличивает...". И как Вас понимать? Вы согласны с тем, что не увеличивают, и одновременно говорите, что это бред!


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





    Нет слов.
    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[18]: Что дают шаблоны?
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 21.10.04 11:25
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>Здравствуйте, Сергей Губанов, Вы писали:


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

    WH>
    WH>
    WH>
    WH>
    WH>Нет слов.

    Не хочется быть грубым, но в голове возникает мысль — "а он сам понял что сказал?"
    Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Mamut Швеция http://dmitriid.com
    Дата: 21.10.04 12:14
    Оценка:
    ДГ>>> потом наверняка войдут в обиход математически доказываемые системы, про которые упоминалось в статье-разборе полетов mission-critical глюков.
    Д>>очень узкая ниша — это максимум

    ДГ>На ближайшее будущее — да. Но это самая важная ниша — в ней от глюков люди гибнут.


    Где-то в интернете видел текст человека, работавшего то ли на ускорителе частиц то ли атомной электростанции где-то во Франции. Он там пишет, что представьте насколько тщательно писался и проверялся каждый код. Любая ошибка — и в радиусе пары десятков километров ни одного живого человека.

    Вот такая вот узкая mission-critical ниша...
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[15]: А Вы хоть знаете что такое WITH?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.10.04 12:59
    Оценка:
    Здравствуйте, eugals, Вы писали:

    E>Может и смог бы. Но врял ли в Обероне — там (со слов СГ) все модули допускают линковку на рантайме, следовательно, на этапе разбора конструкции WITH, компилер не имеет права делать однозначные утверждения об иерархической принадлежности используемых в коде внешних классов.


    Не забывайте, что оберонистые модули — это не обычные DLL-ки. В них присутствует информация о типах. Например, в BlackBox, модуль программы физически представлен несколькими файлами
    Mod  - исходный текст модуля                файл *.odc
    
    Code - скомпилированный код для процессора  файл *.ocf
    Sym  - скомпилированный символьный файл     файл *.ocf (аналог скомпилированного header-файла)

    Для компиляции модуля импортирующего другие модули нужно иметь все соответствующие символьные файлы тех модулей. Так что вся информация о иерархии наследования компилятору доступна.

    odc — Oberon Document
    ocf — Oberon Compiled File
    Re[18]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.10.04 13:11
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>для меня убирание шаблонов выкинет из языка статический полиморфизм, вот C++ станет при этом инвалидом имхо...


    Можно ли эту фразу понимать в том смысле, что Вы держитесь двумя руками за Си++, не смотря на тщательно раскиданные в нем ровным слоем грабли, только потому, что в остальных языках (ну, если не считать Аду) нет шаблонов?

    Если так, то как Вы отнесетесь к тому, если вдруг в будущем появится безупречный академически выверенный язык (совершенно без граблей) и тоже с шаблонами (Oberon + Templates)?
    Re[19]: Что дают шаблоны?
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 21.10.04 13:21
    Оценка: 2 (2)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Курилка, Вы писали:


    К>>для меня убирание шаблонов выкинет из языка статический полиморфизм, вот C++ станет при этом инвалидом имхо...


    СГ>Можно ли эту фразу понимать в том смысле, что Вы держитесь двумя руками за Си++, не смотря на тщательно раскиданные в нем ровным слоем грабли, только потому, что в остальных языках (ну, если не считать Аду) нет шаблонов?


    СГ>Если так, то как Вы отнесетесь к тому, если вдруг в будущем появится безупречный академически выверенный язык (совершенно без граблей) и тоже с шаблонами (Oberon + Templates)?


    Очень положительно, если это будет не оторванный от жизни язык швейцарских академиков, а вещь, которую можно будет в жизни использовать.
    Т.е. я согласен уже с несколькими мнениями о том, что C++ — вещь по сути очень хорошая, но имеющая много не очень хороших вещей, тянущихся от C или даже раньше того

    З.Ы. Как бы это не было прискорбно, но вообще я сейчас на Delphi программлю , вот там периодически не хватает "плюсовых" вещей.
    Re[16]: А Вы хоть знаете что такое WITH?
    От: eugals Россия  
    Дата: 21.10.04 13:49
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Для компиляции модуля импортирующего другие модули нужно иметь все соответствующие символьные файлы тех модулей.

    Было бы странно, если бы нет.

    СГ> Так что вся информация о иерархии наследования компилятору доступна.

    Она ему доступна на момент компиляции. Но как он может быть уверен что она не изменится в дальнейшем?

    Допустим у меня есть модуль A, который экспортирует класс сA.
    Есть модуль B, с классом сB.
    Есть третий, клиентский, модуль, в котором написано:
    with 
        obj: cA do сделать_одно_действие   |
        obj: cB do сделать_другое_действие
    end

    Соответственно, если компилятор будет пытаться оптимизировать эту конструкцию, например строить хеш-таблицу, он может придти к тому, что изначально указанные выше проверки поменяются местами (так удобнее хеш вычислять окажется), то есть проверка на cB станет проходить до проверки на cA.
    Проблема в том, что (ты сам говорил) ComponentPascal позволяет на рантайме отгружать/перегружать отдельные модули программы. Соответственно, никто не мешает мне в какой-то момент изменить, не трогая его внешний интерфейс, внутреннюю организацию модуля A. Именно, взять и назначить класс cA наследником класса cB.
    Понятно, что, без перекомпиляции, приведенная выше оптимизированная конструкция "with" станет работать неверно (все полученные классы cA станет распознавать как cB).

    Предполагаю следующие возможные решения этой проблемы:
    1. Каждый раз, при рилоаде любого модуля, перекомпилировать и все он него зависящие.
    2. Запещать на рантайме менять в модулях что-либо кроме внутренней реализации методов классов.
    3. Не отптимизировать конструкцию WITH.

    Я (впрочем, думаю как и Вы) не знаю внутренней реализации Оберона.
    Тем не менее, позволю себе предположить, что выбран вариант №3, так как в первом нет ничего хорошего (уж лучше сразу всё приложение остановить и заново загрузить), а второй просто глупый и убивает на корню все выгоды от динамической загрузки модулей.

    Повторю, всё выше написанное — в основном предположения, к тому же сделанные с чужих (тоих ) слов. Есть небольшая вероятность, что я не прав — буду раз услышать квалифицированное опровержение.
    ... << RSDN@Home 1.1.4 beta 2 >>
    Re[2]: Вы чего!!!
    От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
    Дата: 21.10.04 15:32
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    ГВ>>Перестаньте позорить чистое имя Вирта наглым пренебрежением к LSP!!! За подобные последовательности в нормальном промышленном коде нужно обрывать руки и предавать анафеме до конца семестра.

    СГ>Простите, Вы с чем-то не согласны?

    Естественно. ИМХО — анализировать тип объекта в клиентском коде э... опасная практика. Хотя и применима иногда.
    ... << RSDN@Home 1.1.3 stable >>
    Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
    P.S.: Винодельческие провинции — это есть рулез!
    Re[15]: *
    От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
    Дата: 21.10.04 15:53
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>>>Шаблоны позволяют меньше ручками по клавиатуре долбить.

    ГВ>>2. Процедуры, функции, и прочее подобное предназначены для того же. И что из этого следует?
    СГ>Процедуры и функции во время исполнения программы таки есть (помните такую команду call)? А вот шаблонов нет, то есть шаблоны не увеличивают возможностей программы.

    Сформулируй понятие "возможности программы" в контексте нашей беседы вне привязки к конкретному языку программирования. Что это такое — "возможности программы"? И что на них влияет? А там и рассмотрим.
    ... << RSDN@Home 1.1.3 stable >>
    Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
    P.S.: Винодельческие провинции — это есть рулез!
    Re[17]: Что дают шаблоны?
    От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
    Дата: 21.10.04 16:41
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Не всё так просто. Говоря о языке мы всё-таки оцениваем язык как совокупность его возможностей. Выбрось одно или другое, и мы получим уже другой язык. С другой совокупностью фич и т.д. Согласен, что с "академической" точки зрения шаблоны, возможно, и не представляют особого интереса. А вот с практической — очень даже. Какой? А очень простой — уменьшить объёмы исходного кода, добавить надёжности за счёт статического полиморфизма и некоторым образом структурировать усилия по дальнейшему развитию программы. Поэтому твой пассаж насчёт "ничего не изменится" вызывает улыбку.

    ИМХО, Вирт сейчас нацелен несколько на иное — он подбирает минимальный набор конструкций языка. Правда, почему-то при этом его несёт совсем в другою сторону... Почётное дело, надо сказать! Но практика, увы, она от теории всё-таки несколько отличается, как ни крути. Поэтому я, например, трудами Вирта до некоторой степени интересуюсь, но вот фетишизма и желания взять в руки флаг с надписью "Virth forever!" по этому поводу у меня не возникает. ИМХО, он всё-таки больше склонен к программизму, чем к синтезу из того комплекта, с которым нам приходится сталкиваться: психология, давление сроков и т.п. Я например, отказался от Паскалеподобных (и Java-подобных) языков, потому что они заставляли очень много писать. Гораздо больше, чем C++. И существенно дальше находились от "железного уровня", чем тот же C. А C++, ИМХО, не самый лучший, но вполне удачный синтез этих пожеланий (поменьше писать и спускаться поближе к железу).

    ИМХО, C++ "страдает" как раз от большого количества нестыковок. Например, мне была бы интересна возможность сведения операторов к виду функций (я вкурсе, что любой оператор можно завернтуь в функцию!). Декларирование требований к интерфейсам аргументов шаблонов тоже не помешало бы. Хмм... что ещё. Интересно было бы иметь возможность из аргументов шаблонов определять как он будет использоваться — как родитель или как агрегируемый объект (не могу пока придумать толком — зачем, но любопытно...). Ещё хотелось бы определять шаблонами характеристики доступности элементов класса (public/protected/private). Ну, можно ещё что-то придумать...

    PS. Ничего личного, разумеется.
    ... << RSDN@Home 1.1.3 stable >>
    Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
    P.S.: Винодельческие провинции — это есть рулез!
    Re[17]: *
    От: prVovik Россия  
    Дата: 21.10.04 16:47
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:


    А вот у меня возник вопрос: а зачем вообще нужны языки программирования высокого уровня (ЯВУ)? Ведь никаких дополнительных "возможностей программы" по сравнению с ассемблером они не предоставляют, и не могут предоставить в принцепе! Более того, любая программа на ЯВУ, в конце концов, всеравно будет представлена в виде ассемблера. Если пользоваться вашей логикой, то получается, что ЯВУ, включая замечательный оберон, вообще не нужны. Имхо бред...
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[17]: Что дают шаблоны?
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 22.10.04 06:44
    Оценка: 1 (1) +3
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Я и говорю — не увеличивают! А Вы в ответ — "бред, хотя, впрочем, ничто не увеличивает...". И как Вас понимать? Вы согласны с тем, что не увеличивают, и одновременно говорите, что это бред!

    С каждым разом это все забавнее...
    СГ>Вот, например, циклы — возможности программы увеличивают.
    Ну конечно же не увеличивают!
    СГ>Уберите из императивного языка программирования все конструкции циклов — получите инвалида.
    Ничего подобного. Если есть конструкция goto — можно организовать и цикл.
    СГ> Процедуры увеличивают возможности программы — уберите из языка программирования процедуры, и лишитесь рекурсии.
    Ничего подобного. Вполне можно обойтись goto.
    СГ>Уберите из языка программирования указатели (ссылки), и Вы лишитесь динамических структур данных.
    Согласен. Косвенная адресация — весчь необходимая. В императивных языках, ессно.
    СГ>Уберите из языка программирования процедурные переменные (указатели на процедуры) и Вы лишитесь того что называется (динамическим) полиморфизмом. А что далеко за примерами ходить — уберите из императивного языка программирования вообще все переменные, оставьте только константы, будет не язык, а не поймешь что.
    Ну вот можно вообще очень много что убрать. Получим RISC-ассемблер. И что, вы думаете, на нем невозможно написать аналог Оберон-программы? Вот это-то и бред. Мощность языка останется той же самой. Только программисту колотить больше.
    СГ>А вот шаблоны, что их в язык добавь, что их от туда удали — ничего не изменится, от них только программеру мешьше по клаве ботать. Что они в языке есть, что их нет, мощность языка от этого не меняется.
    В программировании рулит то и только то, что позволяет программисту ботать меньше. Потому что именно он — слабое звено. А сами по себе алгоритмы прекрасно реализуются и на машине Тьюринга.
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[18]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.10.04 08:16
    Оценка: -1
    Здравствуйте, Sinclair, Вы писали:

    S>Ничего подобного. Вполне можно обойтись goto.


    Так убери еще и goto. Что изменилась мощность языка? То-то, а от шаблонов она не меняется.
    Re[18]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.10.04 08:21
    Оценка:
    Здравствуйте, prVovik, Вы писали:

    V> ... Если пользоваться вашей логикой ...


    Логика заключалась в том, что мысленно убираются/добавляются конструкции языка высокого уровня и производится анализ того что это дает этому ЯВУ. Об ассемблерах в ЯВУ ничего не известно.
    Re[19]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 22.10.04 08:27
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Так убери еще и goto. Что изменилась мощность языка?


    на самом деле — нет
    можно сделать push нужного адреса, а потом ret
    еще можно сделать mov ip, <address> — если не ошибаюсь
    или особо извращенный вариант — скопировать нужный кусок кода на место следующей по порядку инструкции
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[19]: Что дают шаблоны?
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 22.10.04 08:27
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Sinclair, Вы писали:


    S>>Ничего подобного. Вполне можно обойтись goto.


    СГ>Так убери еще и goto. Что изменилась мощность языка? То-то, а от шаблонов она не меняется.


    Объясни — чем ты меряешь мощность языка? Ваттметром?
    Имхо, показателем мощности можно считать число затрачиваемых программером физических и умственных усилий для написания кода, остальное — демагогия, не более того.
    Re[17]: А Вы хоть знаете что такое WITH?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.10.04 08:34
    Оценка:
    Здравствуйте, eugals, Вы писали:

    E>...Соответственно, никто не мешает мне в какой-то момент изменить, не трогая его внешний интерфейс, внутреннюю организацию модуля A. Именно, взять и назначить класс cA наследником класса cB.


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

    Кстати, именно всвязи с этим явлением десять лет назад появилась новая парадигма программирования — КОП (компонентно ориентированная парадигма программирования), основанная Клеменсом Шиперски (сооснователем Oberon Microsystems, а ныне трудящемся в Microsoft). КОП является дальнейшим развитием обычного ООП, но налагает на него некоторые ограничения. Одно из положений КОП заключается в том, что межмодульное наследование — это плохо. КОП приветсвует только межмодульное наследование АБСТРАКТНЫХ классов. В одном модуле определяется Абстрактный класс, а другие модули определяют классы — реализаторы того абстрактного класса-интерфейса. Другими словами межмодульное наследование должно быть двухуровневым интерфейс-реализация.

    Что такое компонентно-ориентированное программирование (краткая справка):
    http://www.inr.ac.ru/~info21/info/qtocop.htm

    Собственно, язык Component Pascal и стал первым языком поддерживающим КОП. Потом появились дот.нетовские аналоги (что не удивительно, если принять во внимание уход Шиперского в Микрософт).
    Re[20]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.10.04 08:38
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>можно сделать push нужного адреса, а потом ret

    Д>еще можно сделать mov ip, <address> — если не ошибаюсь

    Извини, в ЯВУ нет push и mov. А мы, вроде как ЯВУ рассматриваем.
    Re[20]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.10.04 08:46
    Оценка: :)
    Здравствуйте, Курилка, Вы писали:

    К>Объясни — чем ты меряешь мощность языка? Ваттметром?


    Формального определения не дам. Дам интуитивное. Мощностью ЯВУ я называю количество вариантов разных программ, которые на нем можно написать. Например, интуитивно понятно, что если убрать из ЯВУ указатели, ссылки и оператор NEW, то на таком ЯВУ нельзя будет написать ни одной программы работающей с динамическими структурами данных, то есть размерность пространства всевозможных программ, которые можно написать на таком ЯВУ уменьшиться. Я употребляю слово "мощность", чтобы обозвать, хм, эту штуковину.
    Re[21]: Что дают шаблоны?
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 22.10.04 08:52
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Курилка, Вы писали:


    К>>Объясни — чем ты меряешь мощность языка? Ваттметром?


    СГ>Формального определения не дам. Дам интуитивное. Мощностью ЯВУ я называю количество вариантов разных программ, которые на нем можно написать. Например, интуитивно понятно, что если убрать из ЯВУ указатели, ссылки и оператор NEW, то на таком ЯВУ нельзя будет написать ни одной программы работающей с динамическими структурами данных, то есть размерность пространства всевозможных программ, которые можно написать на таком ЯВУ уменьшиться. Я употребляю слово "мощность", чтобы обозвать, хм, эту штуковину.


    И почему же шаблоны не влияют на твою мощность?
    Имхо, очень даже влияют, т.к. без них ты не можешь писать статически полиморфичные алгоритмы, что обедняет язык.
    Не зря же дженерики и в шарп и в яву добавили, значит нужно оно людям.
    Хоть там и реализация несколько иная, чем в плюсах.
    Re[18]: А Вы хоть знаете что такое WITH?
    От: Kluev  
    Дата: 22.10.04 09:07
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, eugals, Вы писали:


    СГ>Одно из положений КОП заключается в том, что межмодульное наследование — это плохо. КОП приветсвует только межмодульное наследование АБСТРАКТНЫХ классов. В одном модуле определяется Абстрактный класс, а другие модули определяют классы — реализаторы того абстрактного класса-интерфейса. Другими словами межмодульное наследование должно быть двухуровневым интерфейс-реализация.


    Гы. На самом деле межмодульное наследование крайне важная вещь и в то же время действительно есть куча граблей на которые народ постоянно наступает.

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

    Однако эта проблема очень хорошо решается с помошью паттерна P-Impl:

    class Base {
       void *pImpl_; // закрытая реализация, вставляй добавляй что хочешь.
    public:
       // интерфейсная часть
    };


    Вернее здесь нужен расширенный паттерн P-Impl с возможностью наследования. Т.е производному классу как-то нужно запихнуть свои данные в указатель *pImpl_ причем он ничего не знает о его типе и устройстве.

    Я для этого дела даже написал небольшой фреймворк. Т.е. в базовом классе имеем указатель pImpl на структуру данных, и все дочернии классы могут получить себе в ней секцию для своих данных. Естесвено используется только один блок памяти, нарезанный для всех классов. Т.е. можно обеспечить полный простор в вопросах изменения реализации и при этом сохранить полную обратную двоичную совместимость м-ду модулями.
    К примеру реализацию класса размазанного насделованием по Base.dll -> Extended.dll -> App.exe можно менять как угодно добавляя или удаляя данные не ломая совместимости м-ду библиотеками. Т.е. изменение в одно не требует перекомпиляции остальных.
    Re[21]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 22.10.04 09:08
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Извини, в ЯВУ нет push и mov. А мы, вроде как ЯВУ рассматриваем.


    Значит, надо было просто не смущать народ некорректными определениями, а сказать просто:
    В любом языке есть вещи, от которых можно отказаться. И есть те, от которых отказаться нельзя.
    От шаблонов отказаться можно, за счет технологии copy-paste. От ООП как такового тоже, кстати Значит, ООП тоже не добавляет языку "мощности"?
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[19]: *
    От: prVovik Россия  
    Дата: 22.10.04 09:14
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, prVovik, Вы писали:


    V>> ... Если пользоваться вашей логикой ...


    СГ>Логика заключалась в том, что мысленно убираются/добавляются конструкции языка высокого уровня и производится анализ того что это дает этому ЯВУ. Об ассемблерах в ЯВУ ничего не известно.


    Ну хорошо. Удалим шаблоны из С++ и лишимся обобщенного программирования. Так пойдет?
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[19]: Что дают шаблоны?
    От: prVovik Россия  
    Дата: 22.10.04 09:26
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Sinclair, Вы писали:


    S>>Ничего подобного. Вполне можно обойтись goto.


    СГ>Так убери еще и goto. Что изменилась мощность языка? То-то, а от шаблонов она не меняется.

    Гы-гы. Ну а зачем тогда в том же паскале столько вариантов циклов: for, repeat, wile. Нафига они вообще нужны, мощность языка от них ведь не меняется?

    Короче, бейсик форева!
    IF a=10 THEN GOTO 100 ELSE GOTO 80

    И ничего лишнего!!!
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[22]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.10.04 09:26
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Извини, в ЯВУ нет push и mov. А мы, вроде как ЯВУ рассматриваем.


    Д>Значит, надо было просто не смущать народ некорректными определениями, а сказать просто:

    Д>В любом языке есть вещи, от которых можно отказаться. И есть те, от которых отказаться нельзя.
    Д>От шаблонов отказаться можно, за счет технологии copy-paste. От ООП как такового тоже, кстати Значит, ООП тоже не добавляет языку "мощности"?

    А что есть ООП? В узком смысле, ООП-ом можно обозвать процедурные переменные. Процедурные переменные (или в терминологии Си/Си++ — указатели на функцию) добавляют мощности языку (динамический полиморфизм). Кстати в самом первом обероне виртуальных функций не было, полиморфизм достигался благодаря процедурным переменным, тем не менее язык являлся ОО языком. Что касается расширения типов (наследования), наверное, напрямую мощность языка от этого не увеличивается (хотя утверждать этого не буду), но зато это позволяет сохранить в языке строгую статическую типизацию одновременно как бы и нарушая ее в каком-то более высоком смысле...
    Re[22]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.10.04 09:31
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К> не можешь писать статически полиморфичные алгоритмы


    Да, не могу. Но, тем не менее, количество разных программ которые я могу написать с шаблонами или без шаблонов (используя copy-paste) одинаково. То есть мощность языка не меняется. Шаблоны — это средство стоящее выше языка (над ним, мета-язык).
    Re[10]: *
    От: Кодт Россия  
    Дата: 22.10.04 09:48
    Оценка: :)
    Здравствуйте, Sinclair, Вы писали:

    S>Ну, на самом деле это не все. Паскаль — неизмеримо круче плюсов потому, что

    S>

      S>
    1. := гораздо понятнее, чем =
      Для сишника это вообще какой-то абзац. Выглядит как автохреномент: x:=y это x=x:y и что это за операция двоеточие? Вспоминается APL.
      S>
    2. ^. гораздо понятнее, чем ->
      Ну это фигня, в Си можно записать (*ptr).
      Правда, в С++ это не всегда проканает (благодаря перегрузке обоих операторов, * и -> )
      S>
    3. строковые константы ограничиваются одинарными, а не двойными кавычками (в ДВА раза меньше штрихов!)
      Попробуйте вставить туда спецсимволы — тут же нарвётесь на некроссплатформенность, во-первых (а кто сказал, что LF в данной кодировке имеет значение 10?), и на уйму писанины, во-вторых.
      S>
    4. в If можно писать на одну пару скобок меньше
      А как же слово then ? +then -() итого два лишних символа, а ещё обязательные пробелы...
      S>
    S>Хотя, конечно, главное — все-таки то, что преподавание языка, где присваивание выполняется при помощи "=" означает выставить себя посмешищем.

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


    Дейкстра уже говорил нащщот самого популярного языка...
    Перекуём баги на фичи!
    Re[23]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 22.10.04 09:48
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А что есть ООП? В узком смысле, ООП-ом можно обозвать процедурные переменные. Процедурные переменные (или в терминологии Си/Си++ — указатели на функцию) добавляют мощности языку (динамический полиморфизм). Кстати в самом первом обероне виртуальных функций не было, полиморфизм достигался благодаря процедурным переменным, тем не менее язык являлся ОО языком. Что касается расширения типов (наследования), наверное, напрямую мощность языка от этого не увеличивается (хотя утверждать этого не буду), но зато это позволяет сохранить в языке строгую статическую типизацию одновременно как бы и нарушая ее в каком-то более высоком смысле...


    Указатели на функции тоже не являются абсолютно необходимыми. Их при желании можно заменить на большой такой switch, который в зависимости от полученного числа будет вызывать разные функции. Значит, они тоже не добавляют языку "мощности"?
    То же самое касается и наследования. С помощью copy-paste и такой-то матери без него тоже можно прекрасно обойтись
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[4]: Где собака зарыта???
    От: Кодт Россия  
    Дата: 22.10.04 10:04
    Оценка:
    Здравствуйте, Евгений Коробко, Вы писали:

    ЕК>Да вы что! Это же замечательная вещь. Можно работать с неименованной переменной без копирования в локальную переменную. Это и быстро (х.з. сможет компилятор ли соптимизировать лишее копирование), и красиво — не загромождаем код лишними переменными.


    А вот нефиг копировать. Заводишь именованную ссылку на временный объект и наслаждаешься.
    for(Query& q = conn.execute("select * from table"); !q.eof(); q.next())
    {
      ...
    }

    Заметьте, цикл for — с выделенными предикатом проверки и выражением итерирования. А не while, где это итерирование засунуто бог весть куда (что, кстати, не только читаемость ухудшает, но и даёт возможность для ошибок)
    // сравните
    for(init(); cond(); next())
    {
      work1();
      if(x()) continue;
      if(y()) continue;
      work2();
    }
    
    // с неправильным
    init();
    while(cond())
    {
      work1();
      if(x()) continue;
      if(y()) continue;
      work2();
      next();
    }
    
    // и правильным, но громоздким (лишний код)
    init();
    while(cond())
    {
      work1();
      if(x()) { next(); continue; }
      if(y()) { next(); continue; }
      work2();
      next();
    }
    // или ещё более громозким (лишняя переменная, лишний текст)
    init();
    bool secondary=false;
    while(true)
    {
      if(secondary) next(); else secondary=true;
      if(!cond()) break;
    
      work1();
      if(x()) continue;
      if(y()) continue;
      work2();
    }

    На паскале специально не написал — синтаксис более громоздкий. Но идея и так видна.
    Перекуём баги на фичи!
    Re[23]: Что дают шаблоны?
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 22.10.04 10:10
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Курилка, Вы писали:


    К>> не можешь писать статически полиморфичные алгоритмы


    СГ>Да, не могу. Но, тем не менее, количество разных программ которые я могу написать с шаблонами или без шаблонов (используя copy-paste) одинаково. То есть мощность языка не меняется. Шаблоны — это средство стоящее выше языка (над ним, мета-язык).


    Тебе рядом приводили, что ООП тоже вполне может быть реализовано копипастом, так что количество тоже будет одинаковым?
    Вон если взять ассемблер, то на нём тоже можно получить такое же число программ, значит ассемблер такой же мощности, что и твой оберон?
    Re[20]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Кодт Россия  
    Дата: 22.10.04 10:16
    Оценка:
    Здравствуйте, Kh_Oleg, Вы писали:

    K_O>Я давно не пользовался MathLab, поэтому могу ошибаться, однако, насколько я помню данный продукт является специализированной системой для обработки математических выражений: взятие интегралов в аналитическом виде, решение огромных СЛАУ, решение дифференциальных уравнений больших порядков, вычисление пределов и проч., т.е. то, что математик (физик, химик, ученый или инженер другой специальности) вычислит и сам на бумажке, но у него на это уйдет много времени. Цель данного продукта — сэкономить время на решении трудоемких математических задач. Отсюда — иные средства, иной язык более удобный для математика, нежели для программиста, иные особенности. Математику достаточно знать, что вот это — матрица, с такими-то значениями, и требуемая операция над ней должна быть выполнена за относительно приемлемое время. А для ряда задач время выполнения вообще роли не играет — лишь бы посчиталось.


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


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


    Просто ты не лазил в тексты программ на матлабе. Это нормальный скриптовый язык, только встроенные типы у него — скаляры, векторы и матрицы.
    Кстати, вся эта муть с огромными СЛАУ, интегрированием и т.п. — написана ручками на матлабовском скрипте. Внутри библиотек — с лёгкостью применяется императивный подход. Что, разумеется, требует от разработчика как математического образования, так и программистского.
    Перекуём баги на фичи!
    Re[5]: Где собака зарыта???
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.10.04 10:25
    Оценка:
    Здравствуйте, Кодт, Вы писали:

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

    for(init(); cond(); next())
    {
      work1();
      if(x()) continue;
      if(y()) continue;
      work2();
    }

    К>На паскале специально не написал — синтаксис более громоздкий. Но идея и так видна.


    Однако.... А без continue слабо?
    init();
    WHILE cond() DO
      work1(); IF ~x() & ~y() THEN work2() END;
      next();  
    END;

    Логическое выражение вычисляется слева на право, если ~x() ложно, то значение y() не вычисляется.
    Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Sergey J. A. Беларусь  
    Дата: 22.10.04 10:38
    Оценка:
    Здравствуйте, AVM, Вы писали:

    AVM>А на кой тебе надо логировать действия процессора ?

    AVM>У тебя исходники есть, процессор есть, тебе надо залогировать, только общий ход выполнения программы,
    AVM>что бы потом при разборе ты мог востроизвести ситуацию на Земле.
    Если ошиблись при вводе программы, то исходники не помогут
    Я — свихнувшееся сознание Джо.
    Re[8]: А Вы хоть знаете что такое WITH?
    От: Кодт Россия  
    Дата: 22.10.04 10:39
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Ни что не мешает делать аналогичную оптимизацию для WITH по сравнению с цепочкой dynamic_cast-ов.


    Мешает, и ещё как мешает.
    Если в спецификации не прописано явно, что with всегда выбирает most derived ветку, то порядок проверок становится существенным.
    В этом отличие от case: целочисленная переменная не может быть равна нескольким разным ключевым значениям, а полиморфный объект — может принадлежать разным классам одновременно.
    Перекуём баги на фичи!
    Re[6]: собака зарыта здесь!
    От: Дарней Россия  
    Дата: 22.10.04 10:46
    Оценка: +1 :)
    Здравствуйте, Сергей Губанов, Вы писали:

    Честно говоря — не вижу вообще никакого смысла в этом споре о какой-то непонятной "мощности". Вполне очевидно, что ни один ЯВУ не может иметь бОльшей мощности, чем Ассемблер — если толковать это понятие так, как это делаешь ты
    Поскольку С++ позволяет вставлять в программу фрагменты на ассемблере, а также довольно легко интегрировать их в основную прогу — можно сделать вывод, что он тоже обладает не меньшей мощностью. Если не ошибаюсь, в Обероне такой возможности нет. В таком случае, мощность Оберона должна быть намного меньше, чем у С++ и ассемблера.
    Правильно?
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[6]: Где собака зарыта???
    От: eugals Россия  
    Дата: 22.10.04 10:48
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Однако.... А без continue слабо?

    Канешна слабо! Это же Кодт, он на RSDN известный слабак.
    Вот, к примеру, хоть здесь посмотри: Топ100
    ... << RSDN@Home 1.1.4 beta 2 >>
    Re[17]: *
    От: Кодт Россия  
    Дата: 22.10.04 10:55
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    V>>Ну а какие дополнительные возможности предоставляет команда call? Что мешает руками запихать адрес возврата в стек и сделать jmp? То есть нет никаких дополнительных возможностей.


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


    Это ты так думаешь, потому что с шаблонами мало имел дела.

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

    СГ>http://www.rsdn.ru/Forum/Message.aspx?mid=862197&amp;only=1
    Автор: Сергей Губанов
    Дата: 21.10.04


    "Уберите переменные, оставьте константы"...
    Получим нормальный декларативный язык. Да, приёмы программирования на ФЯ/ЛЯ существенно отличаются от императивных. Но это не значит, что они ущербны.

    Я уж про Форт молчу...
    Перекуём баги на фичи!
    Re[19]: Что дают шаблоны?
    От: Кодт Россия  
    Дата: 22.10.04 10:59
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Можно ли эту фразу понимать в том смысле, что Вы держитесь двумя руками за Си++, не смотря на тщательно раскиданные в нем ровным слоем грабли, только потому, что в остальных языках (ну, если не считать Аду) нет шаблонов?


    Кстати, если из Ады выкинуть шаблоны, то министерство обороны США отправит такого пионера "к первоисточнику". И правильно сделают, потому что шаблоны там сделаны не для красоты, а для критического увеличения надёжности.
    Перекуём баги на фичи!
    Re[23]: Что дают шаблоны?
    От: WolfHound  
    Дата: 22.10.04 11:06
    Оценка: 3 (1) +3
    Здравствуйте, Сергей Губанов, Вы писали много бреда:

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

    Машина Тьюринга это: Бесконечная в обе стороны лента разбитая на ячейки памяти в которые можно записать что угодно. На ленте есть корретка у которой есть состояние и она может посмотреть что находиться в текущей ячейке, записать что-то в текущею ячейку, изменить свое состояние или сдвинуться на одну позицию в право или в лево.
    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[21]: Что дают шаблоны?
    От: Кодт Россия  
    Дата: 22.10.04 11:20
    Оценка: +1 :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Формального определения не дам. Дам интуитивное. Мощностью ЯВУ я называю количество вариантов разных программ, которые на нем можно написать.


    Мощность множества всех конечных цепочек из конечного алфавита — алеф-0.
    Поэтому в ТМ-трактовке все языки программирования имеют одинаковую мощность (кроме специально выведенных ублюдков, в которых длина программы жёстко ограничена).

    А мощность множества вообще-всех программ — алеф-2, поскольку программа — это функция, у которой область определения/результатов имеет мощность алеф-1 (бесконечные цепочки конечного алфавита). Но средствами формальных языков всё это множество не покроешь.

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


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

    "Женская интуиция — поразительное чувство, дающее женщине уверенность в своей правоте вне зависимости от того, права она или не права".
    (дамы, не обижайтесь... просто к слову пришлось)
    Перекуём баги на фичи!
    Re[9]: А Вы хоть знаете что такое WITH?
    От: Кодт Россия  
    Дата: 22.10.04 11:27
    Оценка:
    СГ>>Ни что не мешает делать аналогичную оптимизацию для WITH по сравнению с цепочкой dynamic_cast-ов.

    К>Мешает, и ещё как мешает.

    К>Если в спецификации не прописано явно, что with всегда выбирает most derived ветку, то порядок проверок становится существенным.
    К>В этом отличие от case: целочисленная переменная не может быть равна нескольким разным ключевым значениям, а полиморфный объект — может принадлежать разным классам одновременно.

    Ну и разумеется, в случае множественного наследования никакое most derived не спасёт в принципе.
    Перекуём баги на фичи!
    Re[24]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.10.04 11:27
    Оценка:
    Здравствуйте, Дарней, Вы писали:

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


    Ничего подобного! switch Вы напишете только для известных Вам функций (а зачем его тогда писать если они Вам и так известны), а для неизвестных функций Вы его не напишите! В этом весь прикол и состоит что процедурную переменную можно передать в чужой код и он сможет вызвать не известную ему процедуру.
    Re[7]: Где собака зарыта???
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.10.04 11:40
    Оценка:
    Здравствуйте, eugals, Вы писали:

    E>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Однако.... А без continue слабо?

    E>Канешна слабо! Это же Кодт, он на RSDN известный слабак.
    E>Вот, к примеру, хоть здесь посмотри: Топ100

    Ну, знаете, тогда я считаю что у меня развязаны руки.
    Пожалуйста: http://www.rsdn.ru/Forum/Message.aspx?mid=864257&amp;only=1
    Автор: Сергей Губанов
    Дата: 22.10.04
    Re[7]: Где собака зарыта???
    От: Кодт Россия  
    Дата: 22.10.04 11:40
    Оценка: +1
    Здравствуйте, eugals, Вы писали:

    СГ>>Однако.... А без continue слабо?

    E>Канешна слабо! Это же Кодт, он на RSDN известный слабак.
    E>Вот, к примеру, хоть здесь посмотри: Топ100

    Авторитетом давишь но всё равно приятно

    Без continue — это будет или иерархическое нагромождение if'ов, или добавление переменных stop и bypass.
    for(init(); cond(); next())
    {
      work1();
      if(x()) { workx(); continue; }
      work2();
      if(y()) { worky(); break; }
      work3();
      if(z()) { workz(); continue; }
      work4();
    }

    преобразуется в
    init();
    bool stop=false;
    while(!stop && cond())
    {
      bool bypass=false;
      // в первых двух строчках проверка вырождена, но я её написал для однородности кода
      if(!bypass) work1();
      if(!bypass) if(x()) { workx(); bypass=true; }
      if(!bypass) work2();
      if(!bypass) if(y()) { worky(); bypass=true; stop=true; }
      if(!bypass) work3();
      if(!bypass) if(z()) { workz(); bypass=true; }
      if(!bypass) work4();
      // условие перед итерацией
      if(!stop) next();
    }

    Вариант с if'ами — выглядит страшно.
    init();
    bool stop=false; // для break всё равно нужно
    while(!stop && cond())
    {
      work1();
      if(x()) workx();
      else {
      work2();
      if(y()) { worky(); stop=true; }
      else {
      work3();
      if(z()) workz();
      else {
      work4();
      }}}
      if(!stop) next();
    }
    Перекуём баги на фичи!
    Re[25]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 22.10.04 11:41
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Ничего подобного! switch Вы напишете только для известных Вам функций (а зачем его тогда писать если они Вам и так известны)


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

    СГ>а для неизвестных функций Вы его не напишите! В этом весь прикол и состоит что процедурную переменную можно передать в чужой код и он сможет вызвать не известную ему процедуру.


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

    Какие еще будут аргументы? От чего мы будем отказываться на этот раз? Так можно и правда до машины Тьюринга добраться
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[8]: Где собака зарыта???
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.10.04 12:11
    Оценка: :)))
    Здравствуйте, Кодт, Вы писали:

    init();
    bool stop=false;
    while(!stop && cond())
    {
      bool bypass=false;
      // в первых двух строчках проверка вырождена, но я её написал для однородности кода
      if(!bypass) work1();
      if(!bypass) if(x()) { workx(); bypass=true; }
      if(!bypass) work2();
      if(!bypass) if(y()) { worky(); bypass=true; stop=true; }
      if(!bypass) work3();
      if(!bypass) if(z()) { workz(); bypass=true; }
      if(!bypass) work4();
      // условие перед итерацией
      if(!stop) next();
    }
    
    init();
    bool stop=false; // для break всё равно нужно
    while(!stop && cond())
    {
      work1();
      if(x()) workx();
      else {
      work2();
      if(y()) { worky(); stop=true; }
      else {
      work3();
      if(z()) workz();
      else {
      work4();
      }}}
      if(!stop) next();
    }


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

    Универсальная конструкция:
    init();
    LOOP 
      IF x1() THEN v1() ELSE
        w1();
        IF x2() THEN v2() ELSE 
          w2();
          IF x3() THEN v3(); EXIT ELSE (* обратите внимание на вставленные EXIT - это вместо Вашего break *)
            w3(); 
            IF x4() THEN v4() ELSE 
              w4();
              IF x5() THEN v5() ELSE 
                w5();
                IF x6() THEN v6() ELSE 
                  w6();
                  .................................. 
                END
              END
            END
          END
        END;
      END
      next();
    END

    В том месте где нуже выход из цикла, там вставляем EXIT
    Re[8]: Где собака зарыта???
    От: eugals Россия  
    Дата: 22.10.04 12:33
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Авторитетом давишь

    Никого я не давлю. Просто призываю соотносить уровень аргументов с уровнем собеседников.
    Очевидно ведь, что любой мало-мальски грамотный программист догадался бы заменить в том примере два ифа на один, с условием ИЛИ внутри. К чему эти мелкие придирки, никак не опровергающие основного сообщения...
    да ещё и "слабо" это...
    ... << RSDN@Home 1.1.4 beta 2 >>
    Re[26]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.10.04 12:53
    Оценка: -1
    Здравствуйте, Дарней, Вы писали:


    Д> ... Чужой код вызовет моего диспетчера ...

    Д> ... Какие еще будут аргументы? ...

    Да ровно теже самые. Ведь, чужой код может вызвать Ваш диспетчер, только если Вы сами передадите ему Ваш диспетчер (call-back функцию). А по условию задачи указателей на функции нет. Значит чужой код не знает откуда взять Ваш диспетчер и одновременно Вы не можете его ему передать.


    PROCEDURE ЧужойКод(Д: Диспетчер);
    BEGIN
    
     ...
    
    END ЧужойКод;

    Что есть "Диспетчер"?
    Re[27]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 22.10.04 13:06
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Да ровно теже самые. Ведь, чужой код может вызвать Ваш диспетчер, только если Вы сами передадите ему Ваш диспетчер (call-back функцию). А по условию задачи указателей на функции нет. Значит чужой код не знает откуда взять Ваш диспетчер и одновременно Вы не можете его ему передать.


    госсподи, ну здесь то чего непонятного? пишем например так.
    Это вот чей-то чужой код:
    // импорт функций из моего модуля
    int GetMyModuleFunction();
    void MyModuleDispatcher(const int targetCode);
    
    void SomeAlienFunction()
    {
      const int myFunctionPseudoPointer = GetMyModuleFunction();
      MyModuleDispatcher(myFunctionPseudoPointer); // вот здесь внутри и будет произведен вызов
    }


    Так доступнее? Не знаю, как правильно записать аналог на Паскале или например Обероне
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[28]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.10.04 15:18
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>госсподи, ну здесь то чего непонятного? пишем например так.

    Д>Это вот чей-то чужой код:
    // импорт функций из моего модуля
    int GetMyModuleFunction();
    void MyModuleDispatcher(const int targetCode);
    
    void SomeAlienFunction()
    {
      const int myFunctionPseudoPointer = GetMyModuleFunction();
      MyModuleDispatcher(myFunctionPseudoPointer); // вот здесь внутри и будет произведен вызов
    }

    Д>Так доступнее?

    Понимаетели, Вы привели случай, когда чужой модуль использует Ваш модуль: "импорт функций из моего модуля". А надо наоборот. Вы используете чей-то чужой УЖЕ написанный модуль и Вам надо в этот чужой уже написанный модуль как-то передать свою функцию обратного вызова (call-back function). Если в языке нет процедурных переменных (указателей на функцию), то сделать это Вы не сможете.
    Re[9]: Где собака зарыта???
    От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
    Дата: 22.10.04 15:19
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    Слушай, покопайся на www.progstone.nm.ru (или www.progstone.narod.ru) — там есть рассуждения о доморощенном структуралисте. Как раз твой случай рассмотрен.
    ... << RSDN@Home 1.1.3 stable >>
    Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
    P.S.: Винодельческие провинции — это есть рулез!
    Мощность...
    От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
    Дата: 22.10.04 15:37
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    К>>Объясни — чем ты меряешь мощность языка? Ваттметром?

    СГ>Формального определения не дам. Дам интуитивное. Мощностью ЯВУ я называю количество вариантов разных программ, которые на нем можно написать. Например, интуитивно понятно, что если убрать из ЯВУ указатели, ссылки и оператор NEW, то на таком ЯВУ нельзя будет написать ни одной программы работающей с динамическими структурами данных, то есть размерность пространства всевозможных программ, которые можно написать на таком ЯВУ уменьшиться. Я употребляю слово "мощность", чтобы обозвать, хм, эту штуковину.

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

    Что же касается "размерности пространства всевозможных программ", то тут уже правильно говорили, что машины Тьюринга хватит на всё, на что можт хватить компьютера. Так что здесь предел имеется. Значит, остаётся оценивать мощность в контексте усилий программиста...

    Ну-с, теперь — твой ход.
    ... << RSDN@Home 1.1.3 stable >>
    Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
    P.S.: Винодельческие провинции — это есть рулез!
    Re[28]: Что дают шаблоны?
    От: WWL  
    Дата: 22.10.04 16:39
    Оценка:
    Д>госсподи, ну здесь то чего непонятного? пишем например так.
    Д>Это вот чей-то чужой код:
    Д>
    Д>// импорт функций из моего модуля
    Д>int GetMyModuleFunction();
    Д>void MyModuleDispatcher(const int targetCode);
    
    Д>void SomeAlienFunction()
    Д>{
    Д>  const int myFunctionPseudoPointer = GetMyModuleFunction();
    Д>  MyModuleDispatcher(myFunctionPseudoPointer); // вот здесь внутри и будет произведен вызов
    Д>}
    Д>


    Д>Так доступнее? Не знаю, как правильно записать аналог на Паскале или например Обероне


    Из какого моего модуля?
    Мой модуль может быть ещё не написан во время написания библиотечной функции.
    Вы как-то упускаете из виду тот момент, что Оберон поддерживает компонентную парадигму...
    Программа на Обероне — не формируемый компилятором единый текст программы пр раскрытии всех define-ов.
    Здесь не может быть циклических ссылок между компонентами системы.
    Сергей и говорит Вам о том, что указатель на функцию — это "страховка" для одного модуля гарантированно вызывать функции, которые "ещё не написаны" (виртуальность).
    Всё на свете — суета сует...
    Re[20]: Что дают шаблоны?
    От: Павел Кузнецов  
    Дата: 22.10.04 22:11
    Оценка: +1
    Курилка:

    > СГ>Так убери еще и goto. Что изменилась мощность языка? То-то, а от шаблонов она не меняется.


    > Объясни — чем ты меряешь мощность языка? Ваттметром?


    Если это кому-то, действительно, интересно, то хоть сколько-то строго "уровень" языка можно измерять, прибегнув к понятию функциональных единиц (function point). И, таки да, наличие generics и статического полиморфизма вообще и шаблонов в частности при такой трактовке "уровня" языка будут этот "уровень" поднимать.

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


    Это достаточно близкая к function point трактовка
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[10]: А если подумать?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.10.04 06:30
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    СГ>>>Ни что не мешает делать аналогичную оптимизацию для WITH по сравнению с цепочкой dynamic_cast-ов.


    К>>Мешает, и ещё как мешает.

    К>>Если в спецификации не прописано явно, что with всегда выбирает most derived ветку, то порядок проверок становится существенным.
    К>>В этом отличие от case: целочисленная переменная не может быть равна нескольким разным ключевым значениям, а полиморфный объект — может принадлежать разным классам одновременно.

    К>Ну и разумеется, в случае множественного наследования никакое most derived не спасёт в принципе.


    Давайте подумаем. У объекта есть скрытое поле — указатель на место в памяти, в котором хранится информация о типе объекта. Давайте для краткости обзовем этот указатель указателем на дескриптор типа. Что у нас есть в WITH? Там у нас есть N предложенных вариантов типов указателей на дескрипторы типов и один указатель на дескриптор типа испытуемого объекта. Первым шагом ищем точное равенство указателя на дескриптор типа с предложенными указателями. Ота операция в худшем случае отнимает O(Log(N)) времени. Если поиск не увенчался успехом, то надо повторить его для всех тех указателей на дескрипторы типов рассширениями которых является тип испытуемого объекта. Обозначим число предков типа испытуемого объекта символом H. В случае одиночного наследования H просто равно глубине иерархии расширения типа. И так, в наихудшем случае (т.е. когда ответ будет отрицательный), время необходимое для работы инструкции WITH определяется формулой

    t = const*H*Log(N)

    В то время как цепочка if-dynamic_cast-else будет работать за время:

    T = const'*H*N

    где H в первой и второй формуле одинаковы (надо же проверить все варианты!)
    Re: Мощность...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.10.04 06:50
    Оценка: :))
    Здравствуйте, Геннадий Васильев, Вы писали:

    ГВ>Здравствуйте, Сергей Губанов, Вы писали:


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


    Значит о мощности множества целых чисел или мощности континуума Вы не слышали? По Вашему слово мощность — это только dE/dt? Я использовал термин мощность в теоретико множественном смысле, а не в смысле термина мощность из физики.

    ГВ>Что же касается "размерности пространства всевозможных программ", то тут уже правильно говорили, что машины Тьюринга хватит на всё, на что можт хватить компьютера.


    Вы не поняли о чем речь. Когда мы из ЯВУ что-то мысленно удаляем, то мы можем нечаянно превратить его в другой ЯВУ, который уже не будет уметь программировать машину Тьюринга. (Просто мысленно удалите указатели и оператор NEW и Вы лишитесь не только динамических структур, но и бесконечной ленты). Опять же вопрос с удалением из ЯВУ процедурных переменных (указателей на функции), удалите их и Вы сможете написать только такой код, который может использовать для своей работы только другой уже написанный ранее код, а еще не написанный код он использовать не сможет, в то время как с помощью процедурных переменных (call back function) можно писать код, который сможет использовать для своей работы другой код еще не написанный в момент создания этого кода. Тем самым Вы сможете строить динамически расширяемые модульные системы. Кстати, про модульность: удалите из ЯВУ сборщик мусора — тогда вы лишите этот язык возможности писать модульные программы (потому что только runtime system знает какие модули загружены и только она может принять решение об утилизации памяти).
    Сферолошади, млин, на вакуумных посевах
    От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
    Дата: 23.10.04 18:09
    Оценка: 2 (2) +4
    Здравствуйте, Сергей Губанов, Вы писали:

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

    СГ>Значит о мощности множества целых чисел или мощности континуума Вы не слышали? По Вашему слово мощность — это только dE/dt? Я использовал термин мощность в теоретико множественном смысле, а не в смысле термина мощность из физики.

    Хех. Вакуумживущий сфероконь в чистом виде! А известно ли тебе, что программы реализуются в ограниченное время (T), в ограниченном пространстве (V = Freq*RAM*HDD ) и ограниченными же силами (программистами — E). Я совершенно не спорю, что с абстрактной теоретической точки зрения шаблоны — суть не более чем типизированные макросы (гусары, молчать!), но от этого не меняется их оценка с точки зрения практической. А практика имеет дело с ограниченными T, V и E. И в этом контексте "физическая" интерпретация понятия "мощность инструмента" имеет первостепенное значение. Почему? Потому что если вылететь за пределы хоть одного из этих параметров, то конечной программы просто не будет. Сечёшь? Это глупость — выкидывать контекстные переменные из рассуждений об инструментах, сводя оценки к чистым абстракциям!

    И вот в таком контексте (E < Emax, V < Vmax, T < Tmax, где любой Xmax о-о-очень далёк от бесконечности, более того — всеми силами стремится к нулю) шаблоны очень даже важны, поскольку дают в руки инструмент снижения как минимум одного, а зачастую — и всех трёх параметров по отношению к той же программе, но реализованной методом copy&paste. Скажу больше — все наши игры в "Язык1 vs. Язык2" крутятся как раз вокруг оптимизации этих самых трёх параметров.

    Пойми главное — абстрактной программы не было, нет и никогда не будет. Я ничего не имею против очень красивой модели о совершенстве ненаписанного, но всё, что есть — есть конкретные вещи, реализованные для конкретных целей в конкретные сроки и конкретными инструментами. Понимаешь? Они — есть, а абстрактной программы — нет. Точно также, как нет чистого листа после того, как на нём нанесена первая черта. Но! Мы можем называть некоторые элементы программы "абстракциями" — так удобнее, поскольку они есть с точки зрения програмиста: их можно скомпилировать, отредактировать и т.п. Т.е., они есть, как оформленные информационные объекты. А вот абстрактной программы — нет как нет.

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

    Вот потому я и попытался прямо подтолкнуть тебя к формулировке понятия "мощность", применимого в реальном контексте. Смекаешь? Да, я знаю, что сам по себе термин "мощность" может употребляться для обозначения разных показателей, но вот по отношению к инструменту, каковым является любой ЯВУ, ИМХО, лучше всего употреблять его как оценку dE/dt.

    ГВ>>Что же касается "размерности пространства всевозможных программ", то тут уже правильно говорили, что машины Тьюринга хватит на всё, на что можт хватить компьютера.

    [Пожрато относительно вычетов. Шоколадный сфероконь.]
    Да, я понял, о чём ты говорил. И даже понял — почему это мне не понравилось. И не только мне. И даже сформулировал это выше.

    PS. Разумеется — ничего личного.
    ... << RSDN@Home 1.1.3 stable >>
    Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
    P.S.: Винодельческие провинции — это есть рулез!
    Re[2]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 24.10.04 00:07
    Оценка: 20 (1) +4 :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>(Просто мысленно удалите указатели и оператор NEW и Вы лишитесь не только динамических структур, но и бесконечной ленты).


    О как? Что же там уж мысленно. В Яве и шарпе указатели удалены очень даже явно. new правда остался, но все же. И как не странно языки от этого ничего не потеряли.

    Может быть пора начать думать шире? Указатели — это возможность которая может быть легко заменена другой возможностью. Вместо указателей приходят ссылки. Это другой взгял на мир.

    СГ> Опять же вопрос с удалением из ЯВУ процедурных переменных (указателей на функции), удалите их и Вы сможете написать только такой код, который может использовать для своей работы только другой уже написанный ранее код, а еще не написанный код он использовать не сможет,


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

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

    СГ> в то время как с помощью процедурных переменных (call back function) можно писать код, который сможет использовать для своей работы другой код еще не написанный в момент создания этого кода.


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

    Почему в ваших словах нет слышно таких терминов как абстракция, полиморфизм? Почему указатели? Что за каменный век?

    СГ> Тем самым Вы сможете строить динамически расширяемые модульные системы. Кстати, про модульность: удалите из ЯВУ сборщик мусора — тогда вы лишите этот язык возможности писать модульные программы (потому что только runtime system знает какие модули загружены и только она может принять решение об утилизации памяти).


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

    ЗЫ

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

    Поймите — это ваших рук дело куча долболомов кое-как выучивших Бэйсик или Дельфи и занимающихся накидыванием кнопок на формы. Все это потому что вы не тому учите детей. Учите умению выделять абстракцию. Учите не замечать неважных деталей. Не скативаться до понятий указателей. Учите писать полиморфный код, а не применять указатели на процедуры. Учите выделять общие моменты, а не забивайте голову детей подробностями реализации виртуальных таблиц и дескрипторов типов.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[2]: Мощность...
    От: WFrag США  
    Дата: 24.10.04 04:02
    Оценка: +1 :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Вы не поняли о чем речь. Когда мы из ЯВУ что-то мысленно удаляем, то мы можем нечаянно превратить его в другой ЯВУ, который уже не будет уметь программировать машину Тьюринга. (Просто мысленно удалите указатели и оператор NEW и Вы лишитесь не только динамических структур, но и бесконечной ленты).


    Обманываешь. Все, что нам нужно — это пара функций и операторов над ними, напомню определение рекурсивных функций:

    O(x) = 0
    s(x) = x + 1
    Itn(x1,...xn) = xt

    Оператор примитивной рекурсии:
    f = R(g,h), f определяется как:
    f(x1,x2,...,xn,0) = g(x1,...,xn)
    f(x1,x2,...,xn,y+1) = h(x1,x2,...,xn,y,f(x1,x2,...,xn,y))

    Оператор минимизации:
    my = M(f), my определяется как:
    my(x1,...,xn) = min y, что f(x1,...,xn-1,y) = xn

    Оператор суперпозиции:
    g = Sm(f,f1,...,fm), g определяется как:
    g(x1,....,xn) = f(f1(x1,...,xn),...,fm(x1,...,xn))

    Замечу, что для вычиления этих функций оператор NEW нам совершенно не нужен. Никаких указателей!

    За точность не ручаюсь, давно это было. Доказательство эквивалентности вычислимости через машину Тьюринга и через рекурсивно-вычислимые функции оставляю в качестве домашнего задания
    ... << RSDN@Home 1.1.4 beta 3 rev. 205>>
    Re[19]: Что дают шаблоны?
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 24.10.04 06:45
    Оценка: 3 (3) +2
    Здравствуйте, Сергей Губанов, Вы писали:
    СГ>Так убери еще и goto. Что изменилась мощность языка? То-то, а от шаблонов она не меняется.
    Ну тогда я, в общем, заканчиваю. Твоя неспособность видеть порочность собственных аргументов превосходит пределы моего воображения. Ты про RISC-ассемблер прочитал? Понял?
    В последний раз объясняю: шаблоны — ничуть не хуже чем циклы, процедурные переменные, да и любые черты, присущие языку высокого уровня. А ты их критикуешь ровно потому, что их нет в Обероне. А оберон — по определению идеален. Ну так вот не идеален он нифига. Поскольку есть языки с более высокой мощностью. А мощность языка определяется только тем, насколько мало программисту нужно колотить по клавишам. Точка. Вся твоя философия про "необходимые" и "избыточные" конструкции абсолютно некомпетентна. Почитай классиков, посмотри на другие языки.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[3]: Мощность...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 25.10.04 08:40
    Оценка: -1
    Здравствуйте, VladD2, Вы писали:

    VD>...Указатели...


    Ну, вот, пожалуйста. Вами была написана такая гневная тирада и все из-за слова "указатель". У Вас просто есть жесткая ассоциация "указатель = адрес". Спрашивается откуда у Вас эта ассоциация, как не из языка Си/Си++? В оберонах указатели есть, а вот адресов нет, понимаете разницу?
    Re[11]: А если подумать?
    От: Кодт Россия  
    Дата: 25.10.04 09:15
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    К>>>Если в спецификации не прописано явно, что with всегда выбирает most derived ветку, то порядок проверок становится существенным.

    К>>>В этом отличие от case: целочисленная переменная не может быть равна нескольким разным ключевым значениям, а полиморфный объект — может принадлежать разным классам одновременно.

    К>>Ну и разумеется, в случае множественного наследования никакое most derived не спасёт в принципе.


    СГ>И так, в наихудшем случае (т.е. когда ответ будет отрицательный), время необходимое для работы инструкции WITH определяется формулой

    СГ>

    СГ>t = const*H*Log(N)

    СГ>В то время как цепочка if-dynamic_cast-else будет работать за время:
    СГ>

    СГ>T = const'*H*N

    СГ>где H в первой и второй формуле одинаковы (надо же проверить все варианты!)

    Дело не во времени работы, а в устранении неоднозначностей. Если объект одновременно принадлежит нескольким иерархиям одновременно, то выбор между несколькими классами — дело произвольное.
    // общая база
    class A { ... };
    // от которой вырастают две иерархии
    class B1 : public A { ... };
    class C1 : public A { ... };
    // что-то-там-далеко...
    class D : public B7, public C5 { ... };
    
    void foo(A* p)
    {
      if(dynamic_cast<B1*>(p)) { cout << "b" << endl; }
      else
      if(dynamic_cast<C1*>(p)) { cout << "c" << endl; }
    }
    void bar(A* p)
    {
      if(dynamic_cast<C1*>(p)) { cout << "c" << endl; }
      else
      if(dynamic_cast<B1*>(p)) { cout << "b" << endl; }
    }
    
    bool xyz_t(type_info const* t)
    {
      // вариант с поиском в глубину
      type_info const *ti[2] = { typeid(B1), typeid(C1) }; // можно отсортировать
      int i = find(ti, ti+2, t)-ti; // можно бинарным поиском
      switch(i)
      {
      case 0: cout<<"b"<<endl; return true;
      case 1: cout<<"c"<<endl; return true;
      default: return false;
      }
    }
    void xyz1(D* p)
    {
      // в C++ нет возможности пробежать по иерархии, но сделаем это руками (мы же знаем реальный тип аргумента ;)
      xyz_t(typeid(D))  || // для простоты, воспользуемся булевым оператором ИЛИ-ИНАЧЕ
      // равномерно спускаемся в глубину
      xyz_t(typeid(B7)) ||
      xyz_t(typeid(C5)) ||
      xyz_t(typeid(B6)) ||
      xyz_t(typeid(C4)) ||
      xyz_t(typeid(B5)) ||
      xyz_t(typeid(C3)) ||
      xyz_t(typeid(B4)) ||
      xyz_t(typeid(C2)) ||
      xyz_t(typeid(B3)) ||
      xyz_t(typeid(C1)) || // <-- совпало!
      xyz_t(typeid(B2)) ||
      xyz_t(typeid(B1)) ;
    }
    void xyz2(D* p)
    {
      xyz_t(typeid(D))  ||
      // ветка B
      xyz_t(typeid(B7)) ||
      xyz_t(typeid(B6)) ||
      xyz_t(typeid(B1)) || // <-- совпало!
      // ветка C
      xyz_t(typeid(C5)) ||
      xyz_t(typeid(C4)) ||
      xyz_t(typeid(C1)) ;
    }
    void xyz3(D* p)
    {
      xyz_t(typeid(D))  ||
      // ветка C
      xyz_t(typeid(C5)) ||
      xyz_t(typeid(C4)) ||
      xyz_t(typeid(C1)) || // <-- совпало!
      // ветка C
      xyz_t(typeid(B7)) ||
      xyz_t(typeid(B6)) ||
      xyz_t(typeid(B1)) ;
    }
    
    
    main()
    {
      D* p = new D;
      foo(p); // b
      bar(p); // c
      xyz1(p); // c
      xyz2(p); // b
      xyz3(p); // c
      delete p;
    }
    Перекуём баги на фичи!
    Re[20]: Что дают шаблоны?
    От: Кодт Россия  
    Дата: 25.10.04 09:32
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

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


    Например, APL
    Перекуём баги на фичи!
    Re[4]: Мощность...
    От: Кодт Россия  
    Дата: 25.10.04 09:35
    Оценка: 2 (2) +4 :))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Ну, вот, пожалуйста. Вами была написана такая гневная тирада и все из-за слова "указатель". У Вас просто есть жесткая ассоциация "указатель = адрес". Спрашивается откуда у Вас эта ассоциация, как не из языка Си/Си++? В оберонах указатели есть, а вот адресов нет, понимаете разницу?


    Отнюдь! В С++ есть указатели и ссылки, а адресов тоже нет
    Более того, некоторые указатели — это вообще не адреса, а бог знает что. Например, указатель на виртуальную функцию-член класса с виртуальным наследованием.

    Так что если у кого жёсткая ассоциация — так это у тебя: "С++ — адрес — хреново".
    Перекуём баги на фичи!
    Re[12]: А если подумать?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 25.10.04 11:14
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>.. Если объект одновременно принадлежит нескольким иерархиям одновременно, то выбор между несколькими классами — дело произвольное.


    Правда Ваша, для множественного наследования оператора WITH быть не может, он существует только в случае одиночного наследования.
    Re[5]: Мощность...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 25.10.04 11:23
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Ну, вот, пожалуйста. Вами была написана такая гневная тирада и все из-за слова "указатель". У Вас просто есть жесткая ассоциация "указатель = адрес". Спрашивается откуда у Вас эта ассоциация, как не из языка Си/Си++? В оберонах указатели есть, а вот адресов нет, понимаете разницу?


    К>Отнюдь! В С++ есть указатели и ссылки, а адресов тоже нет


    Адресов значит нет. Может и адресной арифметики в Си/Си++ нет? А это что:
    int p* = &a[5];
    if( a[8] != *(p+3) ) катастрофа();
    Re[4]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.10.04 15:43
    Оценка: 3 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Ну, вот, пожалуйста. Вами была написана такая гневная тирада и все из-за слова "указатель". У Вас просто есть жесткая ассоциация "указатель = адрес". Спрашивается откуда у Вас эта ассоциация, как не из языка Си/Си++?


    Указатели — это вредная (по крайней мере на стадии первичного обучения) идиома. Есть множество языков не использующих ее и при этом ни сколички не страдающих. Примеры все те же Ява, Шап, Питон.

    СГ>В оберонах указатели есть, а вот адресов нет, понимаете разницу?


    Еще раз повторяю. Ваш любимый оберон — это устаревшее до рождения дитя. То что в нем есть подобные несоотвествия (наличие указателей при отсуствии адресной арифметики) только подтверждают его непрактичность.

    Если вам интересно, могу продемонстрировать как современные языки живут вообще без указателей. Вот, к примеру, обобщенный код быстрой сортировки и двоичного поиска на шарпе:
    using System;
    
    // Объявления делегата. Делегат - это ОО-замена указателю на функции.
    // Они полностью типобезопасны и погут хнанить контекст конкретного объекта.
    delegate int Compare<T>(T x, T y);
    
    class Program
    {
        // Дженерики - одна из самых простых реализаций принципов 
        // обобщенного программирования среди типизированных ИЯ.
        // Дженери- могут быть даже делегаты. Так параметр compare 
        // - это дженерик-дерегат. С его помодью можно передать ссылку
        // на функцию сравнения элементов.
        public static void Sort<T>(T[] array, Compare<T> compare)
        {
            Sort(array, 0, array.Length - 1, compare);
        }
    
        // Перегрузка методов. Статический полиморфизм в дейстии.
        public static void Sort<T>(T[] array, int left, int right, Compare<T> compare)
        {
            int i = left;
            int j = right;
            T center = array[(left + right) / 2];
    
            while (i <= j)
            {
                while (compare(array[i], center) < 0)
                    i++;
                while (compare(array[j], center) > 0)
                    j--;
    
                if (i <= j)
                {
                    T x = array[i];
                    array[i] = array[j];
                    array[j] = x;
                    i++;
                    j--;
                }
            }
    
            if (left < j)
                Sort(array, left, j, compare);
            if (right > i)
                Sort(array, i, right, compare);
        }
    
        public static int BinarySearch<T>(T[] array, T value, Compare<T> compare)
        {
            return BinarySearch(array, 0, array.Length, value, compare);
        }
    
        public static int BinarySearch<T>(T[] array, int lo, int hi, T value, Compare<T> compare)
        {
            while (lo <= hi)
            {
                int i = (lo + hi) / 2;
                int cmpResult = compare(array[i], value);
                
                if (cmpResult == 0)
                    return i;
                else if (cmpResult < 0)
                    lo = i + 1;
                else
                    hi = i - 1;
            }
    
            return ~lo;
        }
    
        static void Main(string[] args)
        {
            int[] array = new int[] { 8, 2, 9, 1, 23, 245, 34, 3, 4 };
    
            // Безымянные методы полезны как на практике, так и в целях 
            // применения функционального подхода.
            Compare<int> compare = delegate(int x, int y) { return x - y; };
            // Подбор функции ведется на базе типов аргументов.
            Sort(array, compare);
            int index = BinarySearch(array, 23, compare);
            // Шарп язык строгий, но гибкий. Так можно складывать числа со 
            // строками. Это возможно из-за того, что в языке можно перегружать 
            // операторы. Строкая, в прочем как и все остальное - это тоже класс.
            Console.WriteLine("Index is " + index);
        }
    }

    Заметьте, не одного указателя. Все концептуально чисто и очень понятно. Даже для указателей на функции есть прекрасная замена.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[5]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.10.04 15:43
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Более того, некоторые указатели — это вообще не адреса, а бог знает что. Например, указатель на виртуальную функцию-член класса с виртуальным наследованием.


    Именно. И именно по этому, мне больше нравится идея делегата из Шарпа. Чистая и красивая абстракция.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[6]: Мощность...
    От: folk Россия  
    Дата: 26.10.04 05:15
    Оценка:
    Сергей Губанов:
    >
    > СГ>>Ну, вот, пожалуйста. Вами была написана такая гневная тирада и все из-за слова "указатель". У Вас просто есть жесткая ассоциация "указатель = адрес". Спрашивается откуда у Вас эта ассоциация, как не из языка Си/Си++? В оберонах указатели есть, а вот адресов нет, понимаете разницу?
    >
    > К>Отнюдь! В С++ есть указатели и ссылки, а адресов тоже нет
    >
    > Адресов значит нет. Может и адресной арифметики в Си/Си++ нет?

    Нет. Есть pointer arithmetic.

    > А это что:

    >
    > int p* = &a[5];
    > if( a[8] != *(p+3) ) катастрофа();
    >


    Условие будет ложным и катастрофа() не будет вызвана. К чему этот пример?
    Posted via RSDN NNTP Server 1.9 gamma
    На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
    Re[5]: Мощность...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 07:29
    Оценка: -1 :)
    Здравствуйте, VladD2, Вы писали:

    VD>Указатели — это вредная (по крайней мере на стадии первичного обучения) идиома.


    Наоборот. Как показывает практика (info21), дети с легкостью пишут программы работающие с динамическими списками. Потому что это интуитивно понятно. А вот написание фортраноподобных алгоритмов — есть уже следующая ступень развития детского разума.
    TYPE
      List = POINTER TO ListDesc;
    
      ListDesc = RECORD
          Data: ....
          Next: List;
        END;


    VD>Есть множество языков не использующих ее и при этом ни сколички не страдающих. Примеры все те же Ява, Шап, Питон.


    Да что Вы такое говорите! Без указателей невозможны динамические структуры данных. Теже списки, например. Все наоборот: в Java нет не указателей на объекты, а там нет самих объектных переменных как таковых, любая объектная переменная в Java это и есть УКАЗАТЕЛЬ на объект, а не САМ объект.

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


    Указатели нужны для работы с динамическими структурами (время исполнения); а обобщенный код — статичен (время компиляции). Ваш пример не относится к делу.
    Re[6]: Мощность...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 07:31
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    К>>Более того, некоторые указатели — это вообще не адреса, а бог знает что. Например, указатель на виртуальную функцию-член класса с виртуальным наследованием.


    VD>Именно. И именно по этому, мне больше нравится идея делегата из Шарпа. Чистая и красивая абстракция.


    Которая называется — "процедурная переменная" и о которой я сто раз тут говорил. Если уж на то пошло, то Delphi вся на них построена...
    Re[7]: Мощность...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 07:33
    Оценка:
    Здравствуйте, folk, Вы писали:

    F>Условие будет ложным и катастрофа() не будет вызвана. К чему этот пример?


    К чему пример адресной арифметики? К тому чтобы показать ее наличие!
    Re[5]: Мощность...
    От: Кодт Россия  
    Дата: 26.10.04 07:44
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Указатели — это вредная (по крайней мере на стадии первичного обучения) идиома. Есть множество языков не использующих ее и при этом ни сколички не страдающих. Примеры все те же Ява, Шап, Питон.


    Тут появляется другая идиома, value/reference типы. То есть, передаваемые по значению (копируемые) и по ссылке (разделяемые).
    Она, конечно, более прозрачна для понимания — но тоже содержит ряд приколов (ошибкоопасностей):
    * нечаянный разрыв связи: модификация переменной не доходит до партнёра
    * нечаянное создание/сохранение связи: модификация, казалось бы, локальной копии уходит на сторону
    Перекуём баги на фичи!
    Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Astaroth Россия  
    Дата: 26.10.04 15:30
    Оценка:
    Здравствуйте, Dervish, Вы писали:

    D>
  • Линковка не создаёт тормозов. Реально. Конечно, это зависит от проекта к проекту, но по моим субъективным ощущениям вряд ли линковка будет занимать более 10% от общего времени компиляции проекта. Это довольно быстрая и не накладная процедура.

    Главная проблема линковки — в том, что её нельзя пустить распределённо
    Скажем, проект распределённо компиляется за 5 минут, а потом 15 минут линкуется на твоей машине. Приятного мало.
    WinAmp играет: (умолк пока)
  • http://livejournal.com/users/breqwas
    Re[7]: А Вы хоть знаете что такое WITH?
    От: Astaroth Россия  
    Дата: 26.10.04 15:30
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>Но водить в язык конструкции которые практически не востребованы...


    Примерно это мне всегда хотелось сказать тому, кто придумывал Perl...
    WinAmp играет: (умолк пока)
    http://livejournal.com/users/breqwas
    Re[8]: А Вы хоть знаете что такое WITH?
    От: Astaroth Россия  
    Дата: 26.10.04 15:30
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Про оптимизацию оператора switch по сравнению с обычной цепочкой if-else можно почитать, например. там:


    Тесты показали, что разница минимальна. На gcc 2.95 она в пределах статистической погрешности, на win-компиляторах было что-то порядка 15-20%. Пусть yeti меня поправит, если где наврал.

    ИМХО даже если разница 150%, это совершенно некритично, т.к. выполняется это хозяйство в любом случае ОЧЕНЬ быстро
    WinAmp играет: (умолк пока)
    http://livejournal.com/users/breqwas
    Re[7]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Которая называется — "процедурная переменная" и о которой я сто раз тут говорил. Если уж на то пошло, то Delphi вся на них построена...


    Если уж на то пошло, то называетс она делегат, замыкание, клозюр, но не "процедурная перемнная". Дельфийский клозюр конечно похож, но по возможностям и чистоте абстракции он уступает. Похож он тем, что так же позволяет хранить ссылку на метод конкретного экземляра. А не похож, тем что:
    1. Абстрагируется от реализации.
    2. Позвляет комбинировать несколько ссылок в один объект.
    3. Является полноценным типом (а стало быть и объектом).
    4. Прозрачен. Например, делегаты могут с успехом передаваться чрез кграницы процессов и компьютеров и вызваться по сети.

    К тому же одно дело клозюр в Дельфи, а другое указатель на процедуру в Обероне. Против Дельфи я бы возражал меньше.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[6]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    VD>>Указатели — это вредная (по крайней мере на стадии первичного обучения) идиома.


    СГ>Наоборот.


    Агащасблин. Видмо именно по этому указатели выбидывают из всех современных языков.

    СГ> Как показывает практика (info21), дети с легкостью пишут программы работающие с динамическими списками. Потому что это интуитивно понятно. А вот написание фортраноподобных алгоритмов — есть уже следующая ступень развития детского разума.

    СГ>
    СГ>TYPE
    СГ>  List = POINTER TO ListDesc;
    
    СГ>  ListDesc = RECORD
    СГ>      Data: ....
    СГ>      Next: List;
    СГ>    END;
    СГ>


    Вот и сравни:
    class Element
    {
        .... Data;
        Element Next;
    }

    Или дженерик вариант (чтобы .... не писать):
    class Element<T>
    {
        T Data;
        Element Next;
    }


    Тут и объяснять нечего.

    СГ>Да что Вы такое говорите! Без указателей невозможны динамические структуры данных. Теже списки, например. Все наоборот: в Java нет не указателей на объекты, а там нет самих объектных переменных как таковых, любая объектная переменная в Java это и есть УКАЗАТЕЛЬ на объект, а не САМ объект.


    Нда. Первая половина каменного века. Про обстрагирование от реализации ничего не слышал?

    СГ>Указатели нужны для работы с динамическими структурами (время исполнения); а обобщенный код — статичен (время компиляции). Ваш пример не относится к делу.


    Указатели ненжны вообще! Это вредная инфомация. Это информация об внутреннем устройстве. Для сознания нужно понятие передача/хранение объекта по ссылки или по значению. Все! Остальное тараканы в голове.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[6]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Тут появляется другая идиома, value/reference типы. То есть, передаваемые по значению (копируемые) и по ссылке (разделяемые).

    К>Она, конечно, более прозрачна для понимания

    Именно!

    К> — но тоже содержит ряд приколов (ошибкоопасностей):

    К>* нечаянный разрыв связи: модификация переменной не доходит до партнёра
    К>* нечаянное создание/сохранение связи: модификация, казалось бы, локальной копии уходит на сторону

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

    ЗЫ

    Убивает, не это. Убивает то что человек берущийся за обучение детей не вкурсе, что такое абстракция и идиома. Вот погляди: Re[5]: Мощность...
    Автор: Сергей Губанов
    Дата: 26.10.04
    Он серьзено считает, что ссылка и указатель это одно и то же. Мол кроме физической реализации ничего и нет.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[8]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 17:23
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>К чему пример адресной арифметики? К тому чтобы показать ее наличие!


    Ее вред. Но дело тут в другом. Указатили и ссылки это разные идеомы. Они по разному воспринимаются людьми. И порождают совершенно разное представление о мире.

    В идеоме указателей есть области памяти и адресная арифметика. В идеоме ссылок есть ссылочные и вэлью-типы.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[7]: Мощность...
    От: Павел Кузнецов  
    Дата: 26.10.04 17:36
    Оценка: +2 -1
    VladD2:

    > Он серьзено считает, что ссылка и указатель это одно и то же.


    И в некотором смысле он может оказаться правым Все зависит от определений. Похоже, у него более общее определение понятия "указатель", не привязанное к C или C++ и адресной арифметике. Скажем, в том же Паскале указатели были ближе к ссылкам в Шарпе, чем к указателям в C++. Если я, конечно, еще не окончательно Паскаль забыл
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[7]: Указатель
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 19:06
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Вот и сравни:

    class Element
    {
        .... Data;
        Element Next;
    }


    Переменная типа Element есть УКАЗАТЕЛЬ на размещенный в куче объект. Если объект не размещен, то эта переменная есть null. Обратите внимание: не объект равен null, а переменная типа Element равна null. Еслибы Element не был бы указетелем, то струтура Element в силу своего рекуррентного определения была бы бесконечного размера.
    Re[9]: Мощность...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 19:27
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>В идеоме указателей есть области памяти и адресная арифметика. В идеоме ссылок есть ссылочные и вэлью-типы.


    Чего это вдруг Вы перемешали указатели с адресами-то? Указатели — это одно, а адреса — это другое, ну а ссылки — это третье.

    Есть три независимых друг от друга понятия

    1) Адрес и адресная арифметика.
    2) Указатели и проверка на NIL.
    3) Ссылки и автоматическое разыменование.

    Примеры:
    1) Адрес:
    void* a = (void*)&A;

    a — адрес какой-то переменной "A"

    2) Указатель:

    TYPE
      Tree = POINTER TO TreeDesc;
    
      TreeDesc = RECORD
        Data:..
        Left, Right: Tree;
      END;
    
    VAR
      p: Tree;

    p — указатель на объект TreeDesc. Он может быть равен NIL если объект не размещен в памяти.


    3) Ссылка:
    PROCEDURE Proc(VAR t: TreeDesc);
    BEGIN
     ...
    END Proc;

    t — ссылка на объект TreeDesc. Она НЕ может быть равна NIL, ее собственное значение скрыто от программиста обращение к ней всегда приводит к автоматическому ее разыменованию.



    ПОВТОРЯЮ. Запомните! Есть ТРИ РАЗНЫХ НЕСМЕШИВАЕМЫХ ДРУГ С ДРУГОМ ПОНЯТИЯ 1) Адреса, 2) Указатели, 3) Ссылки!
    Re[7]: Мощность...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.10.04 19:32
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD> Он серьзено считает, что ссылка и указатель это одно и то же.


    "Он" так не считает и не понимает с чего это вдруг Вы делаете такие заявления!!!


    http://www.rsdn.ru/Forum/Message.aspx?mid=870001&amp;only=1
    Автор: Сергей Губанов
    Дата: 26.10.04
    Re[8]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 20:42
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    >> Он серьзено считает, что ссылка и указатель это одно и то же.


    ПК>И в некотором смысле он может оказаться правым Все зависит от определений. Похоже, у него более общее определение понятия "указатель", не привязанное к C или C++ и адресной арифметике.


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

    ПК> Скажем, в том же Паскале указатели были ближе к ссылкам в Шарпе, чем к указателям в C++. Если я, конечно, еще не окончательно Паскаль забыл


    В Паскали уазатели были уаказателями. Понятие ссылчного типа появилось в дельфи, где оно мирно сосуществует с указателями до сих пор. И разница как ты понимаешь тут лежит отнюдь не в том что они мало похоже. Разрица во взгляде на жизнь.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[8]: Указатель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 20:42
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, VladD2, Вы писали:


    VD>>Вот и сравни:

    СГ>
    СГ>class Element
    СГ>{
    СГ>    .... Data;
    СГ>    Element Next;
    СГ>}
    СГ>


    СГ>Переменная типа Element есть УКАЗАТЕЛЬ на размещенный в куче объект.


    Да? Содись. Два. Итак дети открываем спецификацию C# 1.2 и читаем раздел 25.2:

    In an unsafe context, a type (§11) can be a pointer-type as well as a value-type, a reference-type, or a type-parameter. 47
    parameter...



    Сюрприз! Оказывается в C# тоже есть указатели. Только в ансэйф-режиме (который спуциально включать нужно и код размечать).

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

    СГ> Если объект не размещен, то эта переменная есть null. Обратите внимание: не объект равен null, а переменная типа Element равна null.


    Мне кажется тут кого-то другого нужно учить программированию. Я уже леть эдак 15 как умею это делать. Указатели и все что с ними связано я освоил где-то в начале 90-ых.

    Лучше зайди сюда http://msdn.microsoft.com/vcsharp/team/language/default.aspx скачай спецификацию того самого Шарпа и посторайся разобраться. Думаю это получится, то мам поймешь свою неправоту.

    Начать советую с раздела 11.2 (Reference types):

    A reference type is a class type, an interface type, an array type, or a delegate type.
    ...
    A reference type value is a reference to an instance of the type, the latter known as an object. The special value null is compatible with all reference types and indicates the absence of an instance.


    За тем продолжить с пункта 8.2 (Types):

    C# supports two kinds of types: value types and reference types. Value types include simple types (e.g., char, int, and float), enum types, and struct types. Reference types include class types, interface types, delegate types, and array types.

    Value types differ from reference types in that variables of the value types directly contain their data, whereas variables of the reference types store references to objects. With reference types, it is possible for two variables to reference the same object, and thus possible for operations on one variable to affect the object referenced by the other variable. With value types, the variables each have their own copy of the data, and it is not possible for operations on one to affect the other.


    СГ> Еслибы Element не был бы указетелем, то струтура Element в силу своего рекуррентного определения была бы бесконечного размера.


    По этму поводу могу только отослать вот сюда: http://en.wikipedia.org/wiki/Abstraction . Если как следует понять описанный там принцип, то не тнудно будет догадаться чем физическая реализация отличается от абстракции.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[10]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 21:26
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Чего это вдруг Вы перемешали указатели с адресами-то? Указатели — это одно, а адреса — это другое, ну а ссылки — это третье.


    О! Уже сдвижки появились. Все же значит ссылки это третье. Ну, хорошо хоть так. А то только что они были указателями.

    СГ>Есть три независимых друг от друга понятия


    СГ>1) Адрес и адресная арифметика.

    СГ>2) Указатели и проверка на NIL.
    СГ>3) Ссылки и автоматическое разыменование.

    А, ну, точно. У указателей никакой связи с адресной арифметикой.
    Ну, тут могу отослать к Википедии: http://en.wikipedia.org/wiki/Pointer

    Про Оберон там хорошо сказано:

    Oberon
    Much as with Modula-2, pointers are available. There are fewer ways to evade the type system and so Oberon and its variants are still safer with respect to pointers than Modula-2 or its variants. As with Modula-3, garbage collection is a part of the language specification.



    СГ>Примеры:

    СГ>1) Адрес:
    СГ>
    СГ>void* a = (void*)&A;
    СГ>

    СГ>a — адрес какой-то переменной "A"

    А, ну, отношение ясно. Если С++ — то адрес. А если Оберон то указатель. Себя ты уже буедил.

    Уз если адрест, то как-то так:
    int adr = (int)(void*)&A;



    СГ>3) Ссылка:

    СГ>
    СГ>PROCEDURE Proc(VAR t: TreeDesc);
    СГ>BEGIN
    СГ> ...
    СГ>END Proc;
    СГ>

    СГ>t — ссылка на объект TreeDesc. Она НЕ может быть равна NIL, ее собственное значение скрыто от программиста обращение к ней всегда приводит к автоматическому ее разыменованию.

    Понятно. Познаиня закончились на Обероне. Ладно немного их разовсьем
    C#:
    // Сслочный тип данных.
    calss A {} 
    ...
    // Не инициализированная (равных null) ссылка.
    A a1; 
    // Ссылка на некоторый объект.
    A a2 = new A(); 
    // Ссылка на массив неинициализированных ссылок на A.
    A[] array = new A[2];
    // Инициализированный массив. 
    A[] array = new A[] { new A(), new A() };


    Итого мы имеем возможность писать полноценные программы не прибегая к ненужным понятиям вроде указателей и темболее адресов. Ненужны всякие крышки, звездочки и другая хрень. А вот и указатели:
    unsafe
    {
        int i = 1; // value-тип.
        int* p = &i; // Указатель! :)
        ++p; // Сюрприз! Адресная арефметика. :))
    }


    СГ>ПОВТОРЯЮ. Запомните! Есть ТРИ РАЗНЫХ НЕСМЕШИВАЕМЫХ ДРУГ С ДРУГОМ ПОНЯТИЯ 1) Адреса, 2) Указатели, 3) Ссылки!


    Моежт сам таки запонишь и не будшь потом рассказывать, что в Яве или Шарпе переменная — это указатель?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[8]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 21:26
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    VD>> Он серьзено считает, что ссылка и указатель это одно и то же.


    СГ>"Он" так не считает и не понимает с чего это вдруг Вы делаете такие заявления!!!


    СГ>http://www.rsdn.ru/Forum/Message.aspx?mid=870001&amp;only=1
    Автор: Сергей Губанов
    Дата: 26.10.04


    Ну, это видимо он уже понял что фигня спорол и вместо того, чтобы чесно в этом признаться начал учить других и делать вид что не понимает о чем речь. А речь то вот о чем:
    Re[7]: Указатель
    Автор: Сергей Губанов
    Дата: 26.10.04

    Вот тут он четко дает всем понять, что не отделяет понятия указатель, от понятия ссылка. Но вот с ним не согласны авторы Явы и C#-а. Они то как раз называют переменную Next ссылкой. А Element типом. Кстати, утверждение что Element — это УКАЗАТЕЛЬ вообще выглядит странно. Хоть сказал бы уж "pointer type" (то биш тип указателя).

    И этот человек имет наглость рвссуждать у чьей-то компетенции. Я фигею, дорогая редакция. (с)
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[9]: Мощность...
    От: Павел Кузнецов  
    Дата: 26.10.04 21:29
    Оценка: 9 (2)
    VladD2:

    >>> Он серьзено считает, что ссылка и указатель это одно и то же.


    > ПК>И в некотором смысле он может оказаться правым Все зависит от определений. Похоже, у него более общее определение понятия "указатель", не привязанное к C или C++ и адресной арифметике.


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


    Дык, одно дело, когда говоришь о C++ или C# — там все понятно: в соответствующих стандартах есть соответствующие определения. А другое дело, когда идет разговор "вообще". В этом смысле я вполне могу понять Сергея, употребляющего термины несколько по-иному, чем это привычно мне или тебе. Без привязки к конкретным языкам и дополнительного доопределения терминов мне не кажется уместным тыкать собеседника в разницу ссылок и указателей, т.к. "в общем" смысле разницы между ними нет, пока нет четких определений, что конкретно вкладывается в каждый из терминов.

    > И разница как ты понимаешь тут лежит отнюдь не в том что они мало похоже. Разрица во взгляде на жизнь.


    Ну, с точки зрения C++ эта разница проявляется одним образом, с точки зрения C# — другим. А для Оберона, может, еще каким-то третим... И не обязательно таким, как ты или я это себе представляем.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[7]: А Вы хоть знаете что такое WITH?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 22:01
    Оценка: 29 (3) :))
    Здравствуйте, WolfHound, Вы писали:

    WH>Кстати объясни пожалуйста почему

    WH>
    WH>  FOR i := 0 TO Self.p DO
    WH>    h.x := h.x + N[i] * Self.Pw[span - Self.p + 1].x;
    WH>    h.y := h.y + N[i] * Self.Pw[span - Self.p + 1].y; //тут точка с запятой нужна
    WH>    h.z := h.z + N[i] * Self.Pw[span - Self.p + 1].z  //А тут нет
    WH>  END;
    WH>

    WH>В чем тайный смысл?

    А Вирт под прикрытием заботы о программисте на самом деле упрощает граматику языка. Такой подход идеален для LL(1)-парсеров. Если ты обратиш внимание, то в Паскале и Обероне все конструкции идеальны для LL(1)-парсинга. Любая конструкция распознается прямолинейно без анализа в глубь. Вирт считает, что это понятнее неподготовленному человеку. Хотя веловеку то понятно совсем иное. Он не простату ищет, а гармонию.

    Вот так вирт описывает список стэйтментов:
    StatementSeq  =   Statement { ";" Statement }.


    А вот так тоже самое описывают в С-подобных языках:
    Block     =   Statement { Statement }.
    ...
    Statement = ( xxx | yyy | zzz ) ";".

    то есть значительно сложнее.

    Кстати, если допустить NullStatement, то можно и в случае Паскале-подомного варианта ставить ";" у последнего утверждения. Правда при этом их вообще везде можно будет лепить.

    В общем, в Паскале и других языках Вирта ";" разделяет утверждения, а не завершает их. Так что в принципе правльно было бы писать в твоем любимом стиле:
      a := 1
    ; b := a + 3
    ; c := b + a


    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[10]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 22:01
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Дык, одно дело, когда говоришь о C++ или C# — там все понятно: в соответствующих стандартах есть соответствующие определения. А другое дело, когда идет разговор "вообще".


    Разговор идет об этом Re[7]: Указатель
    Автор: Сергей Губанов
    Дата: 26.10.04
    .

    И о указателях в препадавании.

    ПК> В этом смысле я вполне могу понять Сергея, употребляющего термины несколько по-иному, чем это привычно мне или тебе.


    И где я уже мог это слышать?

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


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

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

    ПК>Ну, с точки зрения C++ эта разница проявляется одним образом, с точки зрения C# — другим.


    И тем не менее суть одна. С++-ная ссылка просто сильно огранична в виду отсуствия понятий ссылочного и влэью- типов.

    ПК> А для Оберона, может, еще каким-то третим... И не обязательно таким, как ты или я это себе представляем.


    Да нет. Указатели в обероне такие же как в Моудуле или Паскле. Может ограничений по более (по безопаснее), но суть та же. Акцент на указателе как типе. Вот я товарищу и объясняю, что есть другие взгляды на жизнь. И что при обучении они проходят намного более безболезненно. А товарищ думает, что перед ним глупый упершийся ученик и пытается ему навизать свою волю. Типа я учитель, ты дурак.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[11]: Мощность...
    От: Павел Кузнецов  
    Дата: 26.10.04 22:07
    Оценка:
    VladD2:

    > ПК>Ну, с точки зрения C++ эта разница проявляется одним образом, с точки зрения C# — другим.

    >
    > И тем не менее суть одна. С++-ная ссылка просто сильно огранична в виду отсуствия понятий ссылочного и влэью- типов.

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

    > Акцент на указателе как типе.


    Дык, как ни крути, хоть указатель, хоть ссылка как тип все равно присутствуют. Разница только в том, явно или нет.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[12]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 26.10.04 23:22
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Скорее ограничена C#-вская, ввиду того, что не всяким типом можно оперировать по значению, и, если я не ошибаюсь, не всяким типом можно оперировать по ссылке


    О! Я сморю задеты религиозные чувства. Извиняте батько.

    >> Акцент на указателе как типе.


    ПК>Дык, как ни крути, хоть указатель, хоть ссылка как тип все равно присутствуют. Разница только в том, явно или нет.


    Это очень большая разница! В одном случая ты обязан думать о ней. А в другом необязан. Те ограничения которые есть отловит сам компилятор. Для обучение — это ой как важно. Да и для работы тоже. Это как раз и есть то саме повышение уровня языка, позволяющее вместо того думать "как сделать", думать о том "что нужно сделать".
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[13]: Мощность...
    От: Павел Кузнецов  
    Дата: 27.10.04 00:03
    Оценка:
    VladD2:

    > ПК> Дык, как ни крути, хоть указатель, хоть ссылка как тип все равно присутствуют. Разница только в том, явно или нет.


    > Это очень большая разница! В одном случая ты обязан думать о ней. А в другом необязан. Те ограничения которые есть отловит сам компилятор. Для обучение — это ой как важно.


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

    Псевдокод 1 (тип определяет семантику "ссылочности", ссылки неявные):
    // 1
    string s1 = "aaa";
    string s2 = s1;
    s2[0] = 'b';
    print(s1);
    
    // 2
    int i1 = 5;
    int i2 = i1;
    i2 = 10;
    print(i1);


    Псевдокод 2 (семантику "ссылочности" определяет использование, ссылки явные):
    // 1
    string  s1 = "aaa";
    string& s2 = s1;
    s2[0] = 'b';
    print(s1);
    
    // 2
    int i1 = 5;
    int i2 = i1;
    i2 = 10;
    print(i1);


    Где у учеников будет больше вопросов относительно разницы в работе двух примеров?
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[14]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 27.10.04 00:17
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Где у учеников будет больше вопросов относительно разницы в работе двух примеров?


    Ну, если первы вариант Шарп, то конечно во втором. Так как в первом будет только один вопрос: А почему компилятор написал что не может изменить строку так как она доступна тольк для чтения.

    А вот во втором случае будет очень много вопросов. И один из них "Как зовут того дядю (возможно более емкое название), что спроектировал язык в котором вот так за проста можно изменить значение константы?".

    Что же до обяснений концепции ссылочных и вэлью-тиов, то достаточно дать аналогию с рельным миром где можно расплатиться наличными, а можно дать карточку ссылающуюся на банковский счет.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[8]: А Вы хоть знаете что такое WITH?
    От: Зверёк Харьковский  
    Дата: 27.10.04 00:37
    Оценка:
    Здравствуйте, Astaroth, Вы писали:

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


    WH>>Но водить в язык конструкции которые практически не востребованы...


    A>Примерно это мне всегда хотелось сказать тому, кто придумывал Perl...


    Не флейма ради, а самообразования для: например?
    (Еще раз: я не собираюсь спорить. Мне действительно интересно Ваше мнение.)
    FAQ — це мiй ай-кью!
    Re[15]: Мощность...
    От: Павел Кузнецов  
    Дата: 27.10.04 00:56
    Оценка: +1
    VladD2:

    > ПК>Где у учеников будет больше вопросов относительно разницы в работе двух примеров?


    > Ну, если первы вариант Шарп, то конечно во втором. Так как в первом будет только один вопрос: А почему компилятор написал что не может изменить строку так как она доступна тольк для чтения.


    Там нет Шарпа. Там псевдокод, отличающийся только обозначением ссылок. Естественно, предполагается, что оба примера работают, и делают одно и то же, а именно модифицируют s1 через s2. Мы ж не занимаемся ерундой типа "X vs. Y", а просто обсуждаем выдвинутый тобой тезис о том, что неявные ссылки проще для обучения.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[9]: Мощность...
    От: folk Россия  
    Дата: 27.10.04 03:01
    Оценка:
    VladD2:

    > СГ>К чему пример адресной арифметики? К тому чтобы показать ее наличие!

    >
    > Ее вред.

    Ну, вреда там точно не было показано. Только некая катастрофа(), которая никогда не случится.
    Posted via RSDN NNTP Server 1.9 gamma
    На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
    Re[29]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 27.10.04 04:07
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Понимаетели, Вы привели случай, когда чужой модуль использует Ваш модуль: "импорт функций из моего модуля". А надо наоборот. Вы используете чей-то чужой УЖЕ написанный модуль и Вам надо в этот чужой уже написанный модуль как-то передать свою функцию обратного вызова (call-back function). Если в языке нет процедурных переменных (указателей на функцию), то сделать это Вы не сможете.


    Совершенно очевидно, что если модуль УЖЕ написан и УЖЕ использует каки-то фичи моего модуля, то избавиться от этих фич не получится. Но это к НАШЕМУ вопросу не относится.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[29]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 27.10.04 04:09
    Оценка:
    Здравствуйте, WWL, Вы писали:

    WWL>Здесь не может быть циклических ссылок между компонентами системы.

    WWL>Сергей и говорит Вам о том, что указатель на функцию — это "страховка" для одного модуля гарантированно вызывать функции, которые "ещё не написаны" (виртуальность).

    Никакие циклические ссылки здесь не нужны. Нужна всего лишь одна хорошо известная функция в каждом модуле. Я бы еще добавил, что подход с"хорошо известными функциями" широко используется как раз в компонентых системах — COM, например.
    Вероятно, в широко разрекламированном обероне тоже
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[8]: Указатель
    От: Кодт Россия  
    Дата: 27.10.04 08:48
    Оценка: 1 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Переменная типа Element есть УКАЗАТЕЛЬ на размещенный в куче объект. Если объект не размещен, то эта переменная есть null. Обратите внимание: не объект равен null, а переменная типа Element равна null. Еслибы Element не был бы указетелем, то струтура Element в силу своего рекуррентного определения была бы бесконечного размера.


    Есть такая идиома, как ленивые вычисления. В ФЯ она развёрнута во времени, а в ссылочных типах — в пространстве.

    Казалось бы, вызов любой рекурсивной функции, использующей ветвление — это бесконечность
    ;;;; лисп
    (defun sum-of-ints (n) (if (= n 0) 0 (+ n (sum-of-ints (- n 1)))))
    
    ;;;; как это было бы:
        sum-of-ints(1)
          if(=(1,0),0,sum-of-ints(-(1,1)))
            =(1,0)
              nil
            -(1,1)
              0
            sum-of-ints(0)
              if(=(0,0),0,sum-of-ints(-(0,1)))
                =(0,0)
                  t
                -(0,1)    ;;;; жадные вычисления
                  -1
                sum-of-ints(-1)
                  .....

    Но благодаря выборочной ленивости (в лиспе нужно соответствующим образом определять функции; в частности, таковыми являются if, cond, quote) мы не проваливаемся в выражение "до днища".

    Null — это дефолтное значение объекта.
    Если программа, развёртывающая тот же самый список во времени, написана не ногами, она обязательно остановится на проверке if(next==null).
    Перекуём баги на фичи!
    Re[8]: Мощность...
    От: Кодт Россия  
    Дата: 27.10.04 08:51
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>И в некотором смысле он может оказаться правым Все зависит от определений. Похоже, у него более общее определение понятия "указатель", не привязанное к C или C++ и адресной арифметике. Скажем, в том же Паскале указатели были ближе к ссылкам в Шарпе, чем к указателям в C++. Если я, конечно, еще не окончательно Паскаль забыл


    Указатели С/С++ точно такие же, как в Паскале, а адресная арифметика — приятный бонус
    Перекуём баги на фичи!
    Re[30]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 08:59
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Понимаетели, Вы привели случай, когда чужой модуль использует Ваш модуль: "импорт функций из моего модуля". А надо наоборот. Вы используете чей-то чужой УЖЕ написанный модуль и Вам надо в этот чужой уже написанный модуль как-то передать свою функцию обратного вызова (call-back function). Если в языке нет процедурных переменных (указателей на функцию), то сделать это Вы не сможете.


    Д>Совершенно очевидно, что если модуль УЖЕ написан и УЖЕ использует каки-то фичи моего модуля, то избавиться от этих фич не получится. Но это к НАШЕМУ вопросу не относится.


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

    Как ему использовать Ваш модуль если нет call back function?
    Re[30]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 09:00
    Оценка:
    Здравствуйте, Дарней, Вы писали:

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


    WWL>>Здесь не может быть циклических ссылок между компонентами системы.

    WWL>>Сергей и говорит Вам о том, что указатель на функцию — это "страховка" для одного модуля гарантированно вызывать функции, которые "ещё не написаны" (виртуальность).

    Д>Никакие циклические ссылки здесь не нужны. Нужна всего лишь одна хорошо известная функция в каждом модуле.


    А откуда эта функция? Из какого модуля?
    Re[11]: Ссылка vs Указатель
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 09:13
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Моежт сам таки запонишь и не будшь потом рассказывать, что в Яве или Шарпе переменная — это указатель?


    Ссылка отличается от указателя тем, что она совершенно прозрачна для программиста. Указатель можно проверить на NIL, а ссылку нельзя проверить на NIL, так как любое обращение к ссылке полностью равноценно обращению к самому объекту на который она ссылается. Вы просто используете термин "ссылка" обзывая им указатели в Java и в C#.


    Еще раз про ссылку:

    TYPE
      MyRecord = RECORD
        x: INTEGER;
        ....
        (* куча всего, так что размер этой записи очень большой *)
        ... 
      END;
    
    PROCEDURE Proc(VAR t: MyRecord);
    BEGIN
      (* t - это ссылка на переменную типа MyRecord, нельзя написать: IF t # NIL THEN *)
      t.x := 10;
      ... 
    END Proc;

    Переменная типа MyRecord занимает много места в памяти, для того чтобы передать ее по быстрому в процедуру можно не копировать ее, а передать по ссылке
    Re[9]: Указатель
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 09:29
    Оценка: -1
    Спор о терминологии.

    TYPE
      ValueType = RECORD
        a: PointerType;
        b: ReferenceType;
      END;
    
      ReferenceType = POINTER TO RECORD
        a: PointerType;
        b: ReferenceType;
        c: ValueType;   
      END;
    
      PointerType = POINTER TO ValueType;

    В С# или в Java основным является ReferenceType = POINTER TO RECORD. А, видимо, из аналогий с Си++, Вы посчитали, что PointerType = POINTER TO ValueType; есть что-то опасное, хотя это не имеет отношения к адресам и управляется сборщиком мусора и абсолютно безопасно. В C# и Java есть value-type и есть refernce-type, а в Обероне в добавок к этому еще есть совершенно безопасный управляемый сборщиком мусора pointer-type. Кстати, из-за того что pointer-type нет в C#, там ввели такой изврат как Boxing/Unboxing.
    Re[31]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 27.10.04 09:52
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Он был написан до того как Вы написали свой модуль и, значит, он о Вашем модуле ничего не знает, так понятно?


    Поясняю еще раз — для тех, кто в танке.
    Рассмотрим на примере — COM, вариант с in-proc сервером. Когда нужно создать некий ком-объект, ОС загружает соответствующую DLL и вызывает у нее функцию DllGetClassObject, чтобы получить объект класса и через него создать экзмепляр нужного типа.
    При этом совершенно очевидно, что ОС не знает НИЧЕГО о том, как устроен данный модуль DLL — и не может знать. Но откуда же она знает, что нужно вызывать именно эту функцию? Потому что разработчики приняли соответствующее СОГЛАШЕНИЕ.
    Я не думаю, что в Обероне используется какой-то принципиально иной способ.

    Скажу честно — я офигеваю все больше и больше. Еще что-то непонятно? Или мне нужно еще объяснить, что такое COM и компонентное программирование вообще?
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[7]: А Вы хоть знаете что такое WITH?
    От: faulx  
    Дата: 27.10.04 09:57
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>Кстати объясни пожалуйста почему

    WH>
    WH>  FOR i := 0 TO Self.p DO
    WH>    h.x := h.x + N[i] * Self.Pw[span - Self.p + 1].x;
    WH>    h.y := h.y + N[i] * Self.Pw[span - Self.p + 1].y; //тут точка с запятой нужна
    WH>    h.z := h.z + N[i] * Self.Pw[span - Self.p + 1].z  //А тут нет
    WH>  END;
    WH>

    WH>В чем тайный смысл?



    x = 1 + 
        2 + // Тут плюс нужен
        3   // А тут нет
    Re[32]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 10:18
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>Поясняю еще раз — для тех, кто в танке.

    Д>Рассмотрим на примере — COM, вариант с in-proc сервером. Когда нужно создать некий ком-объект, ОС загружает соответствующую DLL и вызывает у нее функцию DllGetClassObject,

    О, кстати, а давайте еще проще! Вот есть DLL в которой есть процедура. Что Вы делаете когда ее динамически загружаете? Как Вы вытаскиваете из DLL процедуру? Правильно, Вы вытаскиваете не саму процедуру, а лишь только получаете ее адрес. Вот Вам и процедурная переменная. То есть без процедурных переменных (указателей на функции), даже DLL динамически загрузить нельзя.
    Re[33]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 27.10.04 10:51
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>О, кстати, а давайте еще проще! Вот есть DLL в которой есть процедура. Что Вы делаете когда ее динамически загружаете? Как Вы вытаскиваете из DLL процедуру? Правильно, Вы вытаскиваете не саму процедуру, а лишь только получаете ее адрес. Вот Вам и процедурная переменная. То есть без процедурных переменных (указателей на функции), даже DLL динамически загрузить нельзя.


    Если мы говорим про ЯВУ, то там это не является обязательным — указатели на функции могут быть скрыты где-то глубоко внутри реализации. Мы просто имеем некий оператор, который сам загружает DLL и получает из нее нужный для НЕГО указатель. А другой оператор использует тот самый указатель, чтобы вызвать функцию и через нее — какой-то метод в модуле.
    Именно так сделано в вышеупомянутом COM. Клиентскому коду знать что-либо о DllGetClassObject просто не нужно.

    Надеюсь, мне не нужно рассказывать — что такое отделение интерфейса от реализации и зачем это нужно?
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[34]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 11:13
    Оценка: :)
    Здравствуйте, Дарней, Вы писали:

    Д>Если мы говорим про ЯВУ, то там это не является обязательным — указатели на функции могут быть скрыты где-то глубоко внутри реализации. Мы просто имеем некий оператор, который сам загружает DLL и получает из нее нужный для НЕГО указатель. А другой оператор использует тот самый указатель, чтобы вызвать функцию и через нее — какой-то метод в модуле.

    Д>Именно так сделано в вышеупомянутом COM. Клиентскому коду знать что-либо о DllGetClassObject просто не нужно.

    Ладно, пусть это было скрыто....

    Теперь Вы можете вызывать любую процедуру из загруженной DLL. Но сама DLL не может вызывать Ваши процедуры. Вы ее можете, а она Ваши не может. Так вот с помощью процедурных переменных можно сделать так, чтобы и загруженная Вами DLL тоже могла вызывать Ваши процедуры. Чтоб симметрично было.
    Re[9]: Указатель
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 11:21
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Null — это дефолтное значение объекта.


    Точнее, это не значение объекта, а это значение переменной (указательного или ссылочного типа) которая может быть связана с объектом, а может быть не связана — то есть быть равной null.
    Re[35]: Что дают шаблоны?
    От: WolfHound  
    Дата: 27.10.04 11:27
    Оценка: :))) :)
    Здравствуйте, Сергей Губанов, Вы писали:

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

    Вот скажи мне ты с СОМ дело имел или только название слышал?
    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[35]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 27.10.04 11:30
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Если она тоже будет следовать принятым соглашениям, то сможет — никаких принципиальных проблем я здесь не вижу.
    С# тоже прекрасно обходится делегатами Только не надо говорить, что это те же самые указатели на функции — на самом деле это совсем другая вещь. Хотя где-то внутри указатели вероятно используются.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[36]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 13:11
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>Вот скажи мне ты с СОМ дело имел или только название слышал?


    Это имеет значение?
    Re[36]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.10.04 13:18
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>Здравствуйте, Сергей Губанов, Вы писали:


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


    Д>Если она тоже будет следовать принятым соглашениям, то сможет — никаких принципиальных проблем я здесь не вижу.


    Каким соглашениям? Ваша программа загрузила DLL-ку, а не DLL-ка загрузила Вашу программу.

    Д>С# тоже прекрасно обходится делегатами Только не надо говорить, что это те же самые указатели на функции — на самом деле это совсем другая вещь. Хотя где-то внутри указатели вероятно используются.


    Почему только не надо говорить? Вы прям процедурных переменных, как буд-то бы боитесь.
    type
      MyProcedure = procedure(s: string) of object;
    
      MyObject = class
        procedure DoSmth(s: string);
      end;
    
    var
      A       : MyObject;
      A_DoSmth: MyProcedure;
    
    ...
    
      A_DoSmth := A.DoSmth;
      A_DoSmth('привет!'); // эквивалентно A.DoSmth('привет!');
    Re[9]: Мощность...
    От: Павел Кузнецов  
    Дата: 27.10.04 14:47
    Оценка:
    Кодт:

    > ПК> Скажем, в том же Паскале указатели были ближе к ссылкам в Шарпе, чем к указателям в C++. Если я, конечно, еще не окончательно Паскаль забыл


    > Указатели С/С++ точно такие же, как в Паскале, а адресная арифметика — приятный бонус


    А можно, в таком случае, сформулировать отличия между указателями в Паскале и ссылками в C#/Java, естественно, игнорируя сборку мусора, каковой в Паскале не было?
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[9]: Указатель
    От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
    Дата: 27.10.04 14:53
    Оценка:
    Здравствуйте, VladD2, Вы писали:


    VD>Еще раз повторю свою мысль, так как она до сих пор так и не была понята:

    VD>В современных языках программирования не используется парадигма указателя. Вместо нее используется парадигма ссылочных- и влэлью-типов. Причем в том же Шарпе указатели оставлены в небезопасном режиме, вот только для повседневной работы они ненужны. И прежде чем учить чему-то других, нужно самому понять принципиальную разницу этих взглядов.
    Это смотря у кого какая повседневная жизнь. Глядя на исходники классов Net там указатели кишат в огромных количествах.
    Правда для них и унсейв не указ.
    и солнце б утром не вставало, когда бы не было меня
    Re[21]: Что дают шаблоны?
    От: LaptevVV Россия  
    Дата: 27.10.04 15:07
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Курилка, Вы писали:


    К>>Объясни — чем ты меряешь мощность языка? Ваттметром?


    СГ>Формального определения не дам. Дам интуитивное. Мощностью ЯВУ я называю количество вариантов разных программ, которые на нем можно написать. Например, интуитивно понятно, что если убрать из ЯВУ указатели, ссылки и оператор NEW, то на таком ЯВУ нельзя будет написать ни одной программы работающей с динамическими структурами данных, то есть размерность пространства всевозможных программ, которые можно написать на таком ЯВУ уменьшиться. Я употребляю слово "мощность", чтобы обозвать, хм, эту штуковину.

    Не, две ошибки
    1. И без указателей прекрасно можно писать динамические структуры данных — есть даже книжка про такие на Яве.
    2. Количество программ от изымания — не уменьшится. Один хрен — бесконечное количество, как правильных, так и неправильных. В этом смысле все языки эквивалентны — равномощны.
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[10]: Мощность...
    От: Кодт Россия  
    Дата: 27.10.04 15:18
    Оценка: +1
    Здравствуйте, Павел Кузнецов, Вы писали:

    >> Указатели С/С++ точно такие же, как в Паскале, а адресная арифметика — приятный бонус


    ПК>А можно, в таком случае, сформулировать отличия между указателями в Паскале и ссылками в C#/Java, естественно, игнорируя сборку мусора, каковой в Паскале не было?


    Э... "отличия те же, что и между указателями в Си и ссылками в C#|Java"
    Перекуём баги на фичи!
    Re[37]: Что дают шаблоны?
    От: WolfHound  
    Дата: 27.10.04 16:28
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    WH>>Вот скажи мне ты с СОМ дело имел или только название слышал?

    СГ>Это имеет значение?
    А я бы спрашивал?
    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[9]: А Вы хоть знаете что такое WITH?
    От: Astaroth Россия  
    Дата: 27.10.04 17:48
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    A>>Примерно это мне всегда хотелось сказать тому, кто придумывал Perl...

    ЗХ>Не флейма ради, а самообразования для: например?
    ЗХ>(Еще раз: я не собираюсь спорить. Мне действительно интересно Ваше мнение.)

    Постфиксный if и unless.
    Эт как минимум
    WinAmp играет: 1979 — Наш дом
    http://livejournal.com/users/breqwas
    Re[11]: Мощность...
    От: Павел Кузнецов  
    Дата: 27.10.04 18:45
    Оценка:
    Кодт:

    >>> Указатели С/С++ точно такие же, как в Паскале, а адресная арифметика — приятный бонус


    > ПК> А можно, в таком случае, сформулировать отличия между указателями в Паскале и ссылками в C#/Java, естественно, игнорируя сборку мусора, каковой в Паскале не было?


    > Э... "отличия те же, что и между указателями в Си и ссылками в C#|Java"


    И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было?
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[12]: Мощность...
    От: rockandroll Казахстан  
    Дата: 28.10.04 03:11
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Кодт:


    >>>> Указатели С/С++ точно такие же, как в Паскале, а адресная арифметика — приятный бонус


    >> ПК> А можно, в таком случае, сформулировать отличия между указателями в Паскале и ссылками в C#/Java, естественно, игнорируя сборку мусора, каковой в Паскале не было?


    >> Э... "отличия те же, что и между указателями в Си и ссылками в C#|Java"


    ПК>И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было?


    В паскале была адресная арифметика, но не в явном виде, а через приведения типа pointer к integer
    ... << RSDN@Home 1.1.4 >>
    Re[10]: Указатель
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 28.10.04 03:28
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:
    СГ>В С# или в Java основным является ReferenceType = POINTER TO RECORD. А, видимо, из аналогий с Си++, Вы посчитали, что PointerType = POINTER TO ValueType; есть что-то опасное, хотя это не имеет отношения к адресам и управляется сборщиком мусора и абсолютно безопасно. В C# и Java есть value-type и есть refernce-type, а в Обероне в добавок к этому еще есть совершенно безопасный управляемый сборщиком мусора pointer-type. Кстати, из-за того что pointer-type нет в C#, там ввели такой изврат как Boxing/Unboxing.
    1. В C# есть pointer-type. Как тебе уже неоднократно сказали.
    2. Boxing/Unboxing никак не связан с отсутствием или наличием поинтеров (что особенно очевидно в свете 1).
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[13]: Мощность...
    От: Павел Кузнецов  
    Дата: 28.10.04 04:01
    Оценка:
    rockandroll:

    >>> Э... "отличия те же, что и между указателями в Си и ссылками в C#|Java"


    > ПК> И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было?


    > В паскале была адресная арифметика, но не в явном виде, а через приведения типа pointer к integer


    Если я не ошибаюсь, это не Паскаль, а его расширения от фирмы Борланд aka Turbo-Pascal. Впрочем, настаивать не буду: точно уже не помню. Да и не важно это, т.к. не адресная это арифметика, а арифметика целых В любом случае, мне было интересно услышать именно о тех радикальных семантических отличиях ссылок от указателей, на существовании которых так настаивали большевики Без привязки к определению какого-либо конкретного языка, а именно каких-то существенных "обще-программистских" отличиях, позволяющих говорить о "разнице во взгляде на жизнь".
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[37]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 28.10.04 04:36
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Каким соглашениям? Ваша программа загрузила DLL-ку, а не DLL-ка загрузила Вашу программу.


    А какая разница, кто кого загрузил? Загрузчик может вызвать любой необходимый код инициализации у каждой загруженной DLL.
    Я так понял — с COM ты никогда не работал.

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


    Они плохи, как и любой указатель. Хотя начиналось все с того, что я сказал — указатель на функцию тоже не является необходимым для ЯВУ типом и при некотором желании без него можно обойтись. Прекрасным примером могут служить COM и .NET
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[14]: Мощность...
    От: Дарней Россия  
    Дата: 28.10.04 04:43
    Оценка: 17 (1)
    Здравствуйте, Павел Кузнецов, Вы писали:

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


    Указатель — это адрес некоторой области в памяти. Он может быть и чем-то более сложным, чем просто адрес, как например __closure в BCB. Но задача его от этого не меняется — указывать на какой-то участок памяти. Иными словами, это — понятие уровня реализации.
    Ссылка указывает не на участок памяти, а на объект. Такое понятие как "память" здесь вообще не фигурирует. Именно поэтому не имеет смысла такая вещь как "арифметика ссылок" Понятие ссылки просто находится на более высоком уровне абстракции.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[14]: Мощность...
    От: rockandroll Казахстан  
    Дата: 28.10.04 04:44
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>rockandroll:


    >>>> Э... "отличия те же, что и между указателями в Си и ссылками в C#|Java"


    >> ПК> И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было?


    >> В паскале была адресная арифметика, но не в явном виде, а через приведения типа pointer к integer


    ПК>Если я не ошибаюсь, это не Паскаль, а его расширения от фирмы Борланд aka Turbo-Pascal. Впрочем, настаивать не буду: точно уже не помню. Да и не важно это, т.к. не адресная это арифметика, а арифметика целых В любом случае, мне было интересно услышать именно о тех радикальных семантических отличиях ссылок от указателей, на существовании которых так настаивали большевики Без привязки к определению какого-либо конкретного языка, а именно каких-то существенных "обще-программистских" отличиях, позволяющих говорить о "разнице во взгляде на жизнь".


    Согласен. Принципиальных различий между ссылками и указателями (если не брать во внимание GC) я тоже не вижу. Может кто-нибудь видит?
    ... << RSDN@Home 1.1.4 >>
    Re[38]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 08:23
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>Я так понял — с COM ты никогда не работал.


    Да это как посмотреть. В Delphi, например, COM-интерфейсы интегрированы в сам язык, и так как я их постоянно использую (смотри, например, это: http://www.rsdn.ru/Forum/Message.aspx?mid=822951&amp;only=1
    Автор: S.Yu.Gubanov
    Дата: 24.09.04
    ), то вроде как с COM-ом я знаком. Но с другой стороны, я их использовал только в рамках одного приложения....

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


    Д>Они плохи, как и любой указатель. Хотя начиналось все с того, что я сказал — указатель на функцию тоже не является необходимым для ЯВУ типом и при некотором желании без него можно обойтись. Прекрасным примером могут служить COM и .NET


    А указатель на функцию — это всего лишь одна из возможных реализаций процедурной переменной. COM-интерфейс — это другая из возможных реализаций. Делегаты — еще одна из возможных реализаций процедурной переменной.

    Теперь внимательно перечитаем сообщение http://www.rsdn.ru/Forum/Message.aspx?mid=863958&amp;only=1
    Автор: Дарней
    Дата: 22.10.04
    с которого началась наша дисскусия о процедурных переменных:

    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А что есть ООП? В узком смысле, ООП-ом можно обозвать процедурные переменные. Процедурные переменные (или в терминологии Си/Си++ — указатели на функцию) добавляют мощности языку (динамический полиморфизм). Кстати в самом первом обероне виртуальных функций не было, полиморфизм достигался благодаря процедурным переменным, тем не менее язык являлся ОО языком. Что касается расширения типов (наследования), наверное, напрямую мощность языка от этого не увеличивается (хотя утверждать этого не буду), но зато это позволяет сохранить в языке строгую статическую типизацию одновременно как бы и нарушая ее в каком-то более высоком смысле...

    Указатели на функции тоже не являются абсолютно необходимыми. Их при желании можно заменить на большой такой switch, который в зависимости от полученного числа будет вызывать разные функции. Значит, они тоже не добавляют языку "мощности"?
    То же самое касается и наследования. С помощью copy-paste и такой-то матери без него тоже можно прекрасно обойтись


    Ну и в чем, собственно, смысл дискуссии? switch-ем не заменишь, а COM интерфейс — это и есть (много)процедурная переменная.
    Re[14]: Мощность...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 08:39
    Оценка: -2
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>rockandroll:


    >>>> Э... "отличия те же, что и между указателями в Си и ссылками в C#|Java"


    >> ПК> И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было?


    >> В паскале была адресная арифметика, но не в явном виде, а через приведения типа pointer к integer


    ПК>Если я не ошибаюсь, это не Паскаль, а его расширения от фирмы Борланд aka Turbo-Pascal. Впрочем, настаивать не буду: точно уже не помню. Да и не важно это, т.к. не адресная это арифметика, а арифметика целых В любом случае, мне было интересно услышать именно о тех радикальных семантических отличиях ссылок от указателей, на существовании которых так настаивали большевики Без привязки к определению какого-либо конкретного языка, а именно каких-то существенных "обще-программистских" отличиях, позволяющих говорить о "разнице во взгляде на жизнь".



    Если разложить по полочкам отдельно
    1) адрес
    2) указатель (указатель это не адрес!)
    3) ссылка

    то указатель отличается от ссылки тем, что указатель может быть связан с объектом, а может быть не связан с объектом, то есть быть равным NIL. В то время как ссылка всегда связана с объектом, не бывает ссылок не связанных с объектом. Именно поэтому операция проверки ссылки на NIL не имеет смысла — любое обращение к ссылке есть обращение к объекту. Ссылка прозрачна для программиста.

    TYPE
      MyRecord = RECORD (* ... *) END;
    
    PROCEDURE Proc(VAR t: MyRecord); (* t - передается по ссылке, обращение к t есть обращение к переменной типа MyRecord, нельзя проверить t # NIL *)


    Однако, в языках С# и Java под ссылкой (refernce) и указателем (pointer) понимают совсем другое. В этих языках ссылкой называют то, что выше я назвал указателем, а указателем в них называют то, что выше я назвал адресом. Ссылок в вышеизложенном смысле в них нет.

    Предлагаю обсуждения перенести в отдельную ветку:
    http://www.rsdn.ru/Forum/Message.aspx?mid=870921&amp;only=1
    Автор: Сергей Губанов
    Дата: 27.10.04
    Re[22]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 08:43
    Оценка: -1
    Здравствуйте, LaptevVV, Вы писали:

    LVV>1. И без указателей прекрасно можно писать динамические структуры данных — есть даже книжка про такие на Яве.


    Сколько раз повторять!!! Объектные переменные Java это не сами объекты (не value-type), а указатели на них (reference-type).

    http://www.rsdn.ru/Forum/Message.aspx?mid=870921&amp;only=1
    Автор: Сергей Губанов
    Дата: 27.10.04



    LVV>2. Количество программ от изымания — не уменьшится. Один хрен — бесконечное количество, как правильных, так и неправильных. В этом смысле все языки эквивалентны — равномощны.


    Хорошо, скажем так: уменьшается размерность пространства всевозможных программ.
    Re[39]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 28.10.04 08:46
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Да это как посмотреть. В Delphi, например, COM-интерфейсы интегрированы в сам язык, и так как я их постоянно использую (смотри, например, это: http://www.rsdn.ru/Forum/Message.aspx?mid=822951&amp;only=1
    Автор: S.Yu.Gubanov
    Дата: 24.09.04
    ), то вроде как с COM-ом я знаком. Но с другой стороны, я их использовал только в рамках одного приложения....


    Вот я и вижу, что знаний о принципах его работы у тебя нет никаких.

    СГ>А указатель на функцию — это всего лишь одна из возможных реализаций процедурной переменной. COM-интерфейс — это другая из возможных реализаций. Делегаты — еще одна из возможных реализаций процедурной переменной.


    Чушь. Это совершенно разные вещи, хотя цель их применения действительно одна.

    СГ>Ну и в чем, собственно, смысл дискуссии? switch-ем не заменишь, а COM интерфейс — это и есть (много)процедурная переменная.


    Свитчем они могут заменены безо всяких проблем, ты просто не хочешь или не в состоянии это понять. Хотя, если брать исключительно абстрактное понимание, предложенный мной вариант тоже можно назвать в некотором роде процедурной переменной, хотя там и не используется указатель.
    Но можно подойти к вопросу и с другой стороны. Как насчет функторов?
    Как насчет декларативных языков, ФП и ЛП? Вероятно, их тоже не должно существовать, если там нет процедурных переменных?
    Ну так я тебя огорчу — они существуют и прекрасно себя чувствуют.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[12]: Ссылка vs Указатель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 09:33
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, VladD2, Вы писали:


    VD>>Моежт сам таки запонишь и не будшь потом рассказывать, что в Яве или Шарпе переменная — это указатель?


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


    +1

    СГ> Указатель можно проверить на NIL, а ссылку нельзя проверить на NIL,


    Неверное утверждение. Не нужно путать ссылки в С++ и ссылки в целом. Я уже какжется давал тут ссылку на Википедию. Там было все подробно рассмотрено.

    СГ> так как любое обращение к ссылке полностью равноценно обращению к самому объекту на который она ссылается. Вы просто используете термин "ссылка" обзывая им указатели в Java и в C#.


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

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


    СГ>Еще раз про ссылку:

    ...
    СГ>Переменная типа MyRecord занимает много места в памяти, для того чтобы передать ее по быстрому в процедуру можно не копировать ее, а передать по ссылке

    Вот по этому я и говорю, что вам лучше не учить детей. Ну, как можно рассказывая про абстракцию спускаться до объемов занимаемой памяти? Да еще говорить об этом, как о главном аспекте?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[10]: Указатель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 09:33
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Спор о терминологии.


    Так изучи ее. java.sun.com http://msdn.microsoft.com/vcsharp/team/language/default.aspx

    СГ>В С# или в Java основным является ReferenceType = POINTER TO RECORD. А, видимо, из аналогий с Си++, Вы посчитали, что PointerType = POINTER TO ValueType; есть что-то опасное, хотя это не имеет отношения к адресам и управляется сборщиком мусора и абсолютно безопасно.


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

    СГ> В C# и Java есть value-type и есть refernce-type, а в Обероне в добавок к этому еще есть совершенно безопасный управляемый сборщиком мусора pointer-type.


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

    СГ> Кстати, из-за того что pointer-type нет в C#, там ввели такой изврат как Boxing/Unboxing.


    Нда, и этот человек рассуждает о чужой компетенции! В Шарпе таки есть указаетели! И они никак не мешают наличию или отсуствию боксинга. Например, в Яве вообще нет указателей, но так же нет боксинга и анбоксинга (вренее небыло, в Ява 1.5 они введены).

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

    Попробуй на досуге повторить вот этот код, и сравни его с исходным:
    class A
    {
        static void Test()
        {
            object[] array = new object[] { 1, 1.2, "Wow!", new A(), RateTime.Now };
            foreach (object value in array)
                Console Write("'{0]'", value);
        }
    }
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[10]: Указатель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 09:33
    Оценка:
    Здравствуйте, Serginio1, Вы писали:

    S>Это смотря у кого какая повседневная жизнь. Глядя на исходники классов Net там указатели кишат в огромных количествах.

    S> Правда для них и унсейв не указ.

    Не кишат они там ни фига. Используются кое-где для оптимизации, и то бестолку, так как никакого толка на сегодня это не дает.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[16]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 09:33
    Оценка: +1
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Там нет Шарпа. Там псевдокод, отличающийся только обозначением ссылок. Естественно, предполагается, что оба примера работают, и делают одно и то же, а именно модифицируют s1 через s2. Мы ж не занимаемся ерундой типа "X vs. Y", а просто обсуждаем выдвинутый тобой тезис о том, что неявные ссылки проще для обучения.


    Ты в очередной раз пытаешся поспорить о сферическом коне в вакуме и тем самым подменить тему разговора.

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

    Что же касается примера, то выброси из него ссылку и ничего ровным счетом не изменится (твой же "абстрактный" пример базируется все же на С++ и Шаре как идеомах, а и там и там по большому счету имя массива есть указатель/ссылка на его начало в памяти (если уж опускаться на такой низкий уровень)). Так что пример твой мало чего демонстрирует.

    Нормальный прмер был бы на объектах:
    class A { public: int i; };
    ...
    A a1();
    A * a2 = new A();
    A * a3 = a2;
    A & a4 = *a2;

    и
    class A { public int i; }
    A a1 = new A();
    A a2 = new A();
    A a3 = a2;
    A a4 = *a2;



    Мне конечно прийтеся объяснить понятие ссылочного типа данных. Но тебе прийтется объяснять нмного больше. А самое печальное, что потом программисту прийдется постоянно трахаться с нагромождением всех этих указателей, ссылк и т.п., что не миноему усложнит создание программ и понизит их качество (безопасность и простоту). Собственно именно это мы и наблюдаем на практике. Хотя отдельные товарищи делают вид, что никаких проблем нет.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[40]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 10:54
    Оценка: :)
    Здравствуйте, Дарней, Вы писали:

    Д>Свитчем они могут заменены безо всяких проблем


    Продемострируй!
    Слепи DLL и EXE. Пусть EXE динамически загрузит DLL и что-то с ней сделает такое, что она сможет сама вызывать хоть одну процедуру из EXE.

    Д>Но можно подойти к вопросу и с другой стороны. Как насчет функторов?


    А что ты имеешь в виду под словом "функтор"?

    Д>Как насчет декларативных языков, ФП и ЛП?


    Речь, между прочим, идет об императивном языке.
    Re[41]: Что дают шаблоны?
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 28.10.04 10:59
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Д>>Но можно подойти к вопросу и с другой стороны. Как насчет функторов?


    СГ>А что ты имеешь в виду под словом "функтор"?


    Стыдно, батенька

    Д>>Как насчет декларативных языков, ФП и ЛП?


    СГ>Речь, между прочим, идет об императивном языке.


    Кто это сказал и когда? Или декларативное программирование "вне закона"?
    Re[13]: Ссылка vs Указатель
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 11:03
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    Как же общепринятой??????
    Заметь, что не только в оберонах, а еще и в Си/Си++ ссылкой называется совсем другое:
    int  a = 2;
    int& ref = a;

    ref — нельзя проверить на NIL, так как любое обращение к ref ЭКВИВАЛЕНТНО обращению к "a".
    Ссылка — это еще одно символическое имя одной и той же переменной.
    Re[11]: Указатель
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 11:07
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Спор о терминологии.


    VD>Так изучи ее. java.sun.com http://msdn.microsoft.com/vcsharp/team/language/default.aspx


    - Будете у нас на Колыме...
    — Спасибо, лучше Вы к нам!

    Re[14]: Ссылка vs Указатель
    От: Кодт Россия  
    Дата: 28.10.04 11:33
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>ref — нельзя проверить на NIL, так как любое обращение к ref ЭКВИВАЛЕНТНО обращению к "a".

    СГ>Ссылка — это еще одно символическое имя одной и той же переменной.

    ...Думаете вы. (© Один переводчик-синхронист с немецкого — когда в конце длинной ветвистой фразы услышал неожиданное kann nicht).

    Проверить ссылку на нулёвость можно: &ref == NULL
    Вот только в нормальных ситуациях это недостижимо.
    Чтобы получить нулевую ссылку, мы должны прибегнуть к хаку, основанному на неопределённом поведении — это, на выбор:
    * разыменовать нулевой указатель
    * узнать внутреннее представление ссылки и соответствующим образом зачистить область памяти, где она размещена

    То, что ссылка не есть ещё одно символическое имя — видно на примерах, где ссылка получает вполне конкретное хранилище. Например, член-данное ссылочного типа.
    Перекуём баги на фичи!
    Re[11]: Указатель
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 11:50
    Оценка: :)))
    Здравствуйте, VladD2, Вы писали:

    VD>Попробуй на досуге повторить вот этот код, и сравни его с исходным:

    VD>
    VD>class A
    VD>{
    VD>    static void Test()
    VD>    {
    VD>        object[] array = new object[] { 1, 1.2, "Wow!", new A(), RateTime.Now };
    VD>        foreach (object value in array)
    VD>            Console Write("'{0]'", value);
    VD>    }
    VD>}
    VD>


    Вот, решил задачу:
    MODULE Vlad2;
    IMPORT L := StdLog, D := MyDateTime;
    BEGIN
      L.String("1) "); L.Int(1);
      L.String("2) "); L.Real(1.2);
      L.String("3) "); L.String("Wow!");
      L.String("4) "); L.String("Class A");
      L.String("5) "); L.String(D.NowDateTimeAsString)
    END Vlad2.

    А хочешь я еще цифирки от 0 до 9 через запятую распечатаю? Вот, пожалуйста:
    MODULE Vlad2;
    IMPORT StdLog;
    BEGIN
      StdLog.String("0, 1, 2, 3, 4, 5, 6, 7, 8, 9");
    END Vlad2.
    Re[12]: Указатель
    От: Kluev  
    Дата: 28.10.04 12:37
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    VD>>Попробуй на досуге повторить вот этот код, и сравни его с исходным:

    VD>>
    VD>>class A
    VD>>{
    VD>>    static void Test()
    VD>>    {
    VD>>        object[] array = new object[] { 1, 1.2, "Wow!", new A(), RateTime.Now };
    VD>>        foreach (object value in array)
    VD>>            Console Write("'{0]'", value);
    VD>>    }
    VD>>}
    VD>>


    СГ>Вот, решил задачу:

    СГ>
    СГ>MODULE Vlad2;
    СГ>IMPORT L := StdLog, D := MyDateTime;
    СГ>BEGIN
    СГ>  L.String("1) "); L.Int(1);
    СГ>  L.String("2) "); L.Real(1.2);
    СГ>  L.String("3) "); L.String("Wow!");
    СГ>  L.String("4) "); L.String("Class A");
    СГ>  L.String("5) "); L.String(D.NowDateTimeAsString)
    СГ>END Vlad2.
    СГ>

    СГ>А хочешь я еще цифирки от 0 до 9 через запятую распечатаю? Вот, пожалуйста:
    СГ>
    СГ>MODULE Vlad2;
    СГ>IMPORT StdLog;
    СГ>BEGIN
    СГ>  StdLog.String("0, 1, 2, 3, 4, 5, 6, 7, 8, 9");
    СГ>END Vlad2.
    СГ>


    Гы-Гы-Гы. А если вот так:

    static void test( object[] values )
    {
        foreach( object v in values )
            Console.Write( "{0}", v );
    }
    Re[15]: Ссылка vs Указатель
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 12:37
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К> Проверить ссылку на нулёвость можно: &ref == NULL


    Нет, нельзя.

    Проверьте, &ref — не даст Вам адреса ссылки, а даст Вам адрес переменной, на которую эта ссылка ссылается потому, что ЛЮБОЕ обращение к ссылке ЭКВИВАЛЕНТНО обращению к самой переменной.
    Re[13]: Указатель
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 12:45
    Оценка: :)
    Здравствуйте, Kluev, Вы писали:

    K>Гы-Гы-Гы. А если вот так:

    K>
    K>static void test( object[] values )
    K>{
    K>    foreach( object v in values )
    K>        Console.Write( "{0}", v );
    K>}
    K>


    тогда так:

    PROCEDURE test(VAR values: ARRAY OF Writeable);
    VAR i: INTEGER;
    BEGIN
      FOR i := 0 TO LEN(values) - 1 DO 
        L.String("{"); L.Int(i); L.String("} "); L.String(values[i].AsString) 
      END
    END test;



    TYPE
      Writeable = ABSTRACT RECORD
        (w: Writeable) AsString(): String, NEW, ABSTRACT;
      END;
    Re[16]: Ссылка vs Указатель
    От: Кодт Россия  
    Дата: 28.10.04 12:58
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    К>> Проверить ссылку на нулёвость можно: &ref == NULL


    СГ>Нет, нельзя.


    СГ>Проверьте, &ref — не даст Вам адреса ссылки, а даст Вам адрес переменной, на которую эта ссылка ссылается потому, что ЛЮБОЕ обращение к ссылке ЭКВИВАЛЕНТНО обращению к самой переменной.


    Вот именно. Это и будет проверкой "значения" ссылки на нулёвость.

    А чтобы получить адрес, где ссылка размещена в памяти — для этого есть разнообразные хаки. Поскольку они связаны с неопределённым поведением, я не буду их разворачивать.
    Например, ссылка как член объединения.

    Наконец, в С++ есть такая штука, как типы с семантикой ссылки. Конечно, синтаксически они не полностью совместимы (например, не получится обращаться к членам объекта по такой ссылке), но выступать в роли lvalue-аргумента, выдавать адрес объекта можно. Наряду с этим, можно получить и собственный адрес.
    Далеко за примером ходить не надо. CComPtr<T> имеет семантику ссылки на T*. (Чтоб ему пусто было! Потому что это сильно отравляет жизнь в ряде других мест).
    Перекуём баги на фичи!
    Re[14]: Ссылка vs Указатель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 13:18
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Как же общепринятой??????


    http://en.wikipedia.org/wiki/Reference

    СГ>Заметь, что не только в оберонах, а еще и в Си/Си++ ссылкой называется совсем другое:

    СГ>
    СГ>int  a = 2;
    СГ>int& ref = a;
    СГ>

    СГ>ref — нельзя проверить на NIL, так как любое обращение к ref ЭКВИВАЛЕНТНО обращению к "a".
    СГ>Ссылка — это еще одно символическое имя одной и той же переменной.

    В Обероне ссылкой ничего не называют, так как нет их там. А в С++ ссылкой называют то что нужно. То что в С++ нельзя присвоить ей null_ptr — это просто особенности дизайна.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[12]: Указатель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 13:18
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>

    СГ>- Будете у нас на Колыме...
    СГ>- Спасибо, лучше Вы к нам!


    В дев-нал такие ссылки.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[12]: Указатель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 13:18
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, VladD2, Вы писали:


    VD>>Попробуй на досуге повторить вот этот код, и сравни его с исходным:

    VD>>
    VD>>class A
    VD>>{
    VD>>    static void Test()
    VD>>    {
    VD>>        object[] array = new object[] { 1, 1.2, "Wow!", new A(), RateTime.Now };
    VD>>        foreach (object value in array)
    VD>>            Console Write("'{0]'", value);
    VD>>    }
    VD>>}
    VD>>


    СГ>Вот, решил задачу:

    СГ>
    СГ>MODULE Vlad2;
    СГ>IMPORT L := StdLog, D := MyDateTime;
    СГ>BEGIN
    СГ>  L.String("1) "); L.Int(1);
    СГ>  L.String("2) "); L.Real(1.2);
    СГ>  L.String("3) "); L.String("Wow!");
    СГ>  L.String("4) "); L.String("Class A");
    СГ>  L.String("5) "); L.String(D.NowDateTimeAsString)
    СГ>END Vlad2.
    СГ>


    Решил, блин.

    Ты массивчик полиморфный создай. И выведи его значение в цикле. Хотя даже эта породия имеет объем кода больший чем оригинал. Причем чистый ручник. Да и с образовательной точки зрения полный ноль!
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[14]: Указатель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 13:18
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>тогда так:


    СГ>
    СГ>PROCEDURE test(VAR values: ARRAY OF Writeable);
    СГ>VAR i: INTEGER;
    СГ>BEGIN
    СГ>  FOR i := 0 TO LEN(values) - 1 DO 
    СГ>    L.String("{"); L.Int(i); L.String("} "); L.String(values[i].AsString) 
    СГ>  END
    СГ>END test;
    СГ>



    СГ>
    СГ>TYPE
    СГ>  Writeable = ABSTRACT RECORD
    СГ>    (w: Writeable) AsString(): String, NEW, ABSTRACT;
    СГ>  END;
    СГ>


    Бред смвой кобылы. Уж извини за грубось. "{0}" — в дотнете это формат выводящий аргумент с индексом 0 из списка аргументов. Ну, и не показано как в этот загадочный ARRAY OF Writeable запихать объекты разных типов (от строенных до классов).

    Хотя уже невооруженным взглядом видно, что примитивизм на лицо. Кода больше, толку меньше. И этому уродству учить детей?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[15]: Ссылка vs Указатель
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 13:31
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>В Обероне ссылкой ничего не называют, так как нет их там.


    А давайте поспорим что есть?
    Re[13]: *
    От: Schade Россия  
    Дата: 28.10.04 13:33
    Оценка: 25 (3)
    Здравствуйте, Alex Reyst, Вы писали:

    AR>И то, что сейчас его действительно "зашкаливает", — это отнюдь не повод относиться неуважительно к человеку, прервавшего в свое время весьма порочную ассоциацию "программирование = Фортран".


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

    З.Ы. Написано под впечатлением от первого взгляда на среду BlackBox — убожество, застрявшее где-то в 1993 году.
    ... << RSDN@Home 1.1.4 @@subversion >>
    Re[15]: Указатель
    От: WolfHound  
    Дата: 28.10.04 14:15
    Оценка: :))) :)
    Здравствуйте, VladD2, Вы писали:

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

    Влад! Да как же ты не понимаешь?!? Ведь оберон это же идеальный язык программирования всех времен и народов, а Вирт величайший гуру принесший свет во тьму невежества промышленных программистов. А такие великие опостолы как Сергей Губанов помогают Вирту нести свет оберона в массы.
    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[16]: Указатель
    От: Кодт Россия  
    Дата: 28.10.04 14:24
    Оценка: :))
    Здравствуйте, WolfHound, Вы писали:

    WH>А такие великие опостолы...


    Прости, ты имел в виду "апостолы" или "осто..."
    Перекуём баги на фичи!
    Re[14]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 14:26
    Оценка: :)
    Здравствуйте, Schade, Вы писали:

    S>З.Ы. Написано под впечатлением от первого взгляда на среду BlackBox — убожество, застрявшее где-то в 1993 году.


    А что, думаете Oberon Microsystems сделала BlackBox бесплатной и собирается открыть его исходные коды, так просто по доброте душевной? Да потому и собирается, что BlackBox писали десять лет назад под Windows 95 и под первый пень (или под 486-ой). В свое время он продавался примерно за 1'500 швейцарских рублесов. А то что info21 продвигает BlackBox в школы, так туда как раз этого хватит на смену Turbo Pascal 7.0

    Хотите что-то современного, экстра-фрэшь, так сказать, то обратите внимание на
    http://www.zonnon.ethz.ch/
    и на
    http://bluebottle.ethz.ch/
    Re[17]: Указатель
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 28.10.04 14:35
    Оценка:
    Здравствуйте, Кодт, Вы писали:

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


    WH>>А такие великие опостолы...


    К>Прости, ты имел в виду "апостолы" или "осто..."


    Или "отсо..."
    (звиняюсь за мой французский )
    Re[15]: *
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 28.10.04 14:37
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Schade, Вы писали:


    S>>З.Ы. Написано под впечатлением от первого взгляда на среду BlackBox — убожество, застрявшее где-то в 1993 году.


    СГ> А что, думаете Oberon Microsystems сделала BlackBox бесплатной и собирается открыть его исходные коды, так просто по доброте душевной? Да потому и собирается, что BlackBox писали десять лет назад под Windows 95 и под первый пень (или под 486-ой). В свое время он продавался примерно за 1'500 швейцарских рублесов. А то что info21 продвигает BlackBox в школы, так туда как раз этого хватит на смену Turbo Pascal 7.0


    Раздают древний мусор нахаляву бедным российским школам в качестве подачки?
    Re[16]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 14:40
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Раздают древний мусор нахаляву бедным российским школам в качестве подачки?


    Есть такая идея. Не забывайте, что и компы в школах тоже не современные, хорошо если Celeron-Pentium-2
    Re[11]: Указатель
    От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
    Дата: 28.10.04 14:44
    Оценка: -1
    Здравствуйте, VladD2, Вы писали:

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


    S>>Это смотря у кого какая повседневная жизнь. Глядя на исходники классов Net там указатели кишат в огромных количествах.

    S>> Правда для них и унсейв не указ.

    VD>Не кишат они там ни фига. Используются кое-где для оптимизации, и то бестолку, так как никакого толка на сегодня это не дает.


    Без указателей на низком уровне ну никак. Другой вопрос, что создав классы без указателей легко можно обойтись.
    Но например работая со стримом использовать указатели очень привлекательно особенно работая со структурами валуе типов,
    Хотя можно извращаться http://www.rsdn.ru/Forum/Message.aspx?mid=859216&amp;only=1
    Автор: Serginio1
    Дата: 19.10.04


    При проектровании базовых классов для позднего связывания в нативе очнь удобно использовать указатели. В Net же приходится извращаться с рефлекшином, хотя наверное в будущих версиях его оптимизируют (FieldInfo,PropertyInfo).
    Просто в Net нельзя напрополую использовать указатели из-за GC.
    и солнце б утром не вставало, когда бы не было меня
    Re[17]: *
    От: Mamut Швеция http://dmitriid.com
    Дата: 28.10.04 14:48
    Оценка:
    Я очень надеюсь, что он в школы не пойдет.

    Помните дискуссию
    Автор: Сергей Губанов
    Дата: 26.10.04
    о простоте Оберона перед С#? Так вот, простейший пример из Тура по Оберону:

    MODULE MyHello;
        
        IMPORT StdLog;
        
        PROCEDURE Do*;
        BEGIN
            StdLog.String("Hello World!!"); StdLog.Ln;        
        END Do;
        
    END MyHello.


    Звездочку видите? Цитата:

    ObxHello0 is a minimal "hello world" program in Component Pascal...

    Exported items in Component Pascal modules are marked by a trailing asterisk; there are no separate header files, definition modules, or the like.


    Что такое еxported items? Почему экспортед? Только потому, что взбрело Вирту в голову, что хедеры — бяка? И опять же, чем это легче в оьбяснении и понимании, чем

    using System;
    class Class1
    {
        static void Main()
        {
            Console.WriteLine("Hello World");
        }
    }


    А сама среда Писать сообщения компилятора в код программы Не, изыди нечистая сила ....


    Лучше уж старый добрый Турбо-Паскаль оставить.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[17]: Ссылка vs Указатель
    От: Павел Кузнецов  
    Дата: 28.10.04 15:05
    Оценка:
    Кодт:

    > Например, ссылка как член объединения.


    "Кодт мне друг, но истина дороже"

    9.5/1 <...> If a union contains <...> a member of reference type, the program is ill-formed.


    > Наконец, в С++ есть такая штука, как типы с семантикой ссылки. Конечно, синтаксически они не полностью совместимы (например, не получится обращаться к членам объекта по такой ссылке)


    Кстати, есть предложение разрешить перегрузку operator.() и operator.*(): http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1671.pdf
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[18]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 15:06
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Что такое еxported items?


    Все что написано внутри модуля считается инкапсулированным в нем. Модуль является не только единицей компиляции и исполнения, но и единицей инкапсуляции (что правильно). Для того чтобы что-то из написанного можно было увидеть из других модулей это что-то надо как-то отметить, логично да? Вопрос как это синтаксически отметить так чтобы и видно сразу было и писать не много? Вот для этих отметок придумали использовать "*" и "-". Для переменных "-" означает доступ только для чтения, "*" означает полный доступ. Подробности в Langauge Report, а тут пример:

    MODULE Test;
    
    TYPE
      MyPrivateType = RECORD (* ... *) END; (* Другие модули этого типа не видят *)
    
      MyPublicType* = RECORD (* Другие модули этот тип видят *)
        PrivateVariable   : INTEGER; (* Из других модулей эта переменная не видна *)
        ReadOnlyVariable- : INTEGER; (* Другие модули могут только читать эту переменную *)
        ReadWriteVariable*: INTEGER; (* Другие модули могут и читать и писать в эту переменную *)
      END;
    
    
    VAR
      PrivateVariable   : INTEGER; (* Из других модулей эта переменная не видна *)
      ReadOnlyVariable- : INTEGER; (* Другие модули могут только читать эту переменную *)
      ReadWriteVariable*: INTEGER; (* Другие модули могут и читать и писать в эту переменную *)
    
    
    PROCEDURE DoSmth1(); (* Другие модули не видят этой процедуры *)
    BEGIN
     (* ... *)
    END DoSmth1;
    
    PROCEDURE DoSmth2*(); (* Другие модули могут вызывать эту процедуру *)
    BEGIN
     (* ... *)
    END DoSmth2;
    
    END Test;
    Re[18]: *
    От: Mamut Швеция http://dmitriid.com
    Дата: 28.10.04 15:09
    Оценка:
    Продолжу.

    Сам туториал вводит в заблуждение. Как указано в моем предыдущем сообщении, я создал модуль под названием MyHello. Как его запустить? Об этом в начале туториала ничего не сказано. Более того:

    Select the string "ObxHello0.Do" below, and then execute command Execute in menu Dev:

    ObxHello0.Do


    И это срабатывает!! Какого черта? У меня-то модуль называется MyHello. А как мне запустить MyHello? (Ладно, догадываюсь, написать MyHello.Do).

    Но, простите, для того, чтобы мне что-то запустить, мне в итоге надо открывать новое окно, писать в нем что-то, выделять, потом выполнять Dev->Execute? Увольте.

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

    И это все надо обьяснять ученикам. И где простота?
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[18]: Ссылка vs Указатель
    От: Кодт Россия  
    Дата: 28.10.04 15:11
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>

    9.5/1 <...> If a union contains <...> a member of reference type, the program is ill-formed.


    Поскольку они связаны с неопределённым поведением,


    ПК>Кстати, есть предложение разрешить перегрузку operator.() и operator.*(): http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1671.pdf


    Да, эта фича будет, пожалуй, полезнее злощастного оператора &()...
    Перекуём баги на фичи!
    Re[17]: Мощность...
    От: Павел Кузнецов  
    Дата: 28.10.04 15:14
    Оценка:
    VladD2:

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


    ПК> Дык, как ни крути, хоть указатель, хоть ссылка как тип все равно присутствуют. Разница только в том, явно или нет.

    Это очень большая разница! В одном случая ты обязан думать о ней. А в другом необязан.


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


    Таким образом, ты согласен с тем, что отличия ссылок в C#/Java от указателей в Паскале/С и т.п. за вычетом адресной арифметики исключительно синтаксические, а семантически это одно и то же?

    > Что же касается примера, то выброси из него ссылку и ничего ровным счетом не изменится <...>


    Изменится, т.к. без ссылки в языке с явным обозначением ссылок s1 при изменении s2 изменяться не будет.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[15]: Мощность...
    От: Павел Кузнецов  
    Дата: 28.10.04 15:19
    Оценка:
    Дарней:

    > Указатель — это адрес некоторой области в памяти. Ссылка указывает не на участок памяти, а на объект.


    Ага. Теперь, пожалуйста, ту же самую линию рассуждений, но на примере managed указателей в .Net
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[18]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 15:20
    Оценка: +1
    Здравствуйте, Mamut, Вы писали:

    M>
    M>MODULE MyHello;
        
    M>    IMPORT StdLog;
        
    M>    PROCEDURE Do*;
    M>    BEGIN
    M>        StdLog.String("Hello World!!"); StdLog.Ln;        
    M>    END Do;
        
    M>END MyHello.
    M>


    M> ...взбрело Вирту в голову, что хедеры — бяка? ...


    А Вы не сильно расстроитесь если узнаете что в Component Pascal есть хедеры? В среде BlackBox мышью выделите название модуля MyHello, после этого нажмите на правую кнопку мыши и в появившемся PopUp-меню выберите пункт Interface. Среда BlackBox покажет Вам хедер этого модуля. Для Вашего модуля он будет такой:
    DEFINITION MyHello;
      PROCEDURE Do;
    END MyHello.

    Хедеры в Component Pascal генерятся автоматом на основании меток видимости "*" и "-", так что вручную их писать излишне.

    Кстати, хедеры носят название символьных файлов.


    P. S.
    Добрый совет. В следующий раз, когда захотите порассуждать что там Вирту в голову взбрело или не взбрело, почитайте хотябы хелп.
    Re[19]: *
    От: Mamut Швеция http://dmitriid.com
    Дата: 28.10.04 15:30
    Оценка: 2 (2) +3
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Mamut, Вы писали:


    M>>Что такое еxported items?


    СГ>Все что написано внутри модуля считается инкапсулированным в нем. Модуль является не только единицей компиляции и исполнения, но и единицей инкапсуляции (что правильно). Для того чтобы что-то из написанного можно было увидеть из других модулей это что-то надо как-то отметить, логично да?


    Стоп. Предположим я — ученик 7-9 класса. Моя реакция: "Чего?" Переведите с китайского. Что за инкапсуляция. Что за единица компиляции. Что значит увидеть из других модулей?

    СГ>Вопрос как это синтаксически отметить так чтобы и видно сразу было и писать не много? Вот для этих отметок придумали использовать "*" и "-". Для переменных "-" означает доступ только для чтения, "*" означает полный доступ.


    Для языка, в котором текста и так явно слишком много, это утверждение странно. Почему не пойти по минимизации дальше и не заменить begin end на {}? Или почему не заменить *- на exportable и readonly? Хуже бы от этого не стало. Налицо плохой дизайн языка.

    СГ>Подробности в Langauge Report, а тут пример:


    Опять же предположим я — ученик 7-9 класса. Зачем мне читать Language Report?

    СГ>
    СГ>MODULE Test;
    
    СГ>TYPE
    СГ>  MyPrivateType = RECORD (* ... *) END; (* Другие модули этого типа не видят *)
    
    СГ>  MyPublicType* = RECORD (* Другие модули этот тип видят *)
    СГ>    PrivateVariable   : INTEGER; (* Из других модулей эта переменная не видна *)
    СГ>    ReadOnlyVariable- : INTEGER; (* Другие модули могут только читать эту переменную *)
    СГ>    ReadWriteVariable*: INTEGER; (* Другие модули могут и читать и писать в эту переменную *)
    СГ>  END;
    СГ>


    Для сравнения (гипотетически):

    TYPE
    MyPrivateType = RECORD (* ... *) END; (* Другие модули этого типа не видят *)
    
      exportable MyPublicType = RECORD 
      PrivateVariable   : INTEGER; 
      readonly exportable ReadOnlyVariable,
      readonly            ReadOnlyLocalVariable: INTEGER; 
      exportable          ReadWriteVariable: INTEGER;
    END;


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

    Единственная причина, по которой существуют извращения типа readonly exportable и exportable — это отказ от классов и полей private и public, которые являются намного интуитивнее, чем эти извращения.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[19]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 15:36
    Оценка: :)
    Здравствуйте, Mamut, Вы писали:

    M>Продолжу.


    Вы уже задаете технические вопросы. Для этого есть специализированные форумы. Например этот:

    http://progz.ru/forum/viewforum.php?f=49&amp;sid=b4644fc320c447206c44d594f6f16f63


    На счет автономной проги. BlackBox по сути является эмулятором операционной системы Oberon поверх Windows. Oberon является модульной расширяемой операционкой. Ваши личные модули ничем не отличаются от модулей этой оси. Так что все написанные Вами модули надо запускать в runtime envoronment самого BlackBox. Хотите слинковать отдельный экзешник — на здоровье, обращайтесь к разделу хелпа Platform specific issues (Windows). Кстати, там же есть пример того как слинковать сам BlackBox.exe (это если охота внести в него свои изменения).

    На сайте info21 есть примеры линковки автономных экзешников.

    Кстати этот самый отдельностоящий экзешник, как ни крути, должен будет включать в себя и всю оберонистую операционку (компилятор, сборка мусора и т.д.), так что его размерчик будет что-то около 1 метра. Хотя, если не прилинковывать к нему сборщик мусора с компилятором а прилинковать только модуль с WinAPI, то экзешник будет микроскопический что-то около 3.5 — 4.5 Kb (в зависимости от того вставите Вы в него иконку=1Кб или нет).
    Re[20]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.10.04 15:42
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Единственная причина, по которой существуют извращения типа readonly exportable и exportable — это отказ от классов и полей private и public, которые являются намного интуитивнее, чем эти извращения.


    Повторяю. Единицей инкапсуляции является модуль. Все остальное следует из этого.
    Re[21]: *
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 28.10.04 15:44
    Оценка: +1 :))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Mamut, Вы писали:


    M>>Единственная причина, по которой существуют извращения типа readonly exportable и exportable — это отказ от классов и полей private и public, которые являются намного интуитивнее, чем эти извращения.


    СГ>Повторяю. Единицей инкапсуляции является модуль. Все остальное следует из этого.


    Отстутствие полей private является следствием того, что "единицей инкапсуляции является модуль"
    Я хренею от обероновской логики, по мне дак женская ито намного понятней
    Re[20]: *
    От: Mamut Швеция http://dmitriid.com
    Дата: 28.10.04 15:46
    Оценка:
    Хорошо, согласен, от рантайма никто не застрахован (камень в огород .NET и VCL).
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[21]: *
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 28.10.04 15:47
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Хорошо, согласен, от рантайма никто не застрахован (камень в огород .NET и VCL).


    + Java

    Re[22]: *
    От: Mamut Швеция http://dmitriid.com
    Дата: 28.10.04 15:51
    Оценка: +2
    Здравствуйте, Курилка, Вы писали:

    К>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Здравствуйте, Mamut, Вы писали:


    M>>>Единственная причина, по которой существуют извращения типа readonly exportable и exportable — это отказ от классов и полей private и public, которые являются намного интуитивнее, чем эти извращения.


    СГ>>Повторяю. Единицей инкапсуляции является модуль. Все остальное следует из этого.


    К>Отстутствие полей private является следствием того, что "единицей инкапсуляции является модуль"

    К>Я хренею от обероновской логики, по мне дак женская ито намного понятней

    Вот я и говорю, в результате появляются извращения (а это именно извращения) вроде постфиксов — и *

    И этому человеку (Вирту) не нравятся = и ==
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[19]: *
    От: Mamut Швеция http://dmitriid.com
    Дата: 28.10.04 15:51
    Оценка:
    СГ>А Вы не сильно расстроитесь если узнаете что в Component Pascal есть хедеры? В среде BlackBox мышью выделите название модуля MyHello, после этого нажмите на правую кнопку мыши и в появившемся PopUp-меню выберите пункт Interface. Среда BlackBox покажет Вам хедер этого модуля. Для Вашего модуля он будет такой:
    СГ>
    СГ>DEFINITION MyHello;
    СГ>  PROCEDURE Do;
    СГ>END MyHello.
    СГ>

    СГ>Хедеры в Component Pascal генерятся автоматом на основании меток видимости "*" и "-", так что вручную их писать излишне.

    СГ>Кстати, хедеры носят название символьных файлов.


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

    СГ>P. S.

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

    Как раз читаю этот самый хелп. Организован он крайне неудобно. Кстати, а там есть хоть гле либо описание компонентов и их методов — что они делают, как вызываются и т.д. А то
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[23]: *
    От: Mamut Швеция http://dmitriid.com
    Дата: 28.10.04 15:57
    Оценка:
    В догонку, совсем забыл.

    Предположим, мой друг написал модуль Tools, выполняющий какие-либо действия. Он принес его мне и говорит, что на, дарю. У меня в проекте уже есть свой модуль Tools. Что мне делать?

    В С++ и С# это решается с помощью namespace'ов. Довольно логичная система, легко обьясняется, легко используется.

    Как это решается в Обероне?
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[20]: *
    От: Mamut Швеция http://dmitriid.com
    Дата: 28.10.04 16:02
    Оценка:
    M>Как раз читаю этот самый хелп. Организован он крайне неудобно. Кстати, а там есть хоть гле либо описание компонентов и их методов — что они делают, как вызываются и т.д. А то

    Уже нашел...
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[21]: *
    От: Кодт Россия  
    Дата: 28.10.04 16:03
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Повторяю. Единицей инкапсуляции является модуль. Все остальное следует из этого.


    И это должны запомнить студенты/школьники?
    После этого нападки на java о том, что в ней нет "обычных процедур", а только загадочные статические методы классов — мол, человеку сразу, сходу подсовывают лишние предметы для понимания...

    Да ну нафиг! Лучше выучиться на обычном паскале (ucsd, turbo3-5, ну максимум 6 с его turbo vision) и потом осваивать какой-нибудь промышленный язык, чем с самого начала голову ломать непонятно обо что и непонятно зачем.
    Перекуём баги на фичи!
    Re[23]: *
    От: Кодт Россия  
    Дата: 28.10.04 16:04
    Оценка: :)))
    Здравствуйте, Mamut, Вы писали:

    M>Вот я и говорю, в результате появляются извращения (а это именно извращения) вроде постфиксов — и *


    M>И этому человеку (Вирту) не нравятся = и ==


    "И эти люди запрещают мне ковырять в носу!"
    Перекуём баги на фичи!
    Re[17]: Указатель
    От: WolfHound  
    Дата: 28.10.04 16:51
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Прости, ты имел в виду "апостолы" или "осто..."

    А это каждый решит сам...
    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[19]: Ссылка vs Указатель
    От: Павел Кузнецов  
    Дата: 28.10.04 18:54
    Оценка: 20 (1)
    Кодт:

    > ПК>

    9.5/1 <...> If a union contains <...> a member of reference type, the program is ill-formed.


    >

    Поскольку они связаны с неопределённым поведением,


    Не, это не неопределенное поведение, это невалидная програма, для которой стандарт требует диагностику ("ill-formed").

    > ПК>Кстати, есть предложение разрешить перегрузку operator.() и operator.*(): http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1671.pdf


    > Да, эта фича будет, пожалуй, полезнее злощастного оператора &()...


    Ага. Еще бы лямбду добавили -- и никакие СиШарпы с Оберонами нам ни по чем
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[12]: Указатель
    От: Павел Кузнецов  
    Дата: 28.10.04 19:07
    Оценка:
    Serginio1:

    > Просто в Net нельзя напрополую использовать указатели из-за GC.


    В .Net managed указатели есть. Их нет в C#.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[13]: Указатель
    От: WolfHound  
    Дата: 28.10.04 19:19
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>В .Net managed указатели есть. Их нет в C#.

    Их в C# есть просто до них можно только через unsafe добраться.
    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[20]: Ссылка vs Указатель
    От: prVovik Россия  
    Дата: 28.10.04 19:36
    Оценка: +1 :)
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Ага. Еще бы лямбду добавили -- и никакие СиШарпы с Оберонами нам ни по чем

    Эх, а о компайлтайм рефлекшене вообще молчу...
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[16]: Указатель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 19:37
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>Влад! Да как же ты не понимаешь?!? Ведь оберон это же идеальный язык программирования всех времен и народов, а Вирт величайший гуру принесший свет во тьму невежества промышленных программистов. А такие великие опостолы как Сергей Губанов помогают Вирту нести свет оберона в массы.


    Ну, Вирт мужик заслуженный. Одного его паскаля более чем достаточно чтобы его уважать. Вот только отстал он от жизни. Не молд уже все же.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[17]: Указатель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 19:37
    Оценка:
    Здравствуйте, Кодт, Вы писали:

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


    WH>>А такие великие опостолы...


    К>Прости, ты имел в виду "апостолы" или "осто..."


    опе... опели в общем.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[16]: Ссылка vs Указатель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 19:58
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    VD>>В Обероне ссылкой ничего не называют, так как нет их там.


    СГ>А давайте поспорим что есть?


    Спорь.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[14]: Указатель
    От: Павел Кузнецов  
    Дата: 28.10.04 20:00
    Оценка:
    WolfHound:

    > ПК> В .Net managed указатели есть. Их нет в C#.


    > Их в C# есть просто до них можно только через unsafe добраться.


    То уже, если я не ошибаюсь, unmanaged указатели, которые, в отличие от managed, действительно, "нельзя напрополую использовать из-за GC"
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[34]: Что дают шаблоны?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка: :)
    Здравствуйте, Дарней, Вы писали:

    Д>Надеюсь, мне не нужно рассказывать — что такое отделение интерфейса от реализации и зачем это нужно?


    Ошибашся. Именно этому, уважаемого учителя, и забыли обучить в школе. Тперь он хочет привить эдакий асмоподобный стиль жизни нашим детям.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[37]: Что дают шаблоны?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    WH>>Вот скажи мне ты с СОМ дело имел или только название слышал?


    СГ>Это имеет значение?


    Ага. Иначе такую чушь про процедурные переменные как единственный способ колбэк-вызовов не нес бы. Уж простят меня моредатры за резкость.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[39]: Что дают шаблоны?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А указатель на функцию — это всего лишь одна из возможных реализаций процедурной переменной.


    О! Золотые слова! Вот и не нужно кормить детей самым низкоуровневым и примитивным их вариантам. Показывайте им интерфейсы и делегаты. Причем не в битах копайтесь, а показывайте как абстракцию. Тогда и притензий от дейатвующих программистов не будет.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[41]: Что дают шаблоны?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Слепи DLL и EXE. Пусть EXE динамически загрузит DLL и что-то с ней сделает такое, что она сможет сама вызывать хоть одну процедуру из EXE.

    1.:
    Assembly assembly = Assembly.LoadFrom("c:\MyAssemby.dll");
    IRun run = (IRun)assembly.CreateInstance("MyType");
    run.Run();


    2.:
    AppDomain _appDomain;
    ...
    if (_appDomain != null)
    {
        AppDomain.Unload(_appDomain);
        _appDomain = null;
    }
    ...
    _appDomain = AppDomain.CreateDomain("Calculator");
    IRun run = (IRun)_appDomain.CreateInstanceFromAndUnwrap(
        pathToAssembly, "Calc");
    run.Run();


    В общем, из пещеры пора вылезать.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[31]: Что дают шаблоны?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А откуда эта функция? Из какого модуля?


    Добро пожаловать в мир оперирующий типами.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[20]: Ссылка vs Указатель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка: :))) :)))
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Ага. Еще бы лямбду добавили -- и никакие СиШарпы с Оберонами нам ни по чем


    Ага. Так и вижу:

    C12322 error xxx(123, 3234): unknown error in unknown lambda function.

    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[21]: Ссылка vs Указатель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка:
    Здравствуйте, prVovik, Вы писали:

    V>Эх, а о компайлтайм рефлекшене вообще молчу...


    Это да. Все равно не сделают.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[13]: Указатель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>В .Net managed указатели есть. Их нет в C#.


    Есть. Но без них намного проще.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[14]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Если я не ошибаюсь, это не Паскаль, а его расширения от фирмы Борланд aka Turbo-Pascal.


    Turbo Pascal с указателями стало возможн работать через Inc()/Dec().
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[12]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было?


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

    class A
    {
        public B b;
    }
    
    class B
    {
        public A a;
    }
    ...
    A a = new A();
    a.b = new B();
    a.b.a = a;


    C++:
    class B;
    
    class A
    {
        public: B b;
    };
    
    class B
    {
        public A a;
    }
    ...
    A *a = new A();
    a->b = new B();
    a->b->a = a;
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[16]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Ага. Теперь, пожалуйста, ту же самую линию рассуждений, но на примере managed указателей в .Net


    Менеджед-указатели ничем от обычных не оличаются. Просто ЖЦ имеет право их двигать.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[15]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка:
    Здравствуйте, rockandroll, Вы писали:

    R>Согласен. Принципиальных различий между ссылками и указателями (если не брать во внимание GC) я тоже не вижу. Может кто-нибудь видит?


    void f(ref A a);
    ...
    A a = new A();
    f(ref a);


    void f(A ** a);
    ...
    A * a = new A();
    a++;
    f(&a);
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[15]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    Прочти все же пару книжек по Шарпу и Яве. А так же опредление из Википедии.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[23]: Что дают шаблоны?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Сколько раз повторять!!! Объектные переменные Java это не сами объекты (не value-type), а указатели на них (reference-type).


    Много раз повторять. Такую глупость сколько не повторяй, все равно она умней не стаент.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[15]: *
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ> А что, думаете Oberon Microsystems сделала BlackBox бесплатной и собирается открыть его исходные коды, так просто по доброте душевной? Да потому и собирается, что BlackBox писали десять лет назад под Windows 95 и под первый пень (или под 486-ой).


    А комун нахрен упало это замшелое старьё? Оглянись, на дворе 21 век. Дотнет, С++, Фри Паскаль, Ява, Хаскель, Окамл и т.п. можно скачать на халяву. У многих фришная лицензия. Почти ко всем доступны исходники. На фиг упала эта дешавая поделка?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[17]: *
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Есть такая идея. Не забывайте, что и компы в школах тоже не современные, хорошо если Celeron-Pentium-2


    P90 уже достаточно чтобы что-то приличное запускать.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[22]: *
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:07
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Отстутствие полей private является следствием того, что "единицей инкапсуляции является модуль"

    К>Я хренею от обероновской логики, по мне дак женская ито намного понятней

    Это все потому, что не ты пишешь компилятор к этому чуду. Знаешь насколько сокращается время разработки компилятора? У... (надеюсь, что все поняли, что это шутка)
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[23]: *
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:11
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Вот я и говорю, в результате появляются извращения (а это именно извращения) вроде постфиксов — и *


    M>И этому человеку (Вирту) не нравятся = и ==


    Э... Ты компиляторы писал? Я тебе как человек пониающий в LL(1) граматике скажу, что "*" с переди может причинить кучу проблем. А вот постфиксом все будет куда проще. Так что компилятор значительно упрощается. А оставщееся от его разработки время можно пустить на навязывание своего языка в универе.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[22]: *
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 21:11
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Да ну нафиг! Лучше выучиться на обычном паскале (ucsd, turbo3-5, ну максимум 6 с его turbo vision) и потом осваивать какой-нибудь промышленный язык, чем с самого начала голову ломать непонятно обо что и непонятно зачем.


    А еще проще пережить ужасный статик. И через два дня будеш уже писать на промышленном языке.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[17]: Мощность...
    От: Павел Кузнецов  
    Дата: 28.10.04 21:48
    Оценка:
    VladD2:

    > ПК> Ага. Теперь, пожалуйста, ту же самую линию рассуждений, но на примере managed указателей в .Net


    > Менеджед-указатели ничем от обычных не оличаются. Просто ЖЦ имеет право их двигать.


    В результате они отличаются лишней косвенностью, и вряд ли адресная арифметика с ними имеет смысл.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[13]: Мощность...
    От: Павел Кузнецов  
    Дата: 28.10.04 21:49
    Оценка:
    VladD2:

    > ПК> И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было?


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


    Т.е. отличия синтаксические, не семантические.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[24]: *
    От: Mamut Швеция http://dmitriid.com
    Дата: 28.10.04 21:54
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    M>>Вот я и говорю, в результате появляются извращения (а это именно извращения) вроде постфиксов — и *


    M>>И этому человеку (Вирту) не нравятся = и ==


    VD>Э... Ты компиляторы писал? Я тебе как человек пониающий в LL(1) граматике скажу, что "*" с переди может причинить кучу проблем. А вот постфиксом все будет куда проще. Так что компилятор значительно упрощается. А оставщееся от его разработки время можно пустить на навязывание своего языка в универе.


    Да я так Я просто, раз уж упрощать и делать доходчивым синтаксис и грамматику, то тогда во всем И вообще писать SET A EQUAL B ADD TO C (кто-нибудь может мне напомнить в каком языке была похожая грамматика)
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[25]: *
    От: Павел Кузнецов  
    Дата: 28.10.04 22:17
    Оценка: 12 (1) +1
    Mamut:

    > SET A EQUAL B ADD TO C (кто-нибудь может мне напомнить в каком языке была похожая грамматика)


    COBOL, AppleScript etc.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[26]: *
    От: Mamut Швеция http://dmitriid.com
    Дата: 28.10.04 22:36
    Оценка: :)
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Mamut:


    >> SET A EQUAL B ADD TO C (кто-нибудь может мне напомнить в каком языке была похожая грамматика)


    ПК>COBOL, AppleScript etc.


    Спасибо.

    В Коболе, кстати есть что-то такое, завораживающее:

    $ SET SOURCEFORMAT"FREE"
    IDENTIFICATION DIVISION.
    PROGRAM-ID.  AcceptAndDisplay.
    AUTHOR.  Michael Coughlan.
    * Uses the ACCEPT and DISPLAY verbs to accept a student record 
    * from the user and display some of the fields.  Also shows how
    * the ACCEPT may be used to get the system date and time.
    
    * The YYYYMMDD in "ACCEPT  CurrentDate FROM DATE YYYYMMDD." 
    * is a format command that ensures that the date contains a 
    * 4 digit year.  If not used, the year supplied by the system will
    * only contain two digits which may cause a problem in the year 2000.
    
    DATA DIVISION.
    WORKING-STORAGE SECTION.
    01 StudentDetails.
       02  StudentId       PIC 9(7).
       02  StudentName.
           03 Surname      PIC X(8).
           03 Initials     PIC XX.
       02  CourseCode      PIC X(4).
       02  Gender          PIC X.
    
    * YYMMDD
    01 CurrentDate.
       02  CurrentYear     PIC 9(4).
       02  CurrentMonth    PIC 99.
       02  CurrentDay      PIC 99.
    
    * YYDDD
    01 DayOfYear.
       02  FILLER          PIC 9(4).
       02  YearDay         PIC 9(3).
    
    
    * HHMMSSss   s = S/100
    01 CurrentTime.
       02  CurrentHour     PIC 99.
       02  CurrentMinute   PIC 99.
       02  FILLER          PIC 9(4).
    
    
    PROCEDURE DIVISION.
    Begin.
        DISPLAY "Enter student details using template below".
        DISPLAY "Enter - ID,Surname,Initials,CourseCode,Gender"
        DISPLAY "SSSSSSSNNNNNNNNIICCCCG".
        ACCEPT  StudentDetails.
        ACCEPT  CurrentDate FROM DATE YYYYMMDD.
        ACCEPT  DayOfYear FROM DAY YYYYDDD.
        ACCEPT  CurrentTime FROM TIME.
        DISPLAY "Name is ", Initials SPACE Surname.
        DISPLAY "Date is " CurrentDay SPACE CurrentMonth SPACE CurrentYear.
        DISPLAY "Today is day " YearDay " of the year".
        DISPLAY "The time is " CurrentHour ":" CurrentMinute.
        STOP RUN.


    Класс! Может его вернуть и ввести преподвание его?
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[20]: *
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 23:00
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Mamut, Вы писали:


    M>>Продолжу.


    СГ>Вы уже задаете технические вопросы.


    Да уж. Шарп с его:
    csc myFile.cs

    и темболее Питон с его командной строкой отдыхают.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[25]: *
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 23:07
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Да я так Я просто, раз уж упрощать и делать доходчивым синтаксис и грамматику, то тогда во всем


    Собственно я и смеюсь над таким упрощением языка.

    M> И вообще писать SET A EQUAL B ADD TO C (кто-нибудь может мне напомнить в каком языке была похожая грамматика)


    Смахивает на Кобол.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[14]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 23:07
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Т.е. отличия синтаксические, не семантические.


    Ну, как видишь определение ссылочности зависит от типа, т.е. и то и другое.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[18]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 28.10.04 23:07
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

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


    Косвенности нет. И арифметика работает. Просто это Ансэйф, т.е. проблемы от их применения твои личные проблемы. В общем, переключение в век С++.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[19]: Мощность...
    От: Павел Кузнецов  
    Дата: 28.10.04 23:52
    Оценка:
    VladD2:

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


    > Косвенности нет. И арифметика работает. Просто это Ансэйф, т.е. проблемы от их применения твои личные проблемы. В общем, переключение в век С++.


    Ты уверен, что ты говоришь о managed pointers?
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[15]: Мощность...
    От: Павел Кузнецов  
    Дата: 28.10.04 23:53
    Оценка:
    VladD2:

    > ПК> Т.е. отличия синтаксические, не семантические.


    > Ну, как видишь определение ссылочности зависит от типа, т.е. и то и другое.


    Это решение одного из языков. Если в другом ссылки можно иметь на любые типы, ссылками от этого они быть не перестают.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[41]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 29.10.04 04:19
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Продемострируй!

    СГ>Слепи DLL и EXE. Пусть EXE динамически загрузит DLL и что-то с ней сделает такое, что она сможет сама вызывать хоть одну процедуру из EXE.

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

    СГ>А что ты имеешь в виду под словом "функтор"?


    стыдно не знать элементарных вещей

    СГ>Речь, между прочим, идет об императивном языке.


    в первый раз про это слышу
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[23]: Что дают шаблоны?
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 29.10.04 05:53
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Хорошо, скажем так: уменьшается размерность пространства всевозможных программ.

    и такую глупость сколько не повторяй — умнее не станет. размерность пространства программ вообще от языка не зависит.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[16]: Мощность...
    От: rockandroll Казахстан  
    Дата: 29.10.04 06:22
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    R>>Согласен. Принципиальных различий между ссылками и указателями (если не брать во внимание GC) я тоже не вижу. Может кто-нибудь видит?


    VD>
    VD>void f(ref A a);
    VD>...
    VD>A a = new A();
    VD>f(ref a);
    VD>


    VD>
    VD>void f(A ** a);
    VD>...
    VD>A * a = new A();
    VD>a++;
    VD>f(&a);
    VD>


    Если я не ошибаюсь, то оба варианта скомпилируются в практически одинаковы машинный код (если убрать a++ конечно из второго примера).
    Т.е. я хочу сказать, что различия есть на уровне языка (Разный уровень абстракции, как сказал Дарней).
    ... << RSDN@Home 1.1.4 >>
    Re[38]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 06:38
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Ага. Иначе такую чушь про процедурные переменные как единственный способ колбэк-вызовов не нес бы. Уж простят меня моредатры за резкость.


    Процедурные переменные — это широкое понятие включающее в себя как просто указатели на обычные процедуры, указатели на методы (представляющие собой на самом деле 2 указателя: объекта и процедуры), интерфейсы как коллекции процедур содержащихся в одной переменной (в том числе и COM-овские интерфейсы как частный случай), и т.д. и т.п. Именно с помощью процедурных переменных реализуется полиморфизм на межмодульном уровне, в то время как внутри одного модуля можно было бы обойтись большим таким switch-ем, как правильно заметил мой оппонент.
    Re[42]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 06:42
    Оценка: :)
    Здравствуйте, VladD2, Вы писали:

    VD>В общем, из пещеры пора вылезать.


    Решение не принимается. Вы использовали процедурные переменные (в качестве которых были взяты интерфейсы), а надо было сделать это не используя процедурных переменных, с помощью какого-то switch-а (неизвестно где находящегося). Мое утверждение как раз и состояло в том, что без процедурных переменных этого сделать нельзя.
    Re[42]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 06:44
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Продемострируй!

    СГ>>Слепи DLL и EXE. Пусть EXE динамически загрузит DLL и что-то с ней сделает такое, что она сможет сама вызывать хоть одну процедуру из EXE.

    Д>предлагаю заняться этим самостоятельно, в качестве домашнего задания


    То есть ты признаешь, что сделать это без процедурных переменных невозможно....
    Re[40]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 06:47
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>А указатель на функцию — это всего лишь одна из возможных реализаций процедурной переменной.


    VD>О! Золотые слова! Вот и не нужно кормить детей самым низкоуровневым и примитивным их вариантам. Показывайте им интерфейсы и делегаты. Причем не в битах копайтесь, а показывайте как абстракцию. Тогда и притензий от дейатвующих программистов не будет.


    А где Вы видели примитивные варианты? Уж не имеете ли Вы в виду тот казус, когда Вы под термином УКАЗАТЕЛЬ понимали АДРЕС и от этого приходили в бешенство?
    Re[17]: Ссылка vs Указатель
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 06:50
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Сергей Губанов, Вы писали:


    VD>>>В Обероне ссылкой ничего не называют, так как нет их там.


    СГ>>А давайте поспорим что есть?


    VD>Спорь.


    То есть Вы со мной согласны поспорить?
    Я утверждаю что в оберонах ссылки есть, а Вы утверждаете что их там нет?
    Re[24]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 06:55
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Сколько раз повторять!!! Объектные переменные Java это не сами объекты (не value-type), а указатели на них (reference-type).


    VD>Много раз повторять. Такую глупость сколько не повторяй, все равно она умней не стаент.


    Уж не хотители Вы сказать, что в Java class это не reference-type, а value-type?
    Re[39]: Что дают шаблоны?
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 29.10.04 06:56
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:
    СГ>Процедурные переменные — это широкое понятие
    Не, ну если в каждый из принятых терминов впихивать свое значение, то до чего угодно можно договориться.
    З.Ы. А тебя самого на основе какого языка обучали программированию? И вообще, по какой программе.
    Хотелось бы узнать, какими методами можно получить такую кашу в голове. Уж лучше не знать промышленных языков, чем иметь нарушенные представления о взаимосвязях явлений и сущностей. Типа там — что является абстракцией, а что реализацией, что является частью чего-то. Общее с частным тоже путать не стоит. Как и необходимое с достаточным.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[24]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 07:00
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Хорошо, скажем так: уменьшается размерность пространства всевозможных программ.

    S>и такую глупость сколько не повторяй — умнее не станет. размерность пространства программ вообще от языка не зависит.

    Представь себе императивный язык высокого уровня в котором нет переменных. Понятно что на нем нельзя написать ни одной программы, которая бы в процессе своей работы выполняла вычисления, связанные с манипуляцией памятью (например — текстовый редактор).
    Re[22]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 07:03
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Отстутствие полей private является следствием того, что "единицей инкапсуляции является модуль"

    К>Я хренею от обероновской логики, по мне дак женская ито намного понятней

    Что Вы имеете в виду под отсутсвием private?

    По умолчанию в оберонах ВСЕ ЕСТЬ PRIVATE. А раз все есть private, то зачем нужно само ключевое слово private?
    Re[23]: = vs ==
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 07:05
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>И этому человеку (Вирту) не нравятся = и ==


    Перечитайте, пожалуйста, исходную статью. Про "=" и "==" говорит не сам Вирт, а тот учитель слова которого Вирт цитировал, именно сын того учителя (а не сын Вирта) задавался этим вопросом.
    Re[25]: Что дают шаблоны?
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 29.10.04 07:13
    Оценка: +3
    Здравствуйте, Сергей Губанов, Вы писали:
    СГ>Представь себе императивный язык высокого уровня в котором нет переменных. Понятно что на нем нельзя написать ни одной программы, которая бы в процессе своей работы выполняла вычисления, связанные с манипуляцией памятью (например — текстовый редактор).
    Ну может уже хватит глупости-то писать? Например, в языке Форт нет никаких переменных, равно как и указателей. Тем не менее, он позволяет написать любую программу. Тебе уже не в первый раз намекаю — изучи азы. А то меня просто оторопь берет, когда я наблюдаю такое стремление обучать от столь человека с подобными тараканами в голове.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[24]: Имена модулей vs namespace
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 07:14
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>В догонку, совсем забыл.


    M>Предположим, мой друг написал модуль Tools, выполняющий какие-либо действия. Он принес его мне и говорит, что на, дарю. У меня в проекте уже есть свой модуль Tools. Что мне делать?


    M>В С++ и С# это решается с помощью namespace'ов. Довольно логичная система, легко обьясняется, легко используется.


    M>Как это решается в Обероне?



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


    MODULEКомпания1Подразделение1Проект1Система1Подсистема1Модуль1;
    
    IMPORT StdLog, Services, Mmm := Компания2Подразделение2Проект2Система2Подсистема2Модуль2,
      Nnn := Компания3Подразделение3Проект3Система3Подсистема3Модуль3;
    
    (*  Mmm и Nnn - это псевдонимы имен модулей *)
    ...
    
    END Компания1Подразделение1Проект1Система1Подсистема1Модуль1.
    Re[22]: Модуль - единица инкапсуляции
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 07:25
    Оценка: :)
    Здравствуйте, Кодт, Вы писали:

    К>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Повторяю. Единицей инкапсуляции является модуль. Все остальное следует из этого.


    К>И это должны запомнить студенты/школьники?


    Что конкретно Вас не устраивает?

    Именно модуль является единицей инкапсуляции, а не class. Когда Вы покупаете модуль у другого производителя, то на руки Вы получаете бинарный и символьный файлы. В символьном файле есть только экспортируемая этим модулем информация. Вся остальная информация РЕАЛЬНО инкапсулирована. С классом дела обстоят с точностью до наоборот. Вы не можете купить "скомпилированный" код класса, а должны купить его исходник (иначе просто смысла нет). А в исходнике все эти самые private Вы потом ручками можете подредактировать, так что липовая получается инкапсуляция, даже если и не будете редактировать, то все равно ПОСМОТРЕТЬ-то сможете.
    Re[23]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 07:27
    Оценка: -1 :)
    Здравствуйте, VladD2, Вы писали:

    VD>А еще проще пережить ужасный статик. И через два дня будеш уже писать на промышленном языке.


    static-функции члены класса — это попытка заиметь модульность в немодульном языке.
    Re[20]: Среда исполнения и загрузчик
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 07:33
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Обероновской виртуальной машиной


    Не виртуальной машиной, а динамическим загрузчиком.

    Например,

    1) Виндозные DLL загружает специальный виндозный DLL загрузчик, являющийся средой исполнения виндозных DLL.

    2) COM-овские объекты загружает специальный COM-овский загрузчик, являющийся средой исполнения COM-объектов

    Аналогично обероновские модули (хоть они сильно похожи на обычные DLL) должны загружаться оберонистым загрузчиком.
    Re[16]: Общий делитель
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.10.04 07:37
    Оценка: -2 :))
    Здравствуйте, VladD2, Вы писали:

    VD>А комун нахрен упало это замшелое старьё?


    Потому что Оберон построен на фундаментальных принципах и не скоро еще устареет. Он содержит минимальный набор концепций, которые так или иначе всегда будут отображаться в других языках. Он является их "общим делителем".
    Re[18]: *
    От: Кодт Россия  
    Дата: 29.10.04 07:56
    Оценка: +1 :)
    Здравствуйте, VladD2, Вы писали:

    СГ>>Есть такая идея. Не забывайте, что и компы в школах тоже не современные, хорошо если Celeron-Pentium-2


    VD>P90 уже достаточно чтобы что-то приличное запускать.


    Прочитал сперва как F90 и подумал — а что, Фортран-90 вполне приличная вещь. Если, например, дети надеются в дальнейшем заниматься всякой там квантовой химией и прочими арифметикоёмкими предметами.
    Перекуём баги на фичи!
    Re[17]: Общий делитель
    От: Кодт Россия  
    Дата: 29.10.04 08:00
    Оценка: 1 (1) +3
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Минимальный набор — это, пожалуйста, в Лисп. Тем более, что CLOS уже содержит объекты.
    Там нет ни указателей, ни ссылок, ни вообще ничего такого. И всё работает

    Так что позволь усомниться в твоём заклинании.
    Перекуём баги на фичи!
    Re[43]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 29.10.04 08:05
    Оценка: +3
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Решение не принимается. Вы использовали процедурные переменные (в качестве которых были взяты интерфейсы), а надо было сделать это не используя процедурных переменных, с помощью какого-то switch-а (неизвестно где находящегося). Мое утверждение как раз и состояло в том, что без процедурных переменных этого сделать нельзя.


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

    А вообще — чем дальше, тем больше я удивляюсь. Сначала утверждалось, что процедурная переменная — это то же самое, что указатель на функцию. А теперь мы вдруг узнаем, что указатели на интерфейсы и делегаты чудесным образом попали в эту же категорию. Сначала мы говорили о ЯВУ вообще, а потом вдруг оказалось, что декларативные языки мы не рассматриваем — ибо они слишком уж выбиваются из картины мироздания, в которой Оберон — лучший из языков. И какие неожиданные изменения мы увидим еще?
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[24]: *
    От: Кодт Россия  
    Дата: 29.10.04 08:10
    Оценка: +3
    Здравствуйте, Сергей Губанов, Вы писали:

    VD>>А еще проще пережить ужасный статик. И через два дня будеш уже писать на промышленном языке.


    СГ>static-функции члены класса — это попытка заиметь модульность в немодульном языке.




    Java — не модульная??? Ну-ну.

    static-члены это часть гораздо более глубокой, стройной и тщательной инкапсуляции, чем россыпь того же самого в пространстве имён верхнего уровня.
    Перекуём баги на фичи!
    Re[27]: *
    От: Кодт Россия  
    Дата: 29.10.04 08:19
    Оценка: :)
    Здравствуйте, Mamut, Вы писали:

    M>В Коболе, кстати есть что-то такое, завораживающее:


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

    Заодно детишки будут учить английский язык.
    Потому что для C|C++|Java достаточно выучить около 30 слов, а всё остальное — это разнообразные крючочки.
    Для Ada — около 50.
    А для Кобола — извините, там смысл построения фраз нужно понимать.
    if a is less than b then subtract a from b else subtract b from a.
    Перекуём баги на фичи!
    Re[25]: Имена модулей vs namespace
    От: Кодт Россия  
    Дата: 29.10.04 08:45
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    В .Net есть встроенные способы борьбы с library hell'ом. И это вовсе не длинные_мнемонические_идентификаторы, а номера версий и цифровые подписи сборок.
    Перекуём баги на фичи!
    Re[23]: Модуль - единица инкапсуляции
    От: Кодт Россия  
    Дата: 29.10.04 08:51
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Именно модуль является единицей инкапсуляции, а не class. Когда Вы покупаете модуль у другого производителя, то на руки Вы получаете бинарный и символьный файлы. В символьном файле есть только экспортируемая этим модулем информация. Вся остальная информация РЕАЛЬНО инкапсулирована. С классом дела обстоят с точностью до наоборот. Вы не можете купить "скомпилированный" код класса, а должны купить его исходник (иначе просто смысла нет). А в исходнике все эти самые private Вы потом ручками можете подредактировать, так что липовая получается инкапсуляция, даже если и не будете редактировать, то все равно ПОСМОТРЕТЬ-то сможете.


    На худой конец, я ведь модуль могу реверснуть.
    А для любителей копаться в чужом коде (в том числе в открытом или легко дизассемблируемом, таком как java или .net) — есть обфускаторы.
    Перекуём баги на фичи!
    Re[23]: Модуль - единица инкапсуляции
    От: Schade Россия  
    Дата: 29.10.04 09:07
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Именно модуль является единицей инкапсуляции, а не class. Когда Вы покупаете модуль у другого производителя, то на руки Вы получаете бинарный и символьный файлы. В символьном файле есть только экспортируемая этим модулем информация. Вся остальная информация РЕАЛЬНО инкапсулирована. С классом дела обстоят с точностью до наоборот. Вы не можете купить "скомпилированный" код класса, а должны купить его исходник (иначе просто смысла нет). А в исходнике все эти самые private Вы потом ручками можете подредактировать, так что липовая получается инкапсуляция, даже если и не будете редактировать, то все равно ПОСМОТРЕТЬ-то сможете.


    Споем старую песню про компетенцию?
    Те же .NETовские сборки точно так же могут распространяться как бинарники без исходного кода (да и Java, кажется, тоже), причем вся метаинформация (символьный файл, в терминологии оберона) находится там же. Кроме того, в отличие от убогих оберонов, и возможности использования этой мета-информации гораздо шире, и generic-и также находятся в бинарнике (начиная с 2.0).
    Ах да, при желании можно декомпилятором заглянуть и ПОСМОТРЕТЬ. Так ведь и оберон компилирует в промежуточный код, нет никаких препятствий (кроме, собственно, отсутствия декомпилятора), чтобы тоже посмотреть. Так ведь это, как и отсутствие отладчика — не плюс, а показатель убогости передовой среды разработки для языка гиганта мысли. У меня вот, скажем, BMW нет — я же от этого лучше не становлюсь
    ... << RSDN@Home 1.1.4 @@subversion >>
    Re[26]: Имена модулей vs namespace
    От: Schade Россия  
    Дата: 29.10.04 09:13
    Оценка: :)
    Здравствуйте, Кодт, Вы писали:

    К>В .Net есть встроенные способы борьбы с library hell'ом. И это вовсе не длинные_мнемонические_идентификаторы, а номера версий и цифровые подписи сборок.


    А уж в BlackBox то какая передовая система классификации модулей предусмотрена! Модули с именами PrefixModule1, PrefixModule2, и т.п. аккуратно складываются в папочку /Prefix. Чего не сделаешь, чтобы не быть похожим на недостойные C-подобные языки и среды.
    ... << RSDN@Home 1.1.4 @@subversion >>
    Re[17]: Общий делитель
    От: Schade Россия  
    Дата: 29.10.04 09:32
    Оценка: 49 (2) +2
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Что-то этот минимальный набор смахивает на применение напильника в металлообработке. А что — устареет еще не скоро, позволяет, в принципе, сделать практически все, вопрос только в затраченных усилиях и количестве отходов. Ах, да, если заранее тщательно спланировать, где сколько спиливать — все станет сразу гораздо лучше.
    Только почему-то промышленное оборудование справляется с этим лучше.
    ... << RSDN@Home 1.1.4 @@subversion >>
    Re[28]: *
    От: Mamut Швеция http://dmitriid.com
    Дата: 29.10.04 09:46
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Заодно детишки будут учить английский язык.

    К>Потому что для C|C++|Java достаточно выучить около 30 слов, а всё остальное — это разнообразные крючочки.
    К>Для Ada — около 50.
    К>А для Кобола — извините, там смысл построения фраз нужно понимать.
    К>
    if a is less than b then subtract a from b else subtract b from a.


    Тогда уже ставить везде Эпплы и учить AppleScript:

    AppleScript is an English-like language used to write script files that automate the actions of the computer and the applications that run on it.



    tell application "Finder"
        set the percent_free to ¬
            (((the free space of the startup disk) / ¬
                (the capacity of the startup disk)) * 100) div 1
    end tell
    
    if the percent_free is less than 10 then
        tell application (path to frontmost application as text)
            display dialog "The startup disk has only " & the percent_free & ¬
                " percent of its capacity available." & return & return & ¬
                "Should this script continue?" with icon 1
        end tell
    end if


    И потом дети будут уверены, что компьютеры — живые существа и что с ними можно разговаривать на равных


    dmitriid.comGitHubLinkedIn
    Re[23]: Модуль - единица инкапсуляции
    От: Mamut Швеция http://dmitriid.com
    Дата: 29.10.04 09:54
    Оценка: 1 (1) +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Кодт, Вы писали:


    К>>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>>Повторяю. Единицей инкапсуляции является модуль. Все остальное следует из этого.


    К>>И это должны запомнить студенты/школьники?


    СГ>Что конкретно Вас не устраивает?


    СГ>Именно модуль является единицей инкапсуляции, а не class.


    Перевожу. С точки зрения ученика.

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

    С точки зрения ученика модуль — физическая единица, а класс — логическая. Да и с точки зрения практически любого учителя из глубинки (да и не только) это будет так.


    dmitriid.comGitHubLinkedIn
    Re[29]: *
    От: Дарней Россия  
    Дата: 29.10.04 09:56
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>И потом дети будут уверены, что компьютеры — живые существа и что с ними можно разговаривать на равных


    ИМХО, english-подобие это черта всех первых языков программирования. Это и Кобол, а Бейсик, и в некоторой степени Паскаль, и еще многие другие. Просто тогда всем казалось, что так будет проще для пользователей Но со временем практика показала всю губительность этого подхода.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[43]: Что дают шаблоны?
    От: Кодт Россия  
    Дата: 29.10.04 09:58
    Оценка: 28 (3) +3
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Мне кажется, просто НЕОБХОДИМО уйти от понятия "процедурная переменная".
    Есть такая вещь, как косвенный вызов.
    И есть разные способы, как это сделать. В том числе — не прибегая к указателям на функции, делегатам и интерфейсам.

    Применительно к связке EXE+DLL.
    Очень просто:
    1) заводим в EXE служебный поток — интерпретатор команд
    2) передаём в DLL некую рукоятку к этому потоку (указатель на разделяемую очередь данных, семафоры и мутекс)
    3) DLL, когда соблаговолит, пишет в эту очередь, отдаёт семафор "послано" и берёт семафор "готово".
    4) EXE, в служебном потоке, в цикле: берёт семафор "послано", читает из очереди, интерпретирует команду (с помощью switch, например), пишет ответ, отдаёт семафор "готово"
    5) DLL получает семафор "готово" и читает ответ.

    Вот и всё. Где здесь указатели на функции?
    Ты скажешь — как насчёт запуска потока, с указанием адреса функции. А я отвечу — это всего лишь особенность конкретного рантайма. Если бы мы играли под юниксом, то создать рабочий поток можно было бы с помощью функции fork().
    А если бы многопоточность была встроена в язык, то и fork не потребовался бы.
    Перекуём баги на фичи!
    Re[30]: *
    От: Кодт Россия  
    Дата: 29.10.04 10:09
    Оценка: :))
    Здравствуйте, Дарней, Вы писали:

    Д>ИМХО, english-подобие это черта всех первых языков программирования. Это и Кобол, а Бейсик, и в некоторой степени Паскаль, и еще многие другие. Просто тогда всем казалось, что так будет проще для пользователей Но со временем практика показала всю губительность этого подхода.


    Особенно — после локализации таких языков.
    С содроганием вспоминаю —
    WordBasic в немецкой локали (offen datei #1)...
    РАЯ (он же "Езык") — K&R Си по-русски — почему-то Ершов° думал, что эти НЦ-КЦ проще для неокрепшей детской психики, чем {}...
    ЯБУН... одно название чего стоит!

    °) при всём уважении к А.П.Ершову, равно как Н.Вирту
    Перекуём баги на фичи!
    Re[21]: Среда исполнения и загрузчик
    От: Кодт Россия  
    Дата: 29.10.04 10:23
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>2) COM-овские объекты загружает специальный COM-овский загрузчик, являющийся средой исполнения COM-объектов


    Чаво???
    Берём какую-нибудь книжку "COM на голом Си за 21 день своими ногами" и пишем рантайм для COM-объектов в необходимом объёме.
    Не нужен маршалинг? — нафиг!
    Не нужны апартаменты? — нафиг!
    Не нужны категории? — нафиг!
    Не нужна выгрузка ненужных DLL? — нафиг!
    Не нужна динамическая загрузка DLL? — нафиг!
    Не нужны ProgID'ы? — нафиг!
    Нет реестра в ОС? — обойдёмся!
    В результате получается очень, очень компактный код. Вся задача которого — регистрировать фабрики и обращаться к ним с заявленным CLSID'ом.

    Вот, например, VxDCOM (под VxWorks). Ничего лишнего. Ещё и умеет с удалёнными компьютерами соединяться — правда, криво.
    Перекуём баги на фичи!
    Re[31]: *
    От: Mamut Швеция http://dmitriid.com
    Дата: 29.10.04 10:36
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>...что эти НЦ-КЦ проще для неокрепшей детской психики, чем {}...




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

    И все — психика до сих пор нарушена
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[44]: Что дают шаблоны?
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 29.10.04 10:51
    Оценка:
    Здравствуйте, Кодт, Вы писали:
    К>Мне кажется, просто НЕОБХОДИМО уйти от понятия "процедурная переменная".
    К>Есть такая вещь, как косвенный вызов.
    Абсолютно верно. Система преподавания, результатом которой является неспособность понять, что процедурная переменная суть частный случай реализации концепции косвенного вызова, мне кажется глубоко порочной.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[17]: Общий делитель
    От: WolfHound  
    Дата: 29.10.04 13:41
    Оценка: 1 (1) +1
    Здравствуйте, Сергей Губанов, Вы писали:

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

    Общим делителем является машина Тьюринга. Вот уж где действительно все минимально.
    ... << RSDN@Home 1.1.4 rev. 185 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[18]: Общий делитель
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 29.10.04 13:45
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>Здравствуйте, Сергей Губанов, Вы писали:


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

    WH>Общим делителем является машина Тьюринга. Вот уж где действительно все минимально.

    Или лямба-исчисление или что-то там Чёрча (забыл что там конкретно )
    Re[31]: *
    От: Кодт Россия  
    Дата: 29.10.04 14:19
    Оценка:
    К>РАЯ (он же "Езык") — K&R Си по-русски — почему-то Ершов° думал, что эти НЦ-КЦ проще для неокрепшей детской психики, чем {}...

    А всё-таки жалко, что Рапира канула в лету. То ли транслятор для неё было тяжелее писать, чем для РАЯ, то ли ещё по каким причинам.

    Впрочем, догадываюсь, по каким.
    В 60-70-х годах в СССР была такая идея фикс — выпустить Стандартную Библиотеку Алгоритмов. Даже книжечки такие выходили, на туалетной бумаге, с текстами. Сначала алгоритмы выходили на Алгол-60 (а то и -58), потом их решили перевести. Синтаксис РАЯ более похож на Алголы...
    Вот в учебники и поехал язык, который претендовал на роль стандартного. Видимо, чтобы дети могли от парты к станку...
    Только станки, оказывается, работают на чём угодно, кроме чисто академических изысков.

    В общем, грабли, на которые наступило российское образование, до боли похожи на историю с Обероном. Тоже, кажется, передовой язык и всё такое... Но не у дел.
    Перекуём баги на фичи!
    Re[39]: Что дают шаблоны?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Процедурные переменные — это широкое понятие


    Это ты сам лично для себя его сделал столь широким.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[40]: Что дают шаблоны?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

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


    Во-во.

    S>З.Ы. А тебя самого на основе какого языка обучали программированию? И вообще, по какой программе.


    И вообще, интересно сколько он знает/использовал языков.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[43]: Что дают шаблоны?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Решение не принимается. Вы использовали процедурные переменные (в качестве которых были взяты интерфейсы), а надо было сделать это не используя процедурных переменных, с помощью какого-то switch-а (неизвестно где находящегося). Мое утверждение как раз и состояло в том, что без процедурных переменных этого сделать нельзя.


    Блин, цирк да и только.

    Договорились. Все срвдства полиморфизма современных языков являются процедурными переменными. Самому то не смешно? В ообщем, с терминалогией у тебя явные проблемы.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[44]: Что дают шаблоны?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка: :))
    Здравствуйте, Дарней, Вы писали:

    Д>А вообще — чем дальше, тем больше я удивляюсь. Сначала утверждалось, что процедурная переменная — это то же самое, что указатель на функцию. А теперь мы вдруг узнаем, что указатели на интерфейсы и делегаты чудесным образом попали в эту же категорию.


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

    Ну, типа:

    В курилке какого-то предприятия:
    — Наш начальним полное дерьмо!
    Вдруг появляется тот самый начальник...
    — Ну, в хорошем смысле этого слова.

    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[41]: Что дают шаблоны?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, VladD2, Вы писали:


    VD>>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>>А указатель на функцию — это всего лишь одна из возможных реализаций процедурной переменной.


    VD>>О! Золотые слова! Вот и не нужно кормить детей самым низкоуровневым и примитивным их вариантам. Показывайте им интерфейсы и делегаты. Причем не в битах копайтесь, а показывайте как абстракцию. Тогда и притензий от дейатвующих программистов не будет.


    СГ>А где Вы видели примитивные варианты?


    А вот эти все указатели (как обычные, так и процедурные) — это самые примитивные варианты. Очень советую взглянуть на делегаты и интерфейсы (они, кстати, не только КОМ-овскми бывают).

    СГ> Уж не имеете ли Вы в виду тот казус, когда Вы под термином УКАЗАТЕЛЬ понимали АДРЕС и от этого приходили в бешенство?


    Скорее тот казус когда Вы не видили разницу между ссылкой и указателем.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[18]: Ссылка vs Указатель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>То есть Вы со мной согласны поспорить?

    СГ>Я утверждаю что в оберонах ссылки есть, а Вы утверждаете что их там нет?

    Спорить с человеком который ради смоубеждения назавет указатели ссылками я не очень хочу. Я уже видл как интерфейся и делегаты были по быстрому обозваны "процедурными типами" только чтобы не признавать свою не правоту.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[20]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Ты уверен, что ты говоришь о managed pointers?


    Уверен.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[17]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, rockandroll, Вы писали:

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

    R>Т.е. я хочу сказать, что различия есть на уровне языка (Разный уровень абстракции, как сказал Дарней).

    Так и есть.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[16]: Мощность...
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Это решение одного из языков.


    Несомненн.

    ПК> Если в другом ссылки можно иметь на любые типы, ссылками от этого они быть не перестают.


    Опять не спорю. Но указатели от этого тоже ссылками не становятся.

    Проблема же этого другого языка в том, что в нем невозможно обхадиться исключительно ссылками и приходится скатываться к динамическому заему памяти и работе с указателями. Тут же чистая концепция позволяющая просто не обращать внимание на реализацию. Все просто, прозрачно, быстор...
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[25]: Что дают шаблоны?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>>>Сколько раз повторять!!! Объектные переменные Java это не сами объекты (не value-type), а указатели на них (reference-type).


    VD>>Много раз повторять. Такую глупость сколько не повторяй, все равно она умней не стаент.


    СГ>Уж не хотители Вы сказать, что в Java class это не reference-type, а value-type?


    Не хочу. Я уже давно сказал. Что переменные ссылочных типов — это ссылки на объекты. Указатели зе так и остаются указателями не зависимо от того на что ни указывают. Я не виноват, что эта концепция до Вас не доходит.

    Еще раз предлагаю прочесть стандарт Шарпа. Там все достаточно подробно расписано.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[24]: Что дают шаблоны?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>размерность пространства программ


    А шо цэ за звэрь?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[26]: Что дают шаблоны?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

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


    Честно говря Фортрана никогда не видел. А как же на нем без переменных живут?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[24]: *
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>static-функции члены класса — это попытка заиметь модульность в немодульном языке.


    А может это другое видение модульности? Не, ну, ты хоть на миг оторвись отстоль святой уверенности в привосходстве Оберона и прдставь, что бывают другие решения.

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

    В Дотнете, на базе которого создан Шарп, модульность — это один из основополагающих принципов. Модулем является сборка. Сборка может содержать в себе неограниченное количество типов и может ссылаться на типы из других сборок. Таким образом обеспечивается:
    1. Раздельная компиляция.
    2. Динамическая загрузка.
    3. Поддержка компонентной модели (модули хранят полное мета-описание входящих в нее типов).
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[25]: *
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка: :)
    Здравствуйте, Кодт, Вы писали:

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


    Да, даже не верхнего, а одного. Как я понял модули в Обероне вложенными быть не могут. Или я ошибаюсь?
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[24]: Модуль - единица инкапсуляции
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, Schade, Вы писали:

    S>Те же .NETовские сборки точно так же могут распространяться как бинарники без исходного кода


    Точно в дырочку.

    S>(да и Java, кажется, тоже),


    100%-но!

    S> причем вся метаинформация (символьный файл, в терминологии оберона) находится там же.


    Именно.

    S> Кроме того, в отличие от убогих оберонов, и возможности использования этой мета-информации гораздо шире, и generic-и


    Боюсь тебя не пойму. Если человек не знает, что без исходников можно обходиться, то о дженериках он точно представление иметь не должен.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[17]: Общий делитель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Они из этих принципов процентов 10% знает. В общем, зачем вместо математики учить общие делители я не понял.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[18]: Общий делитель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 16:58
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Минимальный набор — это, пожалуйста, в Лисп. Тем более, что CLOS уже содержит объекты.

    К>Там нет ни указателей, ни ссылок, ни вообще ничего такого. И всё работает

    К>Так что позволь усомниться в твоём заклинании.


    Дак он не императивный. Хотя нет. И в Лисп проникли гнилые порасли императившины.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Может, все таки общий множитель?
    От: Mamut Швеция http://dmitriid.com
    Дата: 29.10.04 17:22
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Сергей Губанов, Вы писали:


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


    VD>Они из этих принципов процентов 10% знает. В общем, зачем вместо математики учить общие делители я не понял.


    Может, все таки общий множитель?
    Общтий делитель только один — 1 (единица). На ноль, как известно, делить нельзя. А с одной единицей много не сделаешь
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[17]: Мощность...
    От: prVovik Россия  
    Дата: 29.10.04 18:36
    Оценка: 18 (1) +1
    Здравствуйте, VladD2, Вы писали:


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


    А может, это от того, что понятие "ссылка" в С++ и С# обозначает немного разные концепции?

    В С# ссылка — это механизм косвенного доступа к некоторому неконкретизированному объекту. Такая ссылка может в разное время может указывать на разные объекты, а можит и вообще никуда не указывать.

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

    ИМХО, понятия ссылки в С++ и C# концептуально неэквивалентны, их различия принципиальны, и это не просто различия в реализации.

    VD>Тут же чистая концепция позволяющая просто не обращать внимание на реализацию. Все просто, прозрачно, быстор...

    А зря. Ибо очень часто различие в реализации принципиально. По этой причине в С++ часто рекомендуют вместо ссылок импользовать константные указатели, дабы явно выделить в тексте программы факт косвенного доступа к объекту. К этому требованию можно относиться по разному, но то, что оно не лишено смысла — это однозначно.
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[26]: Что дают шаблоны?
    От: prVovik Россия  
    Дата: 29.10.04 19:09
    Оценка: 18 (1)
    Здравствуйте, VladD2, Вы писали:

    VD>Указатели зе так и остаются указателями не зависимо от того на что ни указывают.

    Если ты об указателях С++, то это не так. В стандарте, на сколько я помню, четко оговорено, что может существовать только указатель, ссылающийся на реально существующий объект соответствующего типа, либо не ссылающийся вообще никуда, то есть имеющий значение NULL. Другими словами, указатель не может ссылаться куда угодно.

    Вся семантическая разница между указателями С++ и ссылками C# только в том, что с указателями С++ можно проводить дополнительно две операции. А именно:
    1) в случае, если указатель ссылается на элемент массива, то через него можно получить указатель на другой элемент того же массива.
    2) вычисление distance между двумя указателями, ссылающимися на элементы одного массива.
    На этом вся разница, вроде, закончилать.

    P.S.: да, я знаю, что еще может существовать указатель на элемент, следующий за последним элементом массива, но это отдельный случай.
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[25]: Что дают шаблоны?
    От: prVovik Россия  
    Дата: 29.10.04 19:27
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    S>>размерность пространства программ


    VD> А шо цэ за звэрь?


    Думаю, что Сергей имеет ввиду (или подразумевает) порядок бесконечности (вспоминаем математику), но в своих рассуждениях он, неправ. Никакие процедуры и ф-ции этого порядка не меняют, ибо, как не раз уже тут отмечали, любую структурно-ориентированную программу можно перевести в аналогичную ей программу для машины Тьюринга, в которой этих процедур и ф-ций нет. А весь смысл именно в удобстве программиста.
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re: Может, все таки общий множитель?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 19:27
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Может, все таки общий множитель?


    Действительно... может... хотя...
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[19]: Общий делитель
    От: prVovik Россия  
    Дата: 29.10.04 20:26
    Оценка: 17 (1) :)
    Здравствуйте, VladD2, Вы писали:

    VD>Дак он не императивный. Хотя нет. И в Лисп проникли гнилые порасли императившины.


    Кстати, хочу рассказать, как я изучал в универе лисп.
    Но начну рассказ на семестр раньше, когда у нас был предмет "логическое программирование", на основе пролога.

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

    В следующем семестре у нас было "Функциональное программирование" и, соответственно, язык лисп. Вел его, кстати, уже другой преподаватель. Были лабораторные, я писал программы на лиспе, но не мог понять одного: что же означает это загадочное словосочитание "функциональное программирование" и чем оно отличается от обычного? Я писал на лиспе точно такие же программы, какие я писал бы на обычном языке программирования. Практически один в один. Разве что рекурсия чаще использовалась, но я ейю и в обычной жизни не брезговал. Не мог понять, почему запись "имя_функции(параметры)" нефункциональна, а запись "(имя_функции параметры)" функциональна. На паскале я писал: "a := a + 1;", а на лиспе: "(setq a (+ a 1))". Короче, те же яйца, но дебильный синтаксис. Разницы между парадигмами программирования не было видно. Так, по окончанию этого курса я не мог внятно объяснить, чем же функциональное программирование отличается от обычного? Понял я это лишь через время, и оказалось, что дело совсем не в синтаксисе ...

    Так вот, вспоминая свой печальный опыт изучения функционального программирования, у меня сейчас не поднимается язык назвать лисп функциональным. Ну не ассоциируется он...
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[20]: Общий делитель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 29.10.04 22:14
    Оценка:
    Здравствуйте, prVovik, Вы писали:
    ...
    V> Так вот, вспоминая свой печальный опыт изучения функционального программирования, у меня сейчас не поднимается язык назвать лисп функциональным. Ну не ассоциируется он...

    Нада... вашим преподам нужно было по шее настучать.

    Но в общем, ты прав. Можно и на Лиспе (отце всех ФЯ) писать в императивном стиле, и на Шарпе в функциоанльном.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[21]: Общий делитель
    От: Mamut Швеция http://dmitriid.com
    Дата: 29.10.04 22:47
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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

    VD>...
    V>> Так вот, вспоминая свой печальный опыт изучения функционального программирования, у меня сейчас не поднимается язык назвать лисп функциональным. Ну не ассоциируется он...

    VD>Нада... вашим преподам нужно было по шее настучать.


    VD>Но в общем, ты прав. Можно и на Лиспе (отце всех ФЯ) писать в императивном стиле, и на Шарпе в функциоанльном.


    И еще здесь
    Автор: Mamut
    Дата: 28.10.04
    (на правах саморекламы )
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[11]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Borisman2 Киргизия  
    Дата: 30.10.04 05:56
    Оценка:
    Развели тут....релизиозную войну....
    Java vs C++

    Хотя если Вы взглянете в самое начало, предполагалось, что Вы разведете религиозную войну
    Modula2(3)+Oberon vs Java+C++

    Не в том направлении удара смотрите, товарищи бойцы ))))

    А вообще-то тема очень провокационная. Как обычно, тов. Вирт воюет с призраками Кернигана и Ритчи.
    Re[27]: Что дают шаблоны?
    От: Schade Россия  
    Дата: 30.10.04 10:02
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Честно говря Фортрана никогда не видел. А как же на нем без переменных живут?


    Ну, кажется переменные там есть, точнее, реализуются стандартными средствами языка. А вообще-то и без них можно обходится — все сидит в стеке.
    ... << RSDN@Home 1.1.4 @@subversion >>
    Re[28]: Что дают шаблоны?
    От: FR  
    Дата: 30.10.04 11:15
    Оценка: +1
    Здравствуйте, Schade, Вы писали:

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


    VD>>Честно говря Фортрана никогда не видел. А как же на нем без переменных живут?


    S>Ну, кажется переменные там есть, точнее, реализуются стандартными средствами языка. А вообще-то и без них можно обходится — все сидит в стеке.


    Вы Форт с Фортраном не путайте.
    ... << RSDN@Home 1.1.3 stable >>
    Re[29]: Что дают шаблоны?
    От: Schade Россия  
    Дата: 30.10.04 11:33
    Оценка: +1
    Здравствуйте, FR, Вы писали:

    FR>Вы Форт с Фортраном не путайте.


    Угу. И Гоголя с Гегелем. Речь так и идет о Форте, Влад просто опечатался, разве не видно?
    ... << RSDN@Home 1.1.4 @@subversion >>
    Re[26]: Имена модулей vs namespace
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 31.10.04 07:50
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>В .Net есть встроенные способы борьбы с library hell'ом. И это вовсе не длинные_мнемонические_идентификаторы, а номера версий и цифровые подписи сборок.


    Вот и я про то же самое — namespace тут ни при чем.
    Re[32]: У дел
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 31.10.04 08:01
    Оценка: -1
    Здравствуйте, Кодт, Вы писали:

    К>... с Обероном. Тоже, кажется, передовой язык и всё такое... Но не у дел.


    Есть такой феномен в человеческой психике. Берут 10 человек, причем 9 из них подсадные. Показывают две палочки примерно одинаковой длины и спрашивают какая из них длиннее. 9-теро подсадных показывают на короткую палку и говорят что она длиннее. В большинстве случаев испытуемый тоже как и все показывает на короткую палку и тоже говорит что она длиннее. К чему я это привел. А тут на RSDN примерно такая же ситуация. Есть порядка десятка человек твердящих что оберонов нет. Вот и Вы. Кодт, тоже в это поверили. А Вы лучше гляньте ссыли и сами убедитесь "у дел он или не удел":

    http://cern.ch/oberon.day

    Свежие аэрокосмические новости: http://www.prweb.com/releases/2004/9/prweb160825.php (Excelsior — (бывший XDS) разработчик компиляторов модулы и оберона).

    Кстати, сам не давно узнал — на Обероне-2 написана ОС реального времени XO/2, управляющая роботами контроля дорожного движения, расставляемыми в данный период по всей Швейцарии.

    Да Вы и сами можете покопаться в интернете по ключевым словам Modula, Oberon...
    Re[26]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 31.10.04 08:05
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD> Как я понял модули в Обероне вложенными быть не могут.


    Разумеется не могут.

    Как можно одну DLL-ку вложить внутрь другой DLL-ки? Как система будет их динамически загружать/выгружать? Ножницами разрезать бинарник на куски, выкорчевывать машинный код и загружать???
    Re[24]: Модуль - единица инкапсуляции
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 31.10.04 08:09
    Оценка:
    Здравствуйте, Schade, Вы писали:

    S> .NETовские сборки


    Мне не понятен смысл Вашего сообщения. .NETовские сборки это NETовские модули. И в чем проблема-то? Вам не нравится то что я использую термин "модуль" вместо термина "сборка"?
    Re[22]: Среда исполнения и загрузчик
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 31.10.04 08:11
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К> Чаво???


    В чем состоит смысл Вашего сообщения?
    Re[28]: Что дают шаблоны?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 31.10.04 08:19
    Оценка:
    Здравствуйте, Schade, Вы писали:

    S>Ну, кажется переменные там есть, точнее, реализуются стандартными средствами языка. А вообще-то и без них можно обходится — все сидит в стеке.


    Вот и хотелось бы поглядеть на то как можно жить без переменных в ИЯ.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[27]: *
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 31.10.04 09:16
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Разумеется не могут.


    СГ>Как можно одну DLL-ку вложить внутрь другой DLL-ки?


    Вообще-то могут. Но тут дело то в рдугом.

    Я попопробую объяснить по доходчивее

    ЭТО УБОГОСТЬ!

    СГ> Как система будет их динамически загружать/выгружать? Ножницами разрезать бинарник на куски, выкорчевывать машинный код и загружать???


    Тебя тут как-то просили объяснить что такое модуль. Ты начал петь какую-то фигню. Сейчас ты поешь другую. Так как ты объяснишь эти модули детям? А ведь при всем при этом концепция примитивно и пользоваться ее на практике будет крайне неудобно. Вложенные пространства имен куда удобнее. А разбиение на модули куда удобнее делать именно на уровене исполняемых файлов. Зачем мне грузить отдельно еденицу видимости кода???
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 31.10.04 09:27
    Оценка:
    Здравствуйте, Borisman2, Вы писали:

    B>Modula2(3)+Oberon vs Java+C++


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

    B>А вообще-то тема очень провокационная. Как обычно, тов. Вирт воюет с призраками Кернигана и Ритчи.


    Призраки уже исчезли в общем то. Их и в плюсах то мало осталось, а в Яве и подавно.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[25]: Модуль - единица инкапсуляции
    От: Schade Россия  
    Дата: 31.10.04 10:59
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Мне не понятен смысл Вашего сообщения. .NETовские сборки это NETовские модули. И в чем проблема-то? Вам не нравится то что я использую термин "модуль" вместо термина "сборка"?


    О как интересно. Еще недавно существование модульных языков кроме oberon-family отрицалось, теперь вдруг NETовские сборки признаются модулями. Это я вот к этому:
    СГ>Вы не можете купить "скомпилированный" код класса, а должны купить его исходник (иначе просто смысла нет).
    Не надоело еще самому себе противоречить?
    ... << RSDN@Home 1.1.4 @@subversion >>
    Re[29]: Что дают шаблоны?
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 01.11.04 04:47
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Вот и хотелось бы поглядеть на то как можно жить без переменных в ИЯ.

    В форте есть только стек. Точнее, два стека: стек операндов и стек процедур. Стек вызовов поддерживается неявно. Стек процедур всего лишь отражает зависимости, т.е. при определении процедуры мы можем ссылаться на все ранее определенные процедуры. Если определение корректно, то оно помещается на вершину стека процедур. Можно "откатить" процедуры, определенные после некоторой. В общем-то все.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[33]: У дел
    От: Дарней Россия  
    Дата: 01.11.04 05:35
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Есть такой феномен в человеческой психике. Берут 10 человек, причем 9 из них подсадные. Показывают две палочки примерно одинаковой длины и спрашивают какая из них длиннее. 9-теро подсадных показывают на короткую палку и говорят что она длиннее. В большинстве случаев испытуемый тоже как и все показывает на короткую палку и тоже говорит что она длиннее. К чему я это привел. А тут на RSDN примерно такая же ситуация. Есть порядка десятка человек твердящих что оберонов нет. Вот и Вы. Кодт, тоже в это поверили. А Вы лучше гляньте ссыли и сами убедитесь "у дел он или не удел":


    совершенно непредвзятая статистика:
    http://googlewar.com/search.cfm?q1=C%2B%2B&amp;q2=Oberon
    разница, как мы видим, на порядок.

    СГ>http://cern.ch/oberon.day


    мне особенно вот это понравилось:

    Oberon as a modern alternative to Fortran and C++


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

    Влияние Оберона на C# вызывает у меня очень большие сомнения. Идея модульности давно уже в воздухе витала, начиная с оверлеев в MSDOS, so-шек в Юниксе и заканчивая .NET
    Что там еще у них может быть общего, я даже представить не могу.

    СГ>Да Вы и сами можете покопаться в интернете по ключевым словам Modula, Oberon...


    вот-вот. уже покопались
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[34]: У дел
    От: Дарней Россия  
    Дата: 01.11.04 05:37
    Оценка:
    Д>разница, как мы видим, на порядок.

    хотя нет, вру. на два порядка :lol:
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[24]: = vs ==
    От: Дарней Россия  
    Дата: 01.11.04 05:46
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Перечитайте, пожалуйста, исходную статью. Про "=" и "==" говорит не сам Вирт, а тот учитель слова которого Вирт цитировал, именно сын того учителя (а не сын Вирта) задавался этим вопросом.


    если Вирт про это сказал в докладе — значит, считает это важным
    ну а мое мнение — того учителя нельзя даже близко подпускать к обучению
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[23]: Среда исполнения и загрузчик
    От: Кодт Россия  
    Дата: 01.11.04 09:09
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    К>> Чаво???


    СГ>В чем состоит смысл Вашего сообщения?


    А в том, что не надо ерунду говорить про специализированные "загрузчики" COM.
    Есть ряд ситуаций, где "загрузка" вообще отсутствует, а COM живёт и побеждает.
    Это статически прилинкованные inproc server'ы (в том числе под Windows). А под VxWorks вообще иначе быть не может — там весь код прописывается в boot image.
    Перекуём баги на фичи!
    Re[30]: Что дают шаблоны?
    От: Кодт Россия  
    Дата: 01.11.04 09:24
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

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


    VD>>Вот и хотелось бы поглядеть на то как можно жить без переменных в ИЯ.

    S>В форте есть только стек. Точнее, два стека: стек операндов и стек процедур. Стек вызовов поддерживается неявно. Стек процедур всего лишь отражает зависимости, т.е. при определении процедуры мы можем ссылаться на все ранее определенные процедуры. Если определение корректно, то оно помещается на вершину стека процедур. Можно "откатить" процедуры, определенные после некоторой. В общем-то все.

    Если уж точно говорить, то в Форте 3 структуры: стек операндов, стек возвратов и словарь процедур (минимально реализован как односвязный список, хотя бывают варианты).

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

    Переменные в Форте тоже есть — в четырёх вариантах:
    1) константа — фактически, это процедура, которая кидает на стек некое число
    2) глобальная переменная — в списке процедур резервируется место под данные, а одноимённая процедура кидает на стек адрес или хэндл этого места. Разыменование на чтение/запись — задача библиотечных процедур, умеющих работать с хэндлами.
    3) статические буферы — аналогично (2), только выделяется не ячейка, а целый блок. Причём это может быть как константная, так и доступная на чтение память.
    4) динамическая память — в списке процедур либо за стеком (зависит от реализации) выделяется блок памяти под кучу, и есть инструменты, аналогичные malloc/free, для работы с ней.

    Однако механика косвенной адресации реально может быть нужна только при компиляции, а для нужд пользователя может хватить и стека.
    Перекуём баги на фичи!
    Re[34]: У дел
    От: Mamut Швеция http://dmitriid.com
    Дата: 01.11.04 10:05
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>мне особенно вот это понравилось:

    Д>

    Oberon as a modern alternative to Fortran and C++

    Д>
    Д>C++ ненавязчиво так записали в один разряд с давно устаревшим старичком Фортраном. Как здесь уже много раз говорилось — при всех недостатках С++, Оберону до него очень далеко. Мне вся эта возня очень сильно напоминает басню про мышей, которые собрались кошку хоронить.

    Дальше — больше

    efficient and powerful graphical front-end software;




    В описании фич:

    Flexibility: object-oriented features, modularity, dynamic linking...

    The Oberon programming model:
    = procedural programming (true compiled code)


    А object-oriented, значит не true compiled?

    Oberon as an upgrade path from Fortran and C++.


    ноу комментс
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[35]: У дел
    От: Дарней Россия  
    Дата: 01.11.04 10:20
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>

    M>efficient and powerful graphical front-end software;


    особенно хорошо это выглядит в свете обсуждения БлэкБокс в соседней ветке
    даже не знаю, плакать или смеяться
    похоже, люди совершенно оторвались от действительности
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[36]: У дел
    От: Mamut Швеция http://dmitriid.com
    Дата: 01.11.04 10:27
    Оценка:
    Здравствуйте, Дарней, Вы писали:

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


    M>>

    M>>efficient and powerful graphical front-end software;


    Д>особенно хорошо это выглядит в свете обсуждения БлэкБокс в соседней ветке

    Д>даже не знаю, плакать или смеяться
    Д>похоже, люди совершенно оторвались от действительности

    мы наш, мы новый мир построим (с)
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[44]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 10:51
    Оценка: :)
    Здравствуйте, Кодт, Вы писали:

    К>1) заводим в EXE служебный поток — интерпретатор команд


    Ключевое слово ПОТОК. Активные объекты в Active Oberon, Zonnon, (и, кажется, в Ada) работают друг с другом примерно так как Вы описали. У каждого объекта есть очередь, в которую ставятся команды-сообщения от других активных объектов.

    Ваше решение не принимается. Я продолжаю настаивать на необходимости процедурных переменных, ну разьве только теперь сделаю оговорку — в обычных, т.е. в не активных системах.
    Re[42]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 10:54
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Скорее тот казус когда Вы не видили разницу между ссылкой и указателем.


    Это я-то не видел? Да я несколько раз приводил код: PROCEDURE Proc(VAR t: SomeValueType);
    и говорил что t — внутри процедуры будет ссылкой. А указатель — это другое.
    Re[19]: Ссылка vs Указатель
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 11:00
    Оценка: :)
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>То есть Вы со мной согласны поспорить?

    СГ>>Я утверждаю что в оберонах ссылки есть, а Вы утверждаете что их там нет?

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


    Как я указатель могу назвать ссылкой?


    TYPE
      ValueType = RECORD
        i: INTEGER;
      END;
      
      PointerType = POINTER TO ValueType;
    
    
    PROCEDURE Proc1(VAR t: ValueType);

    Переменные типа PointerType — указатели.
    Внутри процедуры Proc1 переменная t — есть ссылка, она от того ссылка, а не значение, что перед ней написано слово VAR.

    Разницу видите?



    PROCEDURE Proc0(    t: ValueType); (* Значение *)
    PROCEDURE Proc1(VAR t: ValueType); (* Ссылка *)
    PROCEDURE Proc2(IN  t: ValueType); (* Ссылка *)
    PROCEDURE Proc3(OUT t: ValueType); (* Ссылка *)
    Re[18]: Мощность...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 11:03
    Оценка:
    Здравствуйте, prVovik, Вы писали:

    V>А может, это от того, что понятие "ссылка" в С++ и С# обозначает немного разные концепции?


    Золотые слова. Я об этом Vlad2 талдычу уже как минимум пару недель. А он все огразается и посылает доки по C# читать.
    Re[31]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 11:11
    Оценка:
    Здравствуйте, Кодт, Вы писали:

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


    Говорили нет переменных, а оказалось, что просто переменные безымянные.
    Re[34]: У дел
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 11:18
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>Влияние Оберона на C# вызывает у меня очень большие сомнения. Идея модульности давно уже в воздухе витала, начиная с оверлеев в MSDOS, so-шек в Юниксе и заканчивая .NET

    Д>Что там еще у них может быть общего, я даже представить не могу.

    Прикол!!!!!!!!!!!!!!! Идея модульности оказывается во-о-н где летала!!!!!!!!!!!!!!

    А то что модульность УЖЕ БЫЛА РЕАЛИЗОВАНА в языке Modula Вы значит не в курсе?

    Modula — середина 70-тых годов, Modula-2 появилась в 1979 году
    Oberon — с 1985 года, Oberon-2 появился в 1992 году.
    Re[25]: = vs ==
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 11:20
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Перечитайте, пожалуйста, исходную статью. Про "=" и "==" говорит не сам Вирт, а тот учитель слова которого Вирт цитировал, именно сын того учителя (а не сын Вирта) задавался этим вопросом.


    Д>если Вирт про это сказал в докладе — значит, считает это важным


    Так это важно.
    Re[28]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 11:26
    Оценка: :)
    Здравствуйте, VladD2, Вы писали:

    VD>А разбиение на модули куда удобнее делать именно на уровене исполняемых файлов. Зачем мне грузить отдельно еденицу видимости кода???


    Золотые слова. Сами додумались?

    Модуль — это:
    1) единица исполнения (исполнимый файл)
    2) единица компиляции
    3) единица инкапсуляции (заметьте НАСТОЯЩЕЙ! инкапсуляции)
    4) самая крупная структурная единица программы
    ....
    ...можно много еще чего написать
    .....



    Кстати, размер модуля как правило не большой и не маленький, так средний. Гораздо больше размера класса, но гораздо меньше размера обычного приложения. То есть обычное приложение, как правило состоит из нескольких десятков модулей, а каждый модуль включает в себя несколько классов.
    Re[26]: = vs ==
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 01.11.04 11:28
    Оценка: :)))
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Д>>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>>Перечитайте, пожалуйста, исходную статью. Про "=" и "==" говорит не сам Вирт, а тот учитель слова которого Вирт цитировал, именно сын того учителя (а не сын Вирта) задавался этим вопросом.


    Д>>если Вирт про это сказал в докладе — значит, считает это важным


    СГ>Так это важно.


    И свято
    Re[29]: *
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 01.11.04 11:32
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, VladD2, Вы писали:


    VD>>А разбиение на модули куда удобнее делать именно на уровене исполняемых файлов. Зачем мне грузить отдельно еденицу видимости кода???


    СГ>Золотые слова. Сами додумались?


    СГ>Модуль — это:

    СГ>1) единица исполнения (исполнимый файл)
    EXE?
    СГ>2) единица компиляции
    СГ>3) единица инкапсуляции (заметьте НАСТОЯЩЕЙ! инкапсуляции)
    а есть ещё псевдоинкапсуляция или симуляция инкапсуляции?

    СГ>4) самая крупная структурная единица программы

    Т.е. нет ничего более крупного аля просто "программа" или "проект"???
    СГ>....
    СГ>...можно много еще чего написать
    СГ>.....
    Напиши!



    СГ>Кстати, размер модуля как правило не большой и не маленький, так средний.

    Определённый Виртом и считающийся великим тайным размером, единственно верным для всех случаев жизни!
    Re[26]: = vs ==
    От: Mamut Швеция http://dmitriid.com
    Дата: 01.11.04 11:41
    Оценка: 1 (1) +2
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Д>>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>>Перечитайте, пожалуйста, исходную статью. Про "=" и "==" говорит не сам Вирт, а тот учитель слова которого Вирт цитировал, именно сын того учителя (а не сын Вирта) задавался этим вопросом.


    Д>>если Вирт про это сказал в докладе — значит, считает это важным


    СГ>Так это важно.


    Почему это важно?

    В С++:
    Оператор присваивания: =
    Оператор сравнения: ==

    В Паскале:
    Оператор присваивания: :=
    Оператор сравнения: =

    В PHP:
    Оператор присваивания: =
    Оператор сравнения: ==
    Оператор безусловного сравнения типов: ===

    В VB:
    Оператор присваивания: =
    Оператор сравнения: =

    Как видите, не важно. В любом случае надо будет просто запомнить. Если человек не понимает операцию присваивания, то такому человеку не поможет даже SET A EQUAL TO B (гипотетически).

    И не надо мне говорить, что пара :=/= из Паскаля легче для понимания. Ничем не легче. Люди, далекие от программирования, не понимают и ее тоже. Зато, поняв операцию присваивания, им все равно становится, что писать, :=, = или <-
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>


    dmitriid.comGitHubLinkedIn
    Re[45]: Что дают шаблоны?
    От: Sergey J. A. Беларусь  
    Дата: 01.11.04 11:49
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Кодт, Вы писали:


    К>>1) заводим в EXE служебный поток — интерпретатор команд


    СГ>Ключевое слово ПОТОК. Активные объекты в Active Oberon, Zonnon, (и, кажется, в Ada) работают друг с другом примерно так как Вы описали. У каждого объекта есть очередь, в которую ставятся команды-сообщения от других активных объектов.


    Ну обойдись без потока — опрашивай регулярно семафоры из главного потока.
    (надеюсь Вы не станете требовть решения СОВСЕМ без потоков ? )
    Я — свихнувшееся сознание Джо.
    Re[46]: Что дают шаблоны?
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 01.11.04 11:51
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Здравствуйте, Кодт, Вы писали:


    К>>>1) заводим в EXE служебный поток — интерпретатор команд


    СГ>>Ключевое слово ПОТОК. Активные объекты в Active Oberon, Zonnon, (и, кажется, в Ada) работают друг с другом примерно так как Вы описали. У каждого объекта есть очередь, в которую ставятся команды-сообщения от других активных объектов.


    SJA>Ну обойдись без потока — опрашивай регулярно семафоры из главного потока.

    SJA>(надеюсь Вы не станете требовть решения СОВСЕМ без потоков ? )

    Да ну, с потоками-то любой дурак сделает
    Re[43]: Что дают шаблоны?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 11:56
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    VD>>Скорее тот казус когда Вы не видили разницу между ссылкой и указателем.


    СГ>Это я-то не видел?


    Ага.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[20]: Ссылка vs Указатель
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 11:56
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Как я указатель могу назвать ссылкой?



    Ты то? Несомненно.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[30]: Что дают шаблоны?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 11:56
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>В общем-то все.


    Вот и хотелось бы глянуть на это чудо.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[45]: Что дают шаблоны?
    От: Кодт Россия  
    Дата: 01.11.04 12:09
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Ключевое слово ПОТОК. Активные объекты в Active Oberon, Zonnon, (и, кажется, в Ada) работают друг с другом примерно так как Вы описали. У каждого объекта есть очередь, в которую ставятся команды-сообщения от других активных объектов.


    Да, и в COM при вызовах через границу апартамента.

    СГ>Ваше решение не принимается. Я продолжаю настаивать на необходимости процедурных переменных, ну разьве только теперь сделаю оговорку — в обычных, т.е. в не активных системах.


    Для чего нужны процедурные переменные? Ну для чего? Чтобы свою правоту показать?

    Ладно. Заведём два интерпретатора — один в EXE, другой в DLL.
    EXE вызывает функцию из DLL, та записывает в очередь две вещи: что делать и как возобновить. И возвращается.
    EXE выполняет действие и снова вызывает функцию из DLL с контекстом возобновления.
    DLL доделывает свои дела и возвращает управление.
    Перекуём баги на фичи!
    Re[32]: Что дают шаблоны?
    От: Кодт Россия  
    Дата: 01.11.04 12:12
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


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


    Я с тобой спорить больше не буду.
    Бери учебник по Форту и сам разбирайся, можно ли называть ЭТО безымянными переменными.

    PS.
    Видел я твой оберон. Так, сапог сапогом. Куча байтов каких-то (всего 256 разных, и те вперемешку). И работает враскоряку.
    Перекуём баги на фичи!
    Re[46]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 12:35
    Оценка: -1
    Здравствуйте, Кодт,

    То есть, не может DLL вызывать процедуры из EXE — да и не надо. Пусть общаются друг с другом через, например, общую память, или вообще посредством TCP/IP.


    Вы писали:

    К>DLL доделывает свои дела и возвращает управление.



    Вот она свои дела доделывает-доделывает и тут вдруг понимает, что надо бы вызвать процедуру из EXE, ан нет — не может. А была бы у нее процедурная переменная связанная с той процедурой, так запросто бы смогла.
    Re[30]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 12:45
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    СГ>>1) единица исполнения (исполнимый файл)

    К>EXE?

    СГ>>4) самая крупная структурная единица программы

    К>Т.е. нет ничего более крупного аля просто "программа" или "проект"???

    Нету в расширяемых модульных система EXE!!!!!! В них есть только модули. Надо вызвать процедуру из какого-то модуля — загружаешь этот модуль в память и вызываешь эту процедуру. Вот и все. Все так просто!!!

    Нету в расширяемых модульных системах "программ" или "проектов". Есть только сама система и куча модулей расширяющих возможности этой системы. Роль "проекта" может играть, например, какой-нибудь модуль-фасад, импортирующий нужные ему модули, о которых другие модули ничего не знают.
    Re[25]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 12:48
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>В Дотнете, на базе которого создан Шарп, модульность — это один из основополагающих принципов.


    Все верно. И что? Какой вывод? Например, такой: Дотнет создан на базе опыта накопленного оберонами (с 1985 года — разработка первого оберона).
    Re[26]: Модуль - единица инкапсуляции
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 12:50
    Оценка:
    Здравствуйте, Schade, Вы писали:

    СГ>>Вы не можете купить "скомпилированный" код класса, а должны купить его исходник (иначе просто смысла нет).

    S>Не надоело еще самому себе противоречить?

    Где Вы увидели противоречие?
    Re[29]: *
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 12:51
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Золотые слова. Сами додумались?


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

    СГ>Модуль — это:

    СГ>1) единица исполнения (исполнимый файл)
    СГ>2) единица компиляции

    Это что за зверь? Файл исходников по русскому? Ну, это очень неудобно.

    СГ>3) единица инкапсуляции (заметьте НАСТОЯЩЕЙ! инкапсуляции)


    Ох!!! НАСТОЯЩЕЙ! Не могет быть. А все остальные с игрушечными возятся?

    СГ>4) самая крупная структурная единица программы

    СГ>....
    СГ>...можно много еще чего написать
    СГ>.....

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

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

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


    И сколько классов при этом советуется напихивать в один исходный файл?

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


    Вот это и чуш. Зачем мне 50 модулей для создания одного приложения? Мне достаточно ОДНОГО исполняемого файла и 1-5 библиотек.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[24]: Среда исполнения и загрузчик
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 12:53
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>А в том, что не надо ерунду говорить про специализированные "загрузчики" COM.

    К>Есть ряд ситуаций, где "загрузка" вообще отсутствует, а COM живёт и побеждает.
    К>Это статически прилинкованные inproc server'ы (в том числе под Windows). А под VxWorks вообще иначе быть не может — там весь код прописывается в boot image.


    Не, ну каково, а? Естественно, что в случаях СТАТИЧЕСКОЙ ЛИНКОВКИ не нежен ДИНАМИЧЕСКИЙ ЗАГРУЗЧИК.
    Re[47]: Что дают шаблоны?
    От: FR  
    Дата: 01.11.04 13:02
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Кодт,


    СГ>То есть, не может DLL вызывать процедуры из EXE — да и не надо. Пусть общаются друг с другом через, например, общую память, или вообще посредством TCP/IP.


    В Win32 exe точно так же как и dll может экспортировать функции, так что технически никаких припятствий к тому чтобы из dll вызывать функции из exe нет.
    ... << RSDN@Home 1.1.3 stable >>
    Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Pavel Dvorkin Россия  
    Дата: 01.11.04 13:18
    Оценка: 21 (2)
    Здравствуйте, LaptevVV, Вы писали:

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


    LVV>>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm


    LVV>

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

    А может, хватит этих воплей ? А то ведь очень сильно напоминают вопли паровозников, когда электровозы появились. Вирт, конечно, классик, спору нет, но он давно уже ИМХО не имеет дела с конкретными разработками. Мир таков, каков он есть, хорошо это или плохо — спорить можно до хрипоты, он от этого другим не станет. В 70-е годы учили Фортрану и ПЛ/1, в 80-е — Паскалю и С/C++, сейчас и Java, и C# тут, а про Фортран и ПЛ/1 все почти забыли. В 2020 году что-то другое будет. Мир за тысячелетия его существования еще не погиб, компьютерный — тоже (за 60 лет), не погибнет и дальше. Каков он будет — таков и будет.

    With best regards
    Pavel Dvorkin

    With best regards
    Pavel Dvorkin
    Re[48]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 13:23
    Оценка:
    Здравствуйте, FR, Вы писали:

    FR>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Здравствуйте, Кодт,


    СГ>>То есть, не может DLL вызывать процедуры из EXE — да и не надо. Пусть общаются друг с другом через, например, общую память, или вообще посредством TCP/IP.


    FR>В Win32 exe точно так же как и dll может экспортировать функции, так что технически никаких припятствий к тому чтобы из dll вызывать функции из exe нет.


    РАЗУМЕЕТСЯ ПРЕПЯТСВИЙ НЕТ!!! Надо всего лишь получить адрес этой функции (получить связанную с этой функцией процедурную переменную). Но тут мне пытаются впарить что это же самое можно сделать не используя процедурных переменных. А я говорю, что без процедурных переменных, как без воды, и не туды и не сюды...
    Re[49]: Что дают шаблоны?
    От: Кодт Россия  
    Дата: 01.11.04 13:32
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>РАЗУМЕЕТСЯ ПРЕПЯТСВИЙ НЕТ!!! Надо всего лишь получить адрес этой функции (получить связанную с этой функцией процедурную переменную). Но тут мне пытаются впарить что это же самое можно сделать не используя процедурных переменных. А я говорю, что без процедурных переменных, как без воды, и не туды и не сюды...


    А ты не говори, а сделай по моему рецепту. И увидишь, что очень даже туды и сюды.
    Кстати! Кто не так давно просто слюной брызгал при слове "адрес"?
    Перекуём баги на фичи!
    Re[47]: Что дают шаблоны?
    От: Кодт Россия  
    Дата: 01.11.04 13:33
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Вот она свои дела доделывает-доделывает и тут вдруг понимает, что надо бы вызвать процедуру из EXE, ан нет — не может. А была бы у нее процедурная переменная связанная с той процедурой, так запросто бы смогла.


    Может. Подумай как. Не придумаешь — завтра расскажу.
    Перекуём баги на фичи!
    Re[35]: У дел
    От: Дарней Россия  
    Дата: 01.11.04 13:38
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А то что модульность УЖЕ БЫЛА РЕАЛИЗОВАНА в языке Modula Вы значит не в курсе?


    Ну и что? Модульность еще на ZX-Spectrum была. Да и до этого тоже — можно смело считать это каменным веком программирования. Который начался, когда люди научились хранить программы на внешних носителях и собирать их из частей
    Единственным новшеством у Модулы можно считать поддержку модульности на уровне языка. Но это, знаете ли, просто эволюционное развитие. Может быть, в Модуле такая поддержка появилась впервые. Но считать из-за этого, что все последующие языки произошли от Модулы — это просто чушь.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[30]: Размер структурной единицы (Грануляция системы)
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 13:39
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Вот это и чуш. Зачем мне 50 модулей для создания одного приложения? Мне достаточно ОДНОГО исполняемого файла и 1-5 библиотек.


    А затем, что:

    1) 30-40 из них можно использовать потом повторно для других приложений. Один раз написанный модуль становится частью всей операционной системы навсегда.

    2) Сложность системы (внесение изменений) описывается U-образным графиком зависимости от размера грануляции тех структурных единиц из которых эта система собрана:
    
     ^
     | Сложность системы
     |
     |
     |
     |   \                         /
     |    \                       /
     |      \                   /
     |        \               /
     |          \           /
     |             \      /
     |                -
     +------------------------------------------>
                                    Масштаб грануляции (размер структурной единицы)

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

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

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

    Модули надо делать именно такого "не большого и не малого" размера.
    Re[31]: Размер структурной единицы (Грануляция системы)
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 01.11.04 13:42
    Оценка: +1 :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, VladD2, Вы писали:


    VD>>Вот это и чуш. Зачем мне 50 модулей для создания одного приложения? Мне достаточно ОДНОГО исполняемого файла и 1-5 библиотек.


    СГ>А затем, что:


    СГ>1) 30-40 из них можно использовать потом повторно для других приложений. Один раз написанный модуль становится частью всей операционной системы навсегда.


    Ага, Вася Пупкин напишет модуль Foo, с мегаметодом make_foo и появится он уже в следующей версии Windows

    [остальное поскипано к чертям]
    Re[49]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 01.11.04 13:42
    Оценка: :))) :)
    Здравствуйте, Сергей Губанов, Вы писали:

    Имеющий уши, да услышит.
    Вот еще один интересный вопрос. Каким образом ухитряется работать UI в Windows? Окна обмениваются какими-то мистическими сообщениями, и нигде нет ни одного указателся на функцию! Ну просто безобразие, ересь сплошная! Да еще и написано это на С++! (Изыди, нечистая сила!)
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[48]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 13:42
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Вот она свои дела доделывает-доделывает и тут вдруг понимает, что надо бы вызвать процедуру из EXE, ан нет — не может. А была бы у нее процедурная переменная связанная с той процедурой, так запросто бы смогла.


    К>Может. Подумай как. Не придумаешь — завтра расскажу.


    Ну-у, она, например, может письмо написать и послать его EXE-шнику по e-mail. Экзешник это письмо получит и сделат что надо.

    Так, да?
    Re[31]: *
    От: Кодт Россия  
    Дата: 01.11.04 13:43
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Нету в расширяемых модульных система EXE!!!!!! В них есть только модули. Надо вызвать процедуру из какого-то модуля — загружаешь этот модуль в память и вызываешь эту процедуру. Вот и все. Все так просто!!!


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


    Если провести параллели с многозадачностью, то ты говоришь о "корпоративной" модульности, когда всё — рантайм, библиотеки, точки входа — вообще всё — свалено в кучу, пусть даже и по каталогам рассовано.
    Добавил детальку — фактически, получил новую систему. Она самодостаточна: компилятор — это одна из деталек, и результат его работы — идёт туда же.
    Поэтому эта штука и названа BlackBox, хотя более правильное ей имя — SandBox, то есть песочница.

    Но следует заметить, что ничего нового здесь не сказано. Многие системы так поступают — да вот хотя бы Lisp, Forth, вроде бы Smalltalk (пусть меня поправят насчёт смолтока).

    А есть ещё "жёсткая" модульность, где всегда можно провести границу: вот это системные библиотеки, а вот сторонние, а вот мои собственные — причём библиотеки из разных пакетов нормально сосуществуют, не заползая в область видимости друг друга.
    Перекуём баги на фичи!
    Re[31]: Размер структурной единицы (Грануляция системы)
    От: Дарней Россия  
    Дата: 01.11.04 13:45
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    А еще есть такая вещь, как иерархическая организация модулей. Но это, видимо, тоже ересь и настоящим программистам не пристало заниматься такими вещами.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[49]: Что дают шаблоны?
    От: Кодт Россия  
    Дата: 01.11.04 13:48
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>>>Вот она свои дела доделывает-доделывает и тут вдруг понимает, что надо бы вызвать процедуру из EXE, ан нет — не может. А была бы у нее процедурная переменная связанная с той процедурой, так запросто бы смогла.


    К>>Может. Подумай как. Не придумаешь — завтра расскажу.


    СГ>Ну-у, она, например, может письмо написать и послать его EXE-шнику по e-mail. Экзешник это письмо получит и сделат что надо.


    Нет, это всего лишь разновидность последовательного канала между активным сервером в EXE и клиентом, размазанным по EXE и DLL, о котором мы уже говорили.
    Загадка: чем первый вызов функции DLL (в механизме, который я описал) отличается от второго? От, возможно, третьего, четвёртого, пятого?..
    Перекуём баги на фичи!
    Re[25]: Среда исполнения и загрузчик
    От: Кодт Россия  
    Дата: 01.11.04 13:58
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Не, ну каково, а? Естественно, что в случаях СТАТИЧЕСКОЙ ЛИНКОВКИ не нежен ДИНАМИЧЕСКИЙ ЗАГРУЗЧИК.


    Вот именно, о чём спорим? О том, что

    2) COM-овские объекты загружает специальный COM-овский загрузчик, являющийся средой исполнения COM-объектов

    было сказано второпях?
    Перекуём баги на фичи!
    Re[50]: Что дают шаблоны?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 14:03
    Оценка: 21 (2)
    Здравствуйте, Кодт, Вы писали:

    К>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>>>Вот она свои дела доделывает-доделывает и тут вдруг понимает, что надо бы вызвать процедуру из EXE, ан нет — не может. А была бы у нее процедурная переменная связанная с той процедурой, так запросто бы смогла.


    К>>>Может. Подумай как. Не придумаешь — завтра расскажу.


    СГ>>Ну-у, она, например, может письмо написать и послать его EXE-шнику по e-mail. Экзешник это письмо получит и сделат что надо.


    К>Нет, это всего лишь разновидность последовательного канала между активным сервером в EXE и клиентом, размазанным по EXE и DLL, о котором мы уже говорили.

    К>Загадка: чем первый вызов функции DLL (в механизме, который я описал) отличается от второго? От, возможно, третьего, четвёртого, пятого?..

    Понял.

    В тот момент когда DLL понимает что ей нужно вызвать кое-какую процедуру из EXE, она запоминает свой контекст и возвращает управление обратно в EXE вместе с просьбой выполнить ту процедуру. Когда EXE, выполнив просьбу, опять вызывает функцию из DLL, то она восстанавливает свой контекст и думает что ей делать дальше.

    Вобщем, получается ручная эмуляция работы стека вызовов процедур.
    Re[32]: Размер структурной единицы (Грануляция системы)
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 14:06
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>А еще есть такая вещь, как иерархическая организация модулей. Но это, видимо, тоже ересь и настоящим программистам не пристало заниматься такими вещами.


    Граф импорта модулей друг другом ацикличен — вот Вам иерархическая структура. Модули ВСЕГДА организованы иерархически.
    Re[26]: Среда исполнения и загрузчик
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 14:12
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Не, ну каково, а? Естественно, что в случаях СТАТИЧЕСКОЙ ЛИНКОВКИ не нежен ДИНАМИЧЕСКИЙ ЗАГРУЗЧИК.


    К>Вот именно, о чём спорим? О том, что

    К>

    2) COM-овские объекты загружает специальный COM-овский загрузчик, являющийся средой исполнения COM-объектов

    К>было сказано второпях?

    Нет, не в торопях.
    Re[51]: _
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 01.11.04 14:29
    Оценка:
    СГ>Понял.

    Ну, раз такое дело, то как бы, приношу свои извенения за доставленные неудобства, без процедурных переменных таки можно организовать то, что я думал что организовать нельзя.
    Re[51]: Что дают шаблоны?
    От: Кодт Россия  
    Дата: 01.11.04 14:36
    Оценка: 3 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>В тот момент когда DLL понимает что ей нужно вызвать кое-какую процедуру из EXE, она запоминает свой контекст и возвращает управление обратно в EXE вместе с просьбой выполнить ту процедуру. Когда EXE, выполнив просьбу, опять вызывает функцию из DLL, то она восстанавливает свой контекст и думает что ей делать дальше.


    СГ>Вобщем, получается ручная эмуляция работы стека вызовов процедур.


    Конечно!
    Причём с возможностью закрутки-раскрутки (если наши функции не влияют на состояние, то мы можем многократно вызвать их с одним и тем же "дампом памяти" и получить одинаковый результат).

    Можно заметить, что для возвращения из процедуры — вызывающая сторона должна положить на стек адрес возврата. Это может показаться процедурной переменной, но на деле ею не является: у программиста нет возможности к ней доступиться (кроме хака), да и суть другая (точка входа vs. точка возврата).



    Естественно, что в обычных ситуациях делать такую механику — смысла нет. И языки так или иначе поддерживают более удобные способы косвенного вызова — будь то процедурные переменные (известные в С/С++ как указатели на функции), прокси, интерфейсы, делегаты, лямбды...
    Что интересно — все они друг через друга могут быть реализованы. Это не тождественные, но эквивалентные (равномощные, если с латыни перевести) инструменты.
    Перекуём баги на фичи!
    Re[26]: *
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 16:31
    Оценка: +1 :))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, VladD2, Вы писали:


    VD>>В Дотнете, на базе которого создан Шарп, модульность — это один из основополагающих принципов.


    СГ>Все верно. И что? Какой вывод? Например, такой: Дотнет создан на базе опыта накопленного оберонами (с 1985 года — разработка первого оберона).


    Опыта у Оберона нет и быть не может, так как он никогда не использовался в широкой практике. Полезные идеи Оберона (а вернее еще Паскаля) были включены во множество современных языков. В том числе и в Шарп. При этом языки вроде Шарпа и Явы проверены вренменем, обладают как минимум не меньшей безопасностью, и значительно более гибки, удобны и функциональны. По этому, учить нужно именно им. А Оберон вообне не нужен в этом мире. Для старта достаточно Паскля, а то и какого-нибудь Руби с Питоном. Ну, а современному ООП нужно обучать именно на Шарпе или Яве.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[50]: Что дают шаблоны?
    От: eugals Россия  
    Дата: 01.11.04 17:23
    Оценка: +1 -1
    Здравствуйте, Дарней, Вы писали:

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


    WindowProc
    ... << RSDN@Home 1.1.4 beta 3 rev. 215>>
    Re[31]: Размер структурной единицы (Грануляция системы)
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 23:16
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) 30-40 из них можно использовать потом повторно для других приложений. Один раз написанный модуль становится частью всей операционной системы навсегда.


    Дык и 1-5 можно. Если код универсальный он выносится в библиотеки.

    СГ>2) Сложность системы (внесение изменений) описывается U-образным графиком зависимости от размера грануляции тех структурных единиц из которых эта система собрана:

    СГ>
    
    СГ> ^
    СГ> | Сложность системы
    СГ> |
    СГ> |
    СГ> |
    СГ> |   \                         /
    СГ> |    \                       /
    СГ> |      \                   /
    СГ> |        \               /
    СГ> |          \           /
    СГ> |             \      /
    СГ> |                -
    СГ> +------------------------------------------>
    СГ>                                Масштаб грануляции (размер структурной единицы)
    СГ>

    СГ>Если в системе много мелких структурных единиц, то значит между ними много связей, когда будешь вносить изменения — замучаешься эти связи отслеживать — сложность растет вместе с ростом количества связей.

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

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

    СГ>Если структурных единиц мало, но они крупные, то замучаешься менять целую большую единицу — сложность опять растет вместе с ростом размера структурной единицы.


    А зачем связывать модули и исходные файлы. Я правильно понимаю, что ты оссоциируешь модуль с исходным файлом?

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


    СГ>Модули надо делать именно такого "не большого и не малого" размера.


    В общем, ты так и не убедил тут никого в целесообразности создания микроскопических модулей. А применение неопределенных понятий вроде "структурной единицы" делает все еще более туманным и непонятным.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[32]: Размер структурной единицы (Грануляция системы)
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.11.04 23:16
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>А еще есть такая вещь, как иерархическая организация модулей. Но это, видимо, тоже ересь и настоящим программистам не пристало заниматься такими вещами.


    Да а нафиг оно упало? Модулей то всего ничего... 100-200 на проект. Та их и в плоском списке можно деражать.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[51]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 02.11.04 03:56
    Оценка: -2
    Здравствуйте, eugals, Вы писали:

    E>WindowProc


    не надо грязи. я то прекрасно знаю, что это такое
    это тот самый свитч, про который наш многоуважаемый оппонент доказывает, что он не может работать
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[52]: Что дают шаблоны?
    От: eugals Россия  
    Дата: 02.11.04 06:25
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>не надо грязи. я то прекрасно знаю, что это такое

    Д>это тот самый свитч, про который наш многоуважаемый оппонент доказывает, что он не может работать
    Ваш многоуважаемый оппонент доказывал совсем другое. Перечитай топик ещё раз.
    Речь шла о том, что процедурные переменные являются незаменимой частью высокоуровневого языка, их отсутствие сократит размерность пространства возможных проектных решений, реализуемымых на данном гипотетическом языке. Кодт доказал
    Автор: Кодт
    Дата: 29.10.04
    , что это не так.
    Ты — нет. WindowProc — процедурная переменная.
    ... << RSDN@Home 1.1.4 beta 3 rev. 215>>
    Re[53]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 02.11.04 07:27
    Оценка:
    Здравствуйте, eugals, Вы писали:

    E>Ты — нет. WindowProc — процедурная переменная.


    покажи мне, в каком месте нужно создавать в своей программе процедурную переменную, когда вызываешь SendMessage или PostMessage
    или твоя гипотетическая процедурная переменная — это универсальный ответ на все случаи жизни, которым можно назвать любой вариант косвенного вызова?
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[33]: Размер структурной единицы (Грануляция системы)
    От: Дарней Россия  
    Дата: 02.11.04 07:33
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Граф импорта модулей друг другом ацикличен — вот Вам иерархическая структура. Модули ВСЕГДА организованы иерархически.


    и это уже мелочи, что модуль с самого верхнего уровня иерархии может импортировать модуль с самого нижнего уровня. верно?
    граф видимости должен быть иерархически организован, а не граф импортирования
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[54]: Что дают шаблоны?
    От: eugals Россия  
    Дата: 02.11.04 08:16
    Оценка: +1 -1
    Здравствуйте, Дарней, Вы писали:

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


    E>>Ты — нет. WindowProc — процедурная переменная.


    Д>покажи мне, в каком месте нужно создавать в своей программе процедурную переменную, когда вызываешь SendMessage или PostMessage

    Я же давал ссылку на msdn. Там всё написано.
    Для посылки сообщений она конечно не обязательна, а вот для приема — да. Или ты свои классы окон ни разу не писал?

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

    ты сказал (см. выделенное):

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

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

    Может хватит флудить, а?
    ... << RSDN@Home 1.1.4 beta 3 rev. 215>>
    Re[32]: Размер структурной единицы (Грануляция системы)
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 02.11.04 08:46
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD> Я правильно понимаю, что ты оссоциируешь модуль с исходным файлом?


    Да именно так. Исходный код 1 модуля = 1 текстовый файл. Все натурально под контролем. Размер модуля, как бы, даже естественно ограничен разумными размерами 1 файла (не будешь же в 1 файл сто тысяч строчек бухать).
    MODULE MyModule;
    
    (* код модуля *)
    
    END MyModule.

    1 файл компилится в одну исполнимую единицу (читай в аналог DLL). Потом подправил чего-нибудь в этом файле — только его перекомпилил и только его бинарник заменил в системе. Ну не натурально ли?
    Re[55]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 02.11.04 08:46
    Оценка: -1
    Здравствуйте, eugals, Вы писали:

    E>Для посылки сообщений она конечно не обязательна, а вот для приема — да. Или ты свои классы окон ни разу не писал?


    За ничем не обоснованную клевету — минус.
    Я то всегда думал, что WindowProc — это функция. А оказывается, это на самом деле процедурная переменная
    Покажи мне ЗДЕСЬ хоть один указатель на функцию.

    // CMfcApp1Dlg dialog
    class CMfcApp1Dlg : public CDialog
    {
    // Construction
    public:
        CMfcApp1Dlg(CWnd* pParent = NULL);    // standard constructor
    
    // Dialog Data
        enum { IDD = IDD_MFCAPP1_DIALOG };
    
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    
    
    // Implementation
    protected:
        HICON m_hIcon;
    
        // Generated message map functions
        virtual BOOL OnInitDialog();
        afx_msg void OnPaint();
        afx_msg HCURSOR OnQueryDragIcon();
        DECLARE_MESSAGE_MAP()
    };
    //////////////////////////////////////////////////////////////////
    CMfcApp1Dlg::CMfcApp1Dlg(CWnd* pParent /*=NULL*/)
        : CDialog(CMfcApp1Dlg::IDD, pParent)
    {
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CMfcApp1Dlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialog::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CMfcApp1Dlg, CDialog)
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    
    // CMfcApp1Dlg message handlers
    
    BOOL CMfcApp1Dlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
    
        // Set the icon for this dialog.  The framework does this automatically
        //  when the application's main window is not a dialog
        SetIcon(m_hIcon, TRUE);            // Set big icon
        SetIcon(m_hIcon, FALSE);        // Set small icon
    
        // TODO: Add extra initialization here
        
        return TRUE;  // return TRUE  unless you set the focus to a control
    }
    
    // If you add a minimize button to your dialog, you will need the code below
    //  to draw the icon.  For MFC applications using the document/view model,
    //  this is automatically done for you by the framework.
    
    void CMfcApp1Dlg::OnPaint() 
    {
        if (IsIconic())
        {
            CPaintDC dc(this); // device context for painting
    
            SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
            // Center icon in client rectangle
            int cxIcon = GetSystemMetrics(SM_CXICON);
            int cyIcon = GetSystemMetrics(SM_CYICON);
            CRect rect;
            GetClientRect(&rect);
            int x = (rect.Width() - cxIcon + 1) / 2;
            int y = (rect.Height() - cyIcon + 1) / 2;
    
            // Draw the icon
            dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
            CDialog::OnPaint();
        }
    }
    
    // The system calls this function to obtain the cursor to display while the user drags
    //  the minimized window.
    HCURSOR CMfcApp1Dlg::OnQueryDragIcon()
    {
        return static_cast<HCURSOR>(m_hIcon);
    }



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


    разделение реализации и интерфейса. основы программирования. срочно RTFM

    E>Может хватит флудить, а?


    не груби.
    Как нетрудно убедиться, для любого UI приложения в Win32 необходимы и достаточны две основные вещи:
    1. Экспортировать свои оконные процедуры. Существующая реализация делает это с помощью указателей на функции, но для самого ЯВУ знать это необязательно.
    2. Использовать PostMessage/SendMessage для косвенного вызова чужих методов
    Таким образом реализуются как косвенные вызовы функций, так и некоторый вариант полиморфизма, наследование объектов в рантайме AKA субклассирование, обратные вызовы и некоторые другие вещи.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[27]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 02.11.04 08:53
    Оценка:
    Здравствуйте, VladD2, Вы писали:

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


    Сейчас я использую старый добрый прием в полемике межъязыковой борьбы (раньше этот прием использовался в войне Си против Паскаля). И так, пожалуйста:

    C# и Java Оберонам не конкуренты, потому что на Оберонах пишут операционные системы, а на C# и Java — нет.

    OS (Native) Oberon, Aos Bluebottle, XO/2 (реального времени), чего-то там для беспилотных летательных аппаратов было на OLGA,....
    Re[28]: *
    От: Дарней Россия  
    Дата: 02.11.04 09:21
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>C# и Java Оберонам не конкуренты, потому что на Оберонах пишут операционные системы, а на C# и Java — нет.


    На Яве пытались — сейчас эта идея кажется канула в Лету (что и неудивительно )
    На C# таки пишут — это Longhorn. Хотя не всю ОС на 100%, конечно.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[29]: *
    От: Kh_Oleg  
    Дата: 02.11.04 09:38
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>На C# таки пишут — это Longhorn. Хотя не всю ОС на 100%, конечно.

    Откуда информация? Поделись ссылками.
    Re[56]: Что дают шаблоны?
    От: eugals Россия  
    Дата: 02.11.04 09:43
    Оценка: +1 -1
    Здравствуйте, Дарней, Вы писали:

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


    E>>Для посылки сообщений она конечно не обязательна, а вот для приема — да. Или ты свои классы окон ни разу не писал?


    Д>За ничем не обоснованную клевету — минус.

    А за обоснованную клевету ты плюсы ставишь?

    Д>Я то всегда думал, что WindowProc — это функция. А оказывается, это на самом деле процедурная переменная

    Процедурная перменная — термин СГ. Называй как хочешь. Нравится "указатель на функцию" — пожалуйста.

    Д>Покажи мне ЗДЕСЬ хоть один указатель на функцию.

    А покажи мне в своей этой фразе:

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

    хоть слово про MFC или про любую другую библиотеку. Ты сказал про WinUI вообще, а оно реализуется вполне конкретно, через WNDCLASS-ы, которые основаны на указателях на WindowProc-ы.
    То, что МФЦ научился прятать её за виртуальными функциями — частность. Кстати, насколько я помню СГ и это решение (связывание через VMT) называл процедурными переменными, так что мимо кассы.

    E>>Может хватит флудить, а?

    Д>не груби.
    Не буду. Но и участвовать в этом флуде тоже не намерен, так что ты дальше как-нибудь без меня...

    Д>Как нетрудно убедиться, для любого UI приложения в Win32 необходимы и достаточны две основные вещи:

    1. Прочитать МСДН и узнать что собой представляет UI в Win32.
    2. Ещё раз перечитать МСДН, потому как одного раза некоторым явно не хватает...
    ... << RSDN@Home 1.1.4 beta 3 rev. 215>>
    Re[30]: *
    От: Дарней Россия  
    Дата: 02.11.04 10:02
    Оценка:
    Здравствуйте, Kh_Oleg, Вы писали:

    K_O>Откуда информация? Поделись ссылками.


    поищу, где видел. Хотя неизвестно еще, сколько там правды, а сколько пиара
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[56]: Что дают шаблоны?
    От: Кодт Россия  
    Дата: 02.11.04 10:13
    Оценка: +1 -1
    Здравствуйте, Дарней, Вы писали:

    Д>Покажи мне ЗДЕСЬ хоть один указатель на функцию.


    Да сколько угодно!

    1) виртуальная функция твоего класса. Ну ладно, потроха виртуального вызова мы не станем изучать...
    2) сам фреймворк MFC регистрирует собственные оконные классы, указывая в них адрес оконной процедуры
    3) а также субклассирует окна базовых классов, также указывая адреса оконных процедур.

    Д>Как нетрудно убедиться, для любого UI приложения в Win32 необходимы и достаточны две основные вещи:

    Д>1. Экспортировать свои оконные процедуры. Существующая реализация делает это с помощью указателей на функции, но для самого ЯВУ знать это необязательно.

    Вот экспортирование оконных процедур и есть работа с указателями на эти процедуры.
    Ты же их не линкером экспортируешь, правильно?

    Тем более, что упомянутый тобой ЯВУ — а именно, С++, — таки обязательно знает.
    Это если бы VB был... да и то с оговорками.

    Д>2. Использовать PostMessage/SendMessage для косвенного вызова чужих методов

    Д>Таким образом реализуются как косвенные вызовы функций, так и некоторый вариант полиморфизма, наследование объектов в рантайме AKA субклассирование, обратные вызовы и некоторые другие вещи.

    Это a.k.a. основано на указателях на функции.
    Следовательно, твой пример неуместен.
    Перекуём баги на фичи!
    Re[57]: Что дают шаблоны?
    От: Кодт Россия  
    Дата: 02.11.04 10:15
    Оценка: +1
    Д>>Покажи мне ЗДЕСЬ хоть один указатель на функцию.

    К>Да сколько угодно!


    К>1) виртуальная функция твоего класса. Ну ладно, потроха виртуального вызова мы не станем изучать...

    К>2) сам фреймворк MFC регистрирует собственные оконные классы, указывая в них адрес оконной процедуры
    К>3) а также субклассирует окна базовых классов, также указывая адреса оконных процедур.
    4) А ты видел, как устроена MESSAGE_MAP? Так посмотри.
    Перекуём баги на фичи!
    Re[57]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 02.11.04 10:17
    Оценка:
    Здравствуйте, eugals, Вы писали:

    E>А за обоснованную клевету ты плюсы ставишь?


    Я всегда готов рассмотреть конструктивную критику в мой адрес.

    E>То, что МФЦ научился прятать её за виртуальными функциями — частность. Кстати, насколько я помню СГ и это решение (связывание через VMT) называл процедурными переменными, так что мимо кассы.


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

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


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

    E>1. Прочитать МСДН и узнать что собой представляет UI в Win32.


    И снова оскорбления. Про оконную подсистему в Wnd я и так знаю куда больше, чем мне бы хотелось.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[57]: Что дают шаблоны?
    От: Дарней Россия  
    Дата: 02.11.04 10:37
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>1) виртуальная функция твоего класса. Ну ладно, потроха виртуального вызова мы не станем изучать...


    единственная виртуальная функция — это OnInitDialog, да и это тоже не является обязательным

    К>2) сам фреймворк MFC регистрирует собственные оконные классы, указывая в них адрес оконной процедуры

    К>3) а также субклассирует окна базовых классов, также указывая адреса оконных процедур.

    Это всё вопросы реализации. Предположим, что мы ничего не знаем о потрохах MFC и нам доступны только не-виртуальные функции обработки сообщений, а также макросы в карте сообщений. Этого уже достаточно для того, чтобы сделать косвенный вызов.

    К>Ты же их не линкером экспортируешь, правильно?


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

    К>Тем более, что упомянутый тобой ЯВУ — а именно, С++, — таки обязательно знает.


    C# например не знает. Но делегаты — это ведь тоже на самом деле где-то глубоко внутри указатели на функцию.... сказка про белого бычка. Начинаем все сначала.

    К>Это если бы VB был... да и то с оговорками.


    Вот-вот. Жаль, что я сразу про него не подумал. А что за оговорки, интересно? Что там тоже есть процедурные переменные где-то внутри?

    К>Следовательно, твой пример неуместен.


    Ну зачем все время валить интерфейс и реализацию в одну кучу?
    Я уже скоро начну биться головой об клавиатуру.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[28]: О космических кораблях и проч.
    От: TheBeard Россия  
    Дата: 02.11.04 12:19
    Оценка: 2 (2) +1
    Сергей, я уже не в первый раз вижу: операционная система, ПО для
    роботов, для космических кораблей...

    Так ведь всегда есть [микро]ядро, написанное на ассемблере и/или C.
    Просто потому, что Оберон ничего не знает про железо. Я не прав? То же
    самое можно сказать про Аду, Смоллток (и на нём пишут ПО для роботов) и т.д.

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

    Сергей Губанов wrote:

    > Сейчас я использую старый добрый прием в полемике межъязыковой борьбы

    > (раньше этот прием использовался в войне Си против Паскаля). И так,
    > пожалуйста:

    >

    > C# и Java Оберонам не конкуренты, потому что на Оберонах пишут
    > операционные системы, а на C# и Java — нет.

    Posted via RSDN NNTP Server 1.9 gamma
    Re[32]: *
    От: serg_mo  
    Дата: 02.11.04 12:23
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Но следует заметить, что ничего нового здесь не сказано. Многие системы так поступают — да вот хотя бы Lisp, Forth, вроде бы Smalltalk (пусть меня поправят насчёт смолтока).

    Да, в Смолтоке все модули равны.

    К>А есть ещё "жёсткая" модульность, где всегда можно провести границу: вот это системные библиотеки, а вот сторонние, а вот мои собственные — причём библиотеки из разных пакетов нормально сосуществуют, не заползая в область видимости друг друга.

    А как такую границу провести? Можно пример?
    ... << RSDN@Home 1.1.3 stable >>
    Re[57]: Что дают шаблоны?
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 02.11.04 14:12
    Оценка: +3
    Здравствуйте, Кодт, Вы писали:
    Ну, вообще-то мы вроде бы можем банально выгребать очередь сообщений и без помощи DispatchMessage, которая собственно и использует зарегистрированные ранее оконные процедуры. .
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[33]: Размер структурной единицы (Грануляция системы)
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 03.11.04 22:06
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    Вот это и ужасно. Это приведет и к невероятно огромным листингам в одном файле. И к появлению туевы хучи мелкий длл-ек.

    Вот, к примеру в проекте Янус (RSDN@Home) сейчас 33 модуля общим объемом ~ 4 мегабайта.

    При этом проект состоит из 325 файлов C# (около 2-х мег.) и кучи других файлов. Думаю, на обероне его вообще сделать было бы невозможно.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[28]: *
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 03.11.04 22:06
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Сейчас я использую старый добрый прием в полемике межъязыковой борьбы (раньше этот прием использовался в войне Си против Паскаля). И так, пожалуйста:

    СГ>

    СГ>C# и Java Оберонам не конкуренты, потому что на Оберонах пишут операционные системы, а на C# и Java — нет.

    СГ>OS (Native) Oberon, Aos Bluebottle, XO/2 (реального времени), чего-то там для беспилотных летательных аппаратов было на OLGA,....

    Гы. Аргумент... ОС на обероне никто в глаза не видел (представляю себе это убожество). А вот сотовыее телефоны с Явой у каждого второго. И Ява-ос есть.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[30]: *
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 03.11.04 22:06
    Оценка:
    Здравствуйте, Kh_Oleg, Вы писали:

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


    Д>>На C# таки пишут — это Longhorn. Хотя не всю ОС на 100%, конечно.

    K_O>Откуда информация? Поделись ссылками.

    longhorn.msdn.microsoft.com
    http://longhorn.msdn.microsoft.com/lhsdk/longhornoverview/loconExploringNewPlatform.aspx
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[34]: Размер структурной единицы (Грануляция системы)
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 05.11.04 10:43
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD> Думаю, на обероне его вообще сделать было бы невозможно.


    А обосновать?
    Re[35]: Размер структурной единицы (Грануляция системы)
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 05.11.04 10:50
    Оценка: +1 -2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, VladD2, Вы писали:


    VD>> Думаю, на обероне его вообще сделать было бы невозможно.


    СГ>А обосновать?


    А опровергнуть?
    Т.е. реализуй Янус на Обероне, тогда можно будет уже о чём-то говорить
    Re[35]: Размер структурной единицы (Грануляция системы)
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 05.11.04 18:31
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    VD>> Думаю, на обероне его вообще сделать было бы невозможно.


    СГ>А обосновать?


    А что мне обосновывать. Я на Шарпе сделал. Можешь попробовать сделать на Обероне. Без контролов, без отладчика, без библиотек, без средств доступа к данным...
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[36]: Размер структурной единицы (Грануляция системы)
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 05.11.04 18:31
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>А опровергнуть?

    К>Т.е. реализуй Янус на Обероне, тогда можно будет уже о чём-то говорить

    Тут уже было много кто языком бы сделал лучше, быстрее и пушистее. Вот тлько дальше разговоров ни у кого дело не пошло.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[36]: Размер структурной единицы (Грануляция системы)
    От: Павел Кузнецов  
    Дата: 05.11.04 18:35
    Оценка: +3
    Курилка:

    > VD>> Думаю, на обероне его вообще сделать было бы невозможно.


    > СГ> А обосновать?


    > А опровергнуть? Т.е. реализуй Янус на Обероне, тогда можно будет уже о чём-то говорить


    Не, ну нельзя же так, в конце концов. Я, конечно, понимаю, что Оберон публике по нраву не пришелся, но прибегать к таким аргументам...

    Это классический некорректный метод ведения дискуссии, для которого даже название придумали:

    Ошибка #043 тип Shifting the burden of proof
    Допущение истинности утвеpждения, пока не доказано обpатное. Пpимеp: "Бывают зеленые сантаклаусы, синие единоpоги, зелененькие человечки в таpелочках и пауки шиpиной в земной шаp. Докажите обpатное".

    Такими приемами можно любую дискуссию в тупик завести. Если уж кто-то высказал нечто спорное, то пусть сам и доказывает. Не доказывает — не надо, но и полагать подобные утверждения верными только на основании того, что доказательств их ложности не последовало, не корректно.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[36]: Размер структурной единицы (Грануляция системы)
    От: Павел Кузнецов  
    Дата: 05.11.04 18:37
    Оценка: +1
    VladD2:

    > VD>> Думаю, на обероне его вообще сделать было бы невозможно.


    > СГ> А обосновать?


    > А что мне обосновывать. Я на Шарпе сделал. Можешь попробовать сделать на Обероне. <...>


    Это не обоснование невозможности данного действия. Это просто констатация того, что до сих пор оно не сделано. Суть разные вещи.
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[37]: Размер структурной единицы (Грануляция системы)
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 05.11.04 21:09
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

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


    А я и не брался обосновывать свое мнение. Это мое мнение. Мне не нужно кому-то чего-то доказывать. Оно такое и оно соотвествует сегодняшним релиям.

    Так что если у кого-то возникло желание его оспорить, то пусть и доказывает. Потому как потенциально можно все что не противоречит законам физики. Но реально есть море трудностей которые не позволят сделать эту рабту на Обероне. Да ни С++ непозволят. Проект просто развалится от количества багов и мневнятного кода. Над ним же работают целая куча программистов, причем квалификация моногих, скажем так, не блещет. Но у С++ и Оберона проблемы разные. У плюсов проблема будет в сложности и не безопасности языка, а у Оберона в убогости языка, библиотек и сопутствующих технологий. Конечно Хоум можно и на ассемблере написать, но это чисто гипотетическая возможность. Такое только за деньги возможно. А денег никто не даст. Так что... В общем, если кому-то что-то хочется доказать, то бирите в руки инструменты и доказывайте. Мне доказывать ничего нечего.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[38]: Размер структурной единицы (Грануляция системы)
    От: Павел Кузнецов  
    Дата: 06.11.04 00:12
    Оценка: +4
    VladD2:

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


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


    Естественно. До тех пор, пока ты его не используешь в качестве аргумента в споре.

    > Оно такое и оно соотвествует сегодняшним релиям.


    Может, соответствует, может, нет. Об этом и речь.

    > реально есть море трудностей которые не позволят сделать эту рабту на Обероне. Да ни С++ непозволят. Проект просто развалится от количества багов и мневнятного кода. Над ним же работают целая куча программистов, причем квалификация моногих, скажем так, не блещет.


    Самому не смешно? Даже на C в еще более хаотичном режиме при участии значительно большего количества участников пишут системы намного большего размера, чем Янус. А еще есть проекты на Перле... И ничего — не разваливаются, работают потихоньку
    Posted via RSDN NNTP Server 1.9 gamma
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[39]: Размер структурной единицы (Грануляция системы)
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 06.11.04 06:18
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Естественно. До тех пор, пока ты его не используешь в качестве аргумента в споре.


    Я его использовал в качестве аргумента? Я просто высказался на тему. Не более того.

    >> Оно такое и оно соотвествует сегодняшним релиям.


    ПК>Может, соответствует, может, нет. Об этом и речь.


    Опять таки. По-моему, соотвествует. Но доказывать не собираюсь. Тема явно того не стоит.

    ПК>Самому не смешно?


    Нет не смешно. Я прекрасно знаком с условиями.

    ПК> Даже на C в еще более хаотичном режиме при участии значительно большего количества участников пишут системы намного большего размера, чем Янус. А еще есть проекты на Перле... И ничего — не разваливаются, работают потихоньку


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

    Уже было куча народу приходивших и говоривших — "а давайте как перепишем Янус на ххх?". Им говорили — фалг тебе в руки... На этом все и заканчивалось. Доказать почему это не будет невозоможно, потому как если сильно упереться рогом, то конечно это сдалеть можно. Но этого не будет. Это мое мнение. Основано оно на видинии ситуации, на куче мелких предпосылок, но ощущениях наконец. Так что варианты тут очень простые: 1. Доказать неверность моих предположений эмпирически, реализовав версию на другом языке. 2. Просто не согласиться. 3. Несогласиться и попытаться доказать это с помощью логических утверждений. 4. Поверить на слово.

    Думаю, что последнее так же невозможно как и доказать обратное. 1-ое невозможно потому что я прав . А второе или четвертое... Это как раз самый разумный выход. Это не тот вопрос где можно привести полный и не противоречивый набор фактов.
    ... << RSDN@Home 1.1.4 beta 3 rev. 207>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.