Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» хочу начать учить с++

Автор: dremon
Дата сообщения: 27.05.2003 21:58
mymuss
Да уж, ребята....
Тесты показывают, что реализация функции fprintf на данной платформе с данным компилятором для данной версии библиотеки быстрее, чем с iostreams - т.е. они не показывают ничего.
В чем, скажите мне, iostreams ПРИНЦИПИАЛЬНО медленнее, чем stdio? А то когда Ryback сказал про 5 вызовов cout и один вызов fprintf, извините...

Ryback, не надо человеку учить GLIBC, если он не будет работать в юниксах. Так же, как не надо ему учить системные вызовы CreateThread или WaitForSingleObject, если он не собирается программировать под винду. Как вы все этого не можете понять? Ему нужно изучение языка C++, а не подробности работы функции pthread_create или миллисекунды, выигранные при использовании fprintf.

Кстати, насчет POSIX - ты бы уже приводил весь отрывок, что-ли. А то так нечестно

Цитата:
The functions by themselves would ensure only atomicity of their own operation, but not atomicity over all the function calls. For this it is necessary to perform the stream locking in the application code
.
О чем я и говорил в самом начале - хочешь жить спокойно с потоками, используй синхронизацию, а не полагайся на стандартную библиотеку.
POSIX кстати, если что-то requires, то это не значит, что оно implemented everywhere. К тому же это юниксовый стандарт. Кроме юникса есть еще много платформ. И есть еще такой стандарт - ANSI.
Посмотрел я в своем линухе и в винде. В линухе есть (по крайней мере в последней версии glibc), в винде нифига нету.
Автор: mymuss
Дата сообщения: 27.05.2003 22:59
dremon

Цитата:
Тесты показывают, что реализация функции fprintf на данной платформе с данным компилятором для данной версии библиотеки быстрее, чем с iostreams - т.е. они не показывают ничего

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

А теперь смотри что ты писал в предыдущих постах:

Цитата:
В первом случае библиотечная функция printf займется разбором строки, поиском спецификаций %d, и для каждой такой спецификации в итоге вызовет функцию печати этого числа в стдио. Для непонятливых - смотри реализацию этой функции в исходниках.
Во втором случае 5 раз будет вызвана функция печати числа в стдио.
Еще что-то нужно пояснять в плане производительности?

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


Цитата:
не надо человеку учить GLIBC, если он не будет работать в юниксах

glibc, libc - просто удобные сборные названия для всего того что в нее входит. Я просто не знаю сборного названия для этого в виндах. Надеюсь, ты же не пытаешься утверждать что в VC нет stdio.h, stdlib.h, string.h ну и так далее.


Цитата:
К тому же это юниксовый стандарт.

Был изначально. Смотрим например сюда:
http://support.microsoft.com/?kbid=323952

Цитата:
Windows 2000 is compliant with the POSIX 1003.1 standard

Вообще, так рассуждать, то С/С++ - юниксовый язык
Автор: Bloody_Nokia_Adept
Дата сообщения: 27.05.2003 23:14
mymuss
Мы с Ryback прогнали этот же пример на GCC 3.2 под Slackware 9 - выигрыш printf был 6-кратный! Я не поверил своим глазам. Видимо там что-то намутили в компиляторе.


Добавлено
Самое интересное, что про разницу между stdio и iostream Ryback спрашивал именно меня. Но тут такая катавасия понеслась с dremon...


Добавлено
И от темы удалились
Автор: Ryback
Дата сообщения: 27.05.2003 23:53
dremon

Цитата:
Да уж, ребята....
Тесты показывают, что реализация функции fprintf на данной платформе с данным компилятором для данной версии библиотеки быстрее, чем с iostreams - т.е. они не показывают ничего

Это кому как, можно запросить общественность ( ) прислать сюда побольше результатов тестов. Ну да ладно, забыли.


Цитата:
Цитата:
The functions by themselves would ensure only atomicity of their own operation, but not atomicity over all the function calls. For this it is necessary to perform the stream locking in the application code

И что здесь непонятно или чему-топротиворечит? Здесь написано, что не гарантируется атомарность такого кода:

Код:
fprintf(stdout, "%d", 1);
fprintf(stdout, "%d", 2);
Автор: mymuss
Дата сообщения: 27.05.2003 23:58
Bloody_Nokia_Adept

Цитата:
Видимо там что-то намутили в компиляторе

Видимо все же намутили
Напиши подробно как тестили. И еще, пропробуй на порядок или два увеличить кол-во итераций. При маленком кол-ве результаты часто неправильные. И еще поиграйся с -O? (режимы оптимизации).


Цитата:
И от темы удалились

Да не очень в общем то... Просто представляю себе эту картинку: учиться человек програмить на С++... Ему дают разные советы... И в результате имеем: программер знает STL, iostream, объекты... А что делает printf() или strcmp() не знает dremon, неужели по твоему такой программер _знает_ С++?


Добавлено
Ryback

Цитата:
Здесь написано, что не гарантируется атомарность такого кода

Хм... Вот за что я ненавижу английский - так это за неоднозначность. ПМСМ, тут сложно сказать определенно. Не факт что именно это имелось ввиду, возможно как раз dremon прав.


Цитата:
можно запросить общественность

Можно! Только я же не один здесь общественность Завтра еще попробую на w2k, vc++7.0. Общественность, не спим!


Цитата:
POSIX - это не юниксовый стандарт

Изначально был Юниксовый
Смотрим сюда: http://www.pasc.org/

Цитата:
The original, trial-use, standard published in 1986 was actually called IEEE-IX (IEEE's version of UNIX). However, this was rapidly changed to POSIX in time for the second printing (also in 1986).



Цитата:
Давай считать вместе Представим простейшую модель

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


Цитата:
flush_with_stdio не поможет

В смысле sync_with_stdio() ?
Автор: ironwit
Дата сообщения: 28.05.2003 07:55
Ох вы и понаписали

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


Код:
Вот пример простой законченной программы, считывающей по одному слову из cin и выводящей их в cout:
#include <iostream>
#include <string>

int main ()
{
string word;

while ( cin >> word )
cout << "Прочитано слово: " << word << "\n";

cout << "Все слова прочитаны!";
}
Вот первое предложение из произведения Джеймса Джойса “Пробуждение Финнегана”:

riverrun, past Eve and Adam's

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

Прочитано слово: riverrun,
Прочитано слово: past
Прочитано слово: Eve,
Прочитано слово: and
Прочитано слово: Adam's
Все слова прочитаны!
Автор: Ryback
Дата сообщения: 28.05.2003 10:00
mymuss

Цитата:
Хм... Вот за что я ненавижу английский - так это за неоднозначность. ПМСМ, тут сложно сказать определенно. Не факт что именно это имелось ввиду, возможно как раз dremon прав.

Позволь не согласиться.

Цитата:
The functions by themselves would ensure only atomicity of their own operation, but not atomicity over all the function calls. For this it is necessary to perform the stream locking in the application code

Переводим.
Функции гарантируют только атомарность их собственного выполнения, но не атомарность по всем/нескольким вызовам. Для этого необходимо делать stream lockig внутри кода приложения.


Цитата:
Не факт. Сложно сказать однозначно. Сейчас компиляторы умные пошли. мало ли что они там оптмизируют. И gprof'ом не докопаешься. А дизассемблировать влом... Я по этому тест гонял на -О3, чтобы в обоих случаях код максимально оптимизировался.

Да, это я так, баловался.

Цитата:
В смысле sync_with_stdio() ?

конечно, ошибся, sorry

Bloody_Nokia_Adept

Цитата:
Самое интересное, что про разницу между stdio и iostream Ryback спрашивал именно меня. Но тут такая катавасия понеслась с dremon


Когда это я тебя спрашивал? Ночью спать надо а не поститься.
Автор: ironwit
Дата сообщения: 29.05.2003 14:10
даааа, специалисты ответов так и не дали

Ладно. Установил Visual Studio net. Что дальше то? Как там консольный проект создавать, как виндовый. Как мне начать примеры из книги решать? В общем чайник я. (в с++)
Автор: klau
Дата сообщения: 29.05.2003 14:18
ironwit
Я думаю, что тебе надо сюда
http://forum.ru-board.com/topic.cgi?forum=35&bm=1&topic=13256&start=1140#lt
Там найдешь хор. книгу по .НЕТ и не одну. Кстати, человек вроде сегодня искал такую книгу. посмотри линку.

Добавлено
ironwit
вдогонку...
http://www.functionx.com/vcnet/articles/gcclass.htm
http://www.codeproject.com/managedcpp/#General
Мне они очень помогли...
какую версию поставил?
Автор: Bloody_Nokia_Adept
Дата сообщения: 29.05.2003 14:38
ironwit

Цитата:
даааа, специалисты ответов так и не дали

Ну а что тебе сказать, если читаешь книги с неправильными примерами?
Там вечный цикл while из которого не выйдешь, т.к. cin всегда ждет непустую строку законченную enter.

Цитата:
Из этого примера появилось подозрение что при чтении данных из стандартного ввода слова разделяются пробелами. Я прав? Тогда вопрос - а если ввести слово - ENTEr - СЛОВО -ENTEr. чТО будет?

Прав. Разделители пробелы и enter. Получится "СЛОВО" и цикл опять будет ждать непустую строку. Просто что тут отвечать, если достаточно скомпилить код и запустить его? Было бы что-то действительно стоящее внимания, а то так... Вопрос от лени. От лени набрать код и запустить его.

Будешь задавать толковые вопросы - будем отвечать
Автор: ironwit
Дата сообщения: 29.05.2003 14:47
klau
спасибо. Пошел по ссылкам.

Bloody_Nokia_Adept

Цитата:
Вопрос от лени. От лени набрать код и запустить его.


Цитата:
Как мне начать примеры из книги решать?


я ж задал вопрос. Неужели не увидел? А насчет лени .... я же программист
Автор: Bloody_Nokia_Adept
Дата сообщения: 29.05.2003 15:09
ironwit

Цитата:
Неужели не увидел?

Честно говоря нет
Прости тогда уж...

Честно говоря там и код упрощенный. Нехватает выделенной строки, т.к. string, cin и cout находятся в пространстве имен std. Код должен выглядеть так:

Цитата:
#include <iostream>
#include <string>

using namespace std;

int main ()
{
string word;

while ( cin >> word )
cout << "Прочитано слово: " << word << "\n";

cout << "Все слова прочитаны!";
}



Цитата:
я считаю - что хватит знать размер отдельно взятого элемента массива и их кол-во. Кто подтвердит\опровергнет?

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

Вот что говорит Страуструп по данному поводу (третье специальное издание, глава 5.3 "Указатели на массивы"):

Цитата:
В С++ указатели и массивы тесно связаны. Имя массива можно использовать в качестве указателя на его первый элемент.
...
Неявное преобразование имени массива в указатель на его первый элемент широко используется в вызовах функций С.
...
К счастью, не существует ни явного, ни неявного преобразования указателя в массив.
Неявное преобразование массива в указатель при вызове функции приводит к потере информации о размере массива. Но вызываемая функция должна каким-либо образом определить этот размер, чтобы бы выполнить осмысленные действия. Как и другие функции С из стандартной библиотеки, принимающие указатель на на строку символов, strlen() считает, что ее аргумент, строка завершаемая нулем; strlen() возвращает количество символов в строке, вплоть до завершающего нуля, но не считая его. Все это - вопросы достаточно низкого уровня


Понял?

Т.е. можно объявить следующий строковый массив:
char strName[] = "Вася\0Пупкин";
Под него распределиться памяти достаточной для хранения строки "Вася\0Пупкин" и терминирующего нулевого символа "\0", но при этом все будут видеть этот строковый массив только, как строку "Вася", пока ты не передашь его реальную длину и не станешь обрабатывать его специальным образом.

По этим причинам нет операции присваивания массивов, но массивы можно копировать и это правильно
Автор: ironwit
Дата сообщения: 29.05.2003 15:23
Bloody_Nokia_Adept
понятно. Получилось запустить проект, скомпилировать и посмотреть. Сразу возник вопрос - текст ввожу нормально видно, а строчку
Цитата:
Прочитано слово:
выдает кракозяблами. Можно ли это устранить?
Автор: Bloody_Nokia_Adept
Дата сообщения: 29.05.2003 15:31
ironwit

Цитата:
выдает кракозяблами. Можно ли это устранить?

Можно... Достаточно сконвертировать текст из кодировки 1251 в 866 (какого они оставили там эту кодировку? может для обратной совместимости?). Поэтому забей и выводи все латиницей - проще
Автор: KITA
Дата сообщения: 29.05.2003 22:22
Turbo Pascal в DOS и будет всЁ!!!
Автор: albatros
Дата сообщения: 26.07.2003 07:52
ironwit

Не мучайся с выбором среды разработки. С Visual C++ тебе трудно разобраться, потому что ее освоение подрузамевает уже наличие знаний по С++.

Вообще, как я понял, ты изучаешь язык С++. Причем, раз читаешь Липпмана, то изучаешь стандартный С++ и его стандартную библиотеку. А раз так, лучше выбери себе компилятор С++, по возможности максимально соответствующий стандарту. И безо всякой среды. Один компилятор. Для учебных целей, имхо, лучше так. Например Borland C++ Compiler 5.5, можно свободно скачать с сервера борланд. Его рекомендуют для обучения. У меня примерно такая же картина: решил изучать С++ (после С, а первым языком был VB), долго метался между средами разработки, пока не дошло, что учить надо язык, а не среду. А потом уже можно изучать программирование на этом языке в конкретной ОС и конкретной среде разработки, имхо.

Кстати, как тебе Липпман, доходчиво излагает? Какую его книгу ты читаешь: C++ Primer(Язык программирования С++. Вводный курс) или Essential C++(Основы программирования на С++)? Нравится?
Автор: ironwit
Дата сообщения: 26.07.2003 08:22
albatros
Если честно, почитай я эти баталии и понял что главное не то, в каком языке пишешь, а то - насколько ты профессионал в этом языке . А так как язык pascal со мной уже лет 10 - то решил что все таки останусь я в нем, а с\с++ решил что если буду его читать со словарем то мне хватит
Автор: albatros
Дата сообщения: 26.07.2003 23:41
ironwit



Цитата:
Если честно, почитай я эти баталии и понял что главное не то, в каком языке пишешь, а то - насколько ты профессионал в этом языке


Согласен на 200%. Вот как пишет Брайан Керниган в своей книге "Практика программирования": "По большому счету наша работа оценивается по тому, как много мы можем сделать с помощью того, что у нас есть."

2 ALL

Кстати, насчет литературы. Открыл топик по обсуждению компьютерной литературы -- мнения, рецензии, обзоры, отзывы и т. п. В общем, все здесь: http://forum.ru-board.com/topic.cgi?forum=35&topic=15137#1
Автор: vlish
Дата сообщения: 27.07.2003 01:24
ironwit

Цитата:
А так как язык pascal со мной уже лет 10 - то решил что все таки останусь я в нем, а с\с++ решил что если буду его читать со словарем то мне хватит

Хм... Паскаль, кончено, хорошо, но, ИМХО, главная ценность CPP как раз в новой (по сравнению с паскалевской) парадигме программирования. Объектность/объектная ориентированность - очень большое дело, и я не вижу, что сможет её заменить в ближайшем будущем. А функциональное программирование хоть и не умирает, но явно сдаёт позиции (только не надо ломать копья, пли-и-и-з!.. ненавижу священные войны! )
Так что будь осторожен: оставшись в паскале, рискуешь упустить новое (я знаю, что ему очень много лет, но всё равно относительно новое) направление.

albatros

Цитата:
Вот как пишет Брайан Керниган

А он, afaik, как раз специалист по C. Нифига не объектному...
Кстати, я не утверждаю, но сдаётся мне, что и упомянутая книга - тоже довольно древняя. Да?


Цитата:
По большому счету наша работа оценивается по тому, как много мы можем сделать с помощью того, что у нас есть.

Сейчас моднЫ ещё и такие критерии как расширяемость и возможность переиспользования...
По этому параметру ООП далеко впереди функционального программирования.
Автор: albatros
Дата сообщения: 27.07.2003 01:45
vlish


Цитата:
А он, afaik, как раз специалист по C. Нифига не объектному...


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



Цитата:
Кстати, я не утверждаю, но сдаётся мне, что и упомянутая книга - тоже довольно древняя. Да?


Нет, оригинал вышел в 1999 году, русский перевод -- в 2001-м. Имхо, эту книгу очень полезно прочитать, независимо от того, на каком языке пишешь (хотя образцы кода приводятся на С, С++ и Java). И время от времени -- перечитывать.


Цитата:
Сейчас моднЫ ещё и такие критерии как расширяемость и возможность переиспользования...


Этим вопросам там тоже уделяется внимание
Автор: vlish
Дата сообщения: 27.07.2003 14:04
albatros
тогда - пардон!..
Автор: ironwit
Дата сообщения: 28.07.2003 06:53
vlish

Цитата:
парадигме программирования. Объектность/объектная ориентированность - очень большое дело, и я не вижу, что сможет её заменить в ближайшем будущем.

в какой книге это можно было бы лучше всего прочитать и оценить?
Автор: albatros
Дата сообщения: 28.07.2003 11:59
ironwit

Цитата:
в какой книге это можно было бы лучше всего прочитать и оценить?

Посмотри http://www.accu.org/bookreviews/public/reviews/0sb/object_oriented.htm
Кое-что есть и в русском переводе
Автор: ironwit
Дата сообщения: 28.07.2003 13:06
albatros
ok. Спасибо.
Автор: vlish
Дата сообщения: 28.07.2003 15:32
ironwit

Цитата:
в какой книге это можно было бы лучше всего прочитать и оценить?

имхо, классика:

Гради Буч, "ООП и ООД" - прекрасная книжка философской направленности.

Страуструп, "Язык программирования c++" - помимо справочника по C++ это ещё и довольно хорошее описание принципов ОО.

В качестве примера того, как это реально можно (и нужно) применять - "Шаблоны проектирования" by Гамма сотоварищи (четыре автора, aka GoF = "Gang of Four")
Автор: albatros
Дата сообщения: 29.07.2003 18:34
vlish

Цитата:
В качестве примера того, как это реально можно (и нужно) применять - "Шаблоны проектирования" by Гамма сотоварищи (четыре автора, aka GoF = "Gang of Four")

Влиссидес Дж., Гамма Э., Хелм Р., Джонсон Р. "Приемы объектно-ориентированного проектирования. Паттерны проектирования" оригинал: Design Patterns. Elements of Reusable Object-Oriented Software, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
Автор: sproxy
Дата сообщения: 06.02.2009 06:49
тааак, пи-пец...столько всего, даже целый путиводитель по разделу программирования....да - это напрягает и дизорентирует...

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

задачи: программа будет в виде on line мессенджера, отправлять сообщения на сайт и считывает их, к примеру как общение на сайте "вконтакте", только + к этому еще и off line версия - это основная задача программы. более мелкие - сервесные, отправка на сайт сетвых данных по таймеру или запросу пользователя с сайта и т.д.

с языком Си или Си++ не занком. Но по книгам разберусь, время терпит.
В целом, что такое програмирование - понимаю: пишу на php, js и autoit. Вот как раз на autoit подобную программу реализовал, но так как этот скриптовый язык не поддерживает мульти потоковость, все выглядит очень "не серьезно": один exe GUI программы, и несколько exe файлов как бы модули, выполняют отправку дааных, считывание и т.д.

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

как понимаю в каждой среде "свой набор доступных классов/компонентов" и именно от этого набора необходимо отталкиваться при выборе среды...так?

а клаасы/компоненты - это как наборы функций, к примеру набор функций работы с реестром (создать значение в ключе, удалить значение и т.д.) .... так?

Автор: Rudia
Дата сообщения: 06.02.2009 09:06
sproxy
Имхо, для С++ ничего лучше Visual Studio не придумали и навряд ли придумают.
Для такой задачи как бы С++ не лучший вариант. На Java или .NET эта задача решается проще и эффективнее. Но если вы все-таки хотите использовать C++, то ставьте Visual Studio 2008 и используйте библиотеку Qt от TrollTech - там в поставке идет куча примеров по построению визуального интерфейса и работы с сетью и интернет.
Автор: eLLoco
Дата сообщения: 06.02.2009 11:04
sproxy
Советую скачать и повтыкать пару опенсорсовых проектов - Миранду ту же. А то недостаток знаний так и просвечивает через каждый абзац.

Rudia

Цитата:
Имхо, для С++ ничего лучше Visual Studio не придумали

Еще можно пользоваться убогим Eclipse'ом с Qt Integration

Цитата:
используйте библиотеку Qt от TrollTech

Она теперь Qt от Nokia.
Автор: sproxy
Дата сообщения: 06.02.2009 11:55
именно С++, не принципиально. одна подруга, програмерша, хм игры их видел - не плохие, оооочень советовала зубрить С++ и не париться.


Цитата:
На Java или .NET эта задача решается проще и эффективнее.

я с удовольствием возмусь за более эффективный вариант.
Что же выбрать тут Java или .NET, и какие для них компиляторы лучше?
В чем их приимущества/недостатки?


Цитата:
А то недостаток знаний так и просвечивает через каждый абзац.

ну так надо же с чего то начинать, а не моментально "все знать и блестать - хакером".


Цитата:
Советую скачать и повтыкать пару опенсорсовых проектов - Миранду ту же.

благодраю, посмотрю. но свой врианат буду все равно делать.
уже есть опыт: с сайтами, по началу использовал cms-ку joomla - продук не плохой, в своей мере гипкий и приятный. но как только начал писать движок сам - ощутил удобство результата; скорость; и самое главное - результат почти 1 в 1 выходит как задумывалось, а не через ж**** настроенный/вывернутый/перепатеннный чейто код.

главное цель! пол года назад и сркиптов autoit не знал, а теперь на нем пишу прожки под винду и варианты очень не плохи, дасадно, что язык на многое не способен - потому и риешил развиваться далее - уверен не на столько уж "оооофигенно" больше нужно знаний/умения писать на си/джаве/дот нет.....со времени и здесь подтянусь

Добавлено:
для .NET, по любому придется ставить Framework пользователю, ведь так?
а для Java, то же что то необходимо, кажется....

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

Страницы: 1234

Предыдущая тема: проблема с Java-аплетом


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.