| Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | LaptevVV rsdn | http://vk.com/id59893040 |
| Дата: | 10.05.04 10:08 | |
| Оценка: | 91 (12) +1 -1 | |
http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm— Кодт Наши программисты — самые программистые программисты в мире! | |
| Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | LaptevVV rsdn | http://vk.com/id59893040 |
| Дата: | 10.05.04 10:10 | |
| Оценка: | ![]() | |
| Здравствуйте, LaptevVV, Вы писали: LVV>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm Цитата! Видите, чем приходится заниматься! Наши программисты — самые программистые программисты в мире! | |
| Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | LaptevVV rsdn | http://vk.com/id59893040 |
| Дата: | 10.05.04 10:13 | |
| Оценка: | 18 (1) | |
| Здравствуйте, LaptevVV, Вы писали: LVV>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm
Наши программисты — самые программистые программисты в мире! | |
| Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | LaptevVV rsdn | http://vk.com/id59893040 |
| Дата: | 10.05.04 10:19 | |
| Оценка: | 15 (1) +2 | |
| Здравствуйте, LaptevVV, Вы писали: LVV>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm Класссс!!!!! Наши программисты — самые программистые программисты в мире! | |
| Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | LaptevVV rsdn | http://vk.com/id59893040 |
| Дата: | 10.05.04 10:21 | |
| Оценка: | 18 (1) | |
| Здравствуйте, LaptevVV, Вы писали: LVV>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm
Наши программисты — самые программистые программисты в мире! | |
| Re: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Aquary | http://scm-notes.blogspot.com/ |
| Дата: | 10.05.04 11:19 | |
| Оценка: | 4 (2) +3 | |
| Здравствуйте, LaptevVV, Вы писали: LVV>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm В чем-то он, несомненно, прав — нужно давай больше фундаментальных знаний... да и нагромождать в голову студенту новомодные веяния тоже нужно с умом... но.. всяк кулик свое болото хвалит — сколько желчи было вилито в статье на С, С++ иже с ними? кроме того, излишнее погружение в формальную сторону программирования (нотации и т.п.) — это тоже излишество, т.к. эта штука способна напугать многих школьников, которым интересно писать программы, но не интересно читать заумные работы профессоров... первокурснику и старшекласснику проще показать пару работающих примеров, а уже потом обучать его формальной стороне вопроса — так он, по крайней мере, будет знать, зачем всё это нужно. немного сумбурно я написал.... Dixi | |
| Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 10.05.04 11:34 | |
| Оценка: | ![]() | |
| Здравствуйте, LaptevVV, Вы писали: LVV>Здравствуйте, LaptevVV, Вы писали: LVV>>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm LVV> LVV>Класссс!!!!! На этом же сайте http://www.inr.ac.ru/~info21/info/wirth_avia.htm:
Олег. | |
| Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | bkat | |
| Дата: | 10.05.04 11:41 | |
| Оценка: | +1 | |
| Здравствуйте, Kh_Oleg, Вы писали: K_O>
Ну пропустил бы другую ошибку и ракета взорвалась бы на 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 rsdn | http://vk.com/id59893040 |
| Дата: | 10.05.04 12:09 | |
| Оценка: | +1 -2 | |
| Здравствуйте, BiТ, Вы писали: LVV>>>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm LVV>>Руководящим для моей карьеры в преподавании и исследованиях был тот принцип, что хорошо подготовленные профессионалы должны быть гораздо эффективнее, чем вдохновенные любители. В их производительности должно быть различие, и притом существенное. Думаю, что нашей общей целью должно быть увеличение этого различия. LVV>>[/q] BiТ>И продолжая мысль — хорошо подготовленные вдохновенные любители сделают и тех, и других Нет! Разница здесь должна быть такой же, как , например, в музыке. Ни один любитель не может играть так, как играет профессионал. И у нас так же должно быть. А пока — то, что вы сказали. Это — ненормально! Наши программисты — самые программистые программисты в мире! | |
| Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 10.05.04 12:11 |
| Здравствуйте, bkat, Вы писали: B>Здравствуйте, Kh_Oleg, Вы писали: K_O>>
B>Ну пропустил бы другую ошибку и ракета взорвалась бы на 2 сек позже. B>Никогда ошибки не будут выявляться автоматически компиляторами или другими тулзами. Борис БАБАЯН. Защищенные информационные системы. B>Просто сложность и объем кода настолько велик, B>что даже одна ошибка на десяток миллионов строк кода может быть (и иногда становится) B>роковой. Речь идет о таких ошибках, которые компилятор МОЖЕТ обнаруживать. Ясно, что кривой дизайн никакой Оберон не исправит. И здесь компилятор С++ заведомо проигрывает именно из-за невероятной сложности самого языка. И проще его сделать нельзя — стандрат однако! Еще одна цитата оттуда же:
Олег. | |
| Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | bkat | |
| Дата: | 10.05.04 12:14 |
| Здравствуйте, LaptevVV, Вы писали: BiТ>>И продолжая мысль — хорошо подготовленные вдохновенные любители сделают и тех, и других LVV>Нет! Разница здесь должна быть такой же, как , например, в музыке. Ни один любитель не может играть так, как играет профессионал. И у нас так же должно быть. А пока — то, что вы сказали. Это — ненормально! Да, это ненормально. Но если сравнить потребность в музыкантах-профессионалах и программистах, тогда все станет на свои места. Да, надо готовить профи, но их никогда не будет в нужном количестве. Потому видимо перспективней развивать технологию. Именно такую, когда и обезъяны смогут писать без ошибок. В общем сверхзадача программирования — сделать так, чтобы программирование как род деятельности с участием человека исчезла бы совсем и стала бы ненужной |
| Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | LaptevVV rsdn | http://vk.com/id59893040 |
| Дата: | 10.05.04 12:21 |
| Здравствуйте, Kh_Oleg, Вы писали: K_O>Речь идет о таких ошибках, которые компилятор МОЖЕТ обнаруживать. Ясно, что кривой дизайн никакой Оберон не исправит. Да, еще в 70-е годы все учебники про технологии программирования обошла знаменитая ошибка в программе на фортране, из-за которой тоже взорвалась ракета, стартовавшая с мыса Кеннеди. В Фортране можно было писать идентификаторы с пробелами (!!!!). Это приводило к таким супер-ляпам:
Оба — правильные операторы на фортране. Элементарная опечатка оператора(человек, набивающий программу на перфокарту!). И компилятор это пропускает! K_O>И здесь компилятор С++ заведомо проигрывает именно из-за невероятной сложности самого языка. И проще его сделать нельзя — стандрат однако! Да, я уже приводил аналогичный пример в С++
K_O>Еще одна цитата оттуда же: K_O> Вот это, конечно, впечатляет! Аналогично было с паскалем и алголом-68. Наши программисты — самые программистые программисты в мире! | |
| Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | bkat | |
| Дата: | 10.05.04 12:28 | |
| Оценка: | 1 (1) | |
| Здравствуйте, Kh_Oleg, Вы писали: K_O>Речь идет о таких ошибках, которые компилятор МОЖЕТ обнаруживать. Какие ошибки может обнаруживать компилятор? Их не так уж и много. Я лично не очень верю в надежность программ, написанных на языках с очень строгой типизацией. Да, в простых случаях (студенческие программы) это может помочь. Но в реальной жизни на преодаление ограничений, накладываемые компилятором, могут быть потрачены такие усилия, что вся надежность будет перечеркнута и даже будет еще хуже. Почему придется преодалевать эти ограничения? Да просто жизнь такая Можно почитать форумы тут на RSDN и проследить, как много усилий тратиться на разные хаки и трюки, которые, кстати говоря, очень часто вызывают восхищение и считаются "красивыми" решениями. |
| Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 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>
Подробнее о катастрофе Ариан-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 | http://kholeg.spaces.live.com |
| Дата: | 10.05.04 13:29 |
| Здравствуйте, AVM, Вы писали: AVM>Подробнее о катастрофе Ариан-5 было написано в "Открытых системах" http://www.osp.ru/os/1998/06/21.htm#part_1. КЛАСС!!! Это просто шедевр!
Олег. | |
| 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) | |
Что как раз иллюстрирует, что проблемы куда глубже, чем ошибки, не выловленные компилятором. |
| Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | LaptevVV rsdn | http://vk.com/id59893040 |
| Дата: | 10.05.04 13:42 | |
| Оценка: | -1 | |
| Здравствуйте, unintruder, Вы писали: U>Послушай передачу Троицкий и Ф.М. Достоевский. Артемий предоставлял зрителям альбомы человека, который всю жизнь живет в Финляндии, в лесу, то что он делает надо слышать, или альбом индуса, датированный 1976 годом, электроная музыка "продиджи+Моби" в одном флаконе, саунд более чем современный. Они не профессионалы, в том смысле, как ты это понимаешь, но результат на лицо. Я хотел сказать, что это слишком категоричное заявление, вот если бы ты привел в пример бокс — любительский против профессионального, это наверное более близко выразило твою мысль. Композиторы, панимаешь!!!! Обрати внимание: в так называемых творческих профессиях много зависит от таланта. В программировании — совершенно не то положение. Программисты гораздо больше похожи на исполнителей. чем на композиторов. Даже самая творческая элита — архитекторы — должны МНОГО учиться. Просто наша область СИЛЬНО СПЕЦИФИЧЕСКАЯ. Просто у меня под началом работали программисты-любители (без образования). Извините, но человек, имеющий даже то образование, которое есть, в целом пишет лучше — это мой опыт. Конечно, феномены есть во всякой области, но это все-таки исключение из правил. А вирт ведет речь о массовой подготовке ПРОФЕССИОНАЛОВ, а не про отдельную индивидуальную подготовку. Тут я с ним полнорстью согласен. Наши программисты — самые программистые программисты в мире! | |
| Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 10.05.04 13:49 | |
| Оценка: | +1 | |
| Здравствуйте, bkat, Вы писали: B>Что как раз иллюстрирует, что проблемы куда глубже, B>чем ошибки, не выловленные компилятором. Естественно! Поэтому давайте займемся теми проблемами, которые компиляторы не умеют выявлять, а то, что они могут найти — пусть находят по полной, а не заставляют терять время в многочасовых code review. Олег. | |
| Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | AndrewVK модератор | |
| Дата: | 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 | |
| Оценка: | 106 (10) +6 | |
| Здравствуйте, LaptevVV, Вы писали: LVV>Здравствуйте, LaptevVV, Вы писали: LVV>>http://www.inr.ac.ru/~info21/greetings/wirth_doklad_rus.htm LVV>
(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 | http://kholeg.spaces.live.com |
| Дата: | 10.05.04 16:26 | |
| Оценка: | +1 -4 | |
| Здравствуйте, Зверёк Харьковский, Вы писали: ЗХ>Ревнители частоты языка часто нападают на С++. Они полагают, что высшее достижение современной цивилизации — язык, построенный исключительно из атомов и скобок. По мнению этих террористов от синтаксиса, если простую переменную с первого взгляда невозможно отличить от вызова функции или макроса — это вообще не язык, а шарлатанство для развлечения праздной толпы. К сожалению, теория расходится с практикой. В реальной жизни толпа платит лишь за то, чтобы видеть языки, в которых разные идеи выглядят по-разному. Если бы всегда решала толпа, то Земля бы до сих пор оставалась на трех китах! ЗХ>«Простые и последовательные» языки никогда не пользовались особым успехом за стенками академий, а языки с блочной структурой овладели массами. Стоит ли этому удивляться? Ведь компьютерные языки приходится изучать и запоминать, а для этого используется то же серое вещество, с помощью которого мы изучаем и запоминаем естественные языки. Языки программирования приходится прежде всего читать. А для этого нужны именно простые и последовательные. ЗХ>Попробуйте-ка назвать хотя бы один естественный язык без существительных, глаголов и скобок! Я бы не рискнул. Все наши познания в лингвистике говорят о том, что эти «плохие» особенности только ускоряют изучение компьютерного языка и делают его более понятным. 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 | http://kholeg.spaces.live.com |
| Дата: | 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) +2 -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>Оба — правильные операторы на фортране. Ну, вообще говоря, на том фортране (70-х годов) первое не было оператором цикла. Надо было написать что-нибудь типа
где 10 — метка последнего оператора цикла. Но сути сообщения это, конечно, не меняет |
| Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 10.05.04 18:49 | |
| Оценка: | +1 | |
| Здравствуйте, SWW, Вы писали: LVV>> Я вижу в своем воображении образцовый учебник в качестве подходящего исходного пункта. Он должен удовлетворять следующим критериям: LVV>>Начинаться сжатым введением в основные понятия программного проектирования. LVV>>Использовать лаконичную формальную нотацию, строго определенную не более чем на примерно 20 страницах. SWW><...> SWW>Глупости. Это был бы худший учебник, какой только можно придумать. Он был бы понятен только тому, кто уже знает язык. SWW>Практика же показывает, что лучший учебник — это Керниган-Ритчи, который безо всяких формальных нотаций с первой же страницы предлагает писать простую программу. Только обучение по такому учебнику сродни обучению игры на фортепиано двумя пальцами — быстрый прогресс вначале и ступор при попытке сыграть что-либо серьезное. Олег. | |
| Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 10.05.04 19:38 | |
| Оценка: | 27 (2) +2 -1 ![]() | |
| Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 10.05.04 19:38 |
| Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 10.05.04 19:38 |
| Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | AVM | |
| Дата: | 10.05.04 19:47 | |
| Оценка: | +1 | |
| Здравствуйте, VladD2, Вы писали: VD>Здравствуйте, Kh_Oleg, Вы писали: K_O>>
VD>А вот интересно как можно определить от чего взарвалась ракета если ее бортовой компьютер был уничтожен взрывом? Обычно, все "логи" дублируются на Землю через телеметрию |
| Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | AndrewVK модератор | |
| Дата: | 10.05.04 19:57 | |
| Оценка: | ![]() | |
| Здравствуйте, VladD2, Вы писали: VD>ты хоть бы назвал бы имя товарища, я в будущем относился к его словам с осторожностью. ... << RSDN@Home 1.1.3 beta 2 (mobile station) >> AVK Blog | |
| Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 10.05.04 20:12 |
| Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Дм.Григорьев | |
| Дата: | 10.05.04 21:27 | |
| Оценка: | -2 | |
| Здравствуйте, Kh_Oleg, Вы писали: K_O>Ну а перегрузка операторов — это вообще из серии "некоторое действие, которое выглядит как сложение, но делает то, что знаю только я!" Во-во!!! Пусть бросит в меня камень тот, кто ни разу не ошибался с диапазонами массивов и величинами инкремента указателей, забыв про тип этих указателей. И кто ни разу не копался в исходниках, написанных другим (квалифицированным, ответственным) программистом. Это свобода на грани анархии. Вспоминаю свои ощущения в процессе изучения Java после нескольких лет юзанья C++: просто счастье, что есть автоматические финалайзеры, есть сборщик мусора, зато нет перегрузки операторов и нет множественного наследования. Все просто, строго и красиво, программеры с шаловливыми руками — руки за спину! http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework. | |
| Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 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 | |
| Оценка: | +1 | |
| Здравствуйте, 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 rsdn | www.k-press.ru/cs |
| Дата: | 10.05.04 22:46 |
| Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Дм.Григорьев | |
| Дата: | 10.05.04 22:52 |
| Здравствуйте, VladD2, Вы писали: VD>Длч Inc из дельфи тоже по фигу указатель это или что. Я имел в виду не дельфи как таковую, а некий гипотетический язык, где можно было бы раскидать операторы по типам операндов — без перегружаемых методов (так они кажись называются? VD>Самый эффективный способ борьбы с указателями — это полный отказ от них. Это точно. 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 >>
|
| 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 rsdn | http://www.parallels.com/automation/operations/ |
| Дата: | 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 |
| Здравствуйте, Дарней, Вы писали: Д>Здравствуйте, Дм.Григорьев, Вы писали: ДГ>>просто счастье, что есть автоматические финалайзеры Д>.... которые настоятельно не рекомендуется использовать в любых целях, кроме освобождения памяти. Которая, кстати, сама освобождается, так что они как бы и не нужны. Д> Про что многие привыкшие к безопасности программеры забывают и за это потом получают по балде. Ну я себя к таким не относил, по крайней мере в части данного глюка... 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 rsdn | http://www.parallels.com/automation/operations/ |
| Дата: | 11.05.04 06:27 | |
| Оценка: | 1 (1) | |
| Re[10]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Дм.Григорьев | |
| Дата: | 11.05.04 06:29 |
| Здравствуйте, Дарней, Вы писали: Д>К дисциплине приучает С++. А Ява просто принудительно не дает косячить Д>Видел я программы, которые писали явисты на С++ — страшное зрелище.... Я думаю, что без понимания идеологии программирования зеленый 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) +1 ![]() | |
| ДГ>>>Это из той же оперы, что i+1 и i++. Запись удобная, но чревата ошибками по забывчивости: i — число или указатель. SWW>>Просветите меня, темного, в чем проблема-то, никак не пойму? Я много всякой гадости читал про С, а вот гадость про оператор ++ первый раз слышу. Во-первых, хоть я и много всяких ошибок делал — но забыть, какого типа переменная — это уж выходит за всякие рамки. А во-вторых — поблема-то когда возникает: когда i число или когда указатель? ДГ>Про тип переменной забыть трудно, а вот про размер объекта, на который она ссылается, можно. Хоть это и ламерская ошибка, но довольно распространенная. Пишешь i++, а указатель на 20 байт сдвигается. Может, это просто дурацкий пример той гадости, о которой я тут уже высказывался: слишком большая семантическая нагрузка на операторы (делающая семантику языковых конструкций сильно контекстно зависимой и потому далекой от интуитивной понятности) и слишком фривольное обращение с типами данных и памятью. |
| Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Дм.Григорьев | |
| Дата: | 11.05.04 07:19 | |
| Оценка: | +1 -1 | |
| Здравствуйте, SWW, Вы писали: SWW> Да нет же! Не надо на указывать на середину! 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++ 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 rsdn | http://vk.com/id59893040 |
| Дата: | 11.05.04 08:02 |
| Здравствуйте, Vadim B, Вы писали: VB>Ну, вообще говоря, на том фортране (70-х годов) первое не было оператором цикла. Надо было написать что-нибудь типа VB>
VB>где 10 — метка последнего оператора цикла. Да, конечно! Спасибо! Я забыл, что там должна быть метка поставлена. VB>Но сути сообщения это, конечно, не меняет Именно! Наши программисты — самые программистые программисты в мире! | |
| Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Romkin | |
| Дата: | 11.05.04 08:09 |
| Здравствуйте, VladD2, Вы писали: VD>Здравствуйте, Kh_Oleg, Вы писали: K_O>>
VD>А вот интересно как можно определить от чего взарвалась ракета если ее бортовой компьютер был уничтожен взрывом? http://www.osp.ru/os/1998/06/21.htm#part_1 Была же ссылка |
| Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Odi$$ey админ | http://malgarr.livejournal.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 М-да. С "зашкалит" я погорячился. http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework. | |
| Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Дарней | |
| Дата: | 11.05.04 08:33 |
| Здравствуйте, Дм.Григорьев, Вы писали: ДГ>М-да. С "зашкалит" я погорячился. да, такое есть. На старичок С++ уже слишком много всего навешали, и не всегда хорошо это сделали. Впрочем, умирать он все равно не собирается Всех излечит, исцелит | добрый 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>
А за что дотнет-то так? ... << 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 rsdn | www.k-press.ru/cs |
| Дата: | 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 >>
|
| Re[10]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Шахтер | |
| Дата: | 12.05.04 00:20 |
| Здравствуйте, mihailik, Вы писали: ДГ>>С другой стороны, интеграл Лебега бьет на отрезки ось Y, и для каждого отрезка подсчитывается мера множества попавших в нее точек. M>Подлючий какой метод! Таки молодец Лебег, упёк. ??? ... << RSDN@Home 1.1.0 stable >>
|
| 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 >>
|
| 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 >>
|
| 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 rsdn | http://www.parallels.com/automation/operations/ |
| Дата: | 12.05.04 04:24 |
| 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 | http://kholeg.spaces.live.com |
| Дата: | 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, Вы писали:Ага, лучше писать := вместо = ... << RSDN@Home 1.1.3 stable >> |
| Re[3]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | kuj | |
| Дата: | 12.05.04 21:04 | |
| Оценка: | 1 (1) -1 | |
| Здравствуйте, Дарней, Вы писали: Д>господа, ну сколько уже можно? Д>ругать С — это пошло просто до безобразия Наверное, покажусь неоригинальным, но C во многом безобразный язык. И == это самое меньшее, к чему можно было прицепиться. Впрочем, Pascal по-моему еще более безобразный язык. Д>тем не менее, им и его потомками пользовались, пользуются и будут пользоваться. Потому что ничего лучше пока не придумали. Языки, созданные Э-э, шутить изволите? Придумали. При чем, еще до появления C. Д> теоретиками "на бумажке", почти никогда не оказываются востребованными — просто потому, что теоретики не имеют представления о реальных проблемах программирования и вместо этого борются с ветряными мельницами. А реальные проблемы программирования на C/C++ возникают, в первую очередь, из-за самого языка. Д>А все разговоры о "порочном круге" — это просто паранойя. Появись язык, который реально, а не на словах лучше — все будут пользоваться именно им. Один лемминг, что примечательно, ошибается куда реже миллионов. 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++ возникают, в первую очередь, из-за самого языка. |
| 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 >>
|
| 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 >>
|
| Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Шахтер | |
| Дата: | 13.05.04 00:57 |
| Здравствуйте, Дм.Григорьев, Вы писали: ДГ>Здравствуйте, Шахтер, Вы писали: Ш>>Вопрос на засыпку -- многие ли программисты знают, что такое интеграл Лебега? ДГ>А какое это имеет отношение к флейму C++ vs other-shit? Я имел ввиду, что чтобы пользоваться вот этим математически доказываемые системы наверно, придётся математику подучить. Просто чтобы хорошо понимать, что такое математическое доказательство и научиться их делать. ... << RSDN@Home 1.1.0 stable >>
|
| Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Шахтер | |
| Дата: | 13.05.04 01:17 | |
| Оценка: | 2 (1) | |
| Здравствуйте, Sinclair, Вы писали: S>Здравствуйте, Дарней, Вы писали: Д>>это всё замечательно звучит, но на практике люди имеют обыкновение ошибаться. Заниматься моделированием, составлением набора аксиом будут все те же люди. Вывод очевиден.... S>Видишь ли, шансов сделать ошибку тем меньше, чем меньше объем работы. Проверить корректность правил вывода достаточно легко, ибо их совсем немного. А дальше все происходит автоматически — ввели исходные аксиомы и получили заведомо правильные теоремы. Аксиом тоже относительно немного. 1) Позвольте уточнить, куда ввели и откуда получили. 2) Для справки. Есть такая формальная аксиоматическая теория -- формальная теория элементарной геометрии. Эта теория, как было доказано, разрешима -- т.е. существует алгоритм, который по любому утверждению этой теории может определить -- выводимо оно из аксиом или выводимо его отрицание. Вот только одна проблема: сложность этого алгоритма -- двойная экспонента. ... << RSDN@Home 1.1.0 stable >>
|
| Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Дарней | |
| Дата: | 13.05.04 04:38 |
| Здравствуйте, kuj, Вы писали: kuj>Здравствуйте, Дарней, Вы писали: kuj>Наверное, покажусь неоригинальным, но C во многом безобразный язык. И == это самое меньшее, к чему можно было прицепиться. Впрочем, Pascal по-моему еще более безобразный язык. про Паскаль согласен. Вспоминаю про := и бегины с ендами, и сразу думаю "и эти люди запрещают мне ковыряться в носу?!" Д>>тем не менее, им и его потомками пользовались, пользуются и будут пользоваться. Потому что ничего лучше пока не придумали. Языки, созданные kuj>Э-э, шутить изволите? Придумали. При чем, еще до появления C. а можно с этого места и подробнее? kuj>А реальные проблемы программирования на C/C++ возникают, в первую очередь, из-за самого языка. я совсем не это имел в виду. К тому же, с появлением .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++ возникают, в первую очередь, из-за самого языка. Я никак не дождусь одного: а кто же предложит рецепт избавления? Какие принципиальные новшества нужны для того, чтобы программист не ошибся, например, с выходом индекса за пределы массива? |
| 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-го числа. Диагональ задается как
|
| Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 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>Математика строится на основе формального языка. Кого начитался — Рассела, Бурбаки или Лема?
Первая попытка формализации математики (если не считать Фреге) была предпринята Расселом — "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++ возникают, в первую очередь, из-за самого языка. 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 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 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 >>
|
| Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | SWW | |
| Дата: | 14.05.04 05:27 | |
| Оценка: | +2 | |
| kuj>Вы не путайте обучение кодированию на конкретном языке программирования с обучением, собственно, самому программированию, которое, вообще говоря, в идеале не должно привязываться к конкретному языку программирования. Обучение самому программированию? Вопрос, конечно, интересный и даже актуальный — но как учить самому программированию не изучив хотя бы один язык программирования? Как можно учить столяра делать мебель, не научив его пользоваться ножовкой и рубанком? |
| Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Sinclair rsdn | http://www.parallels.com/automation/operations/ |
| Дата: | 14.05.04 05:32 |
| Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | desperado_gmbh | http://www.livejournal.com/users/tolstopuz |
| Дата: | 14.05.04 07:30 |
| Здравствуйте, Larm, Вы писали: >>Но до формализации, скажем, доказательства теоремы Ферма еще годы, если не десятилетия. L> А что вы понимаете под "формализацией доказательства теоремы Ферма"?? Строго математически не означает формально. Несмотря на строго математический язык, в первой версии доказательства была найдена ошибка, исправленная только через год. Вот, к примеру, Annals of Mathematics, 141(1995), страница 542:
Кто возьмется формально доказать правильность этих слов с помощью "правил вывода одних теорем из других методом подстановки свободных переменных"? |
| 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&Foote 10 ошибок найдены мной). |
| Re[6]: Автозаполнитель форм дурит, sorry | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | INTP_mihoshi | |
| Дата: | 14.05.04 08:55 |
| Здравствуйте, desperado_gmbh, Вы писали: INT>>Критерием правильности доказательства является именно возможность приведения его к формальному. И даже если формальная запись явно не используется, то все равно в конечном счете математики говорят на ней, так же, как программисты пишут, в конечном счете, на ассемблере. _>У программистов есть компиляторы, а у математиков (пока?) нет. Во-первых, APS (задолбало меня писать "системы автоматичесого жоказательства") на эту роль претендуют. Во-вторых, можно из одних теорем делать другие и использовать уже их. Вполне так себе ФЯ _>Интересно, школьник, изучающий ершол без компьютера, тоже пишет в конечном счете на ассемблере, даже если ни разу в жизни не написал синтаксически правильной программы? Учитель, конечно, может собрать тетради и дома проверить, но и ему свойственно ошибаться. Потому я и сказал, что "если мы хотим, чтобы программа выполнялась" _>Вот примерно в таком положении и находится сейчас математика, подтверждение тому — списки опечаток к учебникам (например, в еррате алгебры Dummit&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&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++ возникают, в первую очередь, из-за самого языка. Д>я совсем не это имел в виду. А что Вы имели в виду? 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 модератор | |
| Дата: | 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 Собака бывает кусачей только от жизни собачей | |
| Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 17.05.04 08:51 |
| Здравствуйте, lightSource, Вы писали: S>Здравствуйте, Kh_Oleg, Вы писали: K_O>>>>тем выше вероятность наличия "ловушек" в синтаксисе языка, kuj>>>Это вроде if (a = b) в C/C++? K_O>>ага, или double d = 3,1415; S>Приведённая ошибка — лишь дело привычки — не более. Посему некорректна. Приведенная ошибка — результат несоответствия ЯП и человеческого языка. Приведенная ошибка — это маразм компилятора, который проглатывает выражения типа:
Что означает эта конструкция? 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>Что означает эта конструкция? Не вырывай из контекста а рассматривай в целом 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 | http://kholeg.spaces.live.com |
| Дата: | 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>>Что означает эта конструкция? 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! М-м-м. Вопрос можно ? Какой С/С++ компилятор позволяет это сделать ? Я имею в виду — пропустит конструкцию
без (как минимум) 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>без (как минимум) warning'a ? ИМХО — любой, т.к. конструкция вполне корректна в соотв. с C++ (и C) |
| Re[11]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | amark | |
| Дата: | 18.05.04 07:49 |
| Здравствуйте, Курилка, Вы писали: A>>М-м-м. Вопрос можно ? Какой С/С++ компилятор позволяет это сделать ? Я имею в виду — пропустит конструкцию A>>
A>>без (как минимум) warning'a ? К>ИМХО — любой, т.к. конструкция вполне корректна в соотв. с C++ (и C) А проверить ? |
| Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Ka3a4oK | |
| Дата: | 18.05.04 08:21 |
| Здравствуйте, amark, Вы писали: A>Здравствуйте, Курилка, Вы писали: A>>>М-м-м. Вопрос можно ? Какой С/С++ компилятор позволяет это сделать ? Я имею в виду — пропустит конструкцию A>>>
A>>>без (как минимум) warning'a ? К>>ИМХО — любой, т.к. конструкция вполне корректна в соотв. с C++ (и C) A>А проверить ? Отдели инициализацию от определения...
... и любой VC компилятор схавает и не поперхнется даже на 4 уровне варнинга. |
| Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Курилка | http://kirya.narod.ru/ |
| Дата: | 18.05.04 08:22 |
| Здравствуйте, amark, Вы писали: A>Здравствуйте, Курилка, Вы писали: A>>>М-м-м. Вопрос можно ? Какой С/С++ компилятор позволяет это сделать ? Я имею в виду — пропустит конструкцию A>>>
A>>>без (как минимум) warning'a ? К>>ИМХО — любой, т.к. конструкция вполне корректна в соотв. с C++ (и C) A>А проверить ? Под рукой 7.1, так что хз что с 6-кой, но и вправду пример некорректный, т.к. приоритет у "=" выше чему у ",". Поэтому попробуй скомпилять вот такое:
тупо, но учти, что 1 и 2 строка могут быть отнюдь не одна за другой в тексте программы. |
| Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | mister-AK | |
| Дата: | 18.05.04 16:30 |
| Здравствуйте, Шахтер, Вы писали: Ш>Здравствуйте, desperado_gmbh, Вы писали: _>>Здравствуйте, Шахтер, Вы писали: Ш>>>Вопрос на засыпку -- многие ли программисты знают, что такое интеграл Лебега? _>>Изоморфизм Карри-Ховарда и основы теории категорий для обсуждаемых целей полезнее Ш>Пожалуй. Но я боюсь, программистов, знающих теорию категорий, ещё меньше, чем знающих интеграл Лебега. Вот покапал эту сеть то что здесь написано это кажись все, что дает хоть какое-то представленине о этой теории? Почему бы кому-нить, кто затрагивал в ВУЗе данный предмет и разберется в терминологических тонкостях, не попереводить материал на родной язык, который выложен хотя бы вот тут |
| Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | amark | |
| Дата: | 18.05.04 16:34 |
| Здравствуйте, Курилка, Вы писали: К>Под рукой 7.1, так что хз что с 6-кой, но и вправду пример некорректный, т.к. приоритет у "=" выше чему у ",". К>Поэтому попробуй скомпилять вот такое: К>
К>тупо, но учти, что 1 и 2 строка могут быть отнюдь не одна за другой в тексте программы. Таки да |
| 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 >>
|
| 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.livejournal.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 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 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 Собака бывает кусачей только от жизни собачей | |
| 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 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 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 >>
|
| 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 rsdn | |
| Дата: | 20.05.04 16:49 | |
| Оценка: | +2 | |
| Здравствуйте, Kh_Oleg, Вы писали: K_O>Не надо впадать в крайности. "+" — это символ сложения. В повседеневной жизни мы обычно складываем числа. K_O>А вот "++" — это операция инкремента. Еще нужно объяснять, что это за операция такая, и что для чисел она означает увеличение на единицу. Ну а перегрузка операторов — это вообще из серии "некоторое действие, которое выглядит как сложение, но делает то, что знаю только я!" Ну если тебе так хочется то ты можешь продолжать писать на языках которые ни чего не умеют, а я буду использовать язык который позволяет мне выражать свои мысли так как я хочу. Например на С++ можно написать шаблон такого массива что... короче пример
те не будет создано ни одного временного массива. подробности в книге "Шаблоны С++. Стравочник разработчика" Вандевурд и Джосаттис Тоже со строками
Тоже с векторами и матрицами
Так на каком языке лучше писать? на том где есть шаблоны и перегрузка операторов или на том где их нет? ЗЫ Судя по тому что ты говоришь для тебя лучший язык это ассемблер. Простой, понятный, нет неоднозначностей. Просто чудо, а не язык... ЗЗЫ А тех кто перегружает операторы не интуетивным образом надо сжигать на костре и предавать анафиме... Но такие индивиды не повод отказыватся от перегрузки операторов вобще. ... << 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 | http://kholeg.spaces.live.com |
| Дата: | 21.05.04 08:39 | |
| Оценка: | -1 | |
| Здравствуйте, WolfHound, Вы писали: WH>Здравствуйте, Kh_Oleg, Вы писали: K_O>>Не надо впадать в крайности. "+" — это символ сложения. В повседеневной жизни мы обычно складываем числа. K_O>>А вот "++" — это операция инкремента. Еще нужно объяснять, что это за операция такая, и что для чисел она означает увеличение на единицу. Ну а перегрузка операторов — это вообще из серии "некоторое действие, которое выглядит как сложение, но делает то, что знаю только я!" WH>Ну если тебе так хочется то ты можешь продолжать писать на языках которые ни чего не умеют, а я буду использовать язык который позволяет мне выражать свои мысли так как я хочу. WH>Например на С++ можно написать шаблон такого массива что... короче пример WH>
WH>те не будет создано ни одного временного массива. WH>подробности в книге "Шаблоны С++. Стравочник разработчика" Вандевурд и Джосаттис Два замечания: Во-первых, в выражении использованы значения всех переменных, кроме массива f. Причем использованы без инициализации. Понятно, что в реальном проекте ты уж наверняка все бы проинициализировал. Только это как-то... неаккуратненько. А потом на форуме и всплывают вопросы, а почему это у меня в Debug все работает, а в Release — нет. Второе, в твоем "кратком" выражении, за которое ты ратуешь, ни фига не понятно, где переменная типа double, а где — элемент массива. Упаси Бог, когда-нибудь отлаживать ошибку в таком выражении. Зачем нужна такая краткость в ущерб читабельности? Но и это не главное. Цитирую сам себя: Не зная, как перегружены операторы для этих массивов абсолютно невозможно сказать, какой элемент массива учавствует в выражении!!! WH>Тоже со строками WH>
Оператор сложения для строк, означающий конкатенацию — это, пожалуй, единственное применение перегрузки операторов, где оно действительно необходимо. А все потому, что в ЯП строка должна быть базовым типом! Таким как char, int, double. Так и string. Вот для базовых (примитивных) типов операторы должны быть определены. Но не для составных типов, определяемых программистом! WH>Тоже с векторами и матрицами WH>
Умножение матриц — это целый алгоритм, к тому же, перемножение матриц, операция некоммутативная (A*B != B*A), а из текста этого не видно. Понятно, что часто хочется записать выражение в программе в виде, близком к виду формулы из книги. Но тогда, для того, чтобы понять, что здесь происходит надо будет эту самую книгу перечитать. WH>Так на каком языке лучше писать? на том где есть шаблоны и перегрузка операторов или на том где их нет? На том, на котором можно более кратно, точно и понятно выразить свою мысль. В этих примерах было кратко, не совсем точно (неинициализированные переменные) и непонятно. WH>ЗЫ Судя по тому что ты говоришь для тебя лучший язык это ассемблер. Простой, понятный, нет неоднозначностей. Просто чудо, а не язык... WH>ЗЗЫ А тех кто перегружает операторы не интуетивным образом надо сжигать на костре и предавать анафиме... Олег. | |
| Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 21.05.04 09:48 | |
| Оценка: | 1 (1) | |
| Здравствуйте, Kh_Oleg, Вы писали: K_O>Два замечания: K_O>Во-первых, в выражении использованы значения всех переменных, кроме массива f. Причем использованы без инициализации. 1)Во всех трех примерах написано //тут инициализация. Тебе что больше не кчему предратся? 2)Если ты посмотришь внимательно то значение массива f тоже использовано. Оператор *= K_O>Понятно, что в реальном проекте ты уж наверняка все бы проинициализировал. Только это как-то... неаккуратненько. А нахрена в примерах писать гору не относящегося к делу кода? K_O>Второе, в твоем "кратком" выражении, за которое ты ратуешь, ни фига не понятно, где переменная типа double, а где — элемент массива. Упаси Бог, когда-нибудь отлаживать ошибку в таком выражении. Зачем нужна такая краткость в ущерб читабельности? А что должно быть понятно в выражении которое писано от балды? В реальной программе будут вполне себе говорящие имена. K_O>Не зная, как перегружены операторы для этих массивов абсолютно невозможно сказать, какой элемент массива учавствует в выражении!!! Один раз читаем доку в которой написано что-то типа Я знаю что из меня плохой писатель хелпов. Но скажи что тебе после прочтения этого будет не понятно в выражении тапа 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 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 21.05.04 10:00 |
| Здравствуйте, WolfHound, Вы писали: WH>А тут либо полный запрет на перегрузку и тогда нельзя писать интуитивно понятные бибииотеки. Либо есть шанс что один придурок из тысячи перегрузит операторы так что можно будет складывать метры с килограммами. Но так-как таких орлов практически нет то я предпочитаю чтобы была возможность перегружать операторы. Перегрузка не всегда понятна и очевидна. Кроме того при поиске кода в исходниках по функции легче найти ее исходный код. и чем Equals хуже == ????? И другие эквивалентные операторы. Дольше писать согласен (да и то при подсказке через точку нет проблем), хуже читать — нет. Так думай перегружен метод для == или это ReferenceEquals. Я лично предпочитаю единые по написанию функции четко определяющие вид операции вместо перегруженных операций. ... << RSDN@Home 1.1.0 stable >> |
| Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 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>Я знаю что из меня плохой писатель хелпов. Но скажи что тебе после прочтения этого будет не понятно в выражении тапа 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>
Кстати, такие вещи вроде-бы принято через итераторы делать... Тогда ты не будешь привязан к представлению контейнера. |
| Re[10]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 21.05.04 12:00 |
| Здравствуйте, Kh_Oleg, Вы писали: K_O>А что, для того, чтобы проинициализировать такой супер краткий шаблон надо "гору кода" писать? Зачем писать код который не относится к теме? K_O>Я говорю не про имена переменных, а про то, что не понятно, где просто переменная, а где массив. А я тебе говорю что из имен переменных ясно где что. K_O>Я вообще-то не очень люблю доки читать. Если надо в чем-то разобраться — смотрю в исходники. Доки часто просто отстают от реализации или там не все нюансы отражены. Плохой пожход. Если доки есть то их надо прочитать. Даже если они и отстали то всеравно будет легче разобратся с исходниками. K_O>Но дело не в этом. Для того, чтобы понять как работает приведенный тобой шаблон я должен смотреть либо в доки, либо в исходники. А вот если бы вместо "*" использовался метод, скажем, MultiplyItemByItem, то никуда не надо было лезть и в чем-то разбираться. Такой код читался бы проще.
Это не то что прочитать... это написать трудно Человек просто запутается в такой записи. даже если переписать так(пока переписывал исправил несколько ошибок)
то всеравно до читабельности
ой как далеко. WH>>А взят тотже boost::spirit когда надо быстро написать не сложный парсер то эта штука очень удобна. Но он небыл бы возможен без перегрузки операторов. K_O>Не видел, не знаю. А ты скачай boost да посмотри. Например так задается грамматика калькулятора
EBNF грамматика прямо на С++... Да по исходникам ты в ней не разберешься... Их там очень много(1,433,069 байт)... Зато как клиентский код выглядит... просто прелесть. K_O>Я говорю о том, что разные по реализации алгоритмы должны и в тексте программы выглядеть по-разному, т.е. иметь разные имена. Зачем? Какая разница что складывать два вектора или два числа? И то и другое сложение. Дык зачем для векторов вводить ужасную функцию типа AddVectorVector? Я еще понимаю если ввести для векторов функции dot и cross ибо умножение векторов бывает скалярное и векторное. Причем dot и cross можно и без всяких префиксов если поместить их в один неймспейс с вектором тогда будет работать ADL
Argument Depended Lookup рулез ... << RSDN@Home 1.1.3 beta 1 >> Пусть это будет просто: | просто, как только можно, но не проще. (C) А. Эйнштейн |
| Re[10]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 21.05.04 12:15 |
| Здравствуйте, INTP_mihoshi, Вы писали: WH>>
INT>Кстати, такие вещи вроде-бы принято через итераторы делать... Тогда ты не будешь привязан к представлению контейнера.
не связоватся с итераторами ибо код будет не просто страшным, а очень страшным. ... << RSDN@Home 1.1.3 beta 1 >> Пусть это будет просто: | просто, как только можно, но не проще. (C) А. Эйнштейн |
| Re[10]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 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 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 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 | http://kholeg.spaces.live.com |
| Дата: | 21.05.04 12:40 |
| Здравствуйте, WolfHound, Вы писали: K_O>>Я говорю не про имена переменных, а про то, что не понятно, где просто переменная, а где массив. WH>А я тебе говорю что из имен переменных ясно где что. K_O>>Я вообще-то не очень люблю доки читать. Если надо в чем-то разобраться — смотрю в исходники. Доки часто просто отстают от реализации или там не все нюансы отражены. WH>Плохой пожход. Если доки есть то их надо прочитать. Даже если они и отстали то всеравно будет легче разобратся с исходниками. Качественно оформленный исходный код — лучшая документация. И на 100% отражает суть реализации. K_O>>Но дело не в этом. Для того, чтобы понять как работает приведенный тобой шаблон я должен смотреть либо в доки, либо в исходники. А вот если бы вместо "*" использовался метод, скажем, MultiplyItemByItem, то никуда не надо было лезть и в чем-то разбираться. Такой код читался бы проще. WH> WH>
WH>Это не то что прочитать... это написать трудно WH>Человек просто запутается в такой записи. Здесь так: если отстаивать свою точку зрения путем доведения до идиотизма доводов оппонента, то лучше сразу закончить дискуссию. Я надеюсь, что разговариваю с человеком, умеющим аргументированно спорить. А возражение по теме таково:
WH>>>А взят тотже boost::spirit когда надо быстро написать не сложный парсер то эта штука очень удобна. Но он небыл бы возможен без перегрузки операторов. K_O>>Не видел, не знаю. WH>А ты скачай boost да посмотри. Мне уже и STL'ного отстоя хватает, это время пригодится для более важных целей. WH>Например так задается грамматика калькулятора 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 | http://kholeg.spaces.live.com |
| Дата: | 21.05.04 12:46 |
| Здравствуйте, WolfHound, Вы писали: WH>>>
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 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 21.05.04 12:50 |
| Здравствуйте, 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 rsdn | |
| Дата: | 21.05.04 13:22 |
| Здравствуйте, Kh_Oleg, Вы писали: K_O>Так все эти перегрузки операторов нужны только для того, чтобы сэкономить ОДНУ (!!!!) строчку? Ну одну а столько сколько выражений есть в программе. K_O>Я скажу еще вот что: без перегрузки мы имеем один цикл, а с перегрузкой — столько циклов, сколько использовано перегруженных операторов. Из-за сомнительной красоты кода мы еще жертвуем и производительностью. ... << RSDN@Home 1.1.3 beta 1 >> Пусть это будет просто: | просто, как только можно, но не проще. (C) А. Эйнштейн |
| Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 21.05.04 13:22 |
| Здравствуйте, Kh_Oleg, Вы писали: WH>>Плохой пожход. Если доки есть то их надо прочитать. Даже если они и отстали то всеравно будет легче разобратся с исходниками. K_O>Качественно оформленный исходный код — лучшая документация. И на 100% отражает суть реализации. А кто спорит? Просто если есть дока то из нее гораздо проще понять общию идеологию системы. И тогда разобратся с исходниками будет на порядок проще. Как бы они небыли хорошо оформлунны. K_O>>>Но дело не в этом. Для того, чтобы понять как работает приведенный тобой шаблон я должен смотреть либо в доки, либо в исходники. А вот если бы вместо "*" использовался метод, скажем, MultiplyItemByItem, то никуда не надо было лезть и в чем-то разбираться. Такой код читался бы проще. K_O>Здесь так: если отстаивать свою точку зрения путем доведения до идиотизма доводов оппонента, то лучше сразу закончить дискуссию. Это была лишь демонстрация предложеного тобой метода. K_O>А возражение по теме таково: K_O>
А теперь добавь сюда дебужную проверку того что размер всех массивов в выражении одинаковый. WH>>А ты скачай boost да посмотри. K_O>Мне уже и 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 rsdn | |
| Дата: | 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 |
| Здравствуйте, 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 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 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 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 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 | http://kholeg.spaces.live.com |
| Дата: | 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 | http://kholeg.spaces.live.com |
| Дата: | 21.05.04 14:08 |
| Здравствуйте, WolfHound, Вы писали: K_O>>Я скажу еще вот что: без перегрузки мы имеем один цикл, а с перегрузкой — столько циклов, сколько использовано перегруженных операторов. Из-за сомнительной красоты кода мы еще жертвуем и производительностью. WH> Тогда, видно, не С++, а оптимизатор. Только все равно непонятно — можно подробней? Олег. | |
| Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 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 rsdn | |
| Дата: | 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 rsdn | |
| Дата: | 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 rsdn | |
| Дата: | 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 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 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 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 21.05.04 14:44 |
| Здравствуйте, 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 rsdn | |
| Дата: | 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 rsdn | |
| Дата: | 21.05.04 15:17 | |
| Оценка: | 6 (1) | |
| Здравствуйте, Kh_Oleg, Вы писали: WH>> K_O>Тогда, видно, не С++, а оптимизатор. Только все равно непонятно — можно подробней? Не оптимизатор(хотя и ему тоже поработать немного придется), а именно С++. Фишка в том что тут используются ленивые вычисления те оператор не производит никаких дествий, а только запоминает ссылки на то что ему попало и возвращает структуру которая содержит эти ссылки. В книжке это все лучше описано. Поясняю не пальцах: Шаблон массива параметризуется не только типом но и хранилищем для этого типа. По умолчанию я взял std::vector
Определение операторов и прочие детали раелизации опущены.
5*x возвращает структуру типа
далие с учетом приоритета операторов x*y возвращает структуру типа
оператор + возвращает структуру типа
Далие в операторе = уже выполняется один цикл... тут уже в дело вступает оптимизатор он просто инлайнит все вызовы оператора []. Вот такие дела ... << RSDN@Home 1.1.3 beta 1 >> Пусть это будет просто: | просто, как только можно, но не проще. (C) А. Эйнштейн |
| Re[16]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 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> А здесь понятны все действия без лишних перегрузок. И ты не ответил на вопрос что с - и / делать будешь те например
В любом случае не состоятельность твоей методики из-за дичайшой перегрузки текста лишними подробностями ИМХО очевидна. болие того см мой пост Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! Автор: WolfHound твоя реализация без перегрузок не будет обладать тойже эффективностью.Дата: 21.05.04 ... << RSDN@Home 1.1.3 beta 1 >> Пусть это будет просто: | просто, как только можно, но не проще. (C) А. Эйнштейн |
| Re[17]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Serginio1 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 21.05.04 15:46 |
| Здравствуйте, WolfHound, Вы писали: WH>И ты не ответил на вопрос что с - и / делать будешь те например 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 | http://kholeg.spaces.live.com |
| Дата: | 21.05.04 16:09 |
| Здравствуйте, WolfHound, Вы писали: WH>>> K_O>>Тогда, видно, не С++, а оптимизатор. Только все равно непонятно — можно подробней? WH>Не оптимизатор(хотя и ему тоже поработать немного придется), а именно С++. WH>Фишка в том что тут используются ленивые вычисления....... WH> Мно-ого skipped WH>Вот такие дела Е-мое, "и эти люди запрещают мне ковыряться в носу?!" И это все ради того, чтобы вместо Add писать +, опускать индексы у массивов и не писать явно оператор цикла?! Моя крыша слегка съехала... Олег. | |
| Re[17]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Serginio1 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 21.05.04 16:19 |
| Здравствуйте, WolfHound, Вы писали: Кроме того считаю, что в программирование легко ввести и математическую запись, ничто этому не мешает. И тем же студентам легче и читабельность выше, а с точки зрения тезнического Вуза это куда важнее, т.к. там не нужны программисты, но нужно средство для решения конкретных задач. Кстати многие пользуются MathCad или как его там. Хотя бы в определенных вставках типа asm. Развитие же языков идет ввиде совершенствования старых языков, которые сами по себе морально устарели, но мало делается в плане развития других подходов или вернее не развиваются и не внедряются должным образом. ... << RSDN@Home 1.1.0 stable >> |
| Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 21.05.04 16:37 |
| Здравствуйте, WolfHound, Вы писали: K_O>>А возражение по теме таково: K_O>>
WH>А теперь добавь сюда дебужную проверку того что размер всех массивов в выражении одинаковый. А это еще что за проверка, куда копать? Тем не менее, зачем смотреть на debug издержки? Заказчику Debug не поставляется. WH>>>А ты скачай boost да посмотри. K_O>>Мне уже и STL'ного отстоя хватает, это время пригодится для более важных целей. WH> 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 | http://kholeg.spaces.live.com |
| Дата: | 21.05.04 16:43 |
| Здравствуйте, WolfHound, Вы писали: WH>Здравствуйте, Kh_Oleg, Вы писали: K_O>>"/" — это только divide. Тогда как в случае с методом я могу в имени отразить особенности реализации: SafeDivide, IntDivide, FloatDivide. WH>учитывая то как правило нет ни каких SafeDivide, IntDivide, FloatDivide..., а есть только divide то какой смысл? Как правило они есть! Только неявные, что порождает еще массу ошибок.
выражения a/b и aa/bb дадут сильно разные результаты. Олег. | |
| Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Serginio1 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 21.05.04 16:56 |
| Здравствуйте, WolfHound, Вы писали: K_O>>А возражение по теме таково: 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 rsdn | |
| Дата: | 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 rsdn | |
| Дата: | 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 | http://kholeg.spaces.live.com |
| Дата: | 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) Мне почему ДЕФИС то кажется ЗАПЯТАЯ что использование операторов несколько повышает читабельность кода ЗАПЯТАЯ при этом не только минимизируя пространство ЗАПЯТАЯ но и приближая синтаксис выражение к более привычному виду ТОЧКА ПЕРЕВОД_КАТЕРКИ КРАСНАЯ_СТРОКА Для меня кажется диким использование
потому как
гораздо еффективнее выражает мысль и однозначно подчеркивает мнение автора о читатетеле в целом и его интеллекте в частности ... << 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>выражения 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>
Блин, как меня бесят эти рассуждения о том, что в программировании порождает ошибки! А кто-нибудь пытался привести статистику ошибок? Может вы боретесь с ветряными мельницами? Каких ошибок больше: целочисленного деления или выхода индекса за пределы массива? Для борьбы с ошибками придумываются средства, которые сами потом становятся источником еще более трудноуловимых ошибок. Как, например, здесь. Автор: Vamp Дата: 14.10.03 Чтобы делать меньше ошибок нужно одно: опыт. То есть нужно больше писать программ, а не рассуждать о том, какие новомодние средства нужно применить для уменьшения числа ошибок. P.S. Не сочни за личный наезд. Это больше касается Страуструпа и STL |
| Re[15]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Serginio1 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 23.05.04 09:38 |
| Здравствуйте, Dax, Вы писали: Тогда тогда лучше вспомнить скалярное и векторное умножение векторов, их сложение, и прменять нормальную математическую запись По этому поводу уже говорилось в http://www.rsdn.ru/forum/Message.aspx?mid=650377&only=1 Автор: Serginio1 Дата: 21.05.04 ... << RSDN@Home 1.1.0 stable >> |
| Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Serginio1 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 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 rsdn | |
| Дата: | 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 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 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 | http://kholeg.spaces.live.com |
| Дата: | 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 и ничего больше. Имхо, ничего принципиального в этом нет INT>Более того, мы не только сами это видим, но и можем "рассказать" это средствам, которые работают с этим кодом. Например, система документирования кода может взять где-нибудь по guid полное описание понятия и использовать его при описании используюших его функций и объектов. Мы можем описывать методы, которые работают для всех функций типа datastream. И т.д. Это может быть полезно... но только в приложении к интструментарию... А так хочется, чтоб минимальным иструментарием были карандаш и листок бумаги --- С уважением, Сиваков Константин. |
| Re[18]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 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 | http://kholeg.spaces.live.com |
| Дата: | 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>Может размер бинарника и не такая уж критическая вещь, но вот время линковки — это, по крайней мере, в нашем проекте, самое узкое место. А все из-за шаблонов и макросов... Ерунду несете. На время линковки шаблоны и т.б. макросы никак не влияют. И вообщем-то на скорость компиляции тоже. То что у вас что-то тормозит это следствие плохой изоляции. Там где надо сделать опережающее описание:
делается:
Небольшее изменение и все пересобирается. По моему опыту шаблоны, при их грамотном употреблении, не влияют существенно на скорость компиляции. Все проблемы со скоростью компиляции/линковки исключительно результат криворукости. |
| Re[20]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 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 | http://kholeg.spaces.live.com |
| Дата: | 24.05.04 13:54 |
| Здравствуйте, WolfHound, Вы писали: K_O>>Шаблоны — это автоматизированный Copy-Paste. WH>А ну-ну. Так можно в конце концов договорится до того что шаблоны==препроцессор, А в чем принципиальная разница? K_O>>Может размер бинарника и не такая уж критическая вещь, но вот время линковки — это, по крайней мере, в нашем проекте, самое узкое место. А все из-за шаблонов и макросов... WH>Я не знаю что вы там в своем проекте делаете что он линкуется черт знает сколько времени. Сколько у вас исходников? 500 метров чтоли? Намного меньше, но порядок угадан верно. Олег. | |
| Re[21]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 24.05.04 13:54 | |
| Оценка: | 1 (1) | |
| Здравствуйте, Kluev, Вы писали: K_O>>Может размер бинарника и не такая уж критическая вещь, но вот время линковки — это, по крайней мере, в нашем проекте, самое узкое место. А все из-за шаблонов и макросов... K>Ерунду несете. На время линковки шаблоны и т.б. макросы никак не влияют. И вообщем-то на скорость компиляции тоже. То что у вас что-то тормозит это следствие плохой изоляции. Там где надо сделать опережающее описание: K>
K>делается: 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 rsdn | |
| Дата: | 24.05.04 15:00 | |
| Оценка: | ![]() | |
| Здравствуйте, Kh_Oleg, Вы писали: WH>>А ну-ну. Так можно в конце концов договорится до того что шаблоны==препроцессор, K_O>А в чем принципиальная разница? А в чем принципиальная разница между компилятором и препроцессором? WH>>Я не знаю что вы там в своем проекте делаете что он линкуется черт знает сколько времени. Сколько у вас исходников? 500 метров чтоли? K_O>Намного меньше, но порядок угадан верно. А конкретней можно? Надеюсь статистика проекта не является коммерчиской тайной. Я тут небольшой тест сделал. Сгенерил 1000 файлов такого соержания
... релиз без опции инкрементал линк: общее время билда 8:13 из которых 0:43 заняла линьковка. изменение одного файла и линковка примерно 0:30 дебуг с опцией инкрементал линк: общее время билда 12:40 из которых 1:00 заняла линьковка. изменение одного файла и линковка примерно 0:02 ЗЫ Может вы всетки инкрементал линк включить забыли? ... << RSDN@Home 1.1.3 beta 1 >> Пусть это будет просто: | просто, как только можно, но не проще. (C) А. Эйнштейн |
| Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Sinclair rsdn | http://www.parallels.com/automation/operations/ |
| Дата: | 25.05.04 07:03 | |
| Оценка: | 6 (1) | |
| Re[19]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | INTP_mihoshi | |
| Дата: | 25.05.04 07:51 |
| Здравствуйте, gbear, Вы писали: G>Другими словами... чем больше операторов, тем легче читается, но труднее понимается... так что ли?! Или на оборот?! Имхо, что-то тут не то Нет, я имел в виду, что разные варианты лучше при разном уровне пользоавтеля. Т.е. для "новичка" который только знакомится с библиотекой лучше развернутые имена функций чтобы не искать их каждый раз в доках. А для "профессионала" (т.е. пользователя с более чем недельным-месячным "стажем"), который уже хорошо знаком с библиотекой удобнее операторы чтобы текст проще было охватить глазом (и головой). Кстати, хорошая анлогия (да, да, люблю я аналогии |
| Re[23]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 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 | |
| Оценка: | -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 | |
| Оценка: | +1 | |
очень понравился этот пассаж:Это наверно должно убедить всех, что надо писать не x = y, а x := y :lol: Вот хоть убейте, не вижу никакой разницы. Если человек не можеть понять, что такое переменная, то никакие различия в нотации ему уже не помогут. Особенно порадовало про учебники для начинающих с описанием формальной грамматики языка. Ну конечно, можно не сомневаться, что EBNF поможет "чайникам" разобраться в сути языка. Ведь каждый чайник сможет усвоить, что такое формальные грамматики, без малейших проблем. Я сам прекрасно понимаю, что современное положение вещей в отрасли содержит огромное количество проблем. Вот только решение их лежит в совершенно другой стороне. Печально это всё. Похоже, что теоретики от информатики окончательно и бесповоротно утратили все связи с реальностью и живут в своем воображаемом мире с воображаемыми проблемами. Всех излечит, исцелит | добрый Ctrl+Alt+Delete |
| Re[4]: _ | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 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 rsdn | http://vk.com/id59893040 |
| Дата: | 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://moikrug.ru/users/P628059486/ |
| Дата: | 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 году, когда на втором курсе института мне попал в руки учебник по этому языку и методам объектно-ориентированного программирования. До этого мне приходилось сталкиваться с ассемблером, Фортраном и Бейсиком, причём именно в такой последовательности. Вы представляете, насколько я был поражён Паскалем? Я зачитывался этой книжкой, несколько раз перечитывал её, затёр от корки до корки. И это при том, что у меня в это время не было компилятора под рукой. Это была настоящая программистская любовь! Но прошло время. Прошла любовь, завяли помидоры. И сейчас у меня есть стойкое убеждение: не бывает "плохих" и "хороших" языков (сред программирования). Каждый язык предназначен для своей цели, каждая платформа программирования имеет свою нишу в индустрии. Иначе, она бы не выжила. Разве мало примеров мёртворожденных систем программирования? А такие люди как г-н Вирт (искренне мною уважаемый) выполняют, на самом деле, важную функцию: пусть в небольших пределах, но они всё-таки корректируют главную линию развития индустрии. Да, паровозик не столкнуть, но хоть чуть-чуть повернуть его. Сделать так, чтобы оператор присваивания записывался как :=, а не как просто = и то уже будет неплохо. Вот почему лично моё отношение к статье г-на Вирта таково: принято к сведению. Ни больше и ни меньше. И напоследок. Друзья, давайте не будем тратить своё время на священные войны, нам ведь ещё столько предстоит сделать... ... << RSDN@Home 1.1.4 beta 3 rev. 194>> |
| Re[9]: _ | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Дарней | |
| Дата: | 19.10.04 04:04 |
| Здравствуйте, Quintanar, Вы писали: Q>А что этого мало? Вот когда ты создашь язык, на котором будет программировать больше пары десятков человек, тогда и поговорим о теоретиках и практиках. А пока, прости, мнение Вирта на несколько порядков весомее твоего. поживем — увидим Всех излечит, исцелит | добрый Ctrl+Alt+Delete |
| Re[2]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | LaptevVV rsdn | http://vk.com/id59893040 |
| Дата: | 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://moikrug.ru/users/P628059486/ |
| Дата: | 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 требуется минимум три прохода. А для С++, если не ошибаюсь, вполне достаточно одного. Не стопроцентный, но всё же показатель, вы не находите? ... << RSDN@Home 1.1.4 beta 3 rev. 194>> |
| Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Дарней | |
| Дата: | 19.10.04 08:58 |
| Здравствуйте, Dervish, Вы писали: D>Это вам только кажется, уверяю вас! нет, не видел... хотя это наверно и к лучшему? D>Что касательно компилятора, то мне доводилось читать мотивированное мнение специалиста по теории компиляции, который утверждал, что для компиляции Алгола-68 требуется минимум три прохода. А для С++, если не ошибаюсь, вполне достаточно одного. Не стопроцентный, но всё же показатель, вы не находите? Совершенно верно — одного. Другой вопрос только, какой ценой это достигается. Лучше уж многопроходный компилятор, чем та порнография, которая существует сейчас в C++. Куча усилий уходит просто на то, чтобы уменьшить количество связей между файлами при компиляции. А уж скорость оной — это просто песня. Время полной компиляции проекта в сутки — это еще не предел Ну и это не говоря еще о тех конструкциях языка, которые при одинаковой нотации могут обозначать совершенно разные вещи. В общем, слишком велик груз прошлого, который тянет C++ на дно PS Кстати, довольно забавный факт. Не очень много знаю про Active Oberon, поэтому могу в чем то и ошибаться. Но похожая концепция — активные объекты — широко используется в ОС Symbian. Что самое интересное, реализованы они там поверх (кто бы мог подумать) — C++ Всех излечит, исцелит | добрый Ctrl+Alt+Delete |
| Re[7]: _ | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 19.10.04 09:02 | |
| Оценка: | 15 (4) +1 | |
| Здравствуйте, Сергей Губанов, Вы писали: Д>>Я как раз и написал, что с 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://moikrug.ru/users/P628059486/ |
| Дата: | 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://moikrug.ru/users/P628059486/ |
| Дата: | 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!
Спрашивается, а как может повысить уровень абстракции старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами? |
| Re[9]: _ | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Дарней | |
| Дата: | 19.10.04 10:52 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Все знания о том что такое EBNF умещаются на одной странице. Это элементарщина которую в школе надо давать, а Вы о ней говорите как о высокой науке. Другой вопрос — насколько много неспециалистов смогут ее понять и применить на практике. Если для них даже концепция переменной невообразимо сложна СГ>Например, еще со времен Модулы, в этом языке есть такая абстракция как "модуль" — это не только единица компиляции, но и динамически линкующаяся и загружаемая единица исполнения (в Си++ такой абстракции нет и не будет). э.... DLL? СГ>Еще пример высокого уровня абстракции — "активный объект" (в Си++ такой абстракции нет и не будет). Забавно, что как раз недавно я про это писал http://gzip.rsdn.ru/Forum/Message.aspx?mid=858130&only=1 Автор: Дарней Дата: 19.10.04 Всех излечит, исцелит | добрый Ctrl+Alt+Delete |
| Re[5]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | FR | |
| Дата: | 19.10.04 10:53 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Здравствуйте, FR, Вы писали: FR>>Объясни пожалуйста чем именно Оберон лучше C++. СГ>Своей целостностью. Какие преимущества для разработчика это дает? А то я тоже могу заявить что Forth очень цельный и минималистический язык, и поэтому обучать надо именно на нем. FR>>И почему именно Оберон, ведь и без него много альтернатив. СГ>А какие еще альтернативы среди модульных императивных языков со строгой статической типизацией, безопасностью и т.д.? Оберон минимален и полон, его можно рассматривать как ОО ассемблер. Все остальные (предметно-ориентированные) языки можно строить как его расширения. Если поискать то найдется да и императивное подмножество Ocaml тоже удовлетворяет тому что ты перечислил. FR>>А что грамотность специалиста так сильно зависит от используемого языка? СГ>Мы думаем на том же языке что и говорим. Корявый язык принуждает коряво думать. Грамотность связана с тем как человек думает. А ты думаешь что все люди думают одинаково? Да еще почему практически все человеческие языки такие корявые и нелогичные? Может все-таки это как раз и естественно для человеческого мышления? И может именно поэтому корявый и не логичный, но выразительный C++ стал таким массовым? ... << RSDN@Home 1.1.3 stable >> |
| Re[10]: _ | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 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 >> Objects to Objects mapping: emitmapper.codeplex.com | |
| Re: Где собака зарыта??? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Nick_ | |
| Дата: | 19.10.04 13:09 | |
| Оценка: | 2 (2) +1 | |
| Здравствуйте, prVovik, Вы писали: V>Здравствуйте, FR, Вы писали: FR>>И может именно поэтому корявый и не логичный, но выразительный C++ стал таким массовым? V>А вот, кстати, ты поднял очень интересный вопрос. Почему же популярность завоевал, не паскаль, а именно такой ужасный и корявый С/С++, несмотря на то, что паскаль появился раньше ??? И почему именно на основе синтаксисв С/С++ сделали и Java и C#? Может быть товарищу Вурту следовало бы сначала разобраться с этими вопросами, прежде чем придумывать свой очередной идеальный язак программирования. Все просто. Популярность завоевал не Си, а UNIX. Если бы UNIX был написан на другом языке, то сейчас был бы популярен другой язык. |
| Re: Где собака зарыта??? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 19.10.04 13:25 | |
| Оценка: | 1 (1) +1 ![]() | |
| Здравствуйте, prVovik, Вы писали: V>Здравствуйте, FR, Вы писали: FR>>И может именно поэтому корявый и не логичный, но выразительный C++ стал таким массовым? V>А вот, кстати, ты поднял очень интересный вопрос. Почему же популярность завоевал, не паскаль, а именно такой ужасный и корявый С/С++, несмотря на то, что паскаль появился раньше ??? И почему именно на основе синтаксисв С/С++ сделали и Java и C#? Может быть товарищу Вурту следовало бы сначала разобраться с этими вопросами, прежде чем придумывать свой очередной идеальный язак программирования. Потому что: "Легче погасить в себе свет, чем рассеять тьму вокруг" "Ночной Дозор" |
| Re[9]: _ | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kluev | |
| Дата: | 19.10.04 13:54 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Спрашивается, а как может повысить уровень абстракции старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами? А зачем его повышать? Абстракции ради абстракций нам не нужны. Более того совсем недавно писал кусок программы и в котороый раз приятно поразился насколько С++ с его тупыми шаблонами и анахронизмами идеально подошел для решаемой задачи:
И вот получается что старый тупой старичок С++ опять всех опередил. На каком языке вы еще сможете написать это так же кратко, ясно, просто и понятно? |
| Re[4]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 19.10.04 13:58 |
| Здравствуйте, FR, Вы писали: СГ>>Вирт предлагает перестать кидать дрова в топку разогнавшегося паровозика... FR>Объясни пожалуйста чем именно Оберон лучше C++. Фрагмент из того самого текста, который обсуждается в этой ветке форума: Оберон, в отличие от Си++ позволяет обучать студентов образцовому дизайну не отвлекаясь при этом на внутриязыковые грабли, поскольку в Обероне внутриязыковых граблей нет. |
| Re[10]: _ | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Курилка | http://kirya.narod.ru/ |
| Дата: | 19.10.04 13:58 |
| Здравствуйте, Kluev, Вы писали: K>Здравствуйте, Сергей Губанов, Вы писали: СГ>>Спрашивается, а как может повысить уровень абстракции старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами? K>А зачем его повышать? Абстракции ради абстракций нам не нужны. Более того совсем недавно писал кусок программы и в котороый раз приятно поразился насколько С++ с его тупыми шаблонами и анахронизмами идеально подошел для решаемой задачи: K>
K>И вот получается что старый тупой старичок С++ опять всех опередил. На каком языке вы еще сможете написать это так же кратко, ясно, просто и понятно? Да, хотелось бы увидеть аналог на Обероне, который "делает" плюсы... |
| Re[6]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 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://moikrug.ru/users/P628059486/ |
| Дата: | 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 >> Objects to Objects mapping: emitmapper.codeplex.com | |
| Re[2]: Где собака зарыта??? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | prVovik | |
| Дата: | 19.10.04 14:18 | |
| Оценка: | 1 (1) +2 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Потому что: "Легче погасить в себе свет, чем рассеять тьму вокруг" "Ночной Дозор" Хм, какое глубокомысленное замечание! А если серьезно, то я знаю кучу народа (я в их числе), которые после перехода с турбо паскаля на борланд с++ поняли, что поступили правильно ... << RSDN@Home 1.1.4 @@subversion >> Objects to Objects mapping: emitmapper.codeplex.com | |
| 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> это
|
| Re[3]: Где собака зарыта??? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Курилка | http://kirya.narod.ru/ |
| Дата: | 19.10.04 14:22 |
| Здравствуйте, prVovik, Вы писали: V>Здравствуйте, Сергей Губанов, Вы писали: СГ>>Потому что: "Легче погасить в себе свет, чем рассеять тьму вокруг" "Ночной Дозор" V>Хм, какое глубокомысленное замечание! V>А если серьезно, то я знаю кучу народа (я в их числе), которые после перехода с турбо паскаля на борланд с++ поняли, что поступили правильно Ну и переход Хейлсберга в лагерь C# (тоже по идее близко к C++) много о чём говорит. |
| Re[9]: _ | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 19.10.04 14:30 | |
| Оценка: | +2 | |
| Здравствуйте, Сергей Губанов, Вы писали: WH>>2)Я не вижу объективных причин благодаря которым знание EBNF помогает писать программы. Ибо это специфические знания необходимые при разработке компиляторов. СГ>Все знания о том что такое EBNF умещаются на одной странице. Это элементарщина которую в школе надо давать, а Вы о ней говорите как о высокой науке. СГ>Вас не спросили! А надо было! СГ>Ну и как, создав их он понял как надо их грамотно создавать? А ты уверен что Вирт понял? СГ>Скольких студентов и аспирантов он научил тому как надо грамотно создавать языки и операционки? А ты уверен что Вирт научил их создавать языки и операционки _грамотно_? Я вот глядя на Виртовские поделки почемуто сомневаюсь. СГ>Сами поняли что сказали? Сам то я понял. А ты меня упорно не понимаешь. СГ>Правильно, надо повышать абстракцию. Ага... СГ>Вот Оберон ее и повышает. В каком месте? СГ>Например, еще со времен Модулы, в этом языке есть такая абстракция как "модуль" — это не только единица компиляции, но и динамически линкующаяся и загружаемая единица исполнения (в Си++ такой абстракции нет и не будет). Ну насчет не будет это ты погорячился. К томуже я не вижу как это может повысить абстракцию. СГ>Еще пример высокого уровня абстракции — "активный объект" (в Си++ такой абстракции нет и не будет). А зачем оно надо? СГ>А Вы только посмотрите сколько новых абстракций в Zonnon — Оберон для .NET. Одни DEFINITION чего стоят. А еще, совсем убойная для всех рептилоидов вещь, там, представьте себе, какой ужас, протокол обмена сообщениями между двумя активностями пишется прямо в EBNF, то есть тот кто не знает EBNF не сможет писать программы на языке Zonnon! А тебе не кажется что это проблемы языка Zonnon!? СГ> Вот смотрю я на этот пример и думаю на кой черт описывать протокол если его тутже приходится реализовывать ручками? Или ты хочешь сказать что компилятор проверит корректность реализации протокола? Вот еслибы пример выглядел примерно так
Я бы сказал: Круто хотя всеравно не понятно на кой оно надо. СГ>Спрашивается, а как может повысить уровень абстракции старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами? Во превых что значит повышение абстракции? Это уменьшение колличества деталей. Так? Вот например берем тотже 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 >> Objects to Objects mapping: emitmapper.codeplex.com | |
| Re[3]: Где собака зарыта??? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 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&IDw=31&pid=50 |
| Re[10]: _ | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 19.10.04 15:02 |
| Здравствуйте, Kluev, Вы писали: K>С++ с его тупыми шаблонами и анахронизмами Это мои слова. И я действительно так считаю. Если интересно можно поговорить на эту тему в отдельной ветке. ... << RSDN@Home 1.1.4 rev. 185 >> Пусть это будет просто: | просто, как только можно, но не проще. (C) А. Эйнштейн |
| Re[8]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 19.10.04 15:02 |
| Здравствуйте, Kluev, Вы писали: K>Здравствуйте, Сергей Губанов, Вы писали: К>>>Ты уверен на все 200%? К>>>А может быть просто грабли ещё не нашли, а лежат они в кустах? СГ>>Уверен. В Обероне граблей нет. Если не верите, то можете поискать. K>Гы. Тогда напишите нам на обероне тот кусок с NurbsCurve который я привел. А мы посмотрим и сравним.
Поскольку шаблонов в обычном Обероне нет, то писанины будет больше. Надо будет расписать отдельно для 2D и отдельно для 3D.
И как Вы хотите это сравнивать? |
| 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 >> Objects to Objects mapping: emitmapper.codeplex.com | |
| 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! СГ> СГ>
Хммм... а как насчёт полиморфизма элементов протокола? А что у нас по части создания шаблонов грамматик и их специализации? СГ>Спрашивается, а как может повысить уровень абстракции старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами? Увы и ах. Именно благодаря темплейтам, множественному наследованию и возможности перегрузки операторов можно создавать пусть не идеальные, но очень неплохо заточенные под конкретные задачи (т.е. — высокоабстрактные) реализации языков. Можно и 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 rsdn | http://www.parallels.com/automation/operations/ |
| Дата: | 20.10.04 03:30 | |
| Оценка: | ![]() | |
| Re[7]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Sinclair rsdn | http://www.parallels.com/automation/operations/ |
| Дата: | 20.10.04 03:41 | |
| Оценка: | 14 (1) +2 | |
| Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Дарней | |
| Дата: | 20.10.04 05:10 |
| Здравствуйте, Геннадий Васильев, Вы писали: ГВ>Ну а что тут такого? Как-никак — пересобирается полная программа, а не набор заплаток, собираемых в рантайме. Всё в порядке — чудес не бывает. Сборка делается либо в компайл-тайме, либо в рантайме. Но её же всё равно нужно сделать! Проблема в том, что перед компиляцией любого файла в C++ сначала делается препроцессинг, и даже самый мелкий файл после включения в него всех хэдеров превращается в многомегабайтного монстра. Что самое поганое, парсинг каждого хэдера производится заново после включения его в каждый cpp-файл Учитывая еще зависимости между хэдерами, все становится совсем плохо. (я знаю, что эти зависимости можно и нужно уменьшать — но на это уходит лишнее время, и это возможно не всегда). В качестве пищи для размышлений советую сравнить компиляцию примерно одинаковых по сложности прог на VC++ и на C#. Разница по времени компиляции обычно на порядки, и совсем не в пользу C++ Всех излечит, исцелит | добрый Ctrl+Alt+Delete |
| Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | LaptevVV rsdn | http://vk.com/id59893040 |
| Дата: | 20.10.04 05:30 |
| Здравствуйте, Дарней, Вы писали: Д>Здравствуйте, LaptevVV, Вы писали: LVV>>Уже оказал. Не было б паскаля — сидели бы мы сейчас на Алголе-68! Д>а как же K&R? Транслятор С писали профессиональные программисты-системщики, а транслятор с паскаля написал СТУДЕНТ! Под руководством Вирта (и уверяю, вирт не написал ни строчки — сам такой руководитель, знаю). LVV>>Блестящий язык, но как же сложно с него полного писать транслятор! Д>Да уж.. хотя кажется мне, у С++ с этим всё намного хуже Транслятор С++ — одно проходной, как и транслятор с паскаля. Хотя лично я сделал бы его двух проходным. Глядишь, и с темплейтами меньше заморочек было бы Наши программисты — самые программистые программисты в мире! | |
| Re: Где собака зарыта??? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | LaptevVV rsdn | http://vk.com/id59893040 |
| Дата: | 20.10.04 05:34 |
| Здравствуйте, prVovik, Вы писали: V>Здравствуйте, FR, Вы писали: FR>>И может именно поэтому корявый и не логичный, но выразительный C++ стал таким массовым? V>А вот, кстати, ты поднял очень интересный вопрос. Почему же популярность завоевал, не паскаль, а именно такой ужасный и корявый С/С++, несмотря на то, что паскаль появился раньше ??? И почему именно на основе синтаксисв С/С++ сделали и Java и C#? Может быть товарищу Вурту следовало бы сначала разобраться с этими вопросами, прежде чем придумывать свой очередной идеальный язак программирования. Керниган написал об этом статью "Почему паскаль не является моим любимым языком". Но от себя добавлю — все же в свое время главной целью паскаля было обучение. И демонстрация того, что язык может быть простой, и транслятор с него может быть простой. Отнюдь не профессиональное программирование. А С — это профессиональный язык для профессионалов — так он и разрабатывался. Наши программисты — самые программистые программисты в мире! | |
| Re[3]: Где собака зарыта??? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | LaptevVV rsdn | http://vk.com/id59893040 |
| Дата: | 20.10.04 05:35 |
| Здравствуйте, prVovik, Вы писали: V>Здравствуйте, Nick_, Вы писали: N_>>Все просто. Популярность завоевал не Си, а UNIX. Если бы UNIX был написан на другом языке, то сейчас был бы популярен другой язык. V>Ну дак почему же UNIX не был написан на паскале? А Windows, между прочим — была!!!! Наши программисты — самые программистые программисты в мире! | |
| Re[8]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | LaptevVV rsdn | http://vk.com/id59893040 |
| Дата: | 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://moikrug.ru/users/P628059486/ |
| Дата: | 20.10.04 06:43 | |
| Оценка: | ![]() | |
| ГВ>>...Как-никак — пересобирается полная программа... Д>... перед компиляцией любого файла в C++ сначала делается препроцессинг... А еще тормоза компиляции происходят из-за того что в Си/Си++ можно влюбом месте программы написать:
(Кстати, по смыслу это очень близко к инструкции goto) Компилятор замучается бегать по всем файлам проекта и искать где же определена эта функция (причем ему еще надо убедиться в том что эта функция определена не более одного раза). А в модульных языках программирования компилятор с самого начала знает из какого модуля какая функция вызывается и не тратит время на ее поиск.
|
| Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 20.10.04 06:47 |
| Здравствуйте, LaptevVV, Вы писали: LVV> уверяю, вирт не написал ни строчки — сам такой руководитель, знаю Вот за себя и отвечайте. Кстати, мог ли человек не написавший ни строчки написать вот это: http://www.uni-vologda.ac.ru/oberon/infoart/proj0.htm |
| Re[2]: Где собака зарыта??? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 20.10.04 07:06 |
| Здравствуйте, LaptevVV, Вы писали: LVV>Керниган написал об этом статью "Почему паскаль не является моим любимым языком". Той статьей он выставил себя на посмешище. Дело в том, что в то время когда он писал эту статью Виртом уже был создан язык Модула, в котором были исправлены недочеты старого Паскаля. То есть Керниган малость запоздал со своей критикой. С тем же успехом Керниган мог бы написать статью о своей нелюбви к любому другому устаревшему языку, например, к Алголу. В своей статье Керниган ни разу не упомянул о языке Модула (с чем интересно это связано?), неужели он не знал о Модуле? Ай-ай-ай, как нехорошо получилось. В научном мире это равноценно что сесть в лужу. Вот некоторая часть дерева эволюции оберонов:
*Статья Кернигана была посвящена критике языка Паскаль, того который сразу после Алгол. Более подробное генеалогическое дерево оберонов представлено сдесь: http://www.oberon.ethz.ch/genealogy.html |
| Re[17]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 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 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>А еще тормоза компиляции происходят из-за того что в Си/Си++ можно влюбом месте программы написать: СГ>
СГ>(Кстати, по смыслу это очень близко к инструкции goto) Компилятор замучается бегать по всем файлам проекта и искать где же определена эта функция (причем ему еще надо убедиться в том что эта функция определена не более одного раза). Сергей, это вы что-то преувеличили... Компилятору в данном случае нет необходимости искать определение этой функции, ему вообще ничего не надо искать. Функция объявлена, сигнатура известна, компилятор просто вставит в объектный модуль ссылку на эту сигнатуру, а искать её будет уже компоновщик (линкер). И, кстати, поскольку компоновщику нет нужды делать синтаксический анализ, поскольку компоновщик получает уже готовые сигнатуры "на блюдечке", то связывание функций не будет трудоёмким. Так что, извините, никак не могу согласиться с вами в этом вопросе. ... << RSDN@Home 1.1.4 beta 3 rev. 194>> |
| Re[9]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 20.10.04 07:27 | |
| Оценка: | 3 (1) +1 | |
| Здравствуйте, LaptevVV, Вы писали: S>>Собственно, это-то и не нравится у Вирта. От него откровений ждали, а он "=" критикует. Ну не смешно ли? LVV>Это все потому. что он — преподаватель. А Керниган и Ричи с Томсоном — профессиональные прогроаммисты. которые (скорее всего) преподаванием занимались ОЧЕНЬ МАЛО Так получилось что я тоже немного попредовал... дык вот с = у людей ВОБЩЕ НИКАКИХ ПРОБЛЕМ НЕ ВОЗНИКЛО. Тоесть абсолютно никаких. Все это надуманый бред! А приципился Вирт к этому по тому что не может придумать нормальных аргументов проив С/С++. Теоретик блин. ЗЫ Прочитай "Эффективное программирование на С++" Кёниг и Му... Оказывается и С++ можно преподовать не сложнее паскаля. Ну и кому после этого нужен Вирт со своими выкидонами? ... << RSDN@Home 1.1.4 rev. 185 >> Пусть это будет просто: | просто, как только можно, но не проще. (C) А. Эйнштейн |
| Re[10]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 20.10.04 07:35 | |
| Оценка: | -1 | |
| Здравствуйте, Sinclair, Вы писали: S>Ну, на самом деле это не все. Паскаль — неизмеримо круче плюсов потому, что S> S> := гораздо понятнее, чем = S> ^. гораздо понятнее, чем -> S> строковые константы ограничиваются одинарными, а не двойными кавычками (в ДВА раза меньше штрихов!) S> в If можно писать на одну пару скобок меньше S> S>Хотя, конечно, главное — все-таки то, что преподавание языка, где присваивание выполняется при помощи "=" означает выставить себя посмешищем. S>З.Ы. В самом популярном языке программирования для персоналок вообще оператор присваивания не отличается от оператора сравнения на равенство. Что не мешает миллионам людей осваивать его безо всяких Виртов. Вы под словом Паскаль понимаете тот язык программирования который был сразу после Алгола. С тех пор много воды утекло. Вот некоторая часть дерева эволюции оберонов:
Звездочкой отмечен тот Паскаль о котором говорите Вы. Ну а теперь развеем Ваше невежество. 1) S> ^. гораздо понятнее, чем -> В оберонах обращение к полям записей через указатель на запись не требует указывания знака "^" можно просто писать p.x := 0; а не p^.x := 0; 2) S> строковые константы ограничиваются одинарными, а не двойными кавычками (в ДВА раза меньше штрихов!) Да будет Вам известно, в оберонах строковые константы ограничиваются именно двойными кавычками!
3) S> в If можно писать на одну пару скобок меньше Да будет Вам известно, что в оберонах используется конструкция IF ... THEN ... END — с явным END в конце (без BEGIN). Такая конструкция, в отличие от конструкции if then begin end или аналогичной ей if(){ } лишена неоднозначности возникающей при нескольких вложенных друг в друга if-ов и else. Все структурные операторы оберона лишены каких бы то ни было неоднозначностей:
4) S> := гораздо понятнее, чем = Оператор "=" обозначает математическую операцию сравнения, если x = y, то y = x. Кстати, для выхода из процедуры в оберонах используется инструкция RETURN. Так что, вынужден констатировать, что Вы равно как и, в свое время, Керниган со своей статьей о нелюбви к Паскалю, сели в лужу — проявили свое невежество и некомпетентность в том вопросе о котором ведете речь. Подробнее о Кернигане там: http://www.rsdn.ru/Forum/Message.aspx?mid=859711&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@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 | |
| Оценка: | +1 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Поскольку шаблонов в обычном Обероне нет, то писанины будет больше. Надо будет расписать отдельно для 2D и отдельно для 3D. СГ>
СГ>И как Вы хотите это сравнивать? Очень просто. Получается что для вполне реальной задачи старый добрый С++ подошел очень хорошо: все строго типизированно, лаконично, кратко, ясно и понятно. А в модном обероне мне пришлось бы заюзать копи-псате и потом еще два раза отлаживать два разных класса. Между прочим недецких по обьему кода. А на плюсах получилось это делается по принципу выстрелил и забыл |
| Re[10]: _ | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | _Obelisk_ | http://www.ibm.com |
| Дата: | 20.10.04 07:46 | |
| Оценка: | 19 (2) | |
| Здравствуйте, WolfHound, Вы писали: WH>Здравствуйте, Сергей Губанов, Вы писали: WH> На самом деле объяснить просто. Что такое домашний адрес человек знает. Если домашний адрес записать на бумажке, то эта бумажка и будет указателем ![]() Душа обязана трудиться! (с) Н.Заболоцкий. |
| Re[3]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 20.10.04 07:48 |
| Здравствуйте, Дарней, Вы писали: Д>На самом деле это конечно шутка, но предел упрощению тоже должен быть. Д>И кстати говоря, упорный борец за простоту и понятность Вирт придумал такую замечательную вещь, как with. И не стыдно ему было других критиковать после этого? А Вы хоть знаете что такое оператор WITH? Или это Вы взяли with из того паскаля, который был сразу после Алгола? На всякий случай напишу что такое оператор WITH. В оберонах WITH — это оператор конкретизации типа.
S1 — последовательность действий при которых x имеет тип T1 S2 — последовательность действий при которых x имеет тип T2 S3 — последовательность действий при которых динамический тип x не установлен. Смысл: Если динамический тип полиморфной переменной x оказался T1, то выполняется S1 внутри которой x рассматривается как переменная типа T1; в противном случае если динамический тип полиморфной переменной x оказался T2, то выполняется S2 внутри которой x рассматривается как переменная типа T2; в противном случае выполняется S3.
|
| Re[8]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 20.10.04 07:50 |
| Здравствуйте, 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://moikrug.ru/users/P628059486/ |
| Дата: | 20.10.04 07:58 | |
| Оценка: | +1 | |
| Здравствуйте, Dervish, Вы писали: D>Сергей, это вы что-то преувеличили... Компилятору в данном случае нет необходимости искать определение этой функции, ему вообще ничего не надо искать. Функция объявлена, сигнатура известна, компилятор просто вставит в объектный модуль ссылку на эту сигнатуру, а искать её будет уже компоновщик (линкер). И, кстати, поскольку компоновщику нет нужды делать синтаксический анализ, поскольку компоновщик получает уже готовые сигнатуры "на блюдечке", то связывание функций не будет трудоёмким. Ну, извиняюсь, употребил слово "компилятор" имея ввиду весь механизм который берет кучу исходных файлов и выдает готовый экзешник. Конечно, это тормоза линковки, которые добавляют свое лишнее время ожидания получения готового экзешника, а в модульных языках этой добавки нет. |
| Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 20.10.04 07:58 |
| Здравствуйте, Сергей Губанов, Вы писали: LVV>> уверяю, вирт не написал ни строчки — сам такой руководитель, знаю Неправда ваша: Michael Franz, Oberon — The Overlooked Jewel, раздел 2. Особо хочу обратить внимание на место, где Франц рассказывает о решении Вирта заменить двоичное дерево поиска линейным списком и чем он это обосновал. Вот на каких примерах надо учить сегодняшних студентов! Олег. | |
| Re[18]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | vdimas | |
| Дата: | 20.10.04 08:00 | |
| Оценка: | +1 | |
| Здравствуйте, Kh_Oleg, Вы писали: K_O>И коль уж воскресили древнюю тему, то повторюсь: мне не нравится, что в вышеприведенном примере операции над элементами массива выглядят точно также как и над одиночными переменными. Более того, то выражение, выглядящее как обычное математическое выражение над несколькими переменными на самом деле мало того, что работает с эелементами массивов, так еще и внутри себя содержит цикл. Знаешь, посылать друг-друга не вежливо и не профессионально, но не могу удержаться, чтобы не послать тебя посмотреть на MatLab, на признанного лидера среди математических инструментов. Там операции над векторами и матрицами именно так и записываются, в обычном виде, почти как профессором на доске на лекции по вышке. Всем это кажется удобным, хотя твое мнение, очевидно, иное. |
| Re[10]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 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 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Ну, извиняюсь, употребил слово "компилятор" имея ввиду весь механизм который берет кучу исходных файлов и выдает готовый экзешник. Конечно, это тормоза линковки, которые добавляют свое лишнее время ожидания получения готового экзешника, а в модульных языках этой добавки нет. Сергей, поправка принимается, но мне хотелось бы отметить ещё два момента:
В любом случае линковка выполняется всего один раз. Её не нужно делать всякий раз при запуске программы. А если один раз, то время, затраченное на ликовку вообще становится несущественным (в разумных пределах). Скажем, лично меня не напрягут лишние 5 секунд, если я знаю, что это нужно сделать всего один раз. Что же происходит в "модульных" языках? Да то же самое, совершенно то же самое. С той лишь разницей, что все имена (сигнатуры) в них разбиты на группы, которые относятся к разным модулям. На самом деле, в С++ есть понятие namespace, которое позволяет точно так же разбивать названия функций на группы. Да и для функций-членов класса, если угодно в сигнатуре учитывается название класса. Так что в этом вопросе "модульные" языки не имеют никакого преимущества. ... << RSDN@Home 1.1.4 beta 3 rev. 194>> |
| Re[19]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 20.10.04 08:22 |
| Здравствуйте, vdimas, Вы писали: K_O>>И коль уж воскресили древнюю тему, то повторюсь: мне не нравится, что в вышеприведенном примере операции над элементами массива выглядят точно также как и над одиночными переменными. Более того, то выражение, выглядящее как обычное математическое выражение над несколькими переменными на самом деле мало того, что работает с эелементами массивов, так еще и внутри себя содержит цикл. V>Знаешь, посылать друг-друга не вежливо и не профессионально, но не могу удержаться, чтобы не послать тебя посмотреть на MatLab, на признанного лидера среди математических инструментов. Там операции над векторами и матрицами именно так и записываются, в обычном виде, почти как профессором на доске на лекции по вышке. V>Всем это кажется удобным, хотя твое мнение, очевидно, иное. Я давно не пользовался MathLab, поэтому могу ошибаться, однако, насколько я помню данный продукт является специализированной системой для обработки математических выражений: взятие интегралов в аналитическом виде, решение огромных СЛАУ, решение дифференциальных уравнений больших порядков, вычисление пределов и проч., т.е. то, что математик (физик, химик, ученый или инженер другой специальности) вычислит и сам на бумажке, но у него на это уйдет много времени. Цель данного продукта — сэкономить время на решении трудоемких математических задач. Отсюда — иные средства, иной язык более удобный для математика, нежели для программиста, иные особенности. Математику достаточно знать, что вот это — матрица, с такими-то значениями, и требуемая операция над ней должна быть выполнена за относительно приемлемое время. А для ряда задач время выполнения вообще роли не играет — лишь бы посчиталось. Тогда как мне, как программисту важно знать, как эта матрица представлена в памяти, какой тип данный у ее элементов, какими конкретно значениями она проинициализирована (и от этого тоже может зависеть алгоритм вычислений), как быстро над ней будет выполнена требуемая операция, что я смогу изменить, если время вычислений перестанет меня устраивать. Пример, о котором я говорю, большинство требуемой информации от меня скрывает. Так что твой пример неудачный, с языками программирования общего назначения имеет мало общего. Олег. | |
| Re[5]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 20.10.04 08:22 |
| Здравствуйте, Курилка, Вы писали: К>но ты давай нормальный пример WITH используется в обработчиках сообщений. Пусть тип View — потомок от базового типа у которого есть (виртуальный) абстрактный метод HandleMsg (VAR msg: Message), где Message — базовый тип сообщений. Тогда реализация этого метода может быть такой:
Где типы SomeMsg и AnotherMsg есть расширения (потомки) типа Message. |
| Re[12]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 20.10.04 08:31 |
| Здравствуйте, Курилка, Вы писали: К>Ну коли они достаточные, то скажи тогда по твоему примеру — как на нём реализуется функциональность аналогичная шаблонам C++? К>Вот это уже покажет какую-то "достаточность" (хотя и не докажет), а простыми заявлениями и я кидаться могу, факты важнее, имхо. Ну, знаете...., перефразируя фразу Клюева об абстракциях, скажу что шаблоны ради шаблонов нам не нужны. Шаблоны не добавляют программе новых возможностей. Во время исполнения программы никаких шаблонов нет. Шаблоны позволяют меньше ручками по клавиатуре долбить. |
| Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 20.10.04 08:34 |
Здравствуйте, Dervish, Вы писали:
D>В любом случае линковка выполняется всего один раз. Её не нужно делать всякий раз при запуске программы. А если один раз, то время, затраченное на ликовку вообще становится несущественным (в разумных пределах). Скажем, лично меня не напрягут лишние 5 секунд, если я знаю, что это нужно сделать всего один раз. О, как вы неправы, создает и еще как! 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 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>А еще тормоза компиляции происходят из-за того что в Си/Си++ можно влюбом месте программы написать: СГ>
СГ>(Кстати, по смыслу это очень близко к инструкции goto) Компилятор замучается бегать по всем файлам проекта и искать где же определена эта функция (причем ему еще надо убедиться в том что эта функция определена не более одного раза). А в модульных языках программирования компилятор с самого начала знает из какого модуля какая функция вызывается и не тратит время на ее поиск. ну это — просто хит. Сразу выдает глубочайшие познания о принципах работы компиляторов вообще и компилятора С++ в частности Всех излечит, исцелит | добрый Ctrl+Alt+Delete |
| Re[13]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kluev | |
| Дата: | 20.10.04 08:45 | |
| Оценка: | 1 (1) | |
| Здравствуйте, Kh_Oleg, Вы писали: K_O>О, как вы неправы, создает и еще как! Да, механизм компиляции в С++ устарел до безобразия. С этим никто не спорит. Кстати а что мешает в таком крупном проекте заюзать dll? |
| Re[13]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Курилка | http://kirya.narod.ru/ |
| Дата: | 20.10.04 08:46 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Здравствуйте, Курилка, Вы писали: К>>Ну коли они достаточные, то скажи тогда по твоему примеру — как на нём реализуется функциональность аналогичная шаблонам C++? К>>Вот это уже покажет какую-то "достаточность" (хотя и не докажет), а простыми заявлениями и я кидаться могу, факты важнее, имхо. СГ>Ну, знаете...., перефразируя фразу Клюева об абстракциях, скажу что шаблоны ради шаблонов нам не нужны. Шаблоны не добавляют программе новых возможностей. Во время исполнения программы никаких шаблонов нет. Шаблоны позволяют меньше ручками по клавиатуре долбить. Не соглашусь, тут не есть абстракция только ради абстракции. Тут есть полиморфизм повыше обычного ООПшного, т.е. полиморфизм типов очень близкий к функциональному программированию, т.е. вот реализуй полиморфную для любых типов ф-цию swap? В STL она есть, на любом функциональном языке или есть, или реализуется очень элементарно. Покажи как это реализуется на обероне? |
| Re[11]: _ | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 20.10.04 08:48 |
| Здравствуйте, _Obelisk_, Вы писали: _O_>На самом деле объяснить просто. Что такое домашний адрес человек знает. Если домашний адрес записать на бумажке, то эта бумажка и будет указателем Нет ты всетки попробуй. ... << RSDN@Home 1.1.4 rev. 185 >> Пусть это будет просто: | просто, как только можно, но не проще. (C) А. Эйнштейн |
| Re[4]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 20.10.04 08:48 | |
| Оценка: | +3 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>А Вы хоть знаете что такое оператор WITH? Или это Вы взяли with из того паскаля, который был сразу после Алгола? Да-да тот самый маразм... СГ>На всякий случай напишу что такое оператор WITH. В оберонах WITH — это оператор конкретизации типа. А ну значит не все так плохо... хоть что-то понял... СГ>Смысл: Если динамический тип полиморфной переменной x оказался T1, то выполняется S1 внутри которой x рассматривается как переменная типа T1; в противном случае если динамический тип полиморфной переменной x оказался T2, то выполняется S2 внутри которой x рассматривается как переменная типа T2; в противном случае выполняется S3. И зачем ради этого вводить специальную конструкцию в язык? Это что так часто нужно? Вот в С++ есть dynamic_cast и его хватает на все случаи жизни. Да и нужен он очень редко. Ибо виртуальный функции рулят. Вобще говоря знать динамический тип объекта нужно на столько редко что введение в язык конструкции которая позволяет проверить объект на принадлежность к нескольким типам заставляет задуматься очень не хорошими мыслями об авторе этого языка... ЗЫ Ловкость рук и...
... << RSDN@Home 1.1.4 rev. 185 >> Пусть это будет просто: | просто, как только можно, но не проще. (C) А. Эйнштейн |
| Re[11]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 20.10.04 08:48 | |
| Оценка: | +1 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Для написания программ общего назначения, разумеется. Для этого достаточно машины Тьюринга. СГ>Самый первый Оберон-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>О, как вы неправы, создает и еще как! Ну хорошо, давайте уточним, а что такое "большой проект"? Это сколько строк кода? И на какой машине делается сборка? D>>Что же происходит в "модульных" языках? Да то же самое, совершенно то же самое. С той лишь разницей, что все имена (сигнатуры) в них разбиты на группы, которые относятся к разным модулям. K_O>Нет, в модульных языках есть одно существенное отличие — информация о типах данного модуля содержится в скомпилированных объектных файлах. Эта информация доступна компилятору при компиляции другого модуля, который содержит секцию импорта из другого модуля. В результате — каждая строка в исходном тексте программы обрабатывается компилятором ровно один раз. K_O>А теперь вопрос: сколько раз при компиляции большого С++ проекта компилятор обрабатывает, скажем, файл stdio.h? Не пробовали использовать precompiled headers? Один раз. Всего один раз. Кроме того, позвольте напомнить, в каком контексте прозвучало утверждение Сергея: СГ>А еще тормоза компиляции происходят из-за того что в Си/Си++ можно влюбом месте программы написать: СГ>
Что тут нужно искать в объектных файлах кроме сигнатуры функции? Зачем в этом случае информация о типах? ... << RSDN@Home 1.1.4 beta 3 rev. 194>> |
| Re[5]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 20.10.04 08:49 |
| Здравствуйте, Дарней, Вы писали: Д>из того самого паскаля, который использует на порядок большее количество людей, чем Оберон — из Object Pascal AKA Delphi. А к Вирту тогда какие претензии? Вирт к Object Pascal-ю отношения не имеет. Object Pascal-евский with
Виртовский WITH:
Они разные не только по смыслу, но и по написанию всей конструкции. |
| 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>>О, как вы неправы, создает и еще как! K>Да, механизм компиляции в С++ устарел до безобразия. С этим никто не спорит. Ну вот, приплыли. K>Кстати а что мешает в таком крупном проекте заюзать dll? Кстати, да. Тут соглашусь. ... << RSDN@Home 1.1.4 beta 3 rev. 194>> |
| Re[4]: Где собака зарыта??? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Дарней | |
| Дата: | 20.10.04 08:54 | |
| Оценка: | +2 | |
| Здравствуйте, Евгений Коробко, Вы писали: ЕК>Да вы что! Это же замечательная вещь. Можно работать с неименованной переменной без копирования в локальную переменную. Это и быстро (х.з. сможет компилятор ли соптимизировать лишее копирование), и красиво — не загромождаем код лишними переменными. ага, просто великолепно — пока не получишь граблями по лбу. Особенно интересно может получиться, когда одинаковое имя есть в нескольких контекстах Всех излечит, исцелит | добрый Ctrl+Alt+Delete |
| Re[5]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 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>>>О, как вы неправы, создает и еще как! K>>Да, механизм компиляции в С++ устарел до безобразия. С этим никто не спорит. D>Ну вот, приплыли. Основная проблемма в препроцессоре и инклюдах. от этого пора отказыватся, другое дело что так просто это не сделать. ИМХО пора делать новый язык на базе С++. Избавится от препроцессора, некоторых откровено устаревших фич. Небольшой косметический ремонт типа this — не указатель а ссылка. И сам механизм компиляции тоже требует радикальных изменений. Дабы избежать появления разных диалектов языка, хорошо бы иметь стандартный фронт-энд, который парзит файлы и создает AST(abstract syntax tree) в како-мнить стандартизированном формате. Это бы убило сразу всех зайцев. Фактически отдельным компилер-девелоперам не пришлось бы каждый раз писать парзер, а только кодогенератор, а во вторых какой был бы простор для разных визардов и тулзов? Надо выташить что-нить из кода, пжста — есть готовое AST. Можно узнать о коде все до мельчайших подробностей. K>>Кстати а что мешает в таком крупном проекте заюзать dll? D>Кстати, да. Тут соглашусь. |
| Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 20.10.04 09:08 | |
| Оценка: | 18 (1) -1 | |
| Здравствуйте, Kluev, Вы писали: K_O>>О, как вы неправы, создает и еще как! K>Да, механизм компиляции в С++ устарел до безобразия. С этим никто не спорит. K>Кстати а что мешает в таком крупном проекте заюзать dll? Две вещи — требование, чтобы продукт работал одновременно на Windows и на Unix платформе и, как ни странно, сам С++. Из DLL можно экспортировать только функции, но не объекты (расширения Microsoft здесь не годятся), а стало быть, для того, чтобы выделить некоторую общую часть, реализованную на С++ с использованием ООП в отдельную DLL, надо либо оборачивать все в С-шные функции wrapper'ы, либо реализовывать свой COM, потому как нету его на Иксах. На самом деле это о-очень давняя проблема и не мы первые с ней столкнулись. COM — как раз и явилось попыткой Microsoft разбить свои С++ проекты на DLL'ки. Получилось не слишком красиво и не очень удобно, следующим шагом стал .NET, что уже гораздо лучше. Только для этого потребовалось изменить язык. С++ оказался непригодным для создания сложных, расширяемых, кроссплатформенных систем. И, кстати, пару слов о Стандарте, который здесь очень часто упоминают. Чтобы решить данную проблему потребовалось внести изменения в язык. Но в С++ нельзя самовольно (даже для Microsoft Олег. | |
| 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://moikrug.ru/users/P628059486/ |
| Дата: | 20.10.04 09:10 |
| Здравствуйте, Курилка, Вы писали: К>Тут есть полиморфизм повыше обычного ООПшного Шаблоны — это статический полиморфизм — его нет во время работы программы. А в ООП динамический полиморфизм — он есть во время работы программы. К>вот реализуй полиморфную для любых типов ф-цию swap? Если шаблонов нет, как я ее реализую? Никак. Чего тогда спрашиваешь? |
| Re[15]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Курилка | http://kirya.narod.ru/ |
| Дата: | 20.10.04 09:12 | |
| Оценка: | 1 (1) +1 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Здравствуйте, Курилка, Вы писали: К>>Тут есть полиморфизм повыше обычного ООПшного СГ>Шаблоны — это статический полиморфизм — его нет во время работы программы. СГ>А в ООП динамический полиморфизм — он есть во время работы программы. т.е. ООП — священная корова, так? И другие идеи суть ересь? К>>вот реализуй полиморфную для любых типов ф-цию 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://moikrug.ru/users/P628059486/ |
| Дата: | 20.10.04 09:16 |
| Здравствуйте, Курилка, Вы писали: К>Оптимальных с какой т.зр.? К>По скорости? По объёму бинарника? По объёму кода? А это уже вопросы которые надо адресовать к конкретным компиляторам, а не к самому языку как таковому. Язык предполагает, а компилятор располагает. |
| Re[14]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 20.10.04 09:18 |
| Здравствуйте, Dervish, Вы писали: K_O>>О, как вы неправы, создает и еще как! 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 rsdn | http://vk.com/id59893040 |
| Дата: | 20.10.04 09:34 |
| Здравствуйте, WolfHound, Вы писали: WH>ЗЫ Прочитай "Эффективное программирование на С++" Кёниг и Му... Оказывается и С++ можно преподовать не сложнее паскаля. Ну и кому после этого нужен Вирт со своими выкидонами? Ну, я лично к нему отношусь с большим уважением — все-таки не всякому удается такой след в истории ИТ оставить. Большинство из тех, кто относится к нему с пренебрежением, не удасться и тысячной доли того, что сделал он. А потом, может именно в борьбе противоположностей С и С++ стали такими, какие они есть сейчас. Ведь не было бы с чем сравнивать — неизвестно, как все повернултось бы. А Кенига и МУ, я конечно, читал. Минус там один, как я уже писал в рецензии — нет привязки к конкретной среде. Это для русских студентов трудности создает с русским языком в программах. Наши программисты — самые программистые программисты в мире! | |
| Re[11]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Sinclair rsdn | http://www.parallels.com/automation/operations/ |
| Дата: | 20.10.04 11:07 | |
| Оценка: | +1 | |
| Re[12]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 20.10.04 12:13 |
| Здравствуйте, Sinclair, Вы писали: S>Ну а теперь поговорим о Вашей невнимательности. Я уже заметил, что вам хоть Джава говори — слышите вы только слово "Оберон". Я говорил именно о языке Паскаль. Поэтому вся аргументация по поводу Оберона здесь, мягко говоря, не к месту. Эта ветка посвящена обсуждению статьи Вирта о том как хорошо было бы преподавать студентам Оберон, так, спрашивается, а зачем тогда Вы стали в этой ветке говорить о допотопном Паскале? |
| Re[11]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 20.10.04 12:46 | |
| Оценка: | 24 (2) | |
| Здравствуйте, LaptevVV, Вы писали: WH>>ЗЫ Прочитай "Эффективное программирование на С++" Кёниг и Му... Оказывается и С++ можно преподовать не сложнее паскаля. Ну и кому после этого нужен Вирт со своими выкидонами? LVV>Ну, я лично к нему отношусь с большим уважением — все-таки не всякому удается такой след в истории ИТ оставить. Ну Герострата до сих прор помнят. Не аргумент. LVV>Большинство из тех, кто относится к нему с пренебрежением, не удасться и тысячной доли того, что сделал он. А что он сделал? Несколько ни кому не нужных языков которые по сути не далеко ушли от ассемблера? Развел кучу тупых наездов на С/С++ из серии := vs = ? Создал культ поклонения Оберону? Ты посмотри на Губанова... он же просто фанатеет от оберонов. LVV>А потом, может именно в борьбе противоположностей С и С++ стали такими, какие они есть сейчас. Не понял кто с кем борится? Вес всех Виртовских поделок и близко не стоял с весом одного С++. LVV>Ведь не было бы с чем сравнивать — неизвестно, как все повернултось бы. Что с чем сравнивать? С++ с Паскалем? Да С++ от функциональных языков взял больше чем от паскаля. Если от паскаля вобще что-то взял. LVV>А Кенига и МУ, я конечно, читал. Минус там один, как я уже писал в рецензии — нет привязки к конкретной среде. Ну знаетели... ИМХО не аргумент. И тем болие не аргумент в пользу Виртовских поделок. LVV>Это для русских студентов трудности создает с русским языком в программах. Ну за это надо бить ичключительно переводчиков. ... << RSDN@Home 1.1.4 rev. 185 >> Пусть это будет просто: | просто, как только можно, но не проще. (C) А. Эйнштейн |
| Re[6]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 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. Плюс к этому — большая структуризация текста программы. Ты не кружи. Ты скажи на кой черт оно надо? У меня вобще ни разу жилания не возниколо воспользоваться подобной штукой. В чем практический смысл этой конструкции? Я конечно понимаю что если конструкция есть то ее можно задействовать. Но водить в язык конструкции которые практически не востребованы... Кстати объясни пожалуйста почему
В чем тайный смысл? ... << RSDN@Home 1.1.4 rev. 185 >> Пусть это будет просто: | просто, как только можно, но не проще. (C) А. Эйнштейн |
| Re[15]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | FR | |
| Дата: | 20.10.04 13:58 |
| Здравствуйте, Kh_Oleg, Вы писали: K_O>Здравствуйте, Kluev, Вы писали: K_O>>>О, как вы неправы, создает и еще как! K>>Да, механизм компиляции в С++ устарел до безобразия. С этим никто не спорит. K>>Кстати а что мешает в таком крупном проекте заюзать dll? K_O>Две вещи — требование, чтобы продукт работал одновременно на Windows и на Unix платформе и, как ни странно, сам С++. не мешает. K_O>Из DLL можно экспортировать только функции, но не объекты (расширения Microsoft здесь не годятся), а стало быть, для того, чтобы выделить некоторую общую часть, реализованную на С++ с использованием ООП в отдельную DLL, надо либо оборачивать все в С-шные функции wrapper'ы, либо реализовывать свой COM, потому как нету его на Иксах. Я не понял причем тут расширения ms? Тот же gcc тоже спокойно позволяет экспортировать классы в динамических библиотеках (если это не так то stlport'овая dll собраная мной на mingw наверно мне приснилась ... << RSDN@Home 1.1.3 stable >> |
| Re[7]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 20.10.04 14:02 |
| Здравствуйте, WolfHound, Вы писали: WH>В чем тайный смысл? Тайный смысл в том, что ";" нужна для разделения инструкций, но END — это тоже разделитель, так сказать. Поэтому после последней команды, т.е. перед END точку с запятой ставить необязательно, но если сильно хочеться, то ставить разрешается, это не является ошибкой, а считается как пустой оператор, который ничего не делает. |
| Re[7]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 20.10.04 14:16 |
| Здравствуйте, WolfHound, Вы писали: WH>Здравствуйте, Сергей Губанов, Вы писали: СГ>>А зачем вводить в язык оператор switch (или CASE) если его можно эмулировать с помощью цепочки if-else? WH>А в самом деле зачем? Про оптимизацию оператора switch по сравнению с обычной цепочкой if-else можно почитать, например. там: http://www.wasm.ru/print.php?article=1009002
Ни что не мешает делать аналогичную оптимизацию для WITH по сравнению с цепочкой dynamic_cast-ов. |
| Re[16]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 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 rsdn | http://www.parallels.com/automation/operations/ |
| Дата: | 20.10.04 14:34 | |
| Оценка: | 1 (1) +1 | |
| Здравствуйте, 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 | http://kholeg.spaces.live.com |
| Дата: | 20.10.04 16:05 | |
| Оценка: | ![]() | |
| Здравствуйте, vdimas, Вы писали: V>Здравствуйте, Kh_Oleg, Вы писали: K_O>>Тогда как мне, как программисту важно знать, как эта матрица представлена в памяти, какой тип данный у ее элементов, какими конкретно значениями она проинициализирована (и от этого тоже может зависеть алгоритм вычислений), как быстро над ней будет выполнена требуемая операция, что я смогу изменить, если время вычислений перестанет меня устраивать. V>Так, каша... приплыли... V>давай разгребать. V>Ты — это кто? Разработчик библиотеки или ее пользователь? Я — программист, изучающий чужой код, коротый достался мне, скажем, по наследству. И вот я встречаю конструкцию:
Вопрос: как быстро можно догадаться, что здесь идет обработка массивов, да еще и в цикле? В какой из двух десятков подключаемых заголовочных файлов смотреть? Олег. | |
| Re[18]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 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 rsdn | http://vk.com/id59893040 |
| Дата: | 20.10.04 16:22 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Здравствуйте, LaptevVV, Вы писали: LVV>> уверяю, вирт не написал ни строчки — сам такой руководитель, знаю СГ>Вот за себя и отвечайте. СГ>Кстати, мог ли человек не написавший ни строчки написать вот это: СГ>http://www.uni-vologda.ac.ru/oberon/infoart/proj0.htm Внимательно прочитайте! Я говорю, что как руководитель при написании ПЕРВОГО ТРАНСЛЯТОРА с ПАСКАЛЯ он не написал ни строчки! А то, что он вообще не писал программ — я не утверждаю. Он много чего написал. Я Вирта, в отличие от некоторых товарищей на этом сайте, уважаю. Хотя бы за собственное мнение в программировании, и за вклад в наше дело. Наши программисты — самые программистые программисты в мире! | |
| Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | LaptevVV rsdn | http://vk.com/id59893040 |
| Дата: | 20.10.04 16:23 |
D>А оно вам нужно, писать эти строчки? Ну спаибо на добром слове! Наши программисты — самые программистые программисты в мире! | |
| Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | LaptevVV rsdn | http://vk.com/id59893040 |
| Дата: | 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 | http://kholeg.spaces.live.com |
| Дата: | 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, глюков не наблюдал. Простеший пример:
def файл:
... << RSDN@Home 1.1.3 stable >> |
| Re[22]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | prVovik | |
| Дата: | 20.10.04 17:58 | |
| Оценка: | +1 ![]() | |
| Здравствуйте, Kh_Oleg, Вы писали: K_O>Я — программист, изучающий чужой код, коротый достался мне, скажем, по наследству. И вот я встречаю конструкцию: K_O>
K_O>Вопрос: как быстро можно догадаться, что здесь идет обработка массивов, да еще и в цикле? В какой из двух десятков подключаемых заголовочных файлов смотреть? Достаточно глянуть на типы. ... << RSDN@Home 1.1.4 @@subversion >> Objects to Objects mapping: emitmapper.codeplex.com | |
| Re[8]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 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 rsdn | http://www.parallels.com/automation/operations/ |
| Дата: | 21.10.04 05:57 | |
| Оценка: | +1 | |
| Re[22]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 21.10.04 06:48 |
| Здравствуйте, FR, Вы писали: K_O>>Ну так как насчет простенького примера экспорта собственного класса? Мне просто любопытно на это взглянуть... FR>Я же тебе привел уже пример STLPort, глюков не наблюдал. FR>Простеший пример: FR>
Если я не ошибаюсь, выделенные места являются compiler-specific. MSVC++ 7.1 здесь поперхнулся. FR>def файл: FR>
Хм.... Эту абракадабру я сам должен писать? Ну и наконец, как в другом экзешнике заиспользовать этот класс? Смогу ли я, просто подключив dll.h у себя написать:
И все нормально скомпиляется (в этом я не сомневаюсь), слинкуется и запустится? Олег. | |
| Re[22]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 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 с поддержкой наследования.
тогда можно будет править реализацию не ломая интерфейс и не перекомпилируя клиента этой 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 вариант того же объявления, то есть:
этот вариант нормально работает и на bcc, то есть на всех распрастранненых в windows компиляторах. K_O>Хм.... Эту абракадабру я сам должен писать? нет это само генерируется, я привел как пример, что получается на выходе, вот более подробный листинг:
K_O>Ну и наконец, как в другом экзешнике заиспользовать этот класс? Смогу ли я, просто подключив dll.h у себя написать: K_O>
K_O>И все нормально скомпиляется (в этом я не сомневаюсь), слинкуется и запустится? Нормально все работает, на этом уже кучи программ и библиотек построены. Главное не забыть компилировать и dll и exe с одной и той же динамичесой версией RTL. Вообще посмотри плюсовые RTL dll от ms или борланд, экспортируются кучи классов типа std::fstream, std::string и т. п. ... << RSDN@Home 1.1.3 stable >> |
| Re[9]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 21.10.04 08:07 |
| Здравствуйте, WolfHound, Вы писали: WH>Здравствуйте, Сергей Губанов, Вы писали: СГ>>Ни что не мешает делать аналогичную оптимизацию для WITH по сравнению с цепочкой dynamic_cast-ов. WH>Уф... Ты мне объясни на кой черт нужна эта цепочка if'ов вобще? Не надо мне объяснять как это работает. Поверь мне я это не хуже тебя знаю. Ты мне скажи зачем в язык введена конструкция которая не нужна. Вы в курсе, что изначально ООП основывается вовсе не на трех китах 1) наследование, 2) полиморфизм, 3) инкапсуляция; а всего на одной простой идее: все есть объекты и объекты обмениваются друг с другом сообщениями? Вот пришло к объекту сообщение закодированное в виде числа, как объекту догадаться что это за сообщение? Ему надо либо цепочкой if-else проверить это число с теми числами сообщений которые он понимает, либо сделать это с помощью CASE. Вариант 1:
Вариант 2:
Допустим, есть N-вариантов. Тогда цепочка IF-ELSE будет в худшем случае делать O(N) проверок, в то время как CASE будет выполнять не более O(Log(N)) проверок. Например, вполне реальное число N = 20, Log(20) = 4.3, т.е. разница что-то около 5 раз, нужна такая конструкция в языке или нет? А WITH — это тот же CASE, но только по типам с учетом иерархии наследования.
Причем внутри блока кода "сделать_XXX_действие" переменная msg трактуется так как буд-то ее статический тип есть тот тип который и был опознан. Например, внутри блока кода "сделать_одно_действие" статический тип переменной msg есть тип "SomeMsg", а вовсе не просто "Message". |
| Re: Вы чего!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 21.10.04 08:12 |
| Здравствуйте, Геннадий Васильев, Вы писали: ГВ>Перестаньте позорить чистое имя Вирта наглым пренебрежением к LSP!!! Простите, Вы с чем-то не согласны? |
| Re[14]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 21.10.04 08:17 | |
| Оценка: | ![]() | |
| Здравствуйте, Геннадий Васильев, Вы писали: СГ>>Шаблоны позволяют меньше ручками по клавиатуре долбить. ГВ>2. Процедуры, функции, и прочее подобное предназначены для того же. И что из этого следует? Процедуры и функции во время исполнения программы таки есть (помните такую команду call)? А вот шаблонов нет, то есть шаблоны не увеличивают возможностей программы. |
| Re[24]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kh_Oleg | http://kholeg.spaces.live.com |
| Дата: | 21.10.04 08:17 |
| Здравствуйте, Kluev, Вы писали: K>Это можно сделать т.к. живет же QT под линуксом и под виндой в dll-ях. А ведь и в самом деле... Надо будет посмотреть, что там да как. Олег. | |
| Re[10]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Sinclair rsdn | http://www.parallels.com/automation/operations/ |
| Дата: | 21.10.04 08:37 |
| Re[15]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Sinclair rsdn | http://www.parallels.com/automation/operations/ |
| Дата: | 21.10.04 08:37 | |
| Оценка: | 14 (3) +1 | |
| 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 >> Objects to Objects mapping: emitmapper.codeplex.com | |
| Re[10]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Дарней | |
| Дата: | 21.10.04 08:48 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Вы в курсе, что изначально ООП основывается вовсе не на трех китах 1) наследование, 2) полиморфизм, 3) инкапсуляция; а всего на одной простой идее: все есть объекты и объекты обмениваются друг с другом сообщениями? Вот пришло к объекту сообщение закодированное в виде числа, как объекту догадаться что это за сообщение? Ему надо либо цепочкой if-else проверить это число с теми числами сообщений которые он понимает, либо сделать это с помощью CASE. Когда нужно делать такое большое количество проверок, цепочку из if-else пишут только самые начинающие. Если у человека есть хоть какой-то опыт, то он будет использовать дерево поиска или хэш-таблицу, и получит то же самое быстродействие. Рекомендую ознакомиться с реализацией оконных функций в MFC — там именно так и сделано. Всех излечит, исцелит | добрый Ctrl+Alt+Delete |
| Re[11]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 21.10.04 09:30 |
| Здравствуйте, Дарней, Вы писали: Д>Когда нужно делать такое большое количество проверок, цепочку из if-else пишут только самые начинающие. Если у человека есть хоть какой-то опыт, то он будет использовать дерево поиска или хэш-таблицу, и получит то же самое быстродействие. Рекомендую ознакомиться с реализацией оконных функций в MFC — там именно так и сделано. Для пользовательских типов да, так и надо сделать, но для перечислимых типов компилятор сам превратит CASE/switch в хэш таблицу или в дерево поиска! Так как перечислимые типы используются очень часто, то и была придумана структурирующая конструкция CASE/swicth. Вот и получаем, что раз нет разницы, то зачем платить больше... |
| Re[11]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 21.10.04 09:41 | |
| Оценка: | -2 | |
| Здравствуйте, Sinclair, Вы писали: S>Здравствуйте, Сергей Губанов, Вы писали: S>А почему бы компилятору не привести в обоих случаях код к одинаковому виду? А потому что язык императивный. Когда программист пишет цепочку ELSIF то он именно требует от компьютера того чтобы сначала было проверено первое условие, если оно ложно, то после него надо проверить именно второе условие и т.д. ПОСЛЕДОВАТЕЛЬНО по цепочке.
Проверка условия 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 rsdn | |
| Дата: | 21.10.04 10:16 | |
| Оценка: | +1 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>А потому что язык императивный. И что с того? СГ>Когда программист пишет цепочку ELSIF то он именно требует от компьютера того чтобы сначала было проверено первое условие, если оно ложно, то после него надо проверить именно второе условие и т.д. ПОСЛЕДОВАТЕЛЬНО по цепочке. Ну если расматривать сферического коня в вакууме то да. А если функцию вида
то здесь явно видно что интересующая нас часть машины не изменится и ни что не мешает компилятору этим воспользоваться. Болие того в данном случае не сложно определить что это чистая функция со всеми вытекающими. СГ>И как после этого не согласиться с утверждением, что большинство программистов малограмотны... Во-во... учите матчасть... А также пятый пункт обязательных правил 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>то здесь явно видно что интересующая нас часть машины не изменится и ни что не мешает компилятору этим воспользоваться. Болие того в данном случае не сложно определить что это чистая функция со всеми вытекающими. Когда у нас кодец вида:
То компилер это не прооптимизирует. А встроенный свитч по типам наверное бы смог. Так что это фича весьма полезная в некоторых случаях. Например какойнить протокол обмена из 5х-10и сообщений. Когда делать хеш будет в лом. if — будет криво, а встроенный свитч по типам весьма бы подошел. |
| Re[16]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 21.10.04 10:37 | |
| Оценка: | -2 ![]() | |
| Здравствуйте, Sinclair, Вы писали: СГ>>А вот шаблонов нет, то есть шаблоны не увеличивают возможностей программы. S>Вот это вообще бред. Все возможности программы были внятно описаны еще до второй мировой войны. Ты с тезисом Черча знаком? Так вот никакие техники программирования, известные на данный момент, ничего не добавляют к понятию вычислимости, введенному сто лет назад. Я и говорю — не увеличивают! А Вы в ответ — "бред, хотя, впрочем, ничто не увеличивает...". И как Вас понимать? Вы согласны с тем, что не увеличивают, и одновременно говорите, что это бред! Вот, например, циклы — возможности программы увеличивают. Уберите из императивного языка программирования все конструкции циклов — получите инвалида. Процедуры увеличивают возможности программы — уберите из языка программирования процедуры, и лишитесь рекурсии. Уберите из языка программирования указатели (ссылки), и Вы лишитесь динамических структур данных. Уберите из языка программирования процедурные переменные (указатели на процедуры) и Вы лишитесь того что называется (динамическим) полиморфизмом. А что далеко за примерами ходить — уберите из императивного языка программирования вообще все переменные, оставьте только константы, будет не язык, а не поймешь что. А вот шаблоны, что их в язык добавь, что их от туда удали — ничего не изменится, от них только программеру мешьше по клаве ботать. Что они в языке есть, что их нет, мощность языка от этого не меняется. От этого меняется отношение программиста к языку. |
| Re[16]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 21.10.04 10:42 | |
| Оценка: | -3 | |
| Здравствуйте, prVovik, Вы писали: V>Ну а какие дополнительные возможности предоставляет команда call? Что мешает руками запихать адрес возврата в стек и сделать jmp? То есть нет никаких дополнительных возможностей. V> Вы из своего любимого языка программирования мысленно удалите такое понятие как процедуры и подумайте что от этого изменится. А потом, верните их назад, и мысленно удалите шаблоны. От удаления/добавления шаблонов мощность языка не меняется, в отличие от удаления/добавления процедур. Подробнее там: http://www.rsdn.ru/Forum/Message.aspx?mid=862197&only=1 Автор: Сергей Губанов Дата: 21.10.04 |
| Re[17]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Курилка | http://kirya.narod.ru/ |
| Дата: | 21.10.04 10:44 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Вот, например, циклы — возможности программы увеличивают. Уберите из императивного языка программирования все конструкции циклов — получите инвалида. Процедуры увеличивают возможности программы — уберите из языка программирования процедуры, и лишитесь рекурсии. Уберите из языка программирования указатели (ссылки), и Вы лишитесь динамических структур данных. Уберите из языка программирования процедурные переменные (указатели на процедуры) и Вы лишитесь того что называется (динамическим) полиморфизмом. А что далеко за примерами ходить — уберите из императивного языка программирования вообще все переменные, оставьте только константы, будет не язык, а не поймешь что. А вот шаблоны, что их в язык добавь, что их от туда удали — ничего не изменится, от них только программеру мешьше по клаве ботать. Что они в языке есть, что их нет, мощность языка от этого не меняется. От этого меняется отношение программиста к языку. Для тебя это ничего не меняется (может быть инвалид не язык, а человек его использующий? Ну про стат. полиморфизм в ФЯ я вообще молчу — там без этого вообще делать нечего. |
| Re[17]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Курилка | http://kirya.narod.ru/ |
| Дата: | 21.10.04 10:46 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Здравствуйте, prVovik, Вы писали: V>>Ну а какие дополнительные возможности предоставляет команда call? Что мешает руками запихать адрес возврата в стек и сделать jmp? То есть нет никаких дополнительных возможностей. V>> СГ>Вы из своего любимого языка программирования мысленно удалите такое понятие как процедуры и подумайте что от этого изменится. А потом, верните их назад, и мысленно удалите шаблоны. От удаления/добавления шаблонов мощность языка не меняется, в отличие от удаления/добавления процедур. Это твоё мнение, а не общепризнанный факт, шаблоны — вещь очень мощная и полезная с т.зр. абстракции типов, хотя может быть тебе только процедур достаточно, тогда сорри |
| Re[14]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | eugals | http://inffront.com/ |
| Дата: | 21.10.04 10:48 | |
| Оценка: | 1 (1) +1 | |
| Здравствуйте, Kluev, Вы писали: K>Когда у нас кодец вида: K>
K>То компилер это не прооптимизирует. А встроенный свитч по типам наверное бы смог. Может и смог бы. Но врял ли в Обероне — там (со слов СГ) все модули допускают линковку на рантайме, следовательно, на этапе разбора конструкции WITH, компилер не имеет права делать однозначные утверждения об иерархической принадлежности используемых в коде внешних классов. ... << RSDN@Home 1.1.4 beta 2 >> |
| Re[17]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 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 |
| Re[15]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 21.10.04 12:59 |
| Здравствуйте, eugals, Вы писали: E>Может и смог бы. Но врял ли в Обероне — там (со слов СГ) все модули допускают линковку на рантайме, следовательно, на этапе разбора конструкции WITH, компилер не имеет права делать однозначные утверждения об иерархической принадлежности используемых в коде внешних классов. Не забывайте, что оберонистые модули — это не обычные DLL-ки. В них присутствует информация о типах. Например, в BlackBox, модуль программы физически представлен несколькими файлами
Для компиляции модуля импортирующего другие модули нужно иметь все соответствующие символьные файлы тех модулей. Так что вся информация о иерархии наследования компилятору доступна. odc — Oberon Document ocf — Oberon Compiled File |
| Re[18]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 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 | http://inffront.com/ |
| Дата: | 21.10.04 13:49 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Для компиляции модуля импортирующего другие модули нужно иметь все соответствующие символьные файлы тех модулей. Было бы странно, если бы нет. СГ> Так что вся информация о иерархии наследования компилятору доступна. Она ему доступна на момент компиляции. Но как он может быть уверен что она не изменится в дальнейшем? Допустим у меня есть модуль A, который экспортирует класс сA. Есть модуль B, с классом сB. Есть третий, клиентский, модуль, в котором написано:
Соответственно, если компилятор будет пытаться оптимизировать эту конструкцию, например строить хеш-таблицу, он может придти к тому, что изначально указанные выше проверки поменяются местами (так удобнее хеш вычислять окажется), то есть проверка на 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 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Вот, например, циклы — возможности программы увеличивают. Уберите из императивного языка программирования все конструкции циклов — получите инвалида. Процедуры увеличивают возможности программы — уберите из языка программирования процедуры, и лишитесь рекурсии. Уберите из языка программирования указатели (ссылки), и Вы лишитесь динамических структур данных. Уберите из языка программирования процедурные переменные (указатели на процедуры) и Вы лишитесь того что называется (динамическим) полиморфизмом. А что далеко за примерами ходить — уберите из императивного языка программирования вообще все переменные, оставьте только константы, будет не язык, а не поймешь что. А вот шаблоны, что их в язык добавь, что их от туда удали — ничего не изменится, от них только программеру мешьше по клаве ботать. Что они в языке есть, что их нет, мощность языка от этого не меняется. От этого меняется отношение программиста к языку. Не всё так просто. Говоря о языке мы всё-таки оцениваем язык как совокупность его возможностей. Выбрось одно или другое, и мы получим уже другой язык. С другой совокупностью фич и т.д. Согласен, что с "академической" точки зрения шаблоны, возможно, и не представляют особого интереса. А вот с практической — очень даже. Какой? А очень простой — уменьшить объёмы исходного кода, добавить надёжности за счёт статического полиморфизма и некоторым образом структурировать усилия по дальнейшему развитию программы. Поэтому твой пассаж насчёт "ничего не изменится" вызывает улыбку. ИМХО, Вирт сейчас нацелен несколько на иное — он подбирает минимальный набор конструкций языка. Правда, почему-то при этом его несёт совсем в другою сторону... ИМХО, 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 >> Objects to Objects mapping: emitmapper.codeplex.com | |
| Re[17]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Sinclair rsdn | http://www.parallels.com/automation/operations/ |
| Дата: | 22.10.04 06:44 | |
| Оценка: | 1 (1) +3 | |
| Re[18]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 22.10.04 08:16 | |
| Оценка: | -1 | |
| Здравствуйте, Sinclair, Вы писали: S>Ничего подобного. Вполне можно обойтись goto. Так убери еще и goto. Что изменилась мощность языка? То-то, а от шаблонов она не меняется. |
| Re[18]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 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://moikrug.ru/users/P628059486/ |
| Дата: | 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://moikrug.ru/users/P628059486/ |
| Дата: | 22.10.04 08:38 |
| Здравствуйте, Дарней, Вы писали: Д>можно сделать push нужного адреса, а потом ret Д>еще можно сделать mov ip, <address> — если не ошибаюсь Извини, в ЯВУ нет push и mov. А мы, вроде как ЯВУ рассматриваем. |
| Re[20]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 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:
Вернее здесь нужен расширенный паттерн 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 >> Objects to Objects mapping: emitmapper.codeplex.com | |
| Re[19]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | prVovik | |
| Дата: | 22.10.04 09:26 | |
| Оценка: | +1 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Здравствуйте, Sinclair, Вы писали: S>>Ничего подобного. Вполне можно обойтись goto. СГ>Так убери еще и goto. Что изменилась мощность языка? То-то, а от шаблонов она не меняется. Гы-гы. Ну а зачем тогда в том же паскале столько вариантов циклов: for, repeat, wile. Нафига они вообще нужны, мощность языка от них ведь не меняется? Короче, бейсик форева!
И ничего лишнего!!! ... << RSDN@Home 1.1.4 @@subversion >> Objects to Objects mapping: emitmapper.codeplex.com | |
| Re[22]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 22.10.04 09:26 |
| Здравствуйте, Дарней, Вы писали: Д>Здравствуйте, Сергей Губанов, Вы писали: СГ>>Извини, в ЯВУ нет push и mov. А мы, вроде как ЯВУ рассматриваем. Д>Значит, надо было просто не смущать народ некорректными определениями, а сказать просто: Д>В любом языке есть вещи, от которых можно отказаться. И есть те, от которых отказаться нельзя. Д>От шаблонов отказаться можно, за счет технологии copy-paste. От ООП как такового тоже, кстати А что есть ООП? В узком смысле, ООП-ом можно обозвать процедурные переменные. Процедурные переменные (или в терминологии Си/Си++ — указатели на функцию) добавляют мощности языку (динамический полиморфизм). Кстати в самом первом обероне виртуальных функций не было, полиморфизм достигался благодаря процедурным переменным, тем не менее язык являлся ОО языком. Что касается расширения типов (наследования), наверное, напрямую мощность языка от этого не увеличивается (хотя утверждать этого не буду), но зато это позволяет сохранить в языке строгую статическую типизацию одновременно как бы и нарушая ее в каком-то более высоком смысле... |
| Re[22]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 22.10.04 09:31 |
| Здравствуйте, Курилка, Вы писали: К> не можешь писать статически полиморфичные алгоритмы Да, не могу. Но, тем не менее, количество разных программ которые я могу написать с шаблонами или без шаблонов (используя copy-paste) одинаково. То есть мощность языка не меняется. Шаблоны — это средство стоящее выше языка (над ним, мета-язык). |
| Re[10]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 22.10.04 09:48 | |
| Оценка: | ![]() | |
| Здравствуйте, Sinclair, Вы писали: S>Ну, на самом деле это не все. Паскаль — неизмеримо круче плюсов потому, что S> S> := гораздо понятнее, чем = Для сишника это вообще какой-то абзац. Выглядит как автохреномент: x:=y это x=x:y S> ^. гораздо понятнее, чем -> Ну это фигня, в Си можно записать (*ptr). Правда, в С++ это не всегда проканает (благодаря перегрузке обоих операторов, * и -> ) S> строковые константы ограничиваются одинарными, а не двойными кавычками (в ДВА раза меньше штрихов!) Попробуйте вставить туда спецсимволы — тут же нарвётесь на некроссплатформенность, во-первых (а кто сказал, что LF в данной кодировке имеет значение 10?), и на уйму писанины, во-вторых. S> в If можно писать на одну пару скобок меньше А как же слово then ? +then -() итого два лишних символа, а ещё обязательные пробелы... S> S>Хотя, конечно, главное — все-таки то, что преподавание языка, где присваивание выполняется при помощи "=" означает выставить себя посмешищем. S>З.Ы. В самом популярном языке программирования для персоналок вообще оператор присваивания не отличается от оператора сравнения на равенство. Что не мешает миллионам людей осваивать его безо всяких Виртов. Дейкстра уже говорил нащщот самого популярного языка... Перекуём баги на фичи! |
| Re[23]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Дарней | |
| Дата: | 22.10.04 09:48 | |
| Оценка: | +1 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>А что есть ООП? В узком смысле, ООП-ом можно обозвать процедурные переменные. Процедурные переменные (или в терминологии Си/Си++ — указатели на функцию) добавляют мощности языку (динамический полиморфизм). Кстати в самом первом обероне виртуальных функций не было, полиморфизм достигался благодаря процедурным переменным, тем не менее язык являлся ОО языком. Что касается расширения типов (наследования), наверное, напрямую мощность языка от этого не увеличивается (хотя утверждать этого не буду), но зато это позволяет сохранить в языке строгую статическую типизацию одновременно как бы и нарушая ее в каком-то более высоком смысле... Указатели на функции тоже не являются абсолютно необходимыми. Их при желании можно заменить на большой такой switch, который в зависимости от полученного числа будет вызывать разные функции. Значит, они тоже не добавляют языку "мощности"? То же самое касается и наследования. С помощью copy-paste и такой-то матери без него тоже можно прекрасно обойтись Всех излечит, исцелит | добрый Ctrl+Alt+Delete |
| Re[4]: Где собака зарыта??? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 22.10.04 10:04 |
| Здравствуйте, Евгений Коробко, Вы писали: ЕК>Да вы что! Это же замечательная вещь. Можно работать с неименованной переменной без копирования в локальную переменную. Это и быстро (х.з. сможет компилятор ли соптимизировать лишее копирование), и красиво — не загромождаем код лишними переменными. А вот нефиг копировать. Заводишь именованную ссылку на временный объект и наслаждаешься.
Заметьте, цикл for — с выделенными предикатом проверки и выражением итерирования. А не while, где это итерирование засунуто бог весть куда (что, кстати, не только читаемость ухудшает, но и даёт возможность для ошибок)
На паскале специально не написал — синтаксис более громоздкий. Но идея и так видна. Перекуём баги на фичи! |
| Re[23]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Курилка | http://kirya.narod.ru/ |
| Дата: | 22.10.04 10:10 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Здравствуйте, Курилка, Вы писали: К>> не можешь писать статически полиморфичные алгоритмы СГ>Да, не могу. Но, тем не менее, количество разных программ которые я могу написать с шаблонами или без шаблонов (используя copy-paste) одинаково. То есть мощность языка не меняется. Шаблоны — это средство стоящее выше языка (над ним, мета-язык). Тебе рядом приводили, что ООП тоже вполне может быть реализовано копипастом, так что количество тоже будет одинаковым? Вон если взять ассемблер, то на нём тоже можно получить такое же число программ, значит ассемблер такой же мощности, что и твой оберон? |
| Re[20]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 22.10.04 10:16 |
| Здравствуйте, Kh_Oleg, Вы писали: K_O>Я давно не пользовался MathLab, поэтому могу ошибаться, однако, насколько я помню данный продукт является специализированной системой для обработки математических выражений: взятие интегралов в аналитическом виде, решение огромных СЛАУ, решение дифференциальных уравнений больших порядков, вычисление пределов и проч., т.е. то, что математик (физик, химик, ученый или инженер другой специальности) вычислит и сам на бумажке, но у него на это уйдет много времени. Цель данного продукта — сэкономить время на решении трудоемких математических задач. Отсюда — иные средства, иной язык более удобный для математика, нежели для программиста, иные особенности. Математику достаточно знать, что вот это — матрица, с такими-то значениями, и требуемая операция над ней должна быть выполнена за относительно приемлемое время. А для ряда задач время выполнения вообще роли не играет — лишь бы посчиталось. K_O>Тогда как мне, как программисту важно знать, как эта матрица представлена в памяти, какой тип данный у ее элементов, какими конкретно значениями она проинициализирована (и от этого тоже может зависеть алгоритм вычислений), как быстро над ней будет выполнена требуемая операция, что я смогу изменить, если время вычислений перестанет меня устраивать. Пример, о котором я говорю, большинство требуемой информации от меня скрывает. K_O>Так что твой пример неудачный, с языками программирования общего назначения имеет мало общего. Просто ты не лазил в тексты программ на матлабе. Это нормальный скриптовый язык, только встроенные типы у него — скаляры, векторы и матрицы. Кстати, вся эта муть с огромными СЛАУ, интегрированием и т.п. — написана ручками на матлабовском скрипте. Внутри библиотек — с лёгкостью применяется императивный подход. Что, разумеется, требует от разработчика как математического образования, так и программистского. Перекуём баги на фичи! |
| Re[5]: Где собака зарыта??? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 22.10.04 10:25 |
| Здравствуйте, Кодт, Вы писали: К>Заметьте, цикл for — с выделенными предикатом проверки и выражением итерирования. А не while, где это итерирование засунуто бог весть куда (что, кстати, не только читаемость ухудшает, но и даёт возможность для ошибок)
К>На паскале специально не написал — синтаксис более громоздкий. Но идея и так видна. Однако.... А без continue слабо?
Логическое выражение вычисляется слева на право, если ~x() ложно, то значение y() не вычисляется. |
| Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Sergey J. A. | |
| Дата: | 22.10.04 10:38 |
| Здравствуйте, AVM, Вы писали: AVM>А на кой тебе надо логировать действия процессора ? AVM>У тебя исходники есть, процессор есть, тебе надо залогировать, только общий ход выполнения программы, AVM>что бы потом при разборе ты мог востроизвести ситуацию на Земле. Если ошиблись при вводе программы, то исходники не помогут Я — свихнувшееся сознание Джо. |
| Re[8]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 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 | http://inffront.com/ |
| Дата: | 22.10.04 10:48 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Однако.... А без continue слабо? Канешна слабо! Это же Кодт, он на RSDN известный слабак. Вот, к примеру, хоть здесь посмотри: Топ100 ... << RSDN@Home 1.1.4 beta 2 >> |
| Re[17]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 22.10.04 10:55 | |
| Оценка: | +2 | |
| Здравствуйте, Сергей Губанов, Вы писали: V>>Ну а какие дополнительные возможности предоставляет команда call? Что мешает руками запихать адрес возврата в стек и сделать jmp? То есть нет никаких дополнительных возможностей. СГ>Вы из своего любимого языка программирования мысленно удалите такое понятие как процедуры и подумайте что от этого изменится. А потом, верните их назад, и мысленно удалите шаблоны. От удаления/добавления шаблонов мощность языка не меняется, в отличие от удаления/добавления процедур. Это ты так думаешь, потому что с шаблонами мало имел дела. Давай мы выкинем из твоего любимого Оберона всё то, что туда насыпано сверх Паскаля. Тоже мощность не изменится, разве что кодить придётся раз в пять больше, да за чистотой рук следить. СГ>http://www.rsdn.ru/Forum/Message.aspx?mid=862197&only=1 Автор: Сергей Губанов Дата: 21.10.04 "Уберите переменные, оставьте константы"... Получим нормальный декларативный язык. Да, приёмы программирования на ФЯ/ЛЯ существенно отличаются от императивных. Но это не значит, что они ущербны. Я уж про Форт молчу... Перекуём баги на фичи! |
| Re[19]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 22.10.04 10:59 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Можно ли эту фразу понимать в том смысле, что Вы держитесь двумя руками за Си++, не смотря на тщательно раскиданные в нем ровным слоем грабли, только потому, что в остальных языках (ну, если не считать Аду) нет шаблонов? Кстати, если из Ады выкинуть шаблоны, то министерство обороны США отправит такого пионера "к первоисточнику". И правильно сделают, потому что шаблоны там сделаны не для красоты, а для критического увеличения надёжности. Перекуём баги на фичи! |
| Re[23]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 22.10.04 11:06 | |
| Оценка: | 3 (1) +3 | |
| Здравствуйте, Сергей Губанов, Вы писали много бреда: Ни один из современных языков не превзошол машину Тьюрига. Те любую программу написаную на любом из современных языков можно перевести в эквивалентную программу для машины Тьюринга. Машина Тьюринга это: Бесконечная в обе стороны лента разбитая на ячейки памяти в которые можно записать что угодно. На ленте есть корретка у которой есть состояние и она может посмотреть что находиться в текущей ячейке, записать что-то в текущею ячейку, изменить свое состояние или сдвинуться на одну позицию в право или в лево. ... << RSDN@Home 1.1.4 rev. 185 >> Пусть это будет просто: | просто, как только можно, но не проще. (C) А. Эйнштейн |
| Re[21]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 22.10.04 11:20 | |
| Оценка: | ![]() | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Формального определения не дам. Дам интуитивное. Мощностью ЯВУ я называю количество вариантов разных программ, которые на нем можно написать. Мощность множества всех конечных цепочек из конечного алфавита — алеф-0. Поэтому в ТМ-трактовке все языки программирования имеют одинаковую мощность (кроме специально выведенных ублюдков, в которых длина программы жёстко ограничена). А мощность множества вообще-всех программ — алеф-2, поскольку программа — это функция, у которой область определения/результатов имеет мощность алеф-1 (бесконечные цепочки конечного алфавита). Но средствами формальных языков всё это множество не покроешь. СГ>Например, интуитивно понятно, что если убрать из ЯВУ указатели, ссылки и оператор NEW, то на таком ЯВУ нельзя будет написать ни одной программы работающей с динамическими структурами данных, то есть размерность пространства всевозможных программ, которые можно написать на таком ЯВУ уменьшиться. Я употребляю слово "мощность", чтобы обозвать, хм, эту штуковину. Нет, можно, только гораздо мучительнее, чем на тех языках, где это входит в синтаксис. "Женская интуиция — поразительное чувство, дающее женщине уверенность в своей правоте вне зависимости от того, права она или не права". (дамы, не обижайтесь... просто к слову пришлось) Перекуём баги на фичи! |
| Re[9]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 22.10.04 11:27 |
| СГ>>Ни что не мешает делать аналогичную оптимизацию для WITH по сравнению с цепочкой dynamic_cast-ов. К>Мешает, и ещё как мешает. К>Если в спецификации не прописано явно, что with всегда выбирает most derived ветку, то порядок проверок становится существенным. К>В этом отличие от case: целочисленная переменная не может быть равна нескольким разным ключевым значениям, а полиморфный объект — может принадлежать разным классам одновременно. Ну и разумеется, в случае множественного наследования никакое most derived не спасёт в принципе. Перекуём баги на фичи! |
| Re[24]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 22.10.04 11:27 |
| Здравствуйте, Дарней, Вы писали: Д>Указатели на функции тоже не являются абсолютно необходимыми. Их при желании можно заменить на большой такой switch, который в зависимости от полученного числа будет вызывать разные Ничего подобного! switch Вы напишете только для известных Вам функций (а зачем его тогда писать если они Вам и так известны), а для неизвестных функций Вы его не напишите! В этом весь прикол и состоит что процедурную переменную можно передать в чужой код и он сможет вызвать не известную ему процедуру. |
| Re[7]: Где собака зарыта??? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 22.10.04 11:40 |
| Здравствуйте, eugals, Вы писали: E>Здравствуйте, Сергей Губанов, Вы писали: СГ>>Однако.... А без continue слабо? E>Канешна слабо! Это же Кодт, он на RSDN известный слабак. E>Вот, к примеру, хоть здесь посмотри: Топ100 Ну, знаете, тогда я считаю что у меня развязаны руки. Пожалуйста: http://www.rsdn.ru/Forum/Message.aspx?mid=864257&only=1 Автор: Сергей Губанов Дата: 22.10.04 |
| Re[7]: Где собака зарыта??? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 22.10.04 11:40 | |
| Оценка: | +1 | |
| Здравствуйте, eugals, Вы писали: СГ>>Однако.... А без continue слабо? E>Канешна слабо! Это же Кодт, он на RSDN известный слабак. E>Вот, к примеру, хоть здесь посмотри: Топ100 Авторитетом давишь Без continue — это будет или иерархическое нагромождение if'ов, или добавление переменных stop и bypass.
преобразуется в
Вариант с if'ами — выглядит страшно.
Перекуём баги на фичи! |
| Re[25]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Дарней | |
| Дата: | 22.10.04 11:41 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Ничего подобного! switch Вы напишете только для известных Вам функций (а зачем его тогда писать если они Вам и так известны) А затем писать, чтобы эмулировать вызов функций по указателям при их отстутствии СГ>а для неизвестных функций Вы его не напишите! В этом весь прикол и состоит что процедурную переменную можно передать в чужой код и он сможет вызвать не известную ему процедуру. А мне этого и не надо. Нужно всего лишь соглашение о том, как именовать эту самую функцию-диспетчер. Чужой код вызовет моего диспетчера, передав ему полученное из моего кода значение — и таким образом вызовет неизвестную ему функцию Какие еще будут аргументы? От чего мы будем отказываться на этот раз? Так можно и правда до машины Тьюринга добраться Всех излечит, исцелит | добрый Ctrl+Alt+Delete |
| Re[8]: Где собака зарыта??? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 22.10.04 12:11 | |
| Оценка: | ![]() | |
Здравствуйте, Кодт, Вы писали:
О господи-ты боже мой, что за чудеса творятся на белом свете-то... Универсальная конструкция:
В том месте где нуже выход из цикла, там вставляем EXIT |
| Re[8]: Где собака зарыта??? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | eugals | http://inffront.com/ |
| Дата: | 22.10.04 12:33 |
| Здравствуйте, Кодт, Вы писали: К>Авторитетом давишь Никого я не давлю. Просто призываю соотносить уровень аргументов с уровнем собеседников. Очевидно ведь, что любой мало-мальски грамотный программист догадался бы заменить в том примере два ифа на один, с условием ИЛИ внутри. К чему эти мелкие придирки, никак не опровергающие основного сообщения... да ещё и "слабо" это... ... << RSDN@Home 1.1.4 beta 2 >> |
| Re[26]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 22.10.04 12:53 | |
| Оценка: | -1 | |
| Здравствуйте, Дарней, Вы писали: Д> ... Чужой код вызовет моего диспетчера ... Д> ... Какие еще будут аргументы? ... Да ровно теже самые. Ведь, чужой код может вызвать Ваш диспетчер, только если Вы сами передадите ему Ваш диспетчер (call-back функцию). А по условию задачи указателей на функции нет. Значит чужой код не знает откуда взять Ваш диспетчер и одновременно Вы не можете его ему передать.
Что есть "Диспетчер"? |
| Re[27]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Дарней | |
| Дата: | 22.10.04 13:06 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Да ровно теже самые. Ведь, чужой код может вызвать Ваш диспетчер, только если Вы сами передадите ему Ваш диспетчер (call-back функцию). А по условию задачи указателей на функции нет. Значит чужой код не знает откуда взять Ваш диспетчер и одновременно Вы не можете его ему передать. госсподи, ну здесь то чего непонятного? пишем например так. Это вот чей-то чужой код:
Так доступнее? Не знаю, как правильно записать аналог на Паскале или например Обероне Всех излечит, исцелит | добрый Ctrl+Alt+Delete |
| Re[28]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 22.10.04 15:18 |
| Здравствуйте, Дарней, Вы писали: Д>госсподи, ну здесь то чего непонятного? пишем например так. Д>Это вот чей-то чужой код:
Д>Так доступнее? Понимаетели, Вы привели случай, когда чужой модуль использует Ваш модуль: "импорт функций из моего модуля". А надо наоборот. Вы используете чей-то чужой УЖЕ написанный модуль и Вам надо в этот чужой уже написанный модуль как-то передать свою функцию обратного вызова (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 |
| Д>госсподи, ну здесь то чего непонятного? пишем например так. Д>Это вот чей-то чужой код: Д>
Д>Так доступнее? Не знаю, как правильно записать аналог на Паскале или например Обероне Из какого моего модуля? Мой модуль может быть ещё не написан во время написания библиотечной функции. Вы как-то упускаете из виду тот момент, что Оберон поддерживает компонентную парадигму... Программа на Обероне — не формируемый компилятором единый текст программы пр раскрытии всех define-ов. Здесь не может быть циклических ссылок между компонентами системы. Сергей и говорит Вам о том, что указатель на функцию — это "страховка" для одного модуля гарантированно вызывать функции, которые "ещё не написаны" (виртуальность). Всё на свете — суета сует... | |
| Re[20]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 22.10.04 22:11 | |
| Оценка: | +1 | |
| Курилка: > СГ>Так убери еще и goto. Что изменилась мощность языка? То-то, а от шаблонов она не меняется. > Объясни — чем ты меряешь мощность языка? Ваттметром? Если это кому-то, действительно, интересно, то хоть сколько-то строго "уровень" языка можно измерять, прибегнув к понятию функциональных единиц (function point). И, таки да, наличие generics и статического полиморфизма вообще и шаблонов в частности при такой трактовке "уровня" языка будут этот "уровень" поднимать. > Имхо, показателем мощности можно считать число затрачиваемых программером физических и умственных усилий для написания кода, остальное — демагогия, не более того. Это достаточно близкая к function point трактовка Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[10]: А если подумать? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 23.10.04 06:30 |
| Здравствуйте, Кодт, Вы писали: СГ>>>Ни что не мешает делать аналогичную оптимизацию для WITH по сравнению с цепочкой dynamic_cast-ов. К>>Мешает, и ещё как мешает. К>>Если в спецификации не прописано явно, что with всегда выбирает most derived ветку, то порядок проверок становится существенным. К>>В этом отличие от case: целочисленная переменная не может быть равна нескольким разным ключевым значениям, а полиморфный объект — может принадлежать разным классам одновременно. К>Ну и разумеется, в случае множественного наследования никакое most derived не спасёт в принципе. Давайте подумаем. У объекта есть скрытое поле — указатель на место в памяти, в котором хранится информация о типе объекта. Давайте для краткости обзовем этот указатель указателем на дескриптор типа. Что у нас есть в WITH? Там у нас есть N предложенных вариантов типов указателей на дескрипторы типов и один указатель на дескриптор типа испытуемого объекта. Первым шагом ищем точное равенство указателя на дескриптор типа с предложенными указателями. Ота операция в худшем случае отнимает O(Log(N)) времени. Если поиск не увенчался успехом, то надо повторить его для всех тех указателей на дескрипторы типов рассширениями которых является тип испытуемого объекта. Обозначим число предков типа испытуемого объекта символом H. В случае одиночного наследования H просто равно глубине иерархии расширения типа. И так, в наихудшем случае (т.е. когда ответ будет отрицательный), время необходимое для работы инструкции WITH определяется формулой В то время как цепочка if-dynamic_cast-else будет работать за время: где H в первой и второй формуле одинаковы (надо же проверить все варианты!) |
| Re: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 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) +3 | |
| Здравствуйте, Сергей Губанов, Вы писали: ГВ>>Интересное определение, хотя и глюкавое. ИМХО, разумеется. Опять же ИМХО, но определение "мощности" должно прямо или косвеннно включать в себя понятие "времени", просто чтобы не выбиваться из устоявшейся трактовки. СГ>Значит о мощности множества целых чисел или мощности континуума Вы не слышали? По Вашему слово мощность — это только dE/dt? Я использовал термин мощность в теоретико множественном смысле, а не в смысле термина мощность из физики. Хех. Вакуумживущий сфероконь в чистом виде! А известно ли тебе, что программы реализуются в ограниченное время (T), в ограниченном пространстве (V = Freq*RAM*HDD И вот в таком контексте (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 rsdn | www.k-press.ru/cs |
| Дата: | 24.10.04 00:07 | |
| Оценка: | 20 (1) +3 ![]() | |
| 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 rsdn | http://www.parallels.com/automation/operations/ |
| Дата: | 24.10.04 06:45 | |
| Оценка: | 3 (3) +2 | |
| Re[3]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 25.10.04 08:40 | |
| Оценка: | -1 | |
| Здравствуйте, VladD2, Вы писали: VD>...Указатели... Ну, вот, пожалуйста. Вами была написана такая гневная тирада и все из-за слова "указатель". У Вас просто есть жесткая ассоциация "указатель = адрес". Спрашивается откуда у Вас эта ассоциация, как не из языка Си/Си++? В оберонах указатели есть, а вот адресов нет, понимаете разницу? |
| Re[11]: А если подумать? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 25.10.04 09:15 |
| Здравствуйте, Сергей Губанов, Вы писали: К>>>Если в спецификации не прописано явно, что with всегда выбирает most derived ветку, то порядок проверок становится существенным. К>>>В этом отличие от case: целочисленная переменная не может быть равна нескольким разным ключевым значениям, а полиморфный объект — может принадлежать разным классам одновременно. К>>Ну и разумеется, в случае множественного наследования никакое most derived не спасёт в принципе. СГ>И так, в наихудшем случае (т.е. когда ответ будет отрицательный), время необходимое для работы инструкции WITH определяется формулой СГ> СГ>В то время как цепочка if-dynamic_cast-else будет работать за время: СГ> СГ>где H в первой и второй формуле одинаковы (надо же проверить все варианты!) Дело не во времени работы, а в устранении неоднозначностей. Если объект одновременно принадлежит нескольким иерархиям одновременно, то выбор между несколькими классами — дело произвольное.
Перекуём баги на фичи! |
| Re[20]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 25.10.04 09:32 |
| Здравствуйте, Sinclair, Вы писали: S>А мощность языка определяется только тем, насколько мало программисту нужно колотить по клавишам. Точка. Вся твоя философия про "необходимые" и "избыточные" конструкции абсолютно некомпетентна. Почитай классиков, посмотри на другие языки. Например, APL Перекуём баги на фичи! |
| Re[4]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 25.10.04 09:35 | |
| Оценка: | 2 (2) +3 ![]() | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Ну, вот, пожалуйста. Вами была написана такая гневная тирада и все из-за слова "указатель". У Вас просто есть жесткая ассоциация "указатель = адрес". Спрашивается откуда у Вас эта ассоциация, как не из языка Си/Си++? В оберонах указатели есть, а вот адресов нет, понимаете разницу? Отнюдь! В С++ есть указатели и ссылки, а адресов тоже нет Более того, некоторые указатели — это вообще не адреса, а бог знает что. Например, указатель на виртуальную функцию-член класса с виртуальным наследованием. Так что если у кого жёсткая ассоциация — так это у тебя: "С++ — адрес — хреново". Перекуём баги на фичи! |
| Re[12]: А если подумать? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 25.10.04 11:14 |
| Здравствуйте, Кодт, Вы писали: К>.. Если объект одновременно принадлежит нескольким иерархиям одновременно, то выбор между несколькими классами — дело произвольное. Правда Ваша, для множественного наследования оператора WITH быть не может, он существует только в случае одиночного наследования. |
| Re[5]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 25.10.04 11:23 |
| Здравствуйте, Кодт, Вы писали: К>Здравствуйте, Сергей Губанов, Вы писали: СГ>>Ну, вот, пожалуйста. Вами была написана такая гневная тирада и все из-за слова "указатель". У Вас просто есть жесткая ассоциация "указатель = адрес". Спрашивается откуда у Вас эта ассоциация, как не из языка Си/Си++? В оберонах указатели есть, а вот адресов нет, понимаете разницу? К>Отнюдь! В С++ есть указатели и ссылки, а адресов тоже нет Адресов значит нет. Может и адресной арифметики в Си/Си++ нет? А это что:
|
| Re[4]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 25.10.04 15:43 | |
| Оценка: | 3 (1) | |
| Re[5]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 25.10.04 15:43 |
| Здравствуйте, Кодт, Вы писали: К>Более того, некоторые указатели — это вообще не адреса, а бог знает что. Например, указатель на виртуальную функцию-член класса с виртуальным наследованием. Именно. И именно по этому, мне больше нравится идея делегата из Шарпа. Чистая и красивая абстракция. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[6]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | folk | |
| Дата: | 26.10.04 05:15 |
| Сергей Губанов: > > СГ>>Ну, вот, пожалуйста. Вами была написана такая гневная тирада и все из-за слова "указатель". У Вас просто есть жесткая ассоциация "указатель = адрес". Спрашивается откуда у Вас эта ассоциация, как не из языка Си/Си++? В оберонах указатели есть, а вот адресов нет, понимаете разницу? > > К>Отнюдь! В С++ есть указатели и ссылки, а адресов тоже нет > > Адресов значит нет. Может и адресной арифметики в Си/Си++ нет? Нет. Есть pointer arithmetic. > А это что: >
Условие будет ложным и катастрофа() не будет вызвана. К чему этот пример? Posted via RSDN NNTP Server 1.9 gamma На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн | |
| Re[5]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 26.10.04 07:29 | |
| Оценка: | -1 | |
| Здравствуйте, VladD2, Вы писали: VD>Указатели — это вредная (по крайней мере на стадии первичного обучения) идиома. Наоборот. Как показывает практика (info21), дети с легкостью пишут программы работающие с динамическими списками. Потому что это интуитивно понятно. А вот написание фортраноподобных алгоритмов — есть уже следующая ступень развития детского разума.
VD>Есть множество языков не использующих ее и при этом ни сколички не страдающих. Примеры все те же Ява, Шап, Питон. Да что Вы такое говорите! Без указателей невозможны динамические структуры данных. Теже списки, например. Все наоборот: в Java нет не указателей на объекты, а там нет самих объектных переменных как таковых, любая объектная переменная в Java это и есть УКАЗАТЕЛЬ на объект, а не САМ объект. VD>Если вам интересно, могу продемонстрировать как современные языки живут вообще без указателей. Вот, к примеру, обобщенный код быстрой сортировки и двоичного поиска на шарпе: Указатели нужны для работы с динамическими структурами (время исполнения); а обобщенный код — статичен (время компиляции). Ваш пример не относится к делу. |
| Re[6]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 26.10.04 07:31 |
| Здравствуйте, VladD2, Вы писали: VD>Здравствуйте, Кодт, Вы писали: К>>Более того, некоторые указатели — это вообще не адреса, а бог знает что. Например, указатель на виртуальную функцию-член класса с виртуальным наследованием. VD>Именно. И именно по этому, мне больше нравится идея делегата из Шарпа. Чистая и красивая абстракция. Которая называется — "процедурная переменная" и о которой я сто раз тут говорил. Если уж на то пошло, то Delphi вся на них построена... |
| Re[7]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 26.10.04 07:33 |
| Здравствуйте, folk, Вы писали: F>Условие будет ложным и катастрофа() не будет вызвана. К чему этот пример? К чему пример адресной арифметики? К тому чтобы показать ее наличие! |
| Re[5]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 26.10.04 07:44 |
| Здравствуйте, VladD2, Вы писали: VD>Указатели — это вредная (по крайней мере на стадии первичного обучения) идиома. Есть множество языков не использующих ее и при этом ни сколички не страдающих. Примеры все те же Ява, Шап, Питон. Тут появляется другая идиома, value/reference типы. То есть, передаваемые по значению (копируемые) и по ссылке (разделяемые). Она, конечно, более прозрачна для понимания — но тоже содержит ряд приколов (ошибкоопасностей): * нечаянный разрыв связи: модификация переменной не доходит до партнёра * нечаянное создание/сохранение связи: модификация, казалось бы, локальной копии уходит на сторону Перекуём баги на фичи! |
| Re[12]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!! | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Astaroth | http://livejournal.com/users/breqwas |
| Дата: | 26.10.04 15:30 |
| Здравствуйте, Dervish, Вы писали: D>Линковка не создаёт тормозов. Реально. Конечно, это зависит от проекта к проекту, но по моим субъективным ощущениям вряд ли линковка будет занимать более 10% от общего времени компиляции проекта. Это довольно быстрая и не накладная процедура. Главная проблема линковки — в том, что её нельзя пустить распределённо Скажем, проект распределённо компиляется за 5 минут, а потом 15 минут линкуется на твоей машине. Приятного мало. WinAmp играет: (умолк пока) http://livejournal.com/users/breqwas | |
| Re[7]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Astaroth | http://livejournal.com/users/breqwas |
| Дата: | 26.10.04 15:30 |
| Здравствуйте, WolfHound, Вы писали: WH>Но водить в язык конструкции которые практически не востребованы... Примерно это мне всегда хотелось сказать тому, кто придумывал Perl... WinAmp играет: (умолк пока) http://livejournal.com/users/breqwas | |
| Re[8]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Astaroth | http://livejournal.com/users/breqwas |
| Дата: | 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 rsdn | www.k-press.ru/cs |
| Дата: | 26.10.04 17:23 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Которая называется — "процедурная переменная" и о которой я сто раз тут говорил. Если уж на то пошло, то Delphi вся на них построена... Если уж на то пошло, то называетс она делегат, замыкание, клозюр, но не "процедурная перемнная". Дельфийский клозюр конечно похож, но по возможностям и чистоте абстракции он уступает. Похож он тем, что так же позволяет хранить ссылку на метод конкретного экземляра. А не похож, тем что: 1. Абстрагируется от реализации. 2. Позвляет комбинировать несколько ссылок в один объект. 3. Является полноценным типом (а стало быть и объектом). 4. Прозрачен. Например, делегаты могут с успехом передаваться чрез кграницы процессов и компьютеров и вызваться по сети. К тому же одно дело клозюр в Дельфи, а другое указатель на процедуру в Обероне. Против Дельфи я бы возражал меньше. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[6]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 26.10.04 17:23 |
| Здравствуйте, Сергей Губанов, Вы писали: VD>>Указатели — это вредная (по крайней мере на стадии первичного обучения) идиома. СГ>Наоборот. Агащасблин. Видмо именно по этому указатели выбидывают из всех современных языков. СГ> Как показывает практика (info21), дети с легкостью пишут программы работающие с динамическими списками. Потому что это интуитивно понятно. А вот написание фортраноподобных алгоритмов — есть уже следующая ступень развития детского разума. СГ>
Вот и сравни:
Или дженерик вариант (чтобы .... не писать):
Тут и объяснять нечего. СГ>Да что Вы такое говорите! Без указателей невозможны динамические структуры данных. Теже списки, например. Все наоборот: в Java нет не указателей на объекты, а там нет самих объектных переменных как таковых, любая объектная переменная в Java это и есть УКАЗАТЕЛЬ на объект, а не САМ объект. Нда. Первая половина каменного века. Про обстрагирование от реализации ничего не слышал? СГ>Указатели нужны для работы с динамическими структурами (время исполнения); а обобщенный код — статичен (время компиляции). Ваш пример не относится к делу. Указатели ненжны вообще! Это вредная инфомация. Это информация об внутреннем устройстве. Для сознания нужно понятие передача/хранение объекта по ссылки или по значению. Все! Остальное тараканы в голове. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[6]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 26.10.04 17:23 |
| Здравствуйте, Кодт, Вы писали: К>Тут появляется другая идиома, value/reference типы. То есть, передаваемые по значению (копируемые) и по ссылке (разделяемые). К>Она, конечно, более прозрачна для понимания Именно! К> — но тоже содержит ряд приколов (ошибкоопасностей): К>* нечаянный разрыв связи: модификация переменной не доходит до партнёра К>* нечаянное создание/сохранение связи: модификация, казалось бы, локальной копии уходит на сторону Как показывает практика эта идеома съедается на раз даже самыми не подготовленными, а об указателю ломают себе зубы очень многие. ЗЫ Убивает, не это. Убивает то что человек берущийся за обучение детей не вкурсе, что такое абстракция и идиома. Вот погляди: Re[5]: Мощность... Автор: Сергей Губанов Он серьзено считает, что ссылка и указатель это одно и то же. Мол кроме физической реализации ничего и нет.Дата: 26.10.04 ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[8]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 26.10.04 17:23 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>К чему пример адресной арифметики? К тому чтобы показать ее наличие! Ее вред. Но дело тут в другом. Указатили и ссылки это разные идеомы. Они по разному воспринимаются людьми. И порождают совершенно разное представление о мире. В идеоме указателей есть области памяти и адресная арифметика. В идеоме ссылок есть ссылочные и вэлью-типы. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[7]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 26.10.04 17:36 | |
| Оценка: | +2 -1 | |
| VladD2: > Он серьзено считает, что ссылка и указатель это одно и то же. И в некотором смысле он может оказаться правым Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[7]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 26.10.04 19:06 |
| Здравствуйте, VladD2, Вы писали: VD>Вот и сравни:
Переменная типа Element есть УКАЗАТЕЛЬ на размещенный в куче объект. Если объект не размещен, то эта переменная есть null. Обратите внимание: не объект равен null, а переменная типа Element равна null. Еслибы Element не был бы указетелем, то струтура Element в силу своего рекуррентного определения была бы бесконечного размера. |
| Re[9]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 26.10.04 19:27 |
| Здравствуйте, VladD2, Вы писали: VD>В идеоме указателей есть области памяти и адресная арифметика. В идеоме ссылок есть ссылочные и вэлью-типы. Чего это вдруг Вы перемешали указатели с адресами-то? Указатели — это одно, а адреса — это другое, ну а ссылки — это третье. Есть три независимых друг от друга понятия 1) Адрес и адресная арифметика. 2) Указатели и проверка на NIL. 3) Ссылки и автоматическое разыменование. Примеры: 1) Адрес:
a — адрес какой-то переменной "A" 2) Указатель:
p — указатель на объект TreeDesc. Он может быть равен NIL если объект не размещен в памяти. 3) Ссылка:
t — ссылка на объект TreeDesc. Она НЕ может быть равна NIL, ее собственное значение скрыто от программиста обращение к ней всегда приводит к автоматическому ее разыменованию. ПОВТОРЯЮ. Запомните! Есть ТРИ РАЗНЫХ НЕСМЕШИВАЕМЫХ ДРУГ С ДРУГОМ ПОНЯТИЯ 1) Адреса, 2) Указатели, 3) Ссылки! |
| Re[7]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 26.10.04 19:32 |
| Здравствуйте, VladD2, Вы писали: VD> Он серьзено считает, что ссылка и указатель это одно и то же. "Он" так не считает и не понимает с чего это вдруг Вы делаете такие заявления!!! http://www.rsdn.ru/Forum/Message.aspx?mid=870001&only=1 Автор: Сергей Губанов Дата: 26.10.04 |
| Re[8]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 26.10.04 20:42 |
| Здравствуйте, Павел Кузнецов, Вы писали: >> Он серьзено считает, что ссылка и указатель это одно и то же. ПК>И в некотором смысле он может оказаться правым Паша, не ты ли мне доказывал обратное в С++ где разница и правда не столь существенна? А вот Шарпе разница не просто существенна, а ябы сказал, принципиальна. Да еще и четко прописана в стандарте языка. ПК> Скажем, в том же Паскале указатели были ближе к ссылкам в Шарпе, чем к указателям в C++. Если я, конечно, еще не окончательно Паскаль забыл В Паскали уазатели были уаказателями. Понятие ссылчного типа появилось в дельфи, где оно мирно сосуществует с указателями до сих пор. И разница как ты понимаешь тут лежит отнюдь не в том что они мало похоже. Разрица во взгляде на жизнь. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[8]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 26.10.04 20:42 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Здравствуйте, VladD2, Вы писали: VD>>Вот и сравни: СГ>
СГ>Переменная типа Element есть УКАЗАТЕЛЬ на размещенный в куче объект. Да? Содись. Два. Итак дети открываем спецификацию C# 1.2 и читаем раздел 25.2:
Сюрприз! Еще раз повторю свою мысль, так как она до сих пор так и не была понята: В современных языках программирования не используется парадигма указателя. Вместо нее используется парадигма ссылочных- и влэлью-типов. Причем в том же Шарпе указатели оставлены в небезопасном режиме, вот только для повседневной работы они ненужны. И прежде чем учить чему-то других, нужно самому понять принципиальную разницу этих взглядов. СГ> Если объект не размещен, то эта переменная есть null. Обратите внимание: не объект равен null, а переменная типа Element равна null. Мне кажется тут кого-то другого нужно учить программированию. Я уже леть эдак 15 как умею это делать. Указатели и все что с ними связано я освоил где-то в начале 90-ых. Лучше зайди сюда http://msdn.microsoft.com/vcsharp/team/language/default.aspx скачай спецификацию того самого Шарпа и посторайся разобраться. Думаю это получится, то мам поймешь свою неправоту. Начать советую с раздела 11.2 (Reference types):
За тем продолжить с пункта 8.2 (Types):
СГ> Еслибы Element не был бы указетелем, то струтура Element в силу своего рекуррентного определения была бы бесконечного размера. По этму поводу могу только отослать вот сюда: http://en.wikipedia.org/wiki/Abstraction . Если как следует понять описанный там принцип, то не тнудно будет догадаться чем физическая реализация отличается от абстракции. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[10]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 26.10.04 21:26 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Чего это вдруг Вы перемешали указатели с адресами-то? Указатели — это одно, а адреса — это другое, ну а ссылки — это третье. О! Уже сдвижки появились. Все же значит ссылки это третье. Ну, хорошо хоть так. А то только что они были указателями. СГ>Есть три независимых друг от друга понятия СГ>1) Адрес и адресная арифметика. СГ>2) Указатели и проверка на NIL. СГ>3) Ссылки и автоматическое разыменование. А, ну, точно. У указателей никакой связи с адресной арифметикой. Ну, тут могу отослать к Википедии: http://en.wikipedia.org/wiki/Pointer Про Оберон там хорошо сказано:
СГ>Примеры: СГ>1) Адрес: СГ>
СГ>a — адрес какой-то переменной "A" А, ну, отношение ясно. Если С++ — то адрес. А если Оберон то указатель. Себя ты уже буедил. Уз если адрест, то как-то так:
СГ>3) Ссылка: СГ>
СГ>t — ссылка на объект TreeDesc. Она НЕ может быть равна NIL, ее собственное значение скрыто от программиста обращение к ней всегда приводит к автоматическому ее разыменованию. Понятно. Познаиня закончились на Обероне. Ладно немного их разовсьем C#:
Итого мы имеем возможность писать полноценные программы не прибегая к ненужным понятиям вроде указателей и темболее адресов. Ненужны всякие крышки, звездочки и другая хрень. А вот и указатели:
СГ>ПОВТОРЯЮ. Запомните! Есть ТРИ РАЗНЫХ НЕСМЕШИВАЕМЫХ ДРУГ С ДРУГОМ ПОНЯТИЯ 1) Адреса, 2) Указатели, 3) Ссылки! Моежт сам таки запонишь и не будшь потом рассказывать, что в Яве или Шарпе переменная — это указатель? ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[8]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 26.10.04 21:26 |
| Здравствуйте, Сергей Губанов, Вы писали: VD>> Он серьзено считает, что ссылка и указатель это одно и то же. СГ>"Он" так не считает и не понимает с чего это вдруг Вы делаете такие заявления!!! СГ>http://www.rsdn.ru/Forum/Message.aspx?mid=870001&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]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 26.10.04 21:29 | |
| Оценка: | 9 (2) | |
| VladD2: >>> Он серьзено считает, что ссылка и указатель это одно и то же. > ПК>И в некотором смысле он может оказаться правым > Паша, не ты ли мне доказывал обратное в С++ где разница и правда не столь существенна? А вот Шарпе разница не просто существенна, а ябы сказал, принципиальна. Да еще и четко прописана в стандарте языка. Дык, одно дело, когда говоришь о C++ или C# — там все понятно: в соответствующих стандартах есть соответствующие определения. А другое дело, когда идет разговор "вообще". В этом смысле я вполне могу понять Сергея, употребляющего термины несколько по-иному, чем это привычно мне или тебе. Без привязки к конкретным языкам и дополнительного доопределения терминов мне не кажется уместным тыкать собеседника в разницу ссылок и указателей, т.к. "в общем" смысле разницы между ними нет, пока нет четких определений, что конкретно вкладывается в каждый из терминов. > И разница как ты понимаешь тут лежит отнюдь не в том что они мало похоже. Разрица во взгляде на жизнь. Ну, с точки зрения C++ эта разница проявляется одним образом, с точки зрения C# — другим. А для Оберона, может, еще каким-то третим... Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[7]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 26.10.04 22:01 | |
| Оценка: | 29 (3) ![]() | |
| Здравствуйте, WolfHound, Вы писали: WH>Кстати объясни пожалуйста почему WH>
WH>В чем тайный смысл? А Вирт под прикрытием заботы о программисте на самом деле упрощает граматику языка. Такой подход идеален для LL(1)-парсеров. Если ты обратиш внимание, то в Паскале и Обероне все конструкции идеальны для LL(1)-парсинга. Любая конструкция распознается прямолинейно без анализа в глубь. Вирт считает, что это понятнее неподготовленному человеку. Хотя веловеку то понятно совсем иное. Он не простату ищет, а гармонию. Вот так вирт описывает список стэйтментов:
А вот так тоже самое описывают в С-подобных языках:
то есть значительно сложнее. Кстати, если допустить NullStatement, то можно и в случае Паскале-подомного варианта ставить ";" у последнего утверждения. Правда при этом их вообще везде можно будет лепить. В общем, в Паскале и других языках Вирта ";" разделяет утверждения, а не завершает их. Так что в принципе правльно было бы писать в твоем любимом стиле:
... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[10]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 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]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 26.10.04 22:07 |
| VladD2: > ПК>Ну, с точки зрения C++ эта разница проявляется одним образом, с точки зрения C# — другим. > > И тем не менее суть одна. С++-ная ссылка просто сильно огранична в виду отсуствия понятий ссылочного и влэью- типов. Скорее ограничена C#-вская, ввиду того, что не всяким типом можно оперировать по значению, и, если я не ошибаюсь, не всяким типом можно оперировать по ссылке > Акцент на указателе как типе. Дык, как ни крути, хоть указатель, хоть ссылка как тип все равно присутствуют. Разница только в том, явно или нет. Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[12]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 26.10.04 23:22 |
| Здравствуйте, Павел Кузнецов, Вы писали: ПК>Скорее ограничена C#-вская, ввиду того, что не всяким типом можно оперировать по значению, и, если я не ошибаюсь, не всяким типом можно оперировать по ссылке О! Я сморю задеты религиозные чувства. Извиняте батько. >> Акцент на указателе как типе. ПК>Дык, как ни крути, хоть указатель, хоть ссылка как тип все равно присутствуют. Разница только в том, явно или нет. Это очень большая разница! В одном случая ты обязан думать о ней. А в другом необязан. Те ограничения которые есть отловит сам компилятор. Для обучение — это ой как важно. Да и для работы тоже. Это как раз и есть то саме повышение уровня языка, позволяющее вместо того думать "как сделать", думать о том "что нужно сделать". ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[13]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 27.10.04 00:03 |
| VladD2: > ПК> Дык, как ни крути, хоть указатель, хоть ссылка как тип все равно присутствуют. Разница только в том, явно или нет. > Это очень большая разница! В одном случая ты обязан думать о ней. А в другом необязан. Те ограничения которые есть отловит сам компилятор. Для обучение — это ой как важно. Обязан ты думать о наличии ссылок в любом случае. Только в одном случае ты их видишь, а в другом — нет. Псевдокод 1 (тип определяет семантику "ссылочности", ссылки неявные):
Псевдокод 2 (семантику "ссылочности" определяет использование, ссылки явные):
Где у учеников будет больше вопросов относительно разницы в работе двух примеров? Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[14]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 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]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 27.10.04 00:56 | |
| Оценка: | +1 | |
| VladD2: > ПК>Где у учеников будет больше вопросов относительно разницы в работе двух примеров? > Ну, если первы вариант Шарп, то конечно во втором. Так как в первом будет только один вопрос: А почему компилятор написал что не может изменить строку так как она доступна тольк для чтения. Там нет Шарпа. Там псевдокод, отличающийся только обозначением ссылок. Естественно, предполагается, что оба примера работают, и делают одно и то же, а именно модифицируют s1 через s2. Мы ж не занимаемся ерундой типа "X vs. Y", а просто обсуждаем выдвинутый тобой тезис о том, что неявные ссылки проще для обучения. Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| 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]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 27.10.04 08:48 | |
| Оценка: | 1 (1) | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Переменная типа Element есть УКАЗАТЕЛЬ на размещенный в куче объект. Если объект не размещен, то эта переменная есть null. Обратите внимание: не объект равен null, а переменная типа Element равна null. Еслибы Element не был бы указетелем, то струтура Element в силу своего рекуррентного определения была бы бесконечного размера. Есть такая идиома, как ленивые вычисления. В ФЯ она развёрнута во времени, а в ссылочных типах — в пространстве. Казалось бы, вызов любой рекурсивной функции, использующей ветвление — это бесконечность
Но благодаря выборочной ленивости (в лиспе нужно соответствующим образом определять функции; в частности, таковыми являются if, cond, quote) мы не проваливаемся в выражение "до днища". Null — это дефолтное значение объекта. Если программа, развёртывающая тот же самый список во времени, написана не ногами, она обязательно остановится на проверке if(next==null). Перекуём баги на фичи! |
| Re[8]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 27.10.04 08:51 |
| Здравствуйте, Павел Кузнецов, Вы писали: ПК>И в некотором смысле он может оказаться правым Указатели С/С++ точно такие же, как в Паскале, а адресная арифметика — приятный бонус Перекуём баги на фичи! |
| Re[30]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 27.10.04 08:59 |
| Здравствуйте, Дарней, Вы писали: Д>Здравствуйте, Сергей Губанов, Вы писали: СГ>>Понимаетели, Вы привели случай, когда чужой модуль использует Ваш модуль: "импорт функций из моего модуля". А надо наоборот. Вы используете чей-то чужой УЖЕ написанный модуль и Вам надо в этот чужой уже написанный модуль как-то передать свою функцию обратного вызова (call-back function). Если в языке нет процедурных переменных (указателей на функцию), то сделать это Вы не сможете. Д>Совершенно очевидно, что если модуль УЖЕ написан и УЖЕ использует каки-то фичи моего модуля, то избавиться от этих фич не получится. Но это к НАШЕМУ вопросу не относится. Он был написан до того как Вы написали свой модуль и, значит, он о Вашем модуле ничего не знает, так понятно? Как ему использовать Ваш модуль если нет call back function? |
| Re[30]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 27.10.04 09:00 |
| Здравствуйте, Дарней, Вы писали: Д>Здравствуйте, WWL, Вы писали: WWL>>Здесь не может быть циклических ссылок между компонентами системы. WWL>>Сергей и говорит Вам о том, что указатель на функцию — это "страховка" для одного модуля гарантированно вызывать функции, которые "ещё не написаны" (виртуальность). Д>Никакие циклические ссылки здесь не нужны. Нужна всего лишь одна хорошо известная функция в каждом модуле. А откуда эта функция? Из какого модуля? |
| Re[11]: Ссылка vs Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 27.10.04 09:13 |
| Здравствуйте, VladD2, Вы писали: VD>Моежт сам таки запонишь и не будшь потом рассказывать, что в Яве или Шарпе переменная — это указатель? Ссылка отличается от указателя тем, что она совершенно прозрачна для программиста. Указатель можно проверить на NIL, а ссылку нельзя проверить на NIL, так как любое обращение к ссылке полностью равноценно обращению к самому объекту на который она ссылается. Вы просто используете термин "ссылка" обзывая им указатели в Java и в C#. Еще раз про ссылку:
Переменная типа MyRecord занимает много места в памяти, для того чтобы передать ее по быстрому в процедуру можно не копировать ее, а передать по ссылке |
| Re[9]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 27.10.04 09:29 | |
| Оценка: | -1 | |
Спор о терминологии.
В С# или в 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>В чем тайный смысл?
|
| Re[32]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 27.10.04 10:18 |
| Здравствуйте, Дарней, Вы писали: Д>Поясняю еще раз — для тех, кто в танке. Д>Рассмотрим на примере — COM, вариант с in-proc сервером. Когда нужно создать некий ком-объект, ОС загружает соответствующую DLL и вызывает у нее функцию DllGetClassObject, О, кстати, а давайте еще проще! Вот есть DLL в которой есть процедура. Что Вы делаете когда ее динамически загружаете? Как Вы вытаскиваете из DLL процедуру? Правильно, Вы вытаскиваете не саму процедуру, а лишь только получаете ее адрес. Вот Вам и процедурная переменная. То есть без процедурных переменных (указателей на функции), даже DLL динамически загрузить нельзя. |
| Re[33]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Дарней | |
| Дата: | 27.10.04 10:51 | |
| Оценка: | +1 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>О, кстати, а давайте еще проще! Вот есть DLL в которой есть процедура. Что Вы делаете когда ее динамически загружаете? Как Вы вытаскиваете из DLL процедуру? Правильно, Вы вытаскиваете не саму процедуру, а лишь только получаете ее адрес. Вот Вам и процедурная переменная. То есть без процедурных переменных (указателей на функции), даже DLL динамически загрузить нельзя. Если мы говорим про ЯВУ, то там это не является обязательным — указатели на функции могут быть скрыты где-то глубоко внутри реализации. Мы просто имеем некий оператор, который сам загружает DLL и получает из нее нужный для НЕГО указатель. А другой оператор использует тот самый указатель, чтобы вызвать функцию и через нее — какой-то метод в модуле. Именно так сделано в вышеупомянутом COM. Клиентскому коду знать что-либо о DllGetClassObject просто не нужно. Надеюсь, мне не нужно рассказывать — что такое отделение интерфейса от реализации и зачем это нужно? Всех излечит, исцелит | добрый Ctrl+Alt+Delete |
| Re[34]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 27.10.04 11:13 | |
| Оценка: | ![]() | |
| Здравствуйте, Дарней, Вы писали: Д>Если мы говорим про ЯВУ, то там это не является обязательным — указатели на функции могут быть скрыты где-то глубоко внутри реализации. Мы просто имеем некий оператор, который сам загружает DLL и получает из нее нужный для НЕГО указатель. А другой оператор использует тот самый указатель, чтобы вызвать функцию и через нее — какой-то метод в модуле. Д>Именно так сделано в вышеупомянутом COM. Клиентскому коду знать что-либо о DllGetClassObject просто не нужно. Ладно, пусть это было скрыто.... Теперь Вы можете вызывать любую процедуру из загруженной DLL. Но сама DLL не может вызывать Ваши процедуры. Вы ее можете, а она Ваши не может. Так вот с помощью процедурных переменных можно сделать так, чтобы и загруженная Вами DLL тоже могла вызывать Ваши процедуры. Чтоб симметрично было. |
| Re[9]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 27.10.04 11:21 |
| Здравствуйте, Кодт, Вы писали: К>Null — это дефолтное значение объекта. Точнее, это не значение объекта, а это значение переменной (указательного или ссылочного типа) которая может быть связана с объектом, а может быть не связана — то есть быть равной null. |
| Re[35]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 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://moikrug.ru/users/P628059486/ |
| Дата: | 27.10.04 13:11 |
| Здравствуйте, WolfHound, Вы писали: WH>Вот скажи мне ты с СОМ дело имел или только название слышал? Это имеет значение? |
| Re[36]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 27.10.04 13:18 |
| Здравствуйте, Дарней, Вы писали: Д>Здравствуйте, Сергей Губанов, Вы писали: СГ>>Теперь Вы можете вызывать любую процедуру из загруженной DLL. Но сама DLL не может вызывать Ваши процедуры. Вы ее можете, а она Ваши не может. Так вот с помощью процедурных переменных можно сделать так, чтобы и загруженная Вами DLL тоже могла вызывать Ваши процедуры. Чтоб симметрично было. Д>Если она тоже будет следовать принятым соглашениям, то сможет — никаких принципиальных проблем я здесь не вижу. Каким соглашениям? Ваша программа загрузила DLL-ку, а не DLL-ка загрузила Вашу программу. Д>С# тоже прекрасно обходится делегатами Почему только не надо говорить? Вы прям процедурных переменных, как буд-то бы боитесь.
|
| Re[9]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 27.10.04 14:47 |
| Кодт: > ПК> Скажем, в том же Паскале указатели были ближе к ссылкам в Шарпе, чем к указателям в C++. Если я, конечно, еще не окончательно Паскаль забыл > Указатели С/С++ точно такие же, как в Паскале, а адресная арифметика — приятный бонус А можно, в таком случае, сформулировать отличия между указателями в Паскале и ссылками в C#/Java, естественно, игнорируя сборку мусора, каковой в Паскале не было? Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[9]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Serginio1 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 27.10.04 14:53 |
| Здравствуйте, VladD2, Вы писали: VD>Еще раз повторю свою мысль, так как она до сих пор так и не была понята: VD>В современных языках программирования не используется парадигма указателя. Вместо нее используется парадигма ссылочных- и влэлью-типов. Причем в том же Шарпе указатели оставлены в небезопасном режиме, вот только для повседневной работы они ненужны. И прежде чем учить чему-то других, нужно самому понять принципиальную разницу этих взглядов. Это смотря у кого какая повседневная жизнь. Глядя на исходники классов Net там указатели кишат в огромных количествах. Правда для них и унсейв не указ. |
| Re[21]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | LaptevVV rsdn | http://vk.com/id59893040 |
| Дата: | 27.10.04 15:07 | |
| Оценка: | +1 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Здравствуйте, Курилка, Вы писали: К>>Объясни — чем ты меряешь мощность языка? Ваттметром? СГ>Формального определения не дам. Дам интуитивное. Мощностью ЯВУ я называю количество вариантов разных программ, которые на нем можно написать. Например, интуитивно понятно, что если убрать из ЯВУ указатели, ссылки и оператор NEW, то на таком ЯВУ нельзя будет написать ни одной программы работающей с динамическими структурами данных, то есть размерность пространства всевозможных программ, которые можно написать на таком ЯВУ уменьшиться. Я употребляю слово "мощность", чтобы обозвать, хм, эту штуковину. Не, две ошибки 1. И без указателей прекрасно можно писать динамические структуры данных — есть даже книжка про такие на Яве. 2. Количество программ от изымания — не уменьшится. Один хрен — бесконечное количество, как правильных, так и неправильных. В этом смысле все языки эквивалентны — равномощны. Наши программисты — самые программистые программисты в мире! | |
| Re[10]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 27.10.04 15:18 | |
| Оценка: | +1 | |
| Здравствуйте, Павел Кузнецов, Вы писали: >> Указатели С/С++ точно такие же, как в Паскале, а адресная арифметика — приятный бонус ПК>А можно, в таком случае, сформулировать отличия между указателями в Паскале и ссылками в C#/Java, естественно, игнорируя сборку мусора, каковой в Паскале не было? Э... "отличия те же, что и между указателями в Си и ссылками в C#|Java" Перекуём баги на фичи! |
| Re[37]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 27.10.04 16:28 |
| Здравствуйте, Сергей Губанов, Вы писали: WH>>Вот скажи мне ты с СОМ дело имел или только название слышал? СГ>Это имеет значение? А я бы спрашивал? ... << RSDN@Home 1.1.4 rev. 185 >> Пусть это будет просто: | просто, как только можно, но не проще. (C) А. Эйнштейн |
| Re[9]: А Вы хоть знаете что такое WITH? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Astaroth | http://livejournal.com/users/breqwas |
| Дата: | 27.10.04 17:48 |
| Здравствуйте, Зверёк Харьковский, Вы писали: A>>Примерно это мне всегда хотелось сказать тому, кто придумывал Perl... ЗХ>Не флейма ради, а самообразования для: например? ЗХ>(Еще раз: я не собираюсь спорить. Мне действительно интересно Ваше мнение.) Постфиксный if и unless. Эт как минимум WinAmp играет: 1979 — Наш дом http://livejournal.com/users/breqwas | |
| Re[11]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 27.10.04 18:45 |
| Кодт: >>> Указатели С/С++ точно такие же, как в Паскале, а адресная арифметика — приятный бонус > ПК> А можно, в таком случае, сформулировать отличия между указателями в Паскале и ссылками в C#/Java, естественно, игнорируя сборку мусора, каковой в Паскале не было? > Э... "отличия те же, что и между указателями в Си и ссылками в C#|Java" И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было? Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[12]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | rockandroll | |
| Дата: | 28.10.04 03:11 |
| Здравствуйте, Павел Кузнецов, Вы писали: ПК>Кодт: >>>> Указатели С/С++ точно такие же, как в Паскале, а адресная арифметика — приятный бонус >> ПК> А можно, в таком случае, сформулировать отличия между указателями в Паскале и ссылками в C#/Java, естественно, игнорируя сборку мусора, каковой в Паскале не было? >> Э... "отличия те же, что и между указателями в Си и ссылками в C#|Java" ПК>И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было? В паскале была адресная арифметика, но не в явном виде, а через приведения типа pointer к integer ... << RSDN@Home 1.1.4 >> |
| Re[10]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Sinclair rsdn | http://www.parallels.com/automation/operations/ |
| Дата: | 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]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 28.10.04 04:01 |
| rockandroll: >>> Э... "отличия те же, что и между указателями в Си и ссылками в C#|Java" > ПК> И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было? > В паскале была адресная арифметика, но не в явном виде, а через приведения типа pointer к integer Если я не ошибаюсь, это не Паскаль, а его расширения от фирмы Борланд aka Turbo-Pascal. Впрочем, настаивать не буду: точно уже не помню. Да и не важно это, т.к. не адресная это арифметика, а арифметика целых Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| 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://moikrug.ru/users/P628059486/ |
| Дата: | 28.10.04 08:23 |
| Здравствуйте, Дарней, Вы писали: Д>Я так понял — с COM ты никогда не работал. Да это как посмотреть. В Delphi, например, COM-интерфейсы интегрированы в сам язык, и так как я их постоянно использую (смотри, например, это: http://www.rsdn.ru/Forum/Message.aspx?mid=822951&only=1 Автор: S.Yu.Gubanov ), то вроде как с COM-ом я знаком. Но с другой стороны, я их использовал только в рамках одного приложения.... Дата: 24.09.04 СГ>>Почему только не надо говорить? Вы прям процедурных переменных, как буд-то бы боитесь. Д>Они плохи, как и любой указатель. Хотя начиналось все с того, что я сказал — указатель на функцию тоже не является необходимым для ЯВУ типом и при некотором желании без него можно обойтись. Прекрасным примером могут служить COM и .NET А указатель на функцию — это всего лишь одна из возможных реализаций процедурной переменной. COM-интерфейс — это другая из возможных реализаций. Делегаты — еще одна из возможных реализаций процедурной переменной. Теперь внимательно перечитаем сообщение http://www.rsdn.ru/Forum/Message.aspx?mid=863958&only=1 Автор: Дарней с которого началась наша дисскусия о процедурных переменных:Дата: 22.10.04
Ну и в чем, собственно, смысл дискуссии? switch-ем не заменишь, а COM интерфейс — это и есть (много)процедурная переменная. |
| Re[14]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 28.10.04 08:39 | |
| Оценка: | -2 | |
| Здравствуйте, Павел Кузнецов, Вы писали: ПК>rockandroll: >>>> Э... "отличия те же, что и между указателями в Си и ссылками в C#|Java" >> ПК> И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было? >> В паскале была адресная арифметика, но не в явном виде, а через приведения типа pointer к integer ПК>Если я не ошибаюсь, это не Паскаль, а его расширения от фирмы Борланд aka Turbo-Pascal. Впрочем, настаивать не буду: точно уже не помню. Да и не важно это, т.к. не адресная это арифметика, а арифметика целых Если разложить по полочкам отдельно 1) адрес 2) указатель (указатель это не адрес!) 3) ссылка то указатель отличается от ссылки тем, что указатель может быть связан с объектом, а может быть не связан с объектом, то есть быть равным NIL. В то время как ссылка всегда связана с объектом, не бывает ссылок не связанных с объектом. Именно поэтому операция проверки ссылки на NIL не имеет смысла — любое обращение к ссылке есть обращение к объекту. Ссылка прозрачна для программиста.
Однако, в языках С# и Java под ссылкой (refernce) и указателем (pointer) понимают совсем другое. В этих языках ссылкой называют то, что выше я назвал указателем, а указателем в них называют то, что выше я назвал адресом. Ссылок в вышеизложенном смысле в них нет. Предлагаю обсуждения перенести в отдельную ветку: http://www.rsdn.ru/Forum/Message.aspx?mid=870921&only=1 Автор: Сергей Губанов Дата: 27.10.04 |
| Re[22]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 28.10.04 08:43 | |
| Оценка: | -1 | |
| Здравствуйте, LaptevVV, Вы писали: LVV>1. И без указателей прекрасно можно писать динамические структуры данных — есть даже книжка про такие на Яве. Сколько раз повторять!!! Объектные переменные Java это не сами объекты (не value-type), а указатели на них (reference-type). http://www.rsdn.ru/Forum/Message.aspx?mid=870921&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&only=1 Автор: S.Yu.Gubanov ), то вроде как с COM-ом я знаком. Но с другой стороны, я их использовал только в рамках одного приложения.... Дата: 24.09.04 Вот я и вижу, что знаний о принципах его работы у тебя нет никаких. СГ>А указатель на функцию — это всего лишь одна из возможных реализаций процедурной переменной. COM-интерфейс — это другая из возможных реализаций. Делегаты — еще одна из возможных реализаций процедурной переменной. Чушь. Это совершенно разные вещи, хотя цель их применения действительно одна. СГ>Ну и в чем, собственно, смысл дискуссии? switch-ем не заменишь, а COM интерфейс — это и есть (много)процедурная переменная. Свитчем они могут заменены безо всяких проблем, ты просто не хочешь или не в состоянии это понять. Хотя, если брать исключительно абстрактное понимание, предложенный мной вариант тоже можно назвать в некотором роде процедурной переменной, хотя там и не используется указатель. Но можно подойти к вопросу и с другой стороны. Как насчет функторов? Как насчет декларативных языков, ФП и ЛП? Вероятно, их тоже не должно существовать, если там нет процедурных переменных? Ну так я тебя огорчу — они существуют и прекрасно себя чувствуют. Всех излечит, исцелит | добрый Ctrl+Alt+Delete |
| Re[12]: Ссылка vs Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 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 rsdn | www.k-press.ru/cs |
| Дата: | 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. Нда, и этот человек рассуждает о чужой компетенции! Боксинг был введен чтобы сгладить разницу между вэлью-типами и объектами. В Шарпе можно приводить встроенные типы, перечисления и структуры к object и обратно. Таким образом поддерживается полиморфизм для всех типов. Извратом, причем полнейшим, является наличие указателей в языке рассчитаном на сборку мусора. Попробуй на досуге повторить вот этот код, и сравни его с исходным:
... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[10]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 09:33 |
| Здравствуйте, Serginio1, Вы писали: S>Это смотря у кого какая повседневная жизнь. Глядя на исходники классов Net там указатели кишат в огромных количествах. S> Правда для них и унсейв не указ. Не кишат они там ни фига. Используются кое-где для оптимизации, и то бестолку, так как никакого толка на сегодня это не дает. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[16]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 09:33 | |
| Оценка: | +1 | |
| Здравствуйте, Павел Кузнецов, Вы писали: ПК>Там нет Шарпа. Там псевдокод, отличающийся только обозначением ссылок. Естественно, предполагается, что оба примера работают, и делают одно и то же, а именно модифицируют s1 через s2. Мы ж не занимаемся ерундой типа "X vs. Y", а просто обсуждаем выдвинутый тобой тезис о том, что неявные ссылки проще для обучения. Ты в очередной раз пытаешся поспорить о сферическом коне в вакуме и тем самым подменить тему разговора. Напомню, что в разговоре до сих пор не велось обсуждение явное задание ссылок vs. не явное. Разговор велся о указателях и ссылках. Разница между указателями и ссылками в первю очередь заключается в наличии явного разыменования, а стло быть резкого заграмождения кода. Что же касается примера, то выброси из него ссылку и ничего ровным счетом не изменится (твой же "абстрактный" пример базируется все же на С++ и Шаре как идеомах, а и там и там по большому счету имя массива есть указатель/ссылка на его начало в памяти (если уж опускаться на такой низкий уровень)). Так что пример твой мало чего демонстрирует. Нормальный прмер был бы на объектах:
и
Мне конечно прийтеся объяснить понятие ссылочного типа данных. Но тебе прийтется объяснять нмного больше. А самое печальное, что потом программисту прийдется постоянно трахаться с нагромождением всех этих указателей, ссылк и т.п., что не миноему усложнит создание программ и понизит их качество (безопасность и простоту). Собственно именно это мы и наблюдаем на практике. Хотя отдельные товарищи делают вид, что никаких проблем нет. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[40]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 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://moikrug.ru/users/P628059486/ |
| Дата: | 28.10.04 11:03 |
| Здравствуйте, VladD2, Вы писали: VD>Я просто использую терминалогию создателей языка, которая в свою очередь базируется на общепринятой терминалогии. Как же общепринятой?????? Заметь, что не только в оберонах, а еще и в Си/Си++ ссылкой называется совсем другое:
ref — нельзя проверить на NIL, так как любое обращение к ref ЭКВИВАЛЕНТНО обращению к "a". Ссылка — это еще одно символическое имя одной и той же переменной. |
| Re[11]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 28.10.04 11:07 |
| Здравствуйте, VladD2, Вы писали: VD>Здравствуйте, Сергей Губанов, Вы писали: СГ>>Спор о терминологии. VD>Так изучи ее. java.sun.com http://msdn.microsoft.com/vcsharp/team/language/default.aspx
|
| Re[14]: Ссылка vs Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 28.10.04 11:33 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>ref — нельзя проверить на NIL, так как любое обращение к ref ЭКВИВАЛЕНТНО обращению к "a". СГ>Ссылка — это еще одно символическое имя одной и той же переменной. ...Думаете вы. (© Один переводчик-синхронист с немецкого — когда в конце длинной ветвистой фразы услышал неожиданное kann nicht). Проверить ссылку на нулёвость можно: &ref == NULL Вот только в нормальных ситуациях это недостижимо. Чтобы получить нулевую ссылку, мы должны прибегнуть к хаку, основанному на неопределённом поведении — это, на выбор: * разыменовать нулевой указатель * узнать внутреннее представление ссылки и соответствующим образом зачистить область памяти, где она размещена То, что ссылка не есть ещё одно символическое имя — видно на примерах, где ссылка получает вполне конкретное хранилище. Например, член-данное ссылочного типа. Перекуём баги на фичи! |
| Re[11]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 28.10.04 11:50 | |
| Оценка: | ![]() | |
| Здравствуйте, VladD2, Вы писали: VD>Попробуй на досуге повторить вот этот код, и сравни его с исходным: VD>
Вот, решил задачу:
А хочешь я еще цифирки от 0 до 9 через запятую распечатаю? Вот, пожалуйста:
|
| Re[12]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Kluev | |
| Дата: | 28.10.04 12:37 |
| Здравствуйте, Сергей Губанов, Вы писали: VD>>Попробуй на досуге повторить вот этот код, и сравни его с исходным: VD>>
СГ>Вот, решил задачу: СГ>
СГ>А хочешь я еще цифирки от 0 до 9 через запятую распечатаю? Вот, пожалуйста: СГ>
Гы-Гы-Гы. А если вот так:
|
| Re[15]: Ссылка vs Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 28.10.04 12:37 |
| Здравствуйте, Кодт, Вы писали: К> Проверить ссылку на нулёвость можно: &ref == NULL Нет, нельзя. Проверьте, &ref — не даст Вам адреса ссылки, а даст Вам адрес переменной, на которую эта ссылка ссылается потому, что ЛЮБОЕ обращение к ссылке ЭКВИВАЛЕНТНО обращению к самой переменной. |
| Re[13]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 28.10.04 12:45 | |
| Оценка: | ![]() | |
| Здравствуйте, Kluev, Вы писали: K>Гы-Гы-Гы. А если вот так: K>
тогда так:
|
| Re[16]: Ссылка vs Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 28.10.04 12:58 |
| Здравствуйте, Сергей Губанов, Вы писали: К>> Проверить ссылку на нулёвость можно: &ref == NULL СГ>Нет, нельзя. СГ>Проверьте, &ref — не даст Вам адреса ссылки, а даст Вам адрес переменной, на которую эта ссылка ссылается потому, что ЛЮБОЕ обращение к ссылке ЭКВИВАЛЕНТНО обращению к самой переменной. Вот именно. Это и будет проверкой "значения" ссылки на нулёвость. А чтобы получить адрес, где ссылка размещена в памяти — для этого есть разнообразные хаки. Поскольку они связаны с неопределённым поведением, я не буду их разворачивать. Например, ссылка как член объединения. Наконец, в С++ есть такая штука, как типы с семантикой ссылки. Конечно, синтаксически они не полностью совместимы (например, не получится обращаться к членам объекта по такой ссылке), но выступать в роли lvalue-аргумента, выдавать адрес объекта можно. Наряду с этим, можно получить и собственный адрес. Далеко за примером ходить не надо. CComPtr<T> имеет семантику ссылки на T*. (Чтоб ему пусто было! Потому что это сильно отравляет жизнь в ряде других мест). Перекуём баги на фичи! |
| Re[14]: Ссылка vs Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 13:18 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Как же общепринятой?????? http://en.wikipedia.org/wiki/Reference СГ>Заметь, что не только в оберонах, а еще и в Си/Си++ ссылкой называется совсем другое: СГ>
СГ>ref — нельзя проверить на NIL, так как любое обращение к ref ЭКВИВАЛЕНТНО обращению к "a". СГ>Ссылка — это еще одно символическое имя одной и той же переменной. В Обероне ссылкой ничего не называют, так как нет их там. А в С++ ссылкой называют то что нужно. То что в С++ нельзя присвоить ей null_ptr — это просто особенности дизайна. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[12]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 13:18 | |
| Оценка: | ![]() | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>
В дев-нал такие ссылки. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[12]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 13:18 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Здравствуйте, VladD2, Вы писали: VD>>Попробуй на досуге повторить вот этот код, и сравни его с исходным: VD>>
СГ>Вот, решил задачу: СГ>
Решил, блин. Ты массивчик полиморфный создай. И выведи его значение в цикле. Хотя даже эта породия имеет объем кода больший чем оригинал. Причем чистый ручник. Да и с образовательной точки зрения полный ноль! ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[14]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 13:18 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>тогда так: СГ>
СГ>
Бред смвой кобылы. Уж извини за грубось. "{0}" — в дотнете это формат выводящий аргумент с индексом 0 из списка аргументов. Ну, и не показано как в этот загадочный ARRAY OF Writeable запихать объекты разных типов (от строенных до классов). Хотя уже невооруженным взглядом видно, что примитивизм на лицо. Кода больше, толку меньше. И этому уродству учить детей? ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[15]: Ссылка vs Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 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 rsdn | |
| Дата: | 28.10.04 14:15 | |
| Оценка: | ![]() | |
| Здравствуйте, VladD2, Вы писали: VD>Хотя уже невооруженным взглядом видно, что примитивизм на лицо. Кода больше, толку меньше. И этому уродству учить детей? Влад! Да как же ты не понимаешь?!? Ведь оберон это же идеальный язык программирования всех времен и народов, а Вирт величайший гуру принесший свет во тьму невежества промышленных программистов. А такие великие опостолы как Сергей Губанов помогают Вирту нести свет оберона в массы. ... << RSDN@Home 1.1.4 rev. 185 >> Пусть это будет просто: | просто, как только можно, но не проще. (C) А. Эйнштейн |
| Re[16]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 28.10.04 14:24 | |
| Оценка: | ![]() | |
| Здравствуйте, WolfHound, Вы писали: WH>А такие великие опостолы... Прости, ты имел в виду "апостолы" или "осто..." Перекуём баги на фичи! |
| Re[14]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 28.10.04 14:26 | |
| Оценка: | ![]() | |
| Здравствуйте, Schade, Вы писали: S>З.Ы. Написано под впечатлением от первого взгляда на среду BlackBox — убожество, застрявшее где-то в 1993 году. Хотите что-то современного, экстра-фрэшь, так сказать, то обратите внимание на 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 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Здравствуйте, Schade, Вы писали: S>>З.Ы. Написано под впечатлением от первого взгляда на среду BlackBox — убожество, застрявшее где-то в 1993 году. СГ> Раздают древний мусор нахаляву бедным российским школам в качестве подачки? |
| Re[16]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 28.10.04 14:40 |
| Здравствуйте, Курилка, Вы писали: К>Раздают древний мусор нахаляву бедным российским школам в качестве подачки? Есть такая идея. Не забывайте, что и компы в школах тоже не современные, хорошо если Celeron-Pentium-2 |
| Re[11]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Serginio1 | http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 |
| Дата: | 28.10.04 14:44 | |
| Оценка: | -1 | |
| Здравствуйте, VladD2, Вы писали: VD>Здравствуйте, Serginio1, Вы писали: S>>Это смотря у кого какая повседневная жизнь. Глядя на исходники классов Net там указатели кишат в огромных количествах. S>> Правда для них и унсейв не указ. VD>Не кишат они там ни фига. Используются кое-где для оптимизации, и то бестолку, так как никакого толка на сегодня это не дает. Без указателей на низком уровне ну никак. Другой вопрос, что создав классы без указателей легко можно обойтись. Но например работая со стримом использовать указатели очень привлекательно особенно работая со структурами валуе типов, Хотя можно извращаться http://www.rsdn.ru/Forum/Message.aspx?mid=859216&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
Звездочку видите? Цитата:
Что такое еxported items? Почему экспортед? Только потому, что взбрело Вирту в голову, что хедеры — бяка? И опять же, чем это легче в оьбяснении и понимании, чем
А сама среда Лучше уж старый добрый Турбо-Паскаль оставить. ... << RSDN@Home 1.1.4 beta 3 rev. 185>> ![]() |
| Re[17]: Ссылка vs Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 28.10.04 15:05 |
| Кодт: > Например, ссылка как член объединения. "Кодт мне друг, но истина дороже"
> Наконец, в С++ есть такая штука, как типы с семантикой ссылки. Конечно, синтаксически они не полностью совместимы (например, не получится обращаться к членам объекта по такой ссылке) Кстати, есть предложение разрешить перегрузку operator.() и operator.*(): http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1671.pdf Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[18]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 28.10.04 15:06 |
| Здравствуйте, Mamut, Вы писали: M>Что такое еxported items? Все что написано внутри модуля считается инкапсулированным в нем. Модуль является не только единицей компиляции и исполнения, но и единицей инкапсуляции (что правильно). Для того чтобы что-то из написанного можно было увидеть из других модулей это что-то надо как-то отметить, логично да? Вопрос как это синтаксически отметить так чтобы и видно сразу было и писать не много? Вот для этих отметок придумали использовать "*" и "-". Для переменных "-" означает доступ только для чтения, "*" означает полный доступ. Подробности в Langauge Report, а тут пример:
|
| Re[18]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Mamut | http://dmitriid.com/ |
| Дата: | 28.10.04 15:09 |
| Продолжу. Сам туториал вводит в заблуждение. Как указано в моем предыдущем сообщении, я создал модуль под названием MyHello. Как его запустить? Об этом в начале туториала ничего не сказано. Более того:
И это срабатывает!! Какого черта? У меня-то модуль называется MyHello. А как мне запустить MyHello? (Ладно, догадываюсь, написать MyHello.Do). Но, простите, для того, чтобы мне что-то запустить, мне в итоге надо открывать новое окно, писать в нем что-то, выделять, потом выполнять Dev->Execute? Увольте. А как мне сделать свою собственную рабочую програмку? Которая хотя бы в консоль что-либо выводила? Любой студент/ученик всегда захочет похвастаться результатом, принести ее домой или к другу. И если мне туториал мне на первых паре страниц не показал, как это сделать, зачем мне этот Оберон нужен? И это все надо обьяснять ученикам. И где простота? ... << RSDN@Home 1.1.4 beta 3 rev. 185>> ![]() |
| Re[18]: Ссылка vs Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 28.10.04 15:11 |
| Здравствуйте, Павел Кузнецов, Вы писали: ПК>
ПК>Кстати, есть предложение разрешить перегрузку operator.() и operator.*(): http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1671.pdf Да, эта фича будет, пожалуй, полезнее злощастного оператора &()... Перекуём баги на фичи! |
| Re[17]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 28.10.04 15:14 |
| VladD2: > Напомню, что в разговоре до сих пор не велось обсуждение явное задание ссылок vs. не явное.
> Разница между указателями и ссылками в первю очередь заключается в наличии явного разыменования, а стло быть резкого заграмождения кода. Таким образом, ты согласен с тем, что отличия ссылок в C#/Java от указателей в Паскале/С и т.п. за вычетом адресной арифметики исключительно синтаксические, а семантически это одно и то же? > Что же касается примера, то выброси из него ссылку и ничего ровным счетом не изменится <...> Изменится, т.к. без ссылки в языке с явным обозначением ссылок s1 при изменении s2 изменяться не будет. Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[15]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 28.10.04 15:19 |
| Дарней: > Указатель — это адрес некоторой области в памяти. Ссылка указывает не на участок памяти, а на объект. Ага. Теперь, пожалуйста, ту же самую линию рассуждений, но на примере managed указателей в .Net Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[18]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 28.10.04 15:20 | |
| Оценка: | +1 | |
| Здравствуйте, Mamut, Вы писали: M>
M> ...взбрело Вирту в голову, что хедеры — бяка? ... А Вы не сильно расстроитесь если узнаете что в Component Pascal есть хедеры? В среде BlackBox мышью выделите название модуля MyHello, после этого нажмите на правую кнопку мыши и в появившемся PopUp-меню выберите пункт Interface. Среда BlackBox покажет Вам хедер этого модуля. Для Вашего модуля он будет такой:
Хедеры в Component Pascal генерятся автоматом на основании меток видимости "*" и "-", так что вручную их писать излишне. Кстати, хедеры носят название символьных файлов. P. S. Добрый совет. В следующий раз, когда захотите порассуждать что там Вирту в голову взбрело или не взбрело, почитайте хотябы хелп. |
| Re[19]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Mamut | http://dmitriid.com/ |
| Дата: | 28.10.04 15:30 | |
| Оценка: | 2 (2) +2 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Здравствуйте, Mamut, Вы писали: M>>Что такое еxported items? СГ>Все что написано внутри модуля считается инкапсулированным в нем. Модуль является не только единицей компиляции и исполнения, но и единицей инкапсуляции (что правильно). Для того чтобы что-то из написанного можно было увидеть из других модулей это что-то надо как-то отметить, логично да? Стоп. Предположим я — ученик 7-9 класса. Моя реакция: "Чего?" Переведите с китайского. Что за инкапсуляция. Что за единица компиляции. Что значит увидеть из других модулей? СГ>Вопрос как это синтаксически отметить так чтобы и видно сразу было и писать не много? Вот для этих отметок придумали использовать "*" и "-". Для переменных "-" означает доступ только для чтения, "*" означает полный доступ. Для языка, в котором текста и так явно слишком много, это утверждение странно. Почему не пойти по минимизации дальше и не заменить begin end на {}? Или почему не заменить *- на exportable и readonly? Хуже бы от этого не стало. Налицо плохой дизайн языка. СГ>Подробности в Langauge Report, а тут пример: Опять же предположим я — ученик 7-9 класса. Зачем мне читать Language Report? СГ>
Для сравнения (гипотетически):
тоже криво, но зато сразу видно какая переменная чем является и не используются символы, знакомые всем, как знаки математических операторов. А если есть и грамотная раскраска синтаксиса в ИДЕ, то вообще красота. Единственная причина, по которой существуют извращения типа readonly exportable и exportable — это отказ от классов и полей private и public, которые являются намного интуитивнее, чем эти извращения. ... << RSDN@Home 1.1.4 beta 3 rev. 185>> ![]() |
| Re[19]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 28.10.04 15:36 | |
| Оценка: | ![]() | |
| Здравствуйте, Mamut, Вы писали: M>Продолжу. Вы уже задаете технические вопросы. Для этого есть специализированные форумы. Например этот: http://progz.ru/forum/viewforum.php?f=49&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://moikrug.ru/users/P628059486/ |
| Дата: | 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>> ![]() |
| 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 | |
| Оценка: | +1 | |
| Здравствуйте, Курилка, Вы писали: К>Здравствуйте, Сергей Губанов, Вы писали: СГ>>Здравствуйте, Mamut, Вы писали: M>>>Единственная причина, по которой существуют извращения типа readonly exportable и exportable — это отказ от классов и полей private и public, которые являются намного интуитивнее, чем эти извращения. СГ>>Повторяю. Единицей инкапсуляции является модуль. Все остальное следует из этого. К>Отстутствие полей private является следствием того, что "единицей инкапсуляции является модуль" К>Я хренею от обероновской логики, по мне дак женская ито намного понятней Вот я и говорю, в результате появляются извращения (а это именно извращения) вроде постфиксов — и * И этому человеку (Вирту) не нравятся = и == ... << RSDN@Home 1.1.4 beta 3 rev. 185>> ![]() |
| Re[19]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Mamut | http://dmitriid.com/ |
| Дата: | 28.10.04 15:51 |
| СГ>А Вы не сильно расстроитесь если узнаете что в Component Pascal есть хедеры? В среде BlackBox мышью выделите название модуля MyHello, после этого нажмите на правую кнопку мыши и в появившемся PopUp-меню выберите пункт Interface. Среда BlackBox покажет Вам хедер этого модуля. Для Вашего модуля он будет такой: СГ>
СГ>Хедеры в Component Pascal генерятся автоматом на основании меток видимости "*" и "-", так что вручную их писать излишне. СГ>Кстати, хедеры носят название символьных файлов. Ну я и не расстроился. Единственное, что они, получается, используются только Обероновской виртуальной машиной и никаой смысловой нагрузки не имеют СГ>P. S. СГ>Добрый совет. В следующий раз, когда захотите порассуждать что там Вирту в голову взбрело или не взбрело, почитайте хотябы хелп. Как раз читаю этот самый хелп. Организован он крайне неудобно. Кстати, а там есть хоть гле либо описание компонентов и их методов — что они делают, как вызываются и т.д. А то ... << RSDN@Home 1.1.4 beta 3 rev. 185>> ![]() |
| Re[23]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Mamut | http://dmitriid.com/ |
| Дата: | 28.10.04 15:57 |
| В догонку, совсем забыл. Предположим, мой друг написал модуль Tools, выполняющий какие-либо действия. Он принес его мне и говорит, что на, дарю. У меня в проекте уже есть свой модуль Tools. Что мне делать? В С++ и С# это решается с помощью namespace'ов. Довольно логичная система, легко обьясняется, легко используется. Как это решается в Обероне? ... << RSDN@Home 1.1.4 beta 3 rev. 185>> ![]() |
| Re[20]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Mamut | http://dmitriid.com/ |
| Дата: | 28.10.04 16:02 |
| M>Как раз читаю этот самый хелп. Организован он крайне неудобно. Кстати, а там есть хоть гле либо описание компонентов и их методов — что они делают, как вызываются и т.д. А то Уже нашел... ... << RSDN@Home 1.1.4 beta 3 rev. 185>> ![]() |
| Re[21]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 28.10.04 16:03 | |
| Оценка: | +1 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Повторяю. Единицей инкапсуляции является модуль. Все остальное следует из этого. И это должны запомнить студенты/школьники? После этого нападки на java о том, что в ней нет "обычных процедур", а только загадочные статические методы классов — мол, человеку сразу, сходу подсовывают лишние предметы для понимания... Да ну нафиг! Лучше выучиться на обычном паскале (ucsd, turbo3-5, ну максимум 6 с его turbo vision) и потом осваивать какой-нибудь промышленный язык, чем с самого начала голову ломать непонятно обо что и непонятно зачем. Перекуём баги на фичи! |
| Re[23]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 28.10.04 16:04 | |
| Оценка: | ![]() | |
| Здравствуйте, Mamut, Вы писали: M>Вот я и говорю, в результате появляются извращения (а это именно извращения) вроде постфиксов — и * M>И этому человеку (Вирту) не нравятся = и == "И эти люди запрещают мне ковырять в носу!" Перекуём баги на фичи! |
| Re[17]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 28.10.04 16:51 |
| Здравствуйте, Кодт, Вы писали: К>Прости, ты имел в виду "апостолы" или "осто..." А это каждый решит сам... ... << RSDN@Home 1.1.4 rev. 185 >> Пусть это будет просто: | просто, как только можно, но не проще. (C) А. Эйнштейн |
| Re[19]: Ссылка vs Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 28.10.04 18:54 | |
| Оценка: | 20 (1) | |
| Кодт: > ПК>
>
Не, это не неопределенное поведение, это невалидная програма, для которой стандарт требует диагностику ("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 Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[12]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 28.10.04 19:07 |
| Serginio1: > Просто в Net нельзя напрополую использовать указатели из-за GC. В .Net managed указатели есть. Их нет в C#. Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[13]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | WolfHound rsdn | |
| Дата: | 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 >> Objects to Objects mapping: emitmapper.codeplex.com | |
| Re[16]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 19:37 |
| Здравствуйте, WolfHound, Вы писали: WH>Влад! Да как же ты не понимаешь?!? Ведь оберон это же идеальный язык программирования всех времен и народов, а Вирт величайший гуру принесший свет во тьму невежества промышленных программистов. А такие великие опостолы как Сергей Губанов помогают Вирту нести свет оберона в массы. Ну, Вирт мужик заслуженный. Одного его паскаля более чем достаточно чтобы его уважать. Вот только отстал он от жизни. Не молд уже все же. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[17]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 19:37 |
| Здравствуйте, Кодт, Вы писали: К>Здравствуйте, WolfHound, Вы писали: WH>>А такие великие опостолы... К>Прости, ты имел в виду "апостолы" или "осто..." опе... ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[16]: Ссылка vs Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 19:58 |
| Здравствуйте, Сергей Губанов, Вы писали: VD>>В Обероне ссылкой ничего не называют, так как нет их там. СГ>А давайте поспорим что есть? Спорь. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[14]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 28.10.04 20:00 |
| WolfHound: > ПК> В .Net managed указатели есть. Их нет в C#. > Их в C# есть просто до них можно только через unsafe добраться. То уже, если я не ошибаюсь, unmanaged указатели, которые, в отличие от managed, действительно, "нельзя напрополую использовать из-за GC" Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[34]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:07 | |
| Оценка: | ![]() | |
| Здравствуйте, Дарней, Вы писали: Д>Надеюсь, мне не нужно рассказывать — что такое отделение интерфейса от реализации и зачем это нужно? Ошибашся. Именно этому, уважаемого учителя, и забыли обучить в школе. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[37]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:07 |
| Здравствуйте, Сергей Губанов, Вы писали: WH>>Вот скажи мне ты с СОМ дело имел или только название слышал? СГ>Это имеет значение? Ага. Иначе такую чушь про процедурные переменные как единственный способ колбэк-вызовов не нес бы. Уж простят меня моредатры за резкость. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[39]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:07 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>А указатель на функцию — это всего лишь одна из возможных реализаций процедурной переменной. О! Золотые слова! Вот и не нужно кормить детей самым низкоуровневым и примитивным их вариантам. Показывайте им интерфейсы и делегаты. Причем не в битах копайтесь, а показывайте как абстракцию. Тогда и притензий от дейатвующих программистов не будет. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[41]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:07 | |
| Оценка: | +1 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Слепи DLL и EXE. Пусть EXE динамически загрузит DLL и что-то с ней сделает такое, что она сможет сама вызывать хоть одну процедуру из EXE. 1.:
2.:
В общем, из пещеры пора вылезать. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[31]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:07 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>А откуда эта функция? Из какого модуля? Добро пожаловать в мир оперирующий типами. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[20]: Ссылка vs Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:07 | |
| Оценка: | ![]() | |
| Здравствуйте, Павел Кузнецов, Вы писали: ПК>Ага. Еще бы лямбду добавили -- и никакие СиШарпы с Оберонами нам ни по чем Ага. Так и вижу:
... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[21]: Ссылка vs Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:07 |
| Здравствуйте, prVovik, Вы писали: V>Эх, а о компайлтайм рефлекшене вообще молчу... Это да. Все равно не сделают. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[13]: Указатель | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:07 |
| Здравствуйте, Павел Кузнецов, Вы писали: ПК>В .Net managed указатели есть. Их нет в C#. Есть. Но без них намного проще. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[14]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:07 |
| Здравствуйте, Павел Кузнецов, Вы писали: ПК>Если я не ошибаюсь, это не Паскаль, а его расширения от фирмы Борланд aka Turbo-Pascal. Turbo Pascal с указателями стало возможн работать через Inc()/Dec(). ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[12]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:07 |
| Здравствуйте, Павел Кузнецов, Вы писали: ПК>И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было? Не требуется разыменование. Работа ссо сылками ведется так же как со значениями.
C++:
... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[16]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:07 |
| Здравствуйте, Павел Кузнецов, Вы писали: ПК>Ага. Теперь, пожалуйста, ту же самую линию рассуждений, но на примере managed указателей в .Net Менеджед-указатели ничем от обычных не оличаются. Просто ЖЦ имеет право их двигать. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[15]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:07 |
| Здравствуйте, rockandroll, Вы писали: R>Согласен. Принципиальных различий между ссылками и указателями (если не брать во внимание GC) я тоже не вижу. Может кто-нибудь видит?
... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[15]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:07 |
| Здравствуйте, Сергей Губанов, Вы писали: Прочти все же пару книжек по Шарпу и Яве. А так же опредление из Википедии. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[23]: Что дают шаблоны? | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:07 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Сколько раз повторять!!! Объектные переменные Java это не сами объекты (не value-type), а указатели на них (reference-type). Много раз повторять. Такую глупость сколько не повторяй, все равно она умней не стаент. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[15]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:07 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ> А комун нахрен упало это замшелое старьё? Оглянись, на дворе 21 век. Дотнет, С++, Фри Паскаль, Ява, Хаскель, Окамл и т.п. можно скачать на халяву. У многих фришная лицензия. Почти ко всем доступны исходники. На фиг упала эта дешавая поделка? ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[17]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:07 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Есть такая идея. Не забывайте, что и компы в школах тоже не современные, хорошо если Celeron-Pentium-2 P90 уже достаточно чтобы что-то приличное запускать. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[22]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:07 |
| Здравствуйте, Курилка, Вы писали: К>Отстутствие полей private является следствием того, что "единицей инкапсуляции является модуль" К>Я хренею от обероновской логики, по мне дак женская ито намного понятней Это все потому, что не ты пишешь компилятор к этому чуду. Знаешь насколько сокращается время разработки компилятора? У... ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[23]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:11 |
| Здравствуйте, Mamut, Вы писали: M>Вот я и говорю, в результате появляются извращения (а это именно извращения) вроде постфиксов — и * M>И этому человеку (Вирту) не нравятся = и == Э... Ты компиляторы писал? Я тебе как человек пониающий в LL(1) граматике скажу, что "*" с переди может причинить кучу проблем. А вот постфиксом все будет куда проще. Так что компилятор значительно упрощается. А оставщееся от его разработки время можно пустить на навязывание своего языка в универе. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[22]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 21:11 |
| Здравствуйте, Кодт, Вы писали: К>Да ну нафиг! Лучше выучиться на обычном паскале (ucsd, turbo3-5, ну максимум 6 с его turbo vision) и потом осваивать какой-нибудь промышленный язык, чем с самого начала голову ломать непонятно обо что и непонятно зачем. А еще проще пережить ужасный статик. И через два дня будеш уже писать на промышленном языке. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[17]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 28.10.04 21:48 |
| VladD2: > ПК> Ага. Теперь, пожалуйста, ту же самую линию рассуждений, но на примере managed указателей в .Net > Менеджед-указатели ничем от обычных не оличаются. Просто ЖЦ имеет право их двигать. В результате они отличаются лишней косвенностью, и вряд ли адресная арифметика с ними имеет смысл. Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[13]: Мощность... | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 28.10.04 21:49 |
| VladD2: > ПК> И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было? > Не требуется разыменование. Работа ссо сылками ведется так же как со значениями. Т.е. отличия синтаксические, не семантические. Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[24]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Mamut | http://dmitriid.com/ |
| Дата: | 28.10.04 21:54 |
| Здравствуйте, VladD2, Вы писали: VD>Здравствуйте, Mamut, Вы писали: M>>Вот я и говорю, в результате появляются извращения (а это именно извращения) вроде постфиксов — и * M>>И этому человеку (Вирту) не нравятся = и == VD>Э... Ты компиляторы писал? Я тебе как человек пониающий в LL(1) граматике скажу, что "*" с переди может причинить кучу проблем. А вот постфиксом все будет куда проще. Так что компилятор значительно упрощается. А оставщееся от его разработки время можно пустить на навязывание своего языка в универе. Да я так ... << RSDN@Home 1.1.4 beta 3 rev. 185>> ![]() |
| Re[25]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 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 Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[26]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Mamut | http://dmitriid.com/ |
| Дата: | 28.10.04 22:36 | |
| Оценка: | ![]() | |
| Здравствуйте, Павел Кузнецов, Вы писали: ПК>Mamut: >> SET A EQUAL B ADD TO C ПК>COBOL, AppleScript etc. Спасибо. В Коболе, кстати есть что-то такое, завораживающее:
Класс! Может его вернуть и ввести преподвание его? ... << RSDN@Home 1.1.4 beta 3 rev. 185>> ![]() |
| Re[20]: * | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 28.10.04 23:00 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Здравствуйте, Mamut, Вы писали: M>>Продолжу. СГ>Вы уже задаете технические вопросы. Да уж. Шарп с его:
и темболее Питон с его командной строкой отдыхают. ... << RSDN@Home 1.1.4 beta 3 rev. 20 |