KP>А потом поймает тебя человек, которому пришлось поддерживать ту х..ню что ты нах..чил, и как ты думаешь, что он с тобой будет делать? что-то мне подсказывает что не по головке гладить.
Ну если он меня поймает я думаю что он сам не будет знать что ему делать — я вешу 120 и не только сала
а по поводу вышесказанного — И Я О ТОМ ЖЕ-
если например нужно инкрементировать инт — то можно его просто ++ ...
а можно создать класс обертку , ессно лучше шаблонную ( етж круто )
переписать все мыслимые немыслимые конструкторы , операторы приведения типов ,
ессно определиться с операторами сравнения и присваивания , конструктор копий
, нельзя обойтись без обработки исключений в конструкторе , кданить пихнуть смарт поитеры (ессно лучше буст ),
деструктор ессно должен быть виртуальный ... и т.д и т.д.
ааааа ... главное — перегрузить постфиксный и преф ++
неплохо сделать частичную спец шаблона .....
а потом написат суперпуперобъект КУУЛ_ОБЖ(5);
КУУЛ_ОБЖ++;
C>но если касаеться никсов — то это либо классическая паралельная либо префоркнутая .
Тута я мальца погорячился — классическая паралельная на основе форка не канает
вот с предварительным создание потоков самое оно ... но опять же в зависимости от
количества клиентов размера передаваемых данных возможно имеет смысл и пул ..
S>Там именно мета-программирование. Если упрощенно, то несколько mpl::vector-ов (около 10), описывают класс. S>По этим данным строится state-машина (возможно многоуровневая), генериуется таблица переходов, происходит подписка на event-ы S>поддерживаются необходимые интерфейсы (генерится QueryInterface), проверяются различные зависимости, поддерживается
как интересноооо! хотел бы я на такой код посмотреть.
Здравствуйте, Smal, Вы писали:
S>Там именно мета-программирование. Если упрощенно, то несколько mpl::vector-ов (около 10), описывают класс. S>По этим данным строится state-машина (возможно многоуровневая), генериуется таблица переходов, происходит подписка на event-ы
Я бы написал внешний кодогенератор.
ИМХО былобы сильно проще написать и поддерживать да и проект компилировался бы сильно быстрее.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, carpenter, Вы писали:
C>2.Кросплатформенность – опять тотже вопрос – неужели так много народу пишет на С++ кросплатформенные приложения , которые еще вдобавок должны компилиться любыми компиляторами под любые операционки и под любые архитектуры процессоров?
К кроссплатформенности, даже если она реально не нужна, все равно стоит стремиться.
Во-первых все может измениться и когда она вдруг потребуется,
может быть уже поздно. Как пример, см. тут
Во-вторых это заставит разрабатывать лучшую архиректуру и в итоге получить лучший код.
Если ты разрабатываешь кросплатформенный код (ну или то, что будет легко портировать),
то ты как минимум должен явно выделить интерфейсы со внешним миром (гуй, файлы и пр...)
и определить правила взаимодействия со внешним миром.
Будет лучшая модульность и тебе придется избегать спагетти кода,
в котором кто угодно как угодно взаимодействует с внешним миром.
Так же тебе придется избегать платформенно-зависимых хаков...
Но если для тебя это все пустые слова, то тебе и в самом деле лучше тупо махать молотком.
Здравствуйте, carpenter, Вы писали:
C>1.Неужели в реальном программинге так часто используються шаблоны?
У меня используются и довольно часто. Причем чаще всего не на уровне "хаков" a-la Александреску, а несколько более мирно. Очень часто шаблоны у меня получаются в результате рефакторинга, обычно исходный код сокращается где-то в половину, очень удобно.
Единственный раз, когда я немного переборщил с шаблонами, можно увидеть здесь.
C>2.Кросплатформенность – опять тотже вопрос – неужели так много народу пишет на С++ кросплатформенные приложения , которые еще вдобавок должны компилиться любыми компиляторами под любые операционки и под любые архитектуры процессоров?
Тут к сожалению у меня плохо. Пишу практически только под Win32, очень древние поделки под линукс — что называется "давно и неправда". Так что в этом вопросе я некомпетентен.
C>3.Алгоритмы — ( у меня лично есть небольшие недостатки по мат анализу алгоритмов , но да суть не в этом) . В вышеупомянутом посте функция подсчета C>битов — она же подсчитывает (что еще надо?) ...
Обычно, да, если есть возможность использовать библиотечную функцию, надо её использовать. Но бывают ситуации, когда надо "такой же, но с перламутровыми пуговицами", а пуговиц таких в стандартных библиотеках нет. Редко, но бывают. И профессионализм разработчика чаще всего в такие моменты и выявляется.
C>4. По поводу ошибок в написании — я вообще с первого раза не пишу правильно C>чтобы скомпилилось (я не имею в виду что нибудь типа а++; а так — 20-30 строк)( а Вы ?) . Сначала набрасываю основную идею , а потом под отладчиком дошлифовываю.
Обычно 20-30 строк у меня компилятся нормально с первого раза. Вот >100 строк, уже да, могут быть какие-то косяки. А вообще я сначала какое-то время думаю, прежде чем начинать кодить. Так что у меня сначала появляется довольно много практически готового кода, а потом идёт мелкая шлифовка и тестирование. Правда иногда бывает, что архитектура классов меня не устраивает, и я могу их все переписать заново практически с нуля. А вот так, чтоб по 20-30 строчек добавлять — это довольно редко.
C>Из реального — мне очень понравился такой метод тестирования — C>дали проект , компилер и мсдн и попросили убрать при компиляции все ошибки и C>варнинги и сказать свое мнение по части пары классов ( после тестирования меня брали но на предыдущей работе перебили цену).
Ну, не знаю. Лично мне такой метод не очень нравится, субъективно он значительно легче, чем когда надо самому с нуля код писать.
C>Из последнего собеседования — думаю большинство знает как выяснить — C>являеться ли переменная степенью двойки (имееться в виду быстрый алгоритм C>if(i & (i-1)) но если нет — реально ли до этого дотумкать в течении пары минут ?
Не знаю, этот факт уже давно лежит в подсознании. Думаю, за пару минут я бы его оттуда достал. Если только не заклинит на чём-нибудь.
C>п.с. и вооще ухожу под С# все равно еще стандарта через два они с С++ будут похожи ...
Удачи на новом поприще
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re: Тесты и с++
От:
Аноним
Дата:
29.08.07 20:25
Оценка:
C>2.Кросплатформенность – опять тотже вопрос – неужели так много народу пишет на С++ кросплатформенные приложения , которые еще вдобавок должны компилиться любыми компиляторами под любые операционки и под любые архитектуры процессоров? C>Если пишу под вин msvc если под nix — gcc типы и размерность данных известны ... BCE. C>Хотите кросплатформенности — пишите на жабе — в чем проблемы ? C>Много ли кросплатформенных проектов пишуться на сях ?
Насчет виндов. Они ведь тоже есть разные. Win32, Win64, WinMobile...
А>Во-вторых это заставит разрабатывать лучшую архиректуру и в итоге получить лучший код. А>Если ты разрабатываешь кросплатформенный код (ну или то, что будет легко портировать), А>то ты как минимум должен явно выделить интерфейсы со внешним миром (гуй, файлы и пр...)
+1
даже если не прицеливаться на кроссплатформенность, получится просто хороший код,
с точки зрения структурированности, и удобства сопровождения
Re: Тесты и с++
От:
Аноним
Дата:
29.08.07 20:36
Оценка:
C>1.Неужели в реальном программинге так часто используються шаблоны? C>Я имею гдето 5-6 законченных проектов от начала до конца и хренову кучу доработок и только раз использовал шаблоны , да и то от скуки. C>Мне казалось что шаблоны нужны для использования в системных библиотеках а ля буст стл и т.д. . C> Неужели так много народу пишет системные библиотеки ? C>Я не утверждаю что это нужно не знать , но думаю что в большинстве случаев в шаблонах нет необходимости.
А у нас во многих проектах шаблоны есть. Ненавороченные, по сути небольшие хелперы. Но есть — мне они упрощают жизнь. Кстати раньше я их тоже не понимал и писал код без них нифига не понимая зачем нужны эти треугольные скобочки когда можно сделать ctrl+c/ctrl+p и усе будет ок...
C>3.Алгоритмы — ( у меня лично есть небольшие недостатки по мат анализу алгоритмов , но да суть не в этом) . В вышеупомянутом посте функция подсчета C>битов — она же подсчитывает (что еще надо?) ... C>И тут все полезли меряться пи...ками , типа можно так , а можно и так C>, а типа если под такой проц так загнуть а под другой этак ( я думаю и теорию графов тут можно как нибудь прикрутить ). C>Мне кажеться — если у тебя есть гвоздь и молоток и тебе надо забить гвоздь — берешь гвоздь C>и х..шь по нему молотком пока не забьешь ... ВСЕ ... не надо плясать у молотка C>полчаса и обклеивать его стразами для красоты ( поэтому иногда не люблю C>когда критикуют типа индийский код ( индийцы в программинге как хохлы в строительстве быстро и недорого ( не очень красиво , но недорого) )) C>... если надо оптимизировать — полчаса в гугле и готово ... C>ну или в книге ... В ТОМ СЛУЧАЕ — ЕСЛИ НАДО. C> Как часто вам приходиться оптимизировать алгоритмы для работы с битами C>если вы пишете софт для обработки данных с какого нибудь мускуля ?
Если бы да кабы. Мы вот например — системшики-безопасники... И тут даже математика бывает нужна.
C>4. По поводу ошибок в написании — я вообще с первого раза не пишу правильно C>чтобы скомпилилось (я не имею в виду что нибудь типа а++; а так — 20-30 строк)( а Вы ?) . Сначала набрасываю основную идею , а потом под отладчиком дошлифовываю. C>Ебстественно я также пишу на бумаге на собеседовании . (ну это так — личное)
Ну ошибки можно разделить на несколько типов — опечатки, ошибки синтаксиса, и идейные ошибки. Например если человек забывл написать virtual в деструкторе базового класса это уже о чем то говорит...
C>Из реального — мне очень понравился такой метод тестирования — C>дали проект , компилер и мсдн и попросили убрать при компиляции все ошибки и C>варнинги и сказать свое мнение по части пары классов ( после тестирования меня брали но на предыдущей работе перебили цену).
нуну... Не сомневаюсь что понравился
C>п.с. и вооще ухожу под С# все равно еще стандарта через два они с С++ будут похожи ...
А кто держит? Скатертью дорожка. Чем меньше конкурентов на рынке труда тем лучше
1. Я имел в виду не использование а написание собственных шаблонов ...
использование это само собой ...практически все библиотеки их юзают даже мфц ... и кудауж без вектора и стрингов
2 64 бита не учел ... но гуи ? эт так риторически ...
3. Самый больной моя мозоль —
Я просто имел в виду — что не вижу смысла в преждевременной оптимизации или излишнем усложнении кода
только ради того чтобы показать свои знания.
Из реального — на собеседовании
нужно было сделать обход вектора с выполнением к каждому члену какойто операции —
есть два варианта ... первый — через for и []
второй — то ли for_each то ли transform (не часто пользую поэтому не помню) ...
я говорю — что пользую for потому что это проще и наглядней и понятней человеку незнакомому с контейнером
мне — фи это моветон ... почему не объяснили ... только потому что показывает незнание как писать и использовать
предиктаты ( т.е. я то знаю но не вижу смысла) ?
Это то что я имел в виду.
п.с. и за что это вы так шарп не любите ?
потому что на нем можно делать то же самое что на цпп только с меньшими знаниями и затратами ?
ну только если небольшая потеря производительности ...
C>есть два варианта ... первый — через for и [] C>второй — то ли for_each то ли transform (не часто пользую поэтому не помню) ... C>я говорю — что пользую for потому что это проще и наглядней и понятней человеку незнакомому с контейнером C>мне — фи это моветон ... почему не объяснили ... только потому что показывает незнание как писать и использовать C>предиктаты ( т.е. я то знаю но не вижу смысла) ?
Почему, и в чем смысл давно и аргументированно написано у Скотта Майерса, в книге "Эффективное использование STL". У Вас есть чем опровергнуть то, что там утверждается ?
C>п.с. и за что это вы так шарп не любите ? C>потому что на нем можно делать то же самое что на цпп только с меньшими знаниями и затратами ? C>ну только если небольшая потеря производительности ...
Вот. Да же вы сами не написали ключевое слово все. На шарпе/яве нельзя делать всего, что можно на С/С++.
Еще есть ключевое слово везде. Под все ли платформы доступны фреймворки ?
А производительность — то же ключевое слово, тк в некоторых ситуациях именно она является узким местом
C>п.с. и за что это вы так шарп не любите ? C>потому что на нем можно делать то же самое что на цпп только с меньшими знаниями и затратами ? C>ну только если небольшая потеря производительности ...
да любим мы его, любим. только вот есть довольно потери в производительности (ну да это мелочи, при возрастающей скорости разработки на это можно закрыть глаза), и невозможно писать кросс-платформенные приложения (лично для меня это огромный минус, уровня "нет смысла знакомится с языком").
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Smal, Вы писали:
S>>Там именно мета-программирование. Если упрощенно, то несколько mpl::vector-ов (около 10), описывают класс. S>>По этим данным строится state-машина (возможно многоуровневая), генериуется таблица переходов, происходит подписка на event-ы WH>Я бы написал внешний кодогенератор. WH>ИМХО былобы сильно проще написать и поддерживать да и проект компилировался бы сильно быстрее.
Вероятно. Но это дополнительный уровень косвенности. Его тоже надо отлаживать...
Здравствуйте, dip_2000, Вы писали:
C>>Всем спасибо — все что надо -выяснил _>
_>Почему, и в чем смысл давно и аргументированно написано у Скотта Майерса, в книге "Эффективное использование STL". У Вас есть чем опровергнуть то, что там утверждается ?
Опровергать не буду ... но ... есть некоторые замечания —
эффективность — почему в примере он использует для проверки последнего элемента функцию end()
почему бы не объявить vector<blblabla>::interator end = vec.end();
или же как я — int size = vec.size();
for(int i =0;i<size;i++) // здесь конечно должен быть преaиксный инкремент но поскольку это простой тип я не иду на уступки красивости
чем этот вариант менее эффективен вызову предиктата , учитывая накладные расходы на вызов лишней функции ?
Я не оспариваю что для контейнеров не имеющих произвольного доступа вариант с алгоритмами имеет смысл , но писать везде
по обезьяньи не понимая зачем , а только потому что так надо ...
правильность — я не делаю ошибок
удобство сопровождения — с моим кодом позже будут работать люди , которые возможно и не слышали слова stl
_>Вот. Да же вы сами не написали ключевое слово все. На шарпе/яве нельзя делать всего, что можно на С/С++.
Так ли сильно это надо ? в конце концов критическую часть кода можно писать и на цпп
опять же есть unmanaged _>Еще есть ключевое слово везде. Под все ли платформы доступны фреймворки ?
MONO ? _>А производительность — то же ключевое слово, тк в некоторых ситуациях именно она является узким местом
см выше ...
_>PS Боюсь опять все свалится во флейм