Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> А пишут ли ещё на Си++? 
:(
    Опции темы
Thunderbolt
Дата 6.2.2013, 10:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


DevRel
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 7.11.2007
Где: Тула

Репутация: нет
Всего: 16



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

Мы разрабатываем инструмент анализа кода PVS-Studio для разработчиков Си/Си++ приложений. Иногда меня спрашивают, почему именно для этих языков, ведь Си/Си++ это старый язык, на котором мало кто пишет. Когда я говорю, что это весьма популярный язык и широко используется, они искренне удивляются.

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

Это не так. Это очень популярный, живой и активно развивающийся язык. Чтобы убедиться в этом, достаточно взглянуть на рейтинг языков программирования. На данный момент это: TIOBE Programming Community Index for January 2013

user posted image

Если просуммировать C, C++ и Objective-C то мы получим 37%. Это в 6 раз больше, чем например у PHP. Не о каком угасании языков семейства Си/Си++ не может речи. 

Вот и ответ на вопрос, почему мы предпочитаем разрабатывать PVS-Studio именно для Си/Си++. Потому, что это наиболее востребованные языки на данный момент. Ну а во-вторых, они сложны, коварны и способствуют большому количеству ошибок. Просто райское место для развития статических анализаторов кода.

Примечание. Не стоит это воспринимать как критику языка Си или Си++. Это плата за гибкость и получение быстрого оптимизированного кода.

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

Вот список известных приложений, написанных на языке Си++: C++ Applications.

И напоследок хочу дать ссылку на обсуждение: Why is C++ still a very popular language in quantitative finance?

P.S. А Вы что думаете по этому поводу?

--------------------
Карпов Андрей, DevRel в PVS-Studio.
PM MAIL WWW   Вверх
Alexeis
Дата 6.2.2013, 13:26 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Thunderbolt @  6.2.2013,  11:53 Найти цитируемый пост)
Мы разрабатываем инструмент анализа кода PVS-Studio для разработчиков Си/Си++ приложений. Иногда меня спрашивают, почему именно для этих языков, ведь Си/Си++ это старый язык, на котором мало кто пишет. Когда я говорю, что это весьма популярный язык и широко используется, они искренне удивляются.

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Thunderbolt
Дата 6.2.2013, 15:19 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


DevRel
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 7.11.2007
Где: Тула

Репутация: нет
Всего: 16



Цитата(Alexeis @ 6.2.2013,  13:26)
язык сам по себе плох и нуждается в таком специальном инструменте

Я бы не был столь категоричен. Как я понимаю, php или Fortran не лучше. А, например, опечатоки вообще легко можно наделать в любом языке.
--------------------
Карпов Андрей, DevRel в PVS-Studio.
PM MAIL WWW   Вверх
Alexeis
Дата 6.2.2013, 16:39 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



При этом фортран не претендует на роль универсального языка, а в своей нише решает свои задачи эффективно. На счет php не знаю, но C# в случае опечатки не сможет создать такой код, который затрет чужой участок памяти и вызовет труднодиагностируемую ошибку. Получим либо ошибку компиляции или ошибку выхода за границу диапазона. В любом случае программа будет ругаться в момент появления ошибки и сразу же укажет на нее. Поэтому необходимость в стороннем инструменте отсутствует. 
  В одном из холиваров С++ vs Delphi была шутка, что опытный С++ программист с легкостью решит несуществующую в Delphi проблему. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
volatile
Дата 6.2.2013, 18:14 (ссылка) |   (голосов:9) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: нет
Всего: 85



Цитата(Alexeis @  6.2.2013,  16:39 Найти цитируемый пост)
С++ программист с легкостью решит несуществующую в Delphi проблему.  

у дельфей нет проблем?
Хотя да. Нет языка - нет проблем. smile

PM MAIL   Вверх
fish9370
Дата 8.2.2013, 09:32 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: нет
Всего: 1



я бы не стал смешивать языки Си и Си++


--------------------
undefined
PM MAIL WWW ICQ   Вверх
_GRIN_
Дата 8.2.2013, 09:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: нет
Всего: 7



ИМХО.
У каждого языка своя приминимость.
Так где критична надёждность и скорость работы кода - будет C/С++ (например авиация - из личного опыта)
Так где более важна скорость разработки - там будет C# или подобные.



--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
Alexeis
Дата 8.2.2013, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



>я бы не стал смешивать языки Си и Си++ 
+1

Цитата(_GRIN_ @  8.2.2013,  10:55 Найти цитируемый пост)
Так где критична надёждность и скорость работы кода - будет C/С++ (например авиация - из личного опыта)

Ну скорость еще туда-сюда, а вот надежность спорный вопрос. Там, где действительно нужна надежность, используют язык Ada вместо С++ , а там где скорость Fortran . С++ ни рыба ни мясо. Компромисс в тех ситуациях где он уместен.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
drug007
Дата 8.2.2013, 13:23 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



Цитата(Alexeis @  8.2.2013,  11:20 Найти цитируемый пост)
Ну скорость еще туда-сюда, а вот надежность спорный вопрос. Там, где действительно нужна надежность, используют язык Ada вместо С++ , а там где скорость Fortran . С++ ни рыба ни мясо. Компромисс в тех ситуациях где он уместен.

Как-то не очень вяжется с тем, что в F-22 американцы использовали именно С/С++. Ни Аду, ни Фортран - именно кресты. ИМХО, конечно, но Ада отомрет помаленьку, а Фортран так и останется нишевым языком, живущим за счет большого числа когда-то написанных библиотек. В принципе, эта участь уготована и С/С++ (да и любому другому успешному языку), вопрос только когда.
PM MAIL   Вверх
Alexeis
Дата 8.2.2013, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(drug007 @  8.2.2013,  14:23 Найти цитируемый пост)
Как-то не очень вяжется с тем, что в F-22 американцы использовали именно С/С++. 

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
xvr
Дата 8.2.2013, 15:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: нет
Всего: 223



Цитата(Alexeis @  8.2.2013,  11:20 Найти цитируемый пост)
Там, где действительно нужна надежность, используют язык Ada вместо С++ , 

Увы, даже супер надежные языки (типа Ada) не гарантируют безошибочности программ. Достаточно вспомнить Ariane 5



Самый дорогой феерверк - пол миллиарда евро  smile 


Это сообщение отредактировал(а) xvr - 8.2.2013, 15:56
PM MAIL   Вверх
fish9370
Дата 8.2.2013, 16:03 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: нет
Всего: 1



интересно другое, почему Си до сих пор так популярен?


--------------------
undefined
PM MAIL WWW ICQ   Вверх
volatile
Дата 8.2.2013, 17:12 (ссылка) |   (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: нет
Всего: 85



Цитата(xvr @  8.2.2013,  15:54 Найти цитируемый пост)
даже супер надежные языки (типа Ada) не гарантируют безошибочности программ

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


Это сообщение отредактировал(а) volatile - 8.2.2013, 17:19
PM MAIL   Вверх
Alexeis
Дата 8.2.2013, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(volatile @  8.2.2013,  18:12 Найти цитируемый пост)
Все самые тяжелые ошибки в логике, а не в синтаксисе. И здесь надежных языков нет, и быть не может.

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

Цитата(volatile @  8.2.2013,  18:12 Найти цитируемый пост)
Способствуют даже. (ошибочности).
Программеры расслаблены, им навесили науши что язык супер-надежный.

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

Цитата(fish9370 @  8.2.2013,  17:03 Найти цитируемый пост)
интересно другое, почему Си до сих пор так популярен? 

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
volatile
Дата 8.2.2013, 23:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: нет
Всего: 85



Цитата(Alexeis @  8.2.2013,  18:03 Найти цитируемый пост)
 Так говорить, все равно что - "А давайте дадим повару супер острый нож с кучей зубчиков и торчащих опасных штук. Повар будет бояться порезаться и будет всегда им аккуратно пользоваться

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

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

---
Тема перешла в холивар уже.
Удачный маркетинговый ход ТС, надо признать.
А название как удачно подобрано, загляденье... 

PM MAIL   Вверх
SVN74
Дата 10.2.2013, 15:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: нет
Всего: 18



Чем выше уровень языка, тем больше он напичкан чужими либами решающими на первый взгляд рутинные задачи, но не забывайте что "дядя  Сем" написавший за вас рутину тоже мог наделать ошибки, которые в последствии по вылазят  в ваших проектах...
В данном случае С++ оптимальный вариант для тех, кто знает и понимает ПК изнутри (адресации, битность, разрядность, фрагментации и т.д.), и хочет по своему оптимизировать свое приложение...
Конечно никто не лишен ошибок и тут то на помощь таким людям, другие  - добрые люди написали  PVS-Studio, за что им низкий поклон...
Если же вас не интересует ПК изнутри, а просто хочется побыстрее изваять некую логику, то тогда лучше выбирать готовые  "ядра от дяди  Сема" - 5 строк = 3D анимация... smile    
PM MAIL WWW   Вверх
drug007
Дата 11.2.2013, 06:43 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



Цитата(SVN74 @  10.2.2013,  15:53 Найти цитируемый пост)
Чем выше уровень языка, тем больше он напичкан чужими либами решающими на первый взгляд рутинные задачи, но не забывайте что "дядя  Сем" написавший за вас рутину тоже мог наделать ошибки, которые в последствии по вылазят  в ваших проектах...

С другой стороны, если эти либы используются тысячами программистов по всему миру, то вероятность невыловленного бага в них намного меньше чем в собственном велосипеде.


Цитата(SVN74 @  10.2.2013,  15:53 Найти цитируемый пост)
В данном случае С++ оптимальный вариант для тех, кто знает и понимает ПК изнутри (адресации, битность, разрядность, фрагментации и т.д.), и хочет по своему оптимизировать свое приложение...

Вот мне нужно рассчитать упругость крыла в конкретных условиях. Зачем мне понимание ПК изнутри? Я знаю аэродинамику и мне нужно решить задачу из конкретной области, зачем мне отвлекаться на архитектуру ПК? Оптимизировать нужно уже отлаженное приложение - про роль преждевременной оптимизации в современном мире мы все знаем.
Это имеет глубокий смысл, если я не заказчик решения задачи, а исполнитель - тогда да, сложность языка и трудности в подготовке достойных специалистов позволят обосновать бюджет.
На эту тему мне всегда вспоминаются военные АСУ - это жуткое воплощение полной противоположности понятию "интуитивно понятный интерфейс". Полное впечатление, что их создавали люди с другой планеты. Когда мне сказали, что в одном истребительно-авиационном полку начальник штаба наводил перехватчики в автоматизированном режиме и "лабал на нем как Ростропович на пианино" я был дико удивлен - вся работа в АСУ, что я видел до этого сводилась к банальному ежедневному контролю функционирования. Там невероятное количество кнопок и условных обозначений. Причем эти обозначения у меня вызывали четкую ассоциацию с китайскими иероглифами - примерно также я их и понимал. Эти АСУ тоже нужно долго изучать и потом специалист по ним ценится на вес золота. Но это же извращение!
Цитата(SVN74 @  10.2.2013,  15:53 Найти цитируемый пост)
Если же вас не интересует ПК изнутри, а просто хочется побыстрее изваять некую логику, то тогда лучше выбирать готовые  "ядра от дяди  Сема" - 5 строк = 3D анимация... 

Это плохо с точки зрения исполнителя, с точки зрения заказчика - очень даже шикарно. С учетом того, что программистам работу дают как раз последние выводы очевидны. Кресты держатся за счет legacy кода, как не крути.

А в целом инструмент выбирается исходя из задачи, конечно же.
PM MAIL   Вверх
Alexeis
Дата 11.2.2013, 09:05 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(volatile @  9.2.2013,  00:30 Найти цитируемый пост)
Ошибка стоимостью в пол миллиарда евро, это не просто случайная ошибка.
Это закономерность. Думаю интерес к так называемым"супернадежным языкам" пойдет на спад.

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

Цитата(volatile @  9.2.2013,  00:30 Найти цитируемый пост)
Просто в одном случае повара предупредили, а в другом сказали что нечего беспокоицца.

  Почему вы думаете, что программисты на других языках не знают, что такое логические ошибки? Они что не также учились программированию? Кстати такая "космическая" ошибка была у меня в проекте на С++ и я очень долго искал ее. У меня было преобразование short->float->double->float->short . Тип данных short являлся аппаратным, а double использовался для математической обработки чтобы сохранить точность при возведении в квадрат. Аппаратура выдала значения вне рабочего диапазона и соответственно на преобразовании float->short получилась ошибка переполнения безо всяких исключений. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
NoviceF
Дата 11.2.2013, 09:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: 2



Цитата(drug007 @  11.2.2013,  07:43 Найти цитируемый пост)
Кресты держатся за счет legacy кода, как не крути.

 smile 

а как же... скорость? :cry:

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

Ну и плюс идеологически, пожалуй, самый свободный язык - нет кровавой пяты корпораций зла или добра (всё время путаю какая из них кто), достаточно широко используется в свободном ПО.
PM MAIL   Вверх
drug007
Дата 11.2.2013, 17:35 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



Цитата(NoviceF @  11.2.2013,  09:11 Найти цитируемый пост)
а как же... скорость?

Скорость? Очень часто она достигается _аппаратными_ средствами. Т.е. недостаток быстродействия какого-то языка можно компенсировать железом. А вот отсутствие библиотек и необходимость их написания с нуля и доведением до продакшена - ничем компенсировать нельзя. Так что (ИМХО) legacy код перевешивает быстродействие.
Цитата(Alexeis @  11.2.2013,  09:05 Найти цитируемый пост)
 Умение генерить ошибку в момент ее возникновения это важнейшая особенность компилятора и языка, который предполагает такое поведение. 

Согласен. Также полностью согласен с подходом, когда код обильно проверяется (ассертами или другими средствами языка) с целью как можно быстрее сломать его - именно для чтобы быстрее выявить все ошибки.
PM MAIL   Вверх
volatile
Дата 11.2.2013, 23:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: нет
Всего: 85



Двухколесные велосипеды - очень плохие велосипеды.
Я вот привых катацца на велосипеде с боковыми колёсиками, но однажды мне необходимо было поехать на 2-ух колёсном велосипеде.
Так я чуть голову не сломал.
Поэтому предлагаю:
Запретить всем ездить на 2-ух колёсных велосипедах.
Это очень опасно.
Например, если вы потеряете равновесие, то вас ничего не задержит от падения.
И в аварии вы будете попадать чаще.
Двухколесные велосипеды - зло!

Лучше всего использовать велосипеды с боковыми колёсиками.
Они вас защитят от любых авто-катастроф.
Еще лучще использовать "супер-надежные" трехколесные велосипеды с  прицепом.
На них вы точно никогда не опрокинетесь, и никогда не  попадете ни в какую аварию!

PM MAIL   Вверх
korian
Дата 12.2.2013, 02:43 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: нет
Всего: 17



Цитата(volatile @  11.2.2013,  22:48 Найти цитируемый пост)
Двухколесные велосипеды - очень плохие велосипеды.

молодец! smile
Но если так подумать, программеры занимаются тем, что автоматизирую деятельность третих лиц. И тут очень плохо, когда язык не позволяет автоматизировать деятельность себя (т.е. программера).
Впринципе все языки этими грешны, у всех есть проблемы.
Развиваемся потихоньку, спорить тут не о чем. У кого-то есть плюсы у когото минусы, потом другие языки перенимают что-то и все разививается и очень класно за этим наблюдать smile
Сам я очень люблю C++, хотя щас уже год педалю на Java, но с удовольствием вернулся на C++, если б дали болльше денех.
Порог вхождения в C++ на много выше чем в ту же Java, поэтому для бизнеса это менее интересно. Надо много программеров, а не несколько супер классных.

PM   Вверх
drug007
Дата 12.2.2013, 08:25 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



Цитата(volatile @  11.2.2013,  23:48 Найти цитируемый пост)
Двухколесные велосипеды - очень плохие велосипеды.

АБСОЛЮТНО неверная аналогия.
Хотите кататься на двухколесном велосипеде? Пожалуйста! Катайтесь. В свободное от работы время. А на работе будьте любезны ездить на автомобиле. Да. вы там не выправите вилку, если в дерево стукнулись. Не сможете проехать там, где ездили на велосипеде. Даже правила дорожного движения соблюдать надо! И если столкнетесь с другим автомобилем ушибами не отделаетесь. Но это же совсем разные вещи по эффективности, правда? Да, вы не разберете автомобиль так же быстро, да, вы на нем будете просто наездником, но это же небо и земля! А иначе можно сделать сложный язык и посвящать в него только избранных и гордится тем что мы умные и знаем этот язык - а вы все плебеи. Интересное преимущество - уметь ездить на двухколесном велосипеде, когда вокруг столько возможностей доехать намного быстрее и проще.
PM MAIL   Вверх
NoviceF
Дата 12.2.2013, 08:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: 2



Цитата(volatile @  12.2.2013,  00:48 Найти цитируемый пост)
Лучше всего использовать велосипеды с боковыми колёсиками.
Они вас защитят от любых авто-катастроф.

 smile 
PM MAIL   Вверх
Alexeis
Дата 12.2.2013, 08:52 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Как всегда в таких вопросах, тема переросла в холивар. Так что пусть тут побудет. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Akella
Дата 12.2.2013, 10:35 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 1
Всего: 329



Цитата(Thunderbolt @ 6.2.2013,  15:19)
Цитата(Alexeis @ 6.2.2013,  13:26)
язык сам по себе плох и нуждается в таком специальном инструменте

Я бы не был столь категоричен. Как я понимаю, php или Fortran не лучше. А, например, опечатоки вообще легко можно наделать в любом языке.

Нельзя, по крайней мере не на любом
PM MAIL   Вверх
k0rvin
Дата 12.2.2013, 11:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



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

Добавлено через 1 минуту и 18 секунд
Цитата(drug007 @ 11.2.2013,  17:35)
Скорость? Очень часто она достигается _аппаратными_ средствами. Т.е. недостаток быстродействия какого-то языка можно компенсировать железом. А вот отсутствие библиотек и необходимость их написания с нуля и доведением до продакшена - ничем компенсировать нельзя. Так что (ИМХО) legacy код перевешивает быстродействие.

Так и представляю себе F22 с Blue Gene на борту... =)


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
drug007
Дата 12.2.2013, 12:38 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



Цитата(k0rvin @  12.2.2013,  11:58 Найти цитируемый пост)
Alexeis, юнит-тесты решают, а C++ юзают из-за меньшего (неявного) ран-тайм оверхеда (принцип нулевой стоимости) и вообще больших возможностей контроля поведения результирующего кода, чем в более высокоуровневых ЯП.


Цитата(k0rvin @  12.2.2013,  11:58 Найти цитируемый пост)
Так и представляю себе F22 с Blue Gene на борту... =) 

Возможно это удивительно, но многие военные компьютеры и у нас и у них очень деревянные с точки зрения обычного обывателя. На том же Ф-22 стоят микроконтроллеры 90ых годов - и ничего, единственный в мире самолет 5-го поколения. Это я к тому, что выжимать все соки из железа далеко не всегда нужно. Когда ЭВМ только создавались и использовались в качестве числодробилок - это да, было актуально. А сейчас слишком много областей, где вычислительная мощность процессора превосходит потребности приложения. Тот же Питон не на ровном месте получил такую популярность, уже подумываю присмотреться к нему.

Это сообщение отредактировал(а) drug007 - 12.2.2013, 12:38
PM MAIL   Вверх
Alexeis
Дата 12.2.2013, 13:21 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(k0rvin @  12.2.2013,  12:58 Найти цитируемый пост)
Alexeis, юнит-тесты решают, а C++ юзают из-за меньшего (неявного) ран-тайм оверхеда 

  Допустим у меня есть конечный автомат с 10ю входами. Каждый вход имеет 2^32 варианта значений. Известно, что есть всего 5-6 комбинаций входных значений, которые фейлят автомат. Итого имеем (2^32)^10 = 2^320 вариантов входного состояния. Для справки это число комбинаций с сотней десятичных нулей. Подскажите как мне юнит-тестами попасть на эти нужные 5-6 комбинаций входов. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
serger
Дата 12.2.2013, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 0
Всего: 5



Alexeis, а юнит тесты обязаны всегда все варианты проверять?


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
k0rvin
Дата 12.2.2013, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Alexeis @ 12.2.2013,  13:21)
  Допустим у меня есть конечный автомат с 10ю входами. Каждый вход имеет 2^32 варианта значений. Известно, что есть всего 5-6 комбинаций входных значений, которые фейлят автомат. Итого имеем (2^32)^10 = 2^320 вариантов входного состояния. Для справки это число комбинаций с сотней десятичных нулей. Подскажите как мне юнит-тестами попасть на эти нужные 5-6 комбинаций входов.

Есть допустимый процент покрытия.

А про C/C++ один знакомый, занимающийся тестированием (авиационного, кажется) софта:
Цитата
Вот пара наиболее набивших оскомину (выдержек из отраслевого стандарта -- мое прим.).
Цитата
These aspects of the system should be considered when designed partitioning protection to determine their potential for violating that protection:

  • Hardware resource...
  • ...
  • Data coupling...
  • ...

Предсказуемость по ресурсам и связности данных фактически ставит крест на функциональных и декларативных языках. Первые очень сложно, а вторые невозможно прогнозировать в плане требований к памяти и времени. Некие верхние границы в целом на процесс, безусловно, есть всегда, но требования к предсказуемости распространяются на весь софт как целиком, так и на каждую его часть сколь угодно малого размера вплоть до отдельных пунктов low-level требований. Предсказуемость как свойство гарантирует возможность полностью восстановить работу комплекса по документации на него и данных чёрных ящиков. Думаю, не нужно объяснять, зачем это надо и почему это так важно для высококритичного ПО.

Цитата
The structural coverage analisys may be performed on the Source Code, unless the software level is A and the compiler generates object code that is not directly traceable to Source Code statements. ...

Это практически ставит крест на всякоразных сборщиках мусора (впрочем, они и в предыдущий пункт не вписываются), проверках индексов массивов, инициализированности переменных перед использованием итп, в общем всего того, что "черезчур умный" компилятор может добавить в код по своему усмотрению сверх того, что явно написано в сырцах. Потому как покрытие софта уровня А по факту собирается по объектному коду, и если нет однозначной трассировки на исходный или требования, то это дыры в покрытии, которые нужно закрыть. Попробуй закрыть дыру, которая в принципе не может случиться, потому что программер идиот нигде не вышел за пределы массива. Я утрирую, если кто не понял. И это всего лишь императив...
Потому-то тут C/C++ обычно рулят, они очень предсказуемы. Впрочем, даже Плюсам достаётся с его-то нулевой стоимостью. Исключения, RTTI и шаблоны обычно запрещены стандартом предприятия, в крайнем случае разрешены в очень консервативном виде. 


Про Ada он немного слышал:
Цитата
Был проект на ADA. Я им не занимался, но парни рассказывали, что супер. Там больше половины кода - это типизация, а тестов - анализ типов, их свойств и взаимоотношений. И покрытие собирается средой почти на автомате. Ишуков было мало и практически все - на использование типов.



--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
drug007
Дата 12.2.2013, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



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

Но у меня вопрос - почему требования к data coupling ставит крест на функциональных и декларативных языках? Да, там порядок промежуточных действий не определен (в функциональных) или сами действия не определены (декларативные), но результат-то определен. Или я что-то путаю?

PM MAIL   Вверх
mes
Дата 12.2.2013, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(Alexeis @  12.2.2013,  12:21 Найти цитируемый пост)
Известно, что есть всего 5-6 комбинаций входных значений, которые фейлят автомат. 


Цитата(Alexeis @  12.2.2013,  12:21 Найти цитируемый пост)
Подскажите как мне юнит-тестами попасть на эти нужные 5-6 комбинаций входов.  

 smile 


--------------------
PM MAIL WWW   Вверх
Alexeis
Дата 12.2.2013, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Я не говорю, что юнит тесты должны обеспечить проверку всех вариантов. По факту есть такие проблемы. У меня реально такой проект где я руками попал на такой вариант, когда конечный автомат ломался лишь в некоторых точках. А вариантов примерно столько сколько я указал. Случайно вышел на круглые числа и система фейлиться. Потратил день отладки на выяснение причины, а потом еще время на исправление. Именно из-за особенностей С++ тратиться куча времени на поиск причин ошибок. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
k0rvin
Дата 13.2.2013, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(drug007 @ 12.2.2013,  18:27)
Но у меня вопрос - почему требования к data coupling ставит крест на функциональных и декларативных языках? Да, там порядок промежуточных действий не определен (в функциональных) или сами действия не определены (декларативные), но результат-то определен. Или я что-то путаю?

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

Добавлено через 1 минуту и 15 секунд
Цитата(Alexeis @ 12.2.2013,  22:05)
Я не говорю, что юнит тесты должны обеспечить проверку всех вариантов. По факту есть такие проблемы. У меня реально такой проект где я руками попал на такой вариант, когда конечный автомат ломался лишь в некоторых точках. А вариантов примерно столько сколько я указал. Случайно вышел на круглые числа и система фейлиться. Потратил день отладки на выяснение причины, а потом еще время на исправление. Именно из-за особенностей С++ тратиться куча времени на поиск причин ошибок.

А при чем тут  С++? Можно подумать на любом другом языке аналогичный код вел бы себя по-другому.


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Wowa
Дата 13.2.2013, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



user posted image
просьба распространять графику по другим сайтам smile
PM WWW   Вверх
Alexeis
Дата 13.2.2013, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Wowasmile 

Цитата(k0rvin @  13.2.2013,  08:06 Найти цитируемый пост)
А при чем тут  С++? Можно подумать на любом другом языке аналогичный код вел бы себя по-другому. 

  Еперный театр, конечно же по другому. Уже, наверное, десяток сообщений был о том, что ошибка должна диагностироваться в момент появления, а не постфактум по странностям поведения программы. Ставили пример C#, Java, Ada и т.д. и тут опять на тебе! Наша песня хороша, начинай сначала! 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
k0rvin
Дата 13.2.2013, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Alexeis @ 13.2.2013,  13:11)
  Еперный театр, конечно же по другому. Уже, наверное, десяток сообщений был о том, что ошибка должна диагностироваться в момент появления, а не постфактум по странностям поведения программы. Ставили пример C#, Java, Ada и т.д. и тут опять на тебе! Наша песня хороша, начинай сначала!

Здрасте-приехали. Пример того автомата реквестирую на C#/Java/Ada/Что-там-тебе-нравится, в котором внезапно не будет этой ошибки.


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Alexeis
Дата 13.2.2013, 13:33 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



  Еще раз читаем текст. 

Цитата(Alexeis @  13.2.2013,  14:11 Найти цитируемый пост)
Еперный театр, конечно же по другому. Уже, наверное, десяток сообщений был о том, что ошибка должна диагностироваться в момент появления, а не постфактум по странностям поведения программы. Ставили пример C#, Java, Ada и т.д. и тут опять на тебе! Наша песня хороша, начинай сначала!  

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
k0rvin
Дата 13.2.2013, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Alexeis @ 13.2.2013,  13:33)
Еще раз читаем текст. 

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

Лолшто, простите? Какие проверки исчезли? Еще раз: покажи как тот же C#
Цитата

Я не говорю, что юнит тесты должны обеспечить проверку всех вариантов. По факту есть такие проблемы. У меня реально такой проект где я руками попал на такой вариант, когда конечный автомат ломался лишь в некоторых точках. А вариантов примерно столько сколько я указал. Случайно вышел на круглые числа и система фейлиться. Потратил день отладки на выяснение причины, а потом еще время на исправление. Именно из-за особенностей С++ тратиться куча времени на поиск причин ошибок.


поможет тебе избежать этой ошибки.

P.S. А тестируют вообще-то релизный скомпилированный ппродукт.

Это сообщение отредактировал(а) k0rvin - 13.2.2013, 13:42


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
volatile
Дата 13.2.2013, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: нет
Всего: 85



Цитата(k0rvin @  13.2.2013,  13:42 Найти цитируемый пост)
Лолшто, простите? Какие проверки исчезли? 

k0rvin, я думаю ассертами люди увлекаюцца непомерно.
Цитата(drug007 @  11.2.2013,  17:35 Найти цитируемый пост)
Также полностью согласен с подходом, когда код обильно проверяется (ассертами или другими средствами языка)

 smile 

Alexeis, исключения надо кидать в вашем случае, а не ассертами обильно проверять.
Впрочем, телепатирую. Не видя код вряд-ли можно что-то конкретное подсказать.

PM MAIL   Вверх
drug007
Дата 14.2.2013, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



volatile, ассерты и исключения не взаимоисключающие вещи. И не вижу ничего выдающегося в обильных проверках чтобы их выделять курсивом - разве что некоторая художественность в слове "обильный". Видимо она (художественность) у вас не сочетается с образом сурового челябинского программиста?  smile 

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

Alexeis, имхо, имеет в виду, что средства языка должны выявлять максимум ошибок еще на этапе компиляции. и с++ с его блекджеком и прочим наследством лишен такого удовольствия - так как разработчикам компилятора проще будет повесится, чем добавить такую красоту, да и помимо имплементации еще нужно же и дизайн продумать - а тут просто черт ногу сломит. За навороченность языка и совместимость с legacy кодом приходится платить. И получилось, что С это human-readable ассемблер, а С++ - ассемблер с классами, причем дизайн языка не блещет в силу того что язык был первопроходцем. Та же STL неоднозначна, но глупо ругать Степанова за то, что он был первым. И я не ругаю плюсы, ни в коем случае, просто факт. С++ сложно ругать - его достоинства в одной ситуации могут быть и преимуществами и наоборот.
PM MAIL   Вверх
volatile
Дата 14.2.2013, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: нет
Всего: 85



Цитата(drug007 @  14.2.2013,  13:26 Найти цитируемый пост)
Ассерты это по сути дела инваринты, а исключения это способ проинформировать вызывающий код о незапланированном развитии событий. Нарушение инварианта недопустимо ни при каких условиях и равно смерти

 smile 
drug007, вам прежде чем строчить гневные посты, следует хоть поверхостно ознакомицца с особенностями языка. 
Прочитайте про ассерты. Это дебаговая вещь. причем исключительно  дебаговая.
фактически в релизе это - ничто. Т.е., что вы их написали, что не написали - смерти, не будет. smile 

Цитата(Alexeis @  13.2.2013,  13:33 Найти цитируемый пост)
На С++ отладил конечный автомат, выпустил релиз, и все проверки благополучно исчезли из кода

Вот именно ассерты и исчезли.

зы:
Мне уже вообще по барабану с вами спорить. просто хочу помочь Alexeis

PM MAIL   Вверх
drug007
Дата 22.2.2013, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



Цитата(volatile @  14.2.2013,  18:31 Найти цитируемый пост)
  
drug007, вам прежде чем строчить гневные посты, следует хоть поверхостно ознакомицца с особенностями языка. 
Прочитайте про ассерты. Это дебаговая вещь. причем исключительно  дебаговая.
фактически в релизе это - ничто. Т.е., что вы их написали, что не написали - смерти, не будет.  

Я так понимаю, что вы ассерты и не юзаете, отсюда и такой вывод сделали? Возможно я неправильно выразился, но вы совсем не поняли, что я имел в виду. Под "смерти подобно" я имел в виду, что ассерт убивает программу - если условие в ассерте не выполнилось, это означает, что приложение вышло за рамки допустимого, восстановить работоспособное состояние невозможно и выполнение приложения не имеет смысла (т.е. был нарушен инвариант). А исключение просто сигнализирует, что что-то пошло не так и вполне возможно (и чаще всего) что восстановить работоспособность приложения возможно. Т.е. не было нарушения инварианта, а возникла нетипичная ситуация неразрешимая в данном блоке кода. И происходит развертывание стека до нахождения кода, способного обработать это исключение. И только если такого обработчика не будет найдено, тогда уже будет нарушен инвариант, что все исключения должны быть обработаны и будет program terminated. То, что ассерты используются при отладке и в релизе их не будет - попрекать меня якобы не знанием этого факта не стоило, осведомлен. Более того, именно этот факт, что ассерты сразу убивают приложение и что их не будет в релизе вообще заставляет удивиться вашему утверждению, что ассертами можно чересчур увлечься и следует использовать исключения - ведь ассерты и исключения это довольно ортогональные вещи. Уж вам то, знакомому с языком не понаслышке должно быть это известно.

З.Ы. хотя возможно это я вас не понял - вы имели в виду, что в ассертах не должно быть проверок, нужных в релизе, т.к. в релизе ассертов не будет и такие проверки нужно организовывать в виде исключений? тогда я с вами совершенно согласен.  smile 

Это сообщение отредактировал(а) drug007 - 22.2.2013, 19:29
PM MAIL   Вверх
mes
Дата 22.2.2013, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(Alexeis @  12.2.2013,  21:05 Найти цитируемый пост)
Именно из-за особенностей С++ .  

Вы просто не умеете их готовить ©

Цитата(Alexeis @  12.2.2013,  21:05 Найти цитируемый пост)
Именно из-за особенностей С++ тратиться куча времени на поиск причин ошибок.  

ага, может, если программировать нa нем как на дельфи.. 

Цитата(Alexeis @  13.2.2013,  12:33 Найти цитируемый пост)
 То что пропустили юнит тесты потом можно ловить неделями, изучая странности работы программы.  


Цитата(k0rvin @  13.2.2013,  06:06 Найти цитируемый пост)
А при чем тут  С++? Можно подумать на любом другом языке аналогичный код вел бы себя по-другому. 

 smile 


Цитата(Alexeis @  13.2.2013,  12:11 Найти цитируемый пост)
Уже, наверное, десяток сообщений был о том, что ошибка должна диагностироваться в момент появления, а не постфактум по странностям поведения программы.

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

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

Добавлено через 4 минуты и 19 секунд
итого вопрос упирается в то,  лучшим считается тот язык, на котором труднее споткнуться, или на котором можно свободнее выразить мысль ?

Это сообщение отредактировал(а) mes - 22.2.2013, 21:03


--------------------
PM MAIL WWW   Вверх
Alexeis
Дата 23.2.2013, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(volatile @  14.2.2013,  00:55 Найти цитируемый пост)
Alexeis, исключения надо кидать в вашем случае, а не ассертами обильно проверять.
Впрочем, телепатирую. Не видя код вряд-ли можно что-то конкретное подсказать.

  Не всегда это твой код и ты разбираешь что в нем и как. Тебе могут передать уже разработанные модули или даже функции/классы в логику работы которых даже не вникаешь. Свой код можно делать сколь угодно безопасным, а вот с чужим сложнее, особенно если исключение пролетают 5-6 функций, пересекают границу dll и вылазят в экзешнике. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
volatile
Дата 25.2.2013, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: нет
Всего: 85



Цитата(Alexeis @  23.2.2013,  15:10 Найти цитируемый пост)
Не всегда это твой код и ты разбираешь что в нем и как. Тебе могут передать уже разработанные модули или даже функции/классы в логику работы которых даже не вникаешь. 

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

PM MAIL   Вверх
Alexeis
Дата 26.2.2013, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Ну я на всех опасных местах вызываю такую функцию
Код

inline void assert_wstr(bool CondFalse, LPCWSTR err_text)
{
    if (!CondFalse)
        throw err_text;
}

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
k0rvin
Дата 26.2.2013, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Alexeis @ 26.2.2013,  09:39)
Постоянно маюсь с проверкой подсчета ссылок интерфейсов

smart_ptr? Нет, не слышал.

Цитата(Alexeis @ 26.2.2013,  09:39)
пишу отдельные классы для хранения метаинформации о классах, потом на основе нее реализую рефлексию и делаю еще много всякой другой работы которые следует поручать компилятору языка.

Зачем в плюсах рефлексия, если там есть шаблоны?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
serger
Дата 26.2.2013, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 0
Всего: 5



Цитата(k0rvin @  26.2.2013,  12:38 Найти цитируемый пост)
Зачем в плюсах рефлексия, если там есть шаблоны?


k0rvin, а они разве взаимозаменяемы?


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
k0rvin
Дата 27.2.2013, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(serger @ 26.2.2013,  12:02)
k0rvin, а они разве взаимозаменяемы?

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


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Beltar
Дата 5.4.2013, 13:56 (ссылка)  | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Вопросец такой, а какие синтаксические преимущества имеет C++ перед Delphi 2009? 
Ну я понимаю, что раньше в плюсах шаблоны были, перегрузка операторов, успешно позволявшая раз в 100 лет написать либу по обработке комплексных чисел, или матриц и немного сократить код, присваивания вида +=, которые я бы просто запретил к использованию, т. к.

Любая синтаксическая конструкция, которая при пропуске одного элемента может превратится в другую синтаксически правильную конструкцию, подлежит немедленному исключению из языка

a+=b => a=b и ошибку вы будете искать долго. Намного дольше, чем сэкономили на печати символов. Про костыли вида if (5=a) и говорить не хочется.

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

Но сейчас шаблоны, перегрузка операторов для структур есть и в Delphi. Есть гибрид паскалевского Exit с сишным return, позволяющий сворачивать конструкции вида

Код

if Something then
  begin
  Result:=ResultCode;
  Exit;
  end;


до if Something then Exit(ResultCode);

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

Сейчас я не вижу никаких оснований серьезно изучать плюсы. Прочитать книжку, чтобы понимать примеры по WinAPI и хватит. Для работы же Delphi, как единственный вменяемый язык для генерации нативного кода (нет, а у какого еще языка под Win32\64 есть нормальная IDE и документация?), и C#, как то, что в ближайшие 10 лет точно не потонет. Си и асм по необходимости. Вопросы скорости кода и оптимизации под очередные шедевры Intel не затрагиваю, все это замечательно, но сколько программистов работает в серьезных конторах и занимается разработкой игр, или чем-то еще, где оптимизация под процы критична? Много ли программистов пишет драйверы? Нет, в основном клепается прикладное ПО. Игру же в одиночку можно склепать в Game Maker (который, о ужас, написан на Delphi) и все равно не иметь проблем с производительностью даже на процах 10-летней давности.

Это сообщение отредактировал(а) Beltar - 5.4.2013, 16:10


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
serger
Дата 5.4.2013, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 0
Всего: 5



Beltar, мне не нравится не язык, а идеология. Пишите на fp. А то win, win, win... %) не серьёзно!
Ну а по языку только субъективные претензии: выделенные var, например. Длинные ключевые слова.


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Alexeis
Дата 5.4.2013, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(serger @  5.4.2013,  20:31 Найти цитируемый пост)
Ну а по языку только субъективные претензии: выделенные var, например. Длинные ключевые слова. 

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Akella
  Дата 6.4.2013, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 1
Всего: 329



Цитата(Beltar @  5.4.2013,  13:56 Найти цитируемый пост)
Вопросец такой, а какие синтаксические преимущества имеет C++ перед Delphi 2009? 


Почему именно 2009?

Добавлено через 2 минуты и 53 секунды
Цитата(Alexeis @  5.4.2013,  23:03 Найти цитируемый пост)
 Выделенные var это как раз хороший стиль позволяющий содержать переменные в относительно порядке. Зря они сделали послабление


О каком послаблении речь?
PM MAIL   Вверх
Alexeis
Дата 6.4.2013, 12:11 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Akella @  6.4.2013,  10:19 Найти цитируемый пост)
О каком послаблении речь? 

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Beltar
Дата 6.4.2013, 12:56 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Цитата

Почему именно 2009?


Потому что все эти нововведения появились именно в ней. С тех пор серьезных изменений синтаксиса не было.

Цитата

О каком послаблении речь?


В Delphi Prism и в учебном Pascal ABC.NET можно написать что-то вроде

begin
var s:String:='Эта строка объявлена прямо в коде';
end;


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Alexeis
Дата 6.4.2013, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



  Ну Delphi Prism это отдельная песня. Сделали почти что полный клон C# . Зачем делать 2 языка, которые ну совсем уж похожи. Если Delphi.NET можно было рассматривать как основу для порта старых программ написанных на делфи на платформу .NET, то Delphi Prism отказались от обратной совместимости и сделали нечто ни к селу ни к городу. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Фантом
Дата 6.4.2013, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: нет
Всего: 49



Цитата(Alexeis @  6.4.2013,  00:03 Найти цитируемый пост)
Зря они сделали послабление. В языке С ведь тоже правило определения в начале блока.

Было. В C99 этого правила уже нет.
PM   Вверх
Alexeis
Дата 6.4.2013, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(serger @  26.2.2013,  13:02 Найти цитируемый пост)
k0rvin, а они разве взаимозаменяемы? 

+1

Мне нужно построить абстрактную фабрику, скомпоновать проект из частей описанных в XML файлах или вызывать функции из плагинов, названия которых я не знаю на этапе компиляции и не знаю типы и количество параметров. Чем мне тут помогут шаблоны? Шаблоны обеспечивают статическое связывание. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Beltar
Дата 6.4.2013, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Цитата

  Ну Delphi Prism это отдельная песня. Сделали почти что полный клон C# . Зачем делать 2 языка, которые ну совсем уж похожи. Если Delphi.NET можно было рассматривать как основу для порта старых программ написанных на делфи на платформу .NET, то Delphi Prism отказались от обратной совместимости и сделали нечто ни к селу ни к городу. 


Мне вот интересно, хоть кто-то портировал старый проект на Delphi .NET? Какой в этом профит? Паникеры же, при выходе Delphi 8, скорее всего, сразу капитулировали перед MS. Призма, точнее компилятор изначально продукт сторонний, но как компилятор Паскаля для .NET он никому не мешает, пусть и разницы там между языками 0, только шарп равнее других.  smile 
Смысла в переделывании VCL под .NET, где и так есть аналогичная библиотека я никакого не вижу. На .NET по-моему вообще ловить остальным нечего, полностью подконтрольная MS территория.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
serger
Дата 8.4.2013, 06:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 0
Всего: 5



Цитата(Alexeis @  6.4.2013,  00:03 Найти цитируемый пост)
Ну так-то скорость написания программ намного ниже чем скорость печати, так что ничуть не мешает. Выделенные var это как раз хороший стиль позволяющий содержать переменные в относительно порядке.

Ну дык кто мешает исполнять? И не надо путать теорию с практикой. Удобнее и комфортнее когда я сам могу решить где объявлять. Ну да - это источник опечаток.


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Beltar
Дата 8.4.2013, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Но у того, кто после тебя в твой код может полезть (а ты сам через месяц=другой человек) вполне может возникнуть желание взять за яйца того, кто черт знает что и где наобъявлял. Проблему, правда, маленько сглаживает возможность перехода к объявлению в современных IDE.

Вообще если послушать сишников, то они write only-программисты, порождающие код со скоростью печати.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
LSD
Дата 8.4.2013, 11:20 (ссылка) |   (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15708
Регистрация: 24.3.2004

Репутация: 9
Всего: 537



Цитата(Alexeis @  6.4.2013,  00:03 Найти цитируемый пост)
Ну так-то скорость написания программ намного ниже чем скорость печати, так что ничуть не мешает. Выделенные var это как раз хороший стиль позволяющий содержать переменные в относительно порядке. Зря они сделали послабление. В языке С ведь тоже правило определения в начале блока.

Не понимаю чем это может помочь. Чем ближе к месту использования объявлена тем лучше. Зачем делать областью видимости переменной весь метод, когда реально она используется только в одном блоке?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Alexeis
Дата 8.4.2013, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(LSD @  8.4.2013,  12:20 Найти цитируемый пост)
Зачем делать областью видимости переменной весь метод, когда реально она используется только в одном блоке? 

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
serger
Дата 8.4.2013, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 0
Всего: 5



Alexeis, от привычки зависит. Опыт портирования говорит мне, что в паскале менее удобнее


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
LSD
Дата 8.4.2013, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15708
Регистрация: 24.3.2004

Репутация: 9
Всего: 537



Цитата(Alexeis @  8.4.2013,  16:52 Найти цитируемый пост)
Дело в не области видимости переменных блока

Нет именно в этом. Мой вопрос был про то зачем счетчику цикла быть доступным вне этого цикла?


Цитата(Alexeis @  8.4.2013,  16:52 Найти цитируемый пост)
объявление переменных размазывают тонким слоем по всему блоку, а потом после нескольких правок, локальная переменная блока удаляется случайно

Шанс удалить нужную переменную которая объявлена "по месту", намного ниже чем переменную объявленную где-то в другом месте. Ну и плюс это никак не решает проблему
Цитата(Alexeis @  8.4.2013,  16:52 Найти цитируемый пост)
код, который с ней работал благополучно цепляет переменную с таким же именем из вышестоящего блока

А доводы типа:
Цитата(Alexeis @  8.4.2013,  16:52 Найти цитируемый пост)
Вынесение переменных в начало блока улучшает культуру кода и повышает устойчивость к правкам.

это какое-то абстрактное философствование.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Alexeis
Дата 8.4.2013, 16:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(LSD @  8.4.2013,  17:09 Найти цитируемый пост)
Шанс удалить нужную переменную которая объявлена "по месту", намного ниже чем переменную объявленную где-то в другом месте. Ну и плюс это никак не решает проблему

  Это еще почему? Редактируешь код, выделил, зацепил, снес. Откомпилировал, все работает! Вот и нет ошибки. Особенно это касается любителей запихивать несколько выражений в одну строку. 
  В случае локального описания,  после удаления фрагмента кода, как правило, компилятор выдает ворнинг о том, что остались лишние переменные, после чего ты лезешь в определение и удаляешь лишнюю переменную. Правило 1 функция - 1 экран никто не отменял, так что за удалением далеко лезть не нужно.
   На паскале в качестве блока выступает вложенная функция. Сначала пишешь главную функцию и ее подзадачи делегируешь вложенным функциям, которые ты еще не написал. У тебя перед глазами и переменные и весь код функции. После написания основной функции поднимаешься к описанию переменных и поочередно пишешь реализацию для каждой вложенной функции вставляя ее код сразу за переменными и константами основной функции. Для каждой вложенной функции можно написать еще вложение. Таким образом производим декомпозицию задачи на подзадачи, причем каждую из вложенных функций можно раздувать на целый экран при этом сохраняя читабельность. Разумеется каждый уровень вложенности функции отделяется отступом.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alexeis
Дата 8.4.2013, 16:57 (ссылка) |   (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(LSD @  8.4.2013,  17:09 Найти цитируемый пост)
Нет именно в этом. Мой вопрос был про то зачем счетчику цикла быть доступным вне этого цикла?

  Счетчик цикла не должен быть доступен везде.  Паскаль не позволяет его объявлять локально, зато громко материться при попытке задейстовать его вне цикла. Более того, он даже скажет, что счетчик при возможности оптимизируется регистром и его значение после цикла может быть неопределенным. Согласен, что вынос его не особо помогает, зато определение переменных вначале быстро отучивает писать функции на сто листов, заставляет программиста разбивать задачи на небольшие функции, которые решают одну свою задачу. В общем язык сам способствует улучшению качества кода. 
  С++ же не ограничивает программиста в возможностях по написанию ###кода. Для начинающего программиста С++ просто находка. Столько ошибок можно накосячить! Конечно, тонкие намеки паскаля, порой слишком тонкие  smile , так что безусловно чудят. Учитывая что порог вхождения в паскаль на порядок ниже чем в С++, то и процент "чудо-кода" выше, но те кто продолжают работать на паскале и дальше, потом не променяют его на С++ .


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Beltar
Дата 8.4.2013, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Структура процедурки на Паскале:

procedure ProcName
var <Список локальных параметров>
<Локальные процедурки> // сишникам завидовать
begin
<Тело процедуры>
end;

Объясните мне, как даже самых зверских правок между begin и end могут пострадать локальные переменные? У меня с точностью до наоборот, функция искромсана, но переменные живут, периодически можно посмотреть хинты при компиляции, что never used и почистить, но лишнего точно не сотрешь.

Цитата

Нет именно в этом. Мой вопрос был про то зачем счетчику цикла быть доступным вне этого цикла?


Кстати, с этим в Delphi жестко, счетчик обязан быть локален и всегда ReadOnly.

for i:=0 to 10 do Inc(i) просто не скомпилируется. И я на это пару раз попадал.

Что же касается Си, то в Си цикла for нет вообще, есть while в котором изменение контрольных переменных перенесено. 
И вот такое вот ****

Код

for (int i=0; i < 10; i++)
 { i++;}


У меня сейчас Билдер сожрал и даже варнинга не выдал.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
LSD
Дата 8.4.2013, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15708
Регистрация: 24.3.2004

Репутация: 9
Всего: 537



Цитата(Alexeis @  8.4.2013,  17:40 Найти цитируемый пост)
Это еще почему? Редактируешь код, выделил, зацепил, снес. Откомпилировал, все работает! Вот и нет ошибки. Особенно это касается любителей запихивать несколько выражений в одну строку.

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



Цитата(Alexeis @  8.4.2013,  17:57 Найти цитируемый пост)
Счетчик цикла не должен быть доступен везде.  Паскаль не позволяет его объявлять локально, зато громко материться при попытке задейстовать его вне цикла.

Это касается только цикла for, а вот если мне надо реализовать не "цикл от 1 до N", а что-то более сложное, то тут уже компилятор не поможет.


Цитата(Alexeis @  8.4.2013,  17:57 Найти цитируемый пост)
заставляет программиста разбивать задачи на небольшие функции, которые решают одну свою задачу

Далеко не всегда это можно сделать, вернее не всегда это имеет смысл.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
serger
Дата 8.4.2013, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 0
Всего: 5



Цитата(LSD @  8.4.2013,  18:17 Найти цитируемый пост)
Это касается только цикла for, а вот если мне надо реализовать не "цикл от 1 до N", а что-то более сложное, то тут уже компилятор не поможет.

Интересно, а итераторы в делфях уже есть?


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Beltar
Дата 8.4.2013, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Вообще-то я тему поднял именно вопросом, что есть в плюсах, чего нет в Delphi. Навскидку могу только вспомнить функции с переменным числом аргументов, которые вот сколько пишу ни разу не понадобились за исключением встроенных вроде WriteLn. Итератор, слово-то. for each давно есть, хотя я не юзаю, да и раньше проблем с перебором никаких не было. Х)


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
serger
Дата 9.4.2013, 05:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 0
Всего: 5



Цитата(Beltar @  8.4.2013,  20:49 Найти цитируемый пост)
Итератор, слово-то. for each давно есть, хотя я не юзаю, да и раньше проблем с перебором никаких не было. Х) 

пример можно?


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Beltar
Дата 9.4.2013, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Если коротко из справки, то:

Цитата

Delphi supports for-element-in-collection style iteration over containers. The following container iteration patterns are recognized by the compiler: 

for Element in ArrayExpr do Stmt; 
for Element in StringExpr do Stmt; 
for Element in SetExpr do Stmt; 
for Element in CollectionExpr do Stmt; 
for Element in Record do Stmt; 
The type of the iteration variable Element must match the type held in the container. With each iteration of the loop, the iteration variable holds the current collection member. As with regular for-loops, the iteration variable must be declared within the same block as the for statement. 



Дальше там еще много интересного, хотя пока есть TList<T> и TCollection<T>, которые можно спокойно через for i:=0 to Count-1 перебрать, вряд ликто-то будет сидеть и писать свои энумераторы.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Akella
Дата 9.4.2013, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 1
Всего: 329



Цитата(Beltar @  6.4.2013,  12:56 Найти цитируемый пост)
Потому что все эти нововведения появились именно в ней. С тех пор серьезных изменений синтаксиса не было.


ты не прав smile
PM MAIL   Вверх
Beltar
Дата 9.4.2013, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Ты об изменениях RTTI в 2010? Или о том, что часть фич, в частности foreach, перегрузка операторов, статические поля в классах, что-там-еще-забыл появилась в 2005?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Akella
Дата 9.4.2013, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 1
Всего: 329



Цитата(serger @ 8.4.2013,  18:52)
Цитата(LSD @  8.4.2013,  18:17 Найти цитируемый пост)
Это касается только цикла for, а вот если мне надо реализовать не "цикл от 1 до N", а что-то более сложное, то тут уже компилятор не поможет.

Интересно, а итераторы в делфях уже есть?

что под итератором подразумевается?

http://softwaremaniacs.org/blog/2005/05/06/iterators/
Код

With Container.Items Do
  While HasNextItem Do
    Item.SomeMethod;


Добавлено @ 13:14
и вообще https://www.google.com/search?ie=UTF-8&...%82%D0%BE%D1%80

Добавлено @ 13:19
Цитата(Beltar @ 9.4.2013,  13:12)
Ты об изменениях RTTI в 2010? Или о том, что часть фич, в частности foreach, перегрузка операторов, статические поля в классах, что-там-еще-забыл появилась в 2005?

хелперы стандартных типов
http://www.webdelphi.ru/2012/09/delphi-xe3...ovleniya-v-rtl/
PM MAIL   Вверх
Beltar
Дата 9.4.2013, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Гы, а я не заметил, хотя хелперы вроде Integer.ToString могли и сразу включить в библиотеку.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
drug007
Дата 16.5.2013, 12:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



Если уж искать замену плюсам с генерацией нативного кода - D programming language. Если Дельфи всю жизнь догоняет плюсы, то Ди уже давно его обгоняет, то что только появилось в С++11 там уже давно было реализовано. У Ди (имхо) один только существенный недостаток - не очень развитая экосистема, писать биндинги надоедает. Зато:
Язык для программиста, а не для гика - те же шаблоны просто прелесть по сравнению с плюсами. 
Метапрограммирование вообще супер - инъекции кода, например, шаблоны с переменным числом аргументов.
Поддержка многопоточности - как разделяемые, так и immutable подход.
Функциональщина + императивность+прочее в одном флаконе
Модульность.
UTF из коробки
Диапазоны вместо итераторов (хотя иногда итераторы удобнее, но редко)
Скорость компиляции - есть возможность юзать D как скриптовый язык, т.к. скорость реально большая (ну если не юзать кучу шаблонов)
Это все на вскидку и безсистемно, но в любом случае посмотреть и поиграться стоит - в принципе, это то, чем должны быть плюсы если бы не тяжелое наследие.
PM MAIL   Вверх
Akella
Дата 16.5.2013, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 1
Всего: 329



drug007, покажи программы, написанные на D. Меня морды интересуют. Интерфейс. Как там можно дизайнить формы, компоненты, элементы и т.д.?
PM MAIL   Вверх
drug007
Дата 16.5.2013, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



Цитата(Akella @  16.5.2013,  16:01 Найти цитируемый пост)
drug007, покажи программы, написанные на D. Меня морды интересуют. Интерфейс. Как там можно дизайнить формы, компоненты, элементы и т.д.? 

Ай, вопрос с подковыркой, да?  smile 
С гуями там не очень - что я и имел в виду под не очень развитой экосистемой. Лично я пробовал DWT - порт SWT с явы и GTKD - биндинг к GTK+. Практически с полпинка в винде у меня завелся DWT (да и в линуксе тоже), а с GTK (только под винду пробовал) я помучился (мне нужна была поддержка opengl), но запустил. И последнее время поддержка у GTKD растет, буквально недавно вышла новая версия биндинга, причем довольно серьезно человек относится, приятно код смотреть. Но у меня гуй простейший, больше несложная 3Д графика, приложения баз данных я не делал, поэтому полноценного отзыва дать не могу. Биндинги к куте брошены, автор сказал, что отпала необходимость. Был еще wxd - тоже как я понял брошенный. Из рекомендуемых только вот DWT и GTKD - оба кроссплатформенные, но DWT только на 32 бита портирован. Под винду если чисто там выбор побольше, но я не интересовался.
Вообще жемчужиной является vibe.d - фреймворк для веб-приложений, сайты, говорят, летают, но я сам не пробовал. Хвалят vibe.d езе за демонстрацию возможностей языка - код обильно использует фичи языка и рекомендуют его просто изучить, чтобы понять возможности языка.
PM MAIL   Вверх
Akella
Дата 17.5.2013, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 1
Всего: 329



Кому-то нужны серверные программы, кому-то сайты или ещё что-то. Мну интересуют десктопные пользовательские приложения ну и мобильные. Никаких подковырок smile
PM MAIL   Вверх
drug007
Дата 17.5.2013, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



Понял. Для морд Д не очень приспособлен сейчас по сравнению с другими средствами - там, конечно, делегаты и замыкания и прочие удобства для этого дела есть, но в данный момент еще есть шероховатости. Они отполируются и будет все отлично, пока же нужно быть готовым, что на шарпе или дельфях это будет проще. Хотя тот же моно юзает именно GTK - так что вопрос с гуями в Ди это временный вопрос. Лично по мне лучше Делфей в этом деле нет. Уж точно не майкрософт вижуал с.  smile 
PM MAIL   Вверх
ТарасАтавин
Дата 5.9.2013, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Цитата(Alexeis @  6.2.2013,  13:26 Найти цитируемый пост)
 Вы пишите этот инструмент для языка С/С++ не потому, что он так популярен, а потому что язык сам по себе плох и нуждается в таком специальном инструменте. 
Плохие языки в подобных инструментах не нуждаются по причине бесполезности припарок. Всё равно, что на запорожец ставить ограничитель скорости <=300 миль/ч. В таких инструментах нуждаются хорошие, но не идеальные языки. Идеальных же не только нет, но они и не возможны.


Это сообщение отредактировал(а) ТарасАтавин - 5.9.2013, 11:43


--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.5034 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.