OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 25 Сентябрь, 2020 06:19

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 67 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: Пятница, 11 Май, 2007 05:43 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Wlad писал(а):
Уважаемые коллеги, прельщает ли кого-нить вот, например такая форма записи операций вывода?
StdLog.Out.String("result: ").Int(var).String("-th is ").Float(float_value);


Не прельщает даже с перегруженными операторами. Форматная строка со списком аргументов в большинстве случаев намного удобнее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 11 Май, 2007 05:46 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
А еще есть вариант:
StdLog.Print("$result: $var-th is $float_value");
Не хотите? :-)


Тоже не хотим. Статическая типизация рулит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 11 Май, 2007 07:33 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4593
Откуда: Россия, Орёл
Vlad писал(а):
...Форматная строка со списком аргументов в большинстве случаев намного удобнее.

Vlad писал(а):
...Тоже не хотим. Статическая типизация рулит.

Гм... а не поскажете, в каких языках компилятор проверяет соответствие между типами, указанными в форматных полях и типами значений, которые переданы для подстановки вместо этих полей?
Например, в Си вообще не существует понятия о типизации для параметров процедур - передавай что хочешь. В С++ типизация для параметров присутствует, однако не в случае printf и ее параметров передаваемых в списке "..."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 11 Май, 2007 08:06 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Евгений Темиргалеев писал(а):
Гм... а не поскажете, в каких языках компилятор проверяет соответствие между типами, указанными в форматных полях и типами значений, которые переданы для подстановки вместо этих полей?
Например, в Си вообще не существует понятия о типизации для параметров процедур - передавай что хочешь.


На самом деле проверять соответствие аргументов форматам *printf современные сишные компиляторы умеют :) Во всяком случае такие популярные как gcc/VC. Хотя это исключительно инициатива конкретных компиляторов (разве что в каком-нибудь C99 такое поведение явно описали).

Евгений Темиргалеев писал(а):
В С++ типизация для параметров присутствует, однако не в случае printf и ее параметров передаваемых в списке "..."


На C++ можно замутить что угодно :) Например, boost::format. На этапе компиляции соответствие проверять не умеет, но полностью type-safe, совместим с форматными строками *printf, позволяет использовать пользовательские типы и написан в рамках стандарта C++.

Что касается более других языков, то по моим представлениям Nemerle с его мощными compile-time механизмами вполне способен решить эту задачу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 11 Май, 2007 10:32 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1473
Евгений Темиргалеев писал(а):
... а не поскажете, в каких языках компилятор проверяет соответствие между типами, указанными в форматных полях и типами значений, которые переданы для подстановки вместо этих полей?

подскажу: gcc, ключ -wformat2


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 11 Май, 2007 10:35 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1473
2 Vlad

Ээээ, батенька, ды вы - не романтик-с !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 11 Май, 2007 11:45 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1298
gcc вообще интересная штука. Угадайте что он сгенерирует для
Код:
printf("hello world!\n");


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 11 Май, 2007 12:33 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2352
Откуда: Россия, Томск
Trurl писал(а):
gcc вообще интересная штука. Угадайте что он сгенерирует для
Код:
printf("hello world!\n");

Я не знаком с gcc, поэтому попробую угадать: он сгенерирует код для вывода на стандартное устройство вывода (stdout) строки "hello world!" (без кавычек) и перевода строки, но без возврата каретки.
Угадал?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 11 Май, 2007 14:11 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1298
Нет, это было б нарушение семантки, то есть баг, и его бы поправили.
Просто он интересно оптимизирует:
Код:
puts("hello world!");


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 11 Май, 2007 19:58 

Зарегистрирован: Среда, 28 Февраль, 2007 00:08
Сообщения: 142
Откуда: Нижний Новгород
Борис Рюмшин писал(а):
Wlad писал(а):
Илья Ермаков писал(а):
А еще есть вариант:
StdLog.Print("$result: $var-th is $float_value");
Не хотите? :-)


ХОТИМ!!!


Вы поосторожнее, а то он и правда щаз навояет такую байду... :lol:

нечто подобное было использовано в Sql (тока для экспортированных данных)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 11 Май, 2007 20:50 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4593
Откуда: Россия, Орёл
Trurl писал(а):
Нет, это было б нарушение семантки, то есть баг, и его бы поправили.
Просто он интересно оптимизирует:
Код:
puts("hello world!");
Эх, когда gcc начнет оптимизировать такую программу:
Код:
int main()
{
return 0;
}
чтобы получалось решение нужной мне задачи, я снова вернусь на С или С++. :) А пока это все интересно, но всего лишь всякие фичи компилятора, которые сути дела не меняют.
Также, как и
- case '0'...'9',
- динамическое создание локальных массивов int n=?; int a[n],
- вложенные функции (только для C) ("будьте осторожны, когда используете goto за пределы вложенной функции" :lol: ) и т. д.
А потом, когда каждый компилятор предоставляет кучу фичей, народ говорит о переносимости C кода. И сразу вопрос: если переносимость, то зачем фичи? Если фичи, то...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 11 Май, 2007 21:23 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9283
Откуда: Россия, Орёл
А еще мне нравится замечание Страустрапа по поводу многомерных массивом: "используйте работу с многомерными массивами только в низкоуровневом коде".
Возможность, которая как воздух нужна прикладникам, математикам, численникам у нас уходит только на низкий уровень... Ну, естественно, все логично: массивов-то многомерных полноценных нет, есть костыль-култяпка...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 12 Май, 2007 20:12 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
А еще мне нравится замечание Страустрапа по поводу многомерных массивом: "используйте работу с многомерными массивами только в низкоуровневом коде".


Выдрать из контекста и истолковать как хочется - это неспортивно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 12 Май, 2007 22:16 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9283
Откуда: Россия, Орёл
Не надо, не выдирал я из контекста :-)
Недавно пришлось заниматься со студентами на эту тему, для освежения памяти, отвыкшей от ++, перечитывал весь соотв. раздел Страустрапа... Многомерные массивы освещены только в приложении, как "средство, использования которого без необходимости следует избегать"...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 13 Май, 2007 16:58 

Зарегистрирован: Среда, 28 Февраль, 2007 00:08
Сообщения: 142
Откуда: Нижний Новгород
Илья Ермаков писал(а):
...
Ну, естественно, все логично: массивов-то многомерных полноценных нет, есть костыль-култяпка...

Ну, если глянуть еще пристальнее то в Си массивов вообще нет :) есть указатели на ячейку памяти некоторого типа и неизвестного при работе размера.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 13 Май, 2007 22:19 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1473
А я, вот, насыщаюсь Вандервудом и Джосаттисом (Шаблоны Си++) - выходные коту под хвост !
Похоже это чисто Си++-ная болезнь по следующей схеме: "Ура!!! Круто! Ну? ваще-то - смотреть здесь и здесь на будущие возможные неожиданности! Ещё - смотреть сноску! Но, вообще-то, - соторожнее!"
Я вот смотрю опять на главу по типам классов и умным указателям и вижу, что процесс пощёл своей дорогой! - Уже чистое искусство ради самого искусства: по идее средство прикладников не касалось, а - только писателей библиотек, но каждый раз выясняется, что для осмысленного использования прикладником предоставляемых средств в библиотеках (а не как макака!), ему столько нужно материала перерыть и ВЪЕХАТЬ в него, - что - нуегонафик!

Я вот только вчера объяснял очередному "среднестатистическому прикладнику" (без пяти минут доктору, кстати) по его коду (тоже захотел крутостью блеснуть - начал реализовывать свои теор наработки на Си++! ), почему в выражениях

cout << a << b * c << d << endl;
и
while( ! cin >> x )

у него ошибки... :о) Как гворится "эта музыка будет вечно..."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 14 Май, 2007 10:56 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Wlad писал(а):
Я вот только вчера объяснял очередному "среднестатистическому прикладнику" (без пяти минут доктору, кстати)


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

Wlad писал(а):
по его коду (тоже захотел крутостью блеснуть - начал реализовывать свои теор наработки на Си++! ), почему в выражениях

cout << a << b * c << d << endl;
и
while( ! cin >> x )
у него ошибки... :о) Как гворится "эта музыка будет вечно..."


Потому что не умеет правильно переопредлять операторы? Ну так пусть оставит это дело тем, кто умеет, и не тратит свое ученое время и время других.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 14 Май, 2007 11:14 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1473
2 Vlad

А вот не всегда нужно, что бы программист под рукой был.
Случай языка-калькулятора, но не примитив.
Я и пытался объяснить, что для "похватных" и "пилотных" вещеё Си++ - ну никак ему не подходит. Даи Визуал Бэйсик - уже нечто "не то". Тем более, что и пример с 2+2=5 возымел эхвект! :о)
Человек в раздумьи. Его смущает неизвестность среды и языка + он мне не верит, что архитектурно (фреймвок, принципы и подходы) это уже десять лет гарантированно не менялось и в ближайщие столько же не изменится... :о)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 14 Май, 2007 11:15 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Не надо, не выдирал я из контекста :-)
Недавно пришлось заниматься со студентами на эту тему, для освежения памяти, отвыкшей от ++, перечитывал весь соотв. раздел Страустрапа... Многомерные массивы освещены только в приложении, как "средство, использования которого без необходимости следует избегать"...


Возможно Струструп не хотел растекаться по дереву и объяснять, что это средство, в силу всех его недостатков и ограничений востребовано на практике только в низкоуровневом коде. Впрочем если речь идет о прикладном высокоуровневом коде - то и обычные сишные массивы малоюзабельны (исключая строковые константы :) Для студентов же можно было дать ссылку на std::vector как пример "массива для прикладной жизни".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 14 Май, 2007 11:20 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1473
Vlad писал(а):
Для студентов же можно было дать ссылку на std::vector как пример "массива для прикладной жизни".

И вы думаете, они этим успокоятся? Как бы не так! То ли в силу природного интереса, то ли, потому, что вынуждены будут "копать" дальше (по требованиям задачи), они обязательно вынуждены будут рассматривать вопросы реализации... Со всеми вытекающими! (особенно для прикладников....... :о) )
То есть , я имею в виду, что пока будет примитив, "простое знание" о векторе удовлетворит, но! там где структуры стандартной библиотеки - низбежно "полезут" и её алгоритмы, и вот тогда - "и пошли они (прикладники) солнцем палимые"... :о)


Последний раз редактировалось Wlad Понедельник, 14 Май, 2007 11:22, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 67 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2020, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB