|
Модераторы: LSD |
|
Thunderbolt |
|
|||
DevRel Профиль Группа: Участник Сообщений: 122 Регистрация: 7.11.2007 Где: Тула Репутация: нет Всего: 16 |
Для меня это вопрос странен. Ответ: конечно да, и ещё долго будут писать. Однако время от времени, мне задают этот вопрос на конференциях или при общении на форумах. Я решил дать на него небольшой письменный ответ, чтобы в дальнейшем иметь возможность ответить одной ссылкой.
Мы разрабатываем инструмент анализа кода PVS-Studio для разработчиков Си/Си++ приложений. Иногда меня спрашивают, почему именно для этих языков, ведь Си/Си++ это старый язык, на котором мало кто пишет. Когда я говорю, что это весьма популярный язык и широко используется, они искренне удивляются. Причина этого видимо в том, что интернет забит статьями, форумами и новостями о новых языках и их возможностях. Среди всего этого, человек, не использующий в работе Си/Си++, просто не замечает редкие новости об этих языках. Это естественно явление. Нет смысла рекламировать и писать о том, что и так известно и широко используется. В результате складывается впечатление, что язык давно заброшен и используется только для поддержания некоторых старых проектов. Это не так. Это очень популярный, живой и активно развивающийся язык. Чтобы убедиться в этом, достаточно взглянуть на рейтинг языков программирования. На данный момент это: TIOBE Programming Community Index for January 2013. Если просуммировать 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. |
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Вы пишите этот инструмент для языка С/С++ не потому, что он так популярен, а потому что язык сам по себе плох и нуждается в таком специальном инструменте. Характер языка таков, что способствует появлению многих типичных ошибок, которые не могут быть выявлены на этапе компиляции или пролистывания соответствующих участков кода. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Thunderbolt |
|
|||
DevRel Профиль Группа: Участник Сообщений: 122 Регистрация: 7.11.2007 Где: Тула Репутация: нет Всего: 16 |
Я бы не был столь категоричен. Как я понимаю, php или Fortran не лучше. А, например, опечатоки вообще легко можно наделать в любом языке. --------------------
Карпов Андрей, DevRel в PVS-Studio. |
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
При этом фортран не претендует на роль универсального языка, а в своей нише решает свои задачи эффективно. На счет php не знаю, но C# в случае опечатки не сможет создать такой код, который затрет чужой участок памяти и вызовет труднодиагностируемую ошибку. Получим либо ошибку компиляции или ошибку выхода за границу диапазона. В любом случае программа будет ругаться в момент появления ошибки и сразу же укажет на нее. Поэтому необходимость в стороннем инструменте отсутствует.
В одном из холиваров С++ vs Delphi была шутка, что опытный С++ программист с легкостью решит несуществующую в Delphi проблему. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
||||
|
||||
fish9370 |
|
|||
Опытный Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: нет Всего: 1 |
я бы не стал смешивать языки Си и Си++
-------------------- undefined |
|||
|
||||
_GRIN_ |
|
|||
одинокий падаван Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: нет Всего: 7 |
ИМХО.
У каждого языка своя приминимость. Так где критична надёждность и скорость работы кода - будет C/С++ (например авиация - из личного опыта) Так где более важна скорость разработки - там будет C# или подобные. -------------------- Дорогу осилит идущий |
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
>я бы не стал смешивать языки Си и Си++
+1
Ну скорость еще туда-сюда, а вот надежность спорный вопрос. Там, где действительно нужна надежность, используют язык Ada вместо С++ , а там где скорость Fortran . С++ ни рыба ни мясо. Компромисс в тех ситуациях где он уместен. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
drug007 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
Как-то не очень вяжется с тем, что в F-22 американцы использовали именно С/С++. Ни Аду, ни Фортран - именно кресты. ИМХО, конечно, но Ада отомрет помаленьку, а Фортран так и останется нишевым языком, живущим за счет большого числа когда-то написанных библиотек. В принципе, эта участь уготована и С/С++ (да и любому другому успешному языку), вопрос только когда. |
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Ну и молодцы что сделали, но это никак не доказывает, что С++ очень надежный язык. При выборе языка для таких систем учитывают множество факторов. Видишь, для товарища Thunderbolt, главным критерием стало распространенность. А я считаю, что именно из-за ненадежности и возникает необходимость в подобного рода затычках. Но так-то существует тестирование. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: нет Всего: 223 |
Увы, даже супер надежные языки (типа Ada) не гарантируют безошибочности программ. Достаточно вспомнить Ariane 5 Самый дорогой феерверк - пол миллиарда евро Это сообщение отредактировал(а) xvr - 8.2.2013, 15:56 |
|||
|
||||
fish9370 |
|
|||
Опытный Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: нет Всего: 1 |
интересно другое, почему Си до сих пор так популярен?
-------------------- undefined |
|||
|
||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
Способствуют даже. (ошибочности). Программеры расслаблены, им навесили науши что язык супер-надежный. От того что вместо одной строки, нужно написать десять, программа не станет надежней. Все самые тяжелые ошибки в логике, а не в синтаксисе. И здесь надежных языков нет, и быть не может. Это сообщение отредактировал(а) volatile - 8.2.2013, 17:19 |
|||
|
||||
Alexeis |
|
||||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Такие ошибки инструмент статистического анализа кода не решает. Тема обсуждения "Язык С++ такой хороший и популярный, поэтому для улучшения качества кода нужно иметь специальные программки"
Так говорить, все равно что - "А давайте дадим повару супер острый нож с кучей зубчиков и торчащих опасных штук. Повар будет бояться порезаться и будет всегда им аккуратно пользоваться". Абсурд! Почему-то все делают режущие кромки только с той стороны где это нужно для резки. С остальных сторон нож безопасен. Язык Си сравним с ассемблером. Он всегда будет жить, потому что для компиляции программы на С нужно обеспечить минимум технических средств. Код Си достаточно предсказуемо превращается в машинный код, но при этом избавляет программиста от огромной части рутины ассемблера и непереносимости инструкций. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
Alexeis, ножи в обоих случаях с кучей зубчиков и торчащих опасных штучек. Просто в одном случае повара предупредили, а в другом сказали что нечего беспокоицца. Ошибка стоимостью в пол миллиарда евро, это не просто случайная ошибка. Это закономерность. Думаю интерес к так называемым"супернадежным языкам" пойдет на спад. --- Тема перешла в холивар уже. Удачный маркетинговый ход ТС, надо признать. А название как удачно подобрано, загляденье... |
|||
|
||||
SVN74 |
|
|||
Опытный Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: нет Всего: 18 |
Чем выше уровень языка, тем больше он напичкан чужими либами решающими на первый взгляд рутинные задачи, но не забывайте что "дядя Сем" написавший за вас рутину тоже мог наделать ошибки, которые в последствии по вылазят в ваших проектах...
В данном случае С++ оптимальный вариант для тех, кто знает и понимает ПК изнутри (адресации, битность, разрядность, фрагментации и т.д.), и хочет по своему оптимизировать свое приложение... Конечно никто не лишен ошибок и тут то на помощь таким людям, другие - добрые люди написали PVS-Studio, за что им низкий поклон... Если же вас не интересует ПК изнутри, а просто хочется побыстрее изваять некую логику, то тогда лучше выбирать готовые "ядра от дяди Сема" - 5 строк = 3D анимация... |
|||
|
||||
drug007 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
С другой стороны, если эти либы используются тысячами программистов по всему миру, то вероятность невыловленного бага в них намного меньше чем в собственном велосипеде. Вот мне нужно рассчитать упругость крыла в конкретных условиях. Зачем мне понимание ПК изнутри? Я знаю аэродинамику и мне нужно решить задачу из конкретной области, зачем мне отвлекаться на архитектуру ПК? Оптимизировать нужно уже отлаженное приложение - про роль преждевременной оптимизации в современном мире мы все знаем. Это имеет глубокий смысл, если я не заказчик решения задачи, а исполнитель - тогда да, сложность языка и трудности в подготовке достойных специалистов позволят обосновать бюджет. На эту тему мне всегда вспоминаются военные АСУ - это жуткое воплощение полной противоположности понятию "интуитивно понятный интерфейс". Полное впечатление, что их создавали люди с другой планеты. Когда мне сказали, что в одном истребительно-авиационном полку начальник штаба наводил перехватчики в автоматизированном режиме и "лабал на нем как Ростропович на пианино" я был дико удивлен - вся работа в АСУ, что я видел до этого сводилась к банальному ежедневному контролю функционирования. Там невероятное количество кнопок и условных обозначений. Причем эти обозначения у меня вызывали четкую ассоциацию с китайскими иероглифами - примерно также я их и понимал. Эти АСУ тоже нужно долго изучать и потом специалист по ним ценится на вес золота. Но это же извращение!
Это плохо с точки зрения исполнителя, с точки зрения заказчика - очень даже шикарно. С учетом того, что программистам работу дают как раз последние выводы очевидны. Кресты держатся за счет legacy кода, как не крути. А в целом инструмент выбирается исходя из задачи, конечно же. |
|||
|
||||
Alexeis |
|
||||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
А теперь представим, что код был написан не АДА, а на С++ . Ошибка преобразования из дабл в шорт с переполнением происходит незаметно и ракета вместо того чтобы самоуничтожиться продолжает думать, что все в порядке и проделывает невероятные кульбиты в воздухе и падает в центре густонаселенного города. При этого никто так и не понял, что за ошибка произошла в ПО, кроме потраченных миллиардов имеем бесценные жизни людей. Это как раз то что я сказал. Умение генерить ошибку в момент ее возникновения это важнейшая особенность компилятора и языка, который предполагает такое поведение.
Почему вы думаете, что программисты на других языках не знают, что такое логические ошибки? Они что не также учились программированию? Кстати такая "космическая" ошибка была у меня в проекте на С++ и я очень долго искал ее. У меня было преобразование short->float->double->float->short . Тип данных short являлся аппаратным, а double использовался для математической обработки чтобы сохранить точность при возведении в квадрат. Аппаратура выдала значения вне рабочего диапазона и соответственно на преобразовании float->short получилась ошибка переполнения безо всяких исключений. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
NoviceF |
|
|||
Опытный Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: нет Всего: 2 |
а как же... скорость? :cry: Всё-таки CLR и прочие жаба-машины не могут не влиять на скорость исполнения кода. Ну и плюс идеологически, пожалуй, самый свободный язык - нет кровавой пяты корпораций зла или добра (всё время путаю какая из них кто), достаточно широко используется в свободном ПО. |
|||
|
||||
drug007 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
Скорость? Очень часто она достигается _аппаратными_ средствами. Т.е. недостаток быстродействия какого-то языка можно компенсировать железом. А вот отсутствие библиотек и необходимость их написания с нуля и доведением до продакшена - ничем компенсировать нельзя. Так что (ИМХО) legacy код перевешивает быстродействие.
Согласен. Также полностью согласен с подходом, когда код обильно проверяется (ассертами или другими средствами языка) с целью как можно быстрее сломать его - именно для чтобы быстрее выявить все ошибки. |
|||
|
||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
Двухколесные велосипеды - очень плохие велосипеды.
Я вот привых катацца на велосипеде с боковыми колёсиками, но однажды мне необходимо было поехать на 2-ух колёсном велосипеде. Так я чуть голову не сломал. Поэтому предлагаю: Запретить всем ездить на 2-ух колёсных велосипедах. Это очень опасно. Например, если вы потеряете равновесие, то вас ничего не задержит от падения. И в аварии вы будете попадать чаще. Двухколесные велосипеды - зло! Лучше всего использовать велосипеды с боковыми колёсиками. Они вас защитят от любых авто-катастроф. Еще лучще использовать "супер-надежные" трехколесные велосипеды с прицепом. На них вы точно никогда не опрокинетесь, и никогда не попадете ни в какую аварию! |
|||
|
||||
korian |
|
|||
Опытный Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: нет Всего: 17 |
молодец! Но если так подумать, программеры занимаются тем, что автоматизирую деятельность третих лиц. И тут очень плохо, когда язык не позволяет автоматизировать деятельность себя (т.е. программера). Впринципе все языки этими грешны, у всех есть проблемы. Развиваемся потихоньку, спорить тут не о чем. У кого-то есть плюсы у когото минусы, потом другие языки перенимают что-то и все разививается и очень класно за этим наблюдать Сам я очень люблю C++, хотя щас уже год педалю на Java, но с удовольствием вернулся на C++, если б дали болльше денех. Порог вхождения в C++ на много выше чем в ту же Java, поэтому для бизнеса это менее интересно. Надо много программеров, а не несколько супер классных. |
|||
|
||||
drug007 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
АБСОЛЮТНО неверная аналогия. Хотите кататься на двухколесном велосипеде? Пожалуйста! Катайтесь. В свободное от работы время. А на работе будьте любезны ездить на автомобиле. Да. вы там не выправите вилку, если в дерево стукнулись. Не сможете проехать там, где ездили на велосипеде. Даже правила дорожного движения соблюдать надо! И если столкнетесь с другим автомобилем ушибами не отделаетесь. Но это же совсем разные вещи по эффективности, правда? Да, вы не разберете автомобиль так же быстро, да, вы на нем будете просто наездником, но это же небо и земля! А иначе можно сделать сложный язык и посвящать в него только избранных и гордится тем что мы умные и знаем этот язык - а вы все плебеи. Интересное преимущество - уметь ездить на двухколесном велосипеде, когда вокруг столько возможностей доехать намного быстрее и проще. |
|||
|
||||
NoviceF |
|
|||
Опытный Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: нет Всего: 2 |
||||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Как всегда в таких вопросах, тема переросла в холивар. Так что пусть тут побудет.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Akella |
|
||||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
Нельзя, по крайней мере не на любом |
||||
|
|||||
k0rvin |
|
|||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
Alexeis, юнит-тесты решают, а C++ юзают из-за меньшего (неявного) ран-тайм оверхеда (принцип нулевой стоимости) и вообще больших возможностей контроля поведения результирующего кода, чем в более высокоуровневых ЯП.
Добавлено через 1 минуту и 18 секунд
Так и представляю себе F22 с Blue Gene на борту... =) -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
drug007 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
Возможно это удивительно, но многие военные компьютеры и у нас и у них очень деревянные с точки зрения обычного обывателя. На том же Ф-22 стоят микроконтроллеры 90ых годов - и ничего, единственный в мире самолет 5-го поколения. Это я к тому, что выжимать все соки из железа далеко не всегда нужно. Когда ЭВМ только создавались и использовались в качестве числодробилок - это да, было актуально. А сейчас слишком много областей, где вычислительная мощность процессора превосходит потребности приложения. Тот же Питон не на ровном месте получил такую популярность, уже подумываю присмотреться к нему. Это сообщение отредактировал(а) drug007 - 12.2.2013, 12:38 |
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Допустим у меня есть конечный автомат с 10ю входами. Каждый вход имеет 2^32 варианта значений. Известно, что есть всего 5-6 комбинаций входных значений, которые фейлят автомат. Итого имеем (2^32)^10 = 2^320 вариантов входного состояния. Для справки это число комбинаций с сотней десятичных нулей. Подскажите как мне юнит-тестами попасть на эти нужные 5-6 комбинаций входов. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
serger |
|
|||
Опытный Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 0 Всего: 5 |
Alexeis, а юнит тесты обязаны всегда все варианты проверять?
-------------------- упс! |
|||
|
||||
k0rvin |
|
||||||||||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
Есть допустимый процент покрытия. А про C/C++ один знакомый, занимающийся тестированием (авиационного, кажется) софта:
Про Ada он немного слышал:
-------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||||||||
|
|||||||||||
drug007 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
Вполне разумные требования к надежности для авиационной и космической техники. Лично я считаю, что это как раз там, где должен использоваться С. Это ближе к железу. Да и как-то бессмысленно использовать Пролог для программирования блока управления двигателем, имхо, не для этого он.
Но у меня вопрос - почему требования к data coupling ставит крест на функциональных и декларативных языках? Да, там порядок промежуточных действий не определен (в функциональных) или сами действия не определены (декларативные), но результат-то определен. Или я что-то путаю? |
|||
|
||||
mes |
|
|||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
||||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Я не говорю, что юнит тесты должны обеспечить проверку всех вариантов. По факту есть такие проблемы. У меня реально такой проект где я руками попал на такой вариант, когда конечный автомат ломался лишь в некоторых точках. А вариантов примерно столько сколько я указал. Случайно вышел на круглые числа и система фейлиться. Потратил день отладки на выяснение причины, а потом еще время на исправление. Именно из-за особенностей С++ тратиться куча времени на поиск причин ошибок.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
k0rvin |
|
||||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
Потому что они плохопредсказуемы по времени и памяти. Результат — это одно, а затраты ресурсов — другое, сложно писать код, подходящий под требования. Добавлено через 1 минуту и 15 секунд
А при чем тут С++? Можно подумать на любом другом языке аналогичный код вел бы себя по-другому. -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||
|
|||||
Wowa |
|
|||
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
просьба распространять графику по другим сайтам |
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Wowa,
Еперный театр, конечно же по другому. Уже, наверное, десяток сообщений был о том, что ошибка должна диагностироваться в момент появления, а не постфактум по странностям поведения программы. Ставили пример C#, Java, Ada и т.д. и тут опять на тебе! Наша песня хороша, начинай сначала! -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
k0rvin |
|
|||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
Здрасте-приехали. Пример того автомата реквестирую на C#/Java/Ada/Что-там-тебе-нравится, в котором внезапно не будет этой ошибки. -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Еще раз читаем текст.
На С++ отладил конечный автомат, выпустил релиз, и все проверки благополучно исчезли из кода. То что пропустили юнит тесты потом можно ловить неделями, изучая странности работы программы. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
k0rvin |
|
||||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
Лолшто, простите? Какие проверки исчезли? Еще раз: покажи как тот же C#
поможет тебе избежать этой ошибки. P.S. А тестируют вообще-то релизный скомпилированный ппродукт. Это сообщение отредактировал(а) k0rvin - 13.2.2013, 13:42 -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||
|
|||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
k0rvin, я думаю ассертами люди увлекаюцца непомерно.
Alexeis, исключения надо кидать в вашем случае, а не ассертами обильно проверять. Впрочем, телепатирую. Не видя код вряд-ли можно что-то конкретное подсказать. |
|||
|
||||
drug007 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
volatile, ассерты и исключения не взаимоисключающие вещи. И не вижу ничего выдающегося в обильных проверках чтобы их выделять курсивом - разве что некоторая художественность в слове "обильный". Видимо она (художественность) у вас не сочетается с образом сурового челябинского программиста?
Ассерты это по сути дела инваринты, а исключения это способ проинформировать вызывающий код о незапланированном развитии событий. Нарушение инварианта недопустимо ни при каких условиях и равно смерти, так как гарантировать корректную работу уже невозможно. А исключение лишь означает, что его нельзя обработать на текущем уровне кода, но вызывающий код вполне может это сделать. Это я к тому, что увлечься ассертами довольно сложно - ну если только не иметь в виду клинический случай ассерта после каждого оператора. Ясное дело, что проверка пользовательского ввода должна выбрасывать исключение, а вот передача нулевого указателя уже достойна ассерта. Alexeis, имхо, имеет в виду, что средства языка должны выявлять максимум ошибок еще на этапе компиляции. и с++ с его блекджеком и прочим наследством лишен такого удовольствия - так как разработчикам компилятора проще будет повесится, чем добавить такую красоту, да и помимо имплементации еще нужно же и дизайн продумать - а тут просто черт ногу сломит. За навороченность языка и совместимость с legacy кодом приходится платить. И получилось, что С это human-readable ассемблер, а С++ - ассемблер с классами, причем дизайн языка не блещет в силу того что язык был первопроходцем. Та же STL неоднозначна, но глупо ругать Степанова за то, что он был первым. И я не ругаю плюсы, ни в коем случае, просто факт. С++ сложно ругать - его достоинства в одной ситуации могут быть и преимуществами и наоборот. |
|||
|
||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
drug007, вам прежде чем строчить гневные посты, следует хоть поверхостно ознакомицца с особенностями языка. Прочитайте про ассерты. Это дебаговая вещь. причем исключительно дебаговая. фактически в релизе это - ничто. Т.е., что вы их написали, что не написали - смерти, не будет.
Вот именно ассерты и исчезли. зы: Мне уже вообще по барабану с вами спорить. просто хочу помочь Alexeis, |
|||
|
||||
drug007 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
Я так понимаю, что вы ассерты и не юзаете, отсюда и такой вывод сделали? Возможно я неправильно выразился, но вы совсем не поняли, что я имел в виду. Под "смерти подобно" я имел в виду, что ассерт убивает программу - если условие в ассерте не выполнилось, это означает, что приложение вышло за рамки допустимого, восстановить работоспособное состояние невозможно и выполнение приложения не имеет смысла (т.е. был нарушен инвариант). А исключение просто сигнализирует, что что-то пошло не так и вполне возможно (и чаще всего) что восстановить работоспособность приложения возможно. Т.е. не было нарушения инварианта, а возникла нетипичная ситуация неразрешимая в данном блоке кода. И происходит развертывание стека до нахождения кода, способного обработать это исключение. И только если такого обработчика не будет найдено, тогда уже будет нарушен инвариант, что все исключения должны быть обработаны и будет program terminated. То, что ассерты используются при отладке и в релизе их не будет - попрекать меня якобы не знанием этого факта не стоило, осведомлен. Более того, именно этот факт, что ассерты сразу убивают приложение и что их не будет в релизе вообще заставляет удивиться вашему утверждению, что ассертами можно чересчур увлечься и следует использовать исключения - ведь ассерты и исключения это довольно ортогональные вещи. Уж вам то, знакомому с языком не понаслышке должно быть это известно. З.Ы. хотя возможно это я вас не понял - вы имели в виду, что в ассертах не должно быть проверок, нужных в релизе, т.к. в релизе ассертов не будет и такие проверки нужно организовывать в виде исключений? тогда я с вами совершенно согласен. Это сообщение отредактировал(а) drug007 - 22.2.2013, 19:29 |
|||
|
||||
mes |
|
||||||||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
Вы просто не умеете их готовить ©
ага, может, если программировать нa нем как на дельфи..
Да, и С++ позволяет так писать.. но также позволяет и по дрругому.. Ну а то что в неуклюжих руках он опасен, полностью поддерживаю.. Для таких рук есть шарпы, пусть там и кодоляпят... и да.. Шарп позволяет загладить неуклюжeсти, но качества коду это не прибавляет.. Добавлено через 4 минуты и 19 секунд итого вопрос упирается в то, лучшим считается тот язык, на котором труднее споткнуться, или на котором можно свободнее выразить мысль ? Это сообщение отредактировал(а) mes - 22.2.2013, 21:03 |
||||||||
|
|||||||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Не всегда это твой код и ты разбираешь что в нем и как. Тебе могут передать уже разработанные модули или даже функции/классы в логику работы которых даже не вникаешь. Свой код можно делать сколь угодно безопасным, а вот с чужим сложнее, особенно если исключение пролетают 5-6 функций, пересекают границу dll и вылазят в экзешнике. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
Alexeis, хм... Так у вас чужой код... В принципе если не охота лезть в код, можно просто переопределить assert, чтоб он не вырождался в релизе. (или даже чтоб кидал исключения, но это по желанию.) И будет у вас проверка, которую вы хотите, не изменяя практически чужого кода. assert - это вообще не средство языка, это обычный макрос, который можно переопределить. В принципе это конечно "хак", но раз не хотите разбирацца с чужим кодом, можно на него пойти, хотя бы на момент отладки. |
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Ну я на всех опасных местах вызываю такую функцию
С сохранением в лог текста ошибки. Постоянно маюсь с проверкой подсчета ссылок интерфейсов, пишу отдельные классы для хранения метаинформации о классах, потом на основе нее реализую рефлексию и делаю еще много всякой другой работы которые следует поручать компилятору языка. Спрашивается, а нафига мне С++, когда С# сам вставляет проверки в нужных местах и сам определяет время жизни объектов интерфейсов и никогда не бросит исключение за границу своего модуля и содержит атрибуты для хранения метаинформации и имеет встроенные средства для сериализации и рефлексии. Нафига мне С++ для высокоуровневого кода? Быстрые части кода завязанные на железе я все равно выношу в отдельные плагины, а для кода не критичного ко времени зачем мне С++ ? Какой я имею бонус? Быстродействие там где оно не требуется? -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
k0rvin |
|
||||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
smart_ptr? Нет, не слышал.
Зачем в плюсах рефлексия, если там есть шаблоны? -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||
|
|||||
serger |
|
|||
Опытный Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 0 Всего: 5 |
k0rvin, а они разве взаимозаменяемы? -------------------- упс! |
|||
|
||||
k0rvin |
|
|||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
Не на стопроцентов, но позволяют решать многие задачи, которые в иных языках решаются рефлексией. -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
Beltar |
|
|||
Опытный Профиль Группа: Участник Сообщений: 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 Exit(ResultCode); Даже адресная арифметика добавлена, но добавлена так, что задействуется только по требованию. Все это гармонично вписалось в язык, при этом мест, где можно получить трудно локализуемый баг меньше. Нет, я понимаю, что все это надо было еще в D7 вводить, но лучше поздно, чем никогда. Сейчас я не вижу никаких оснований серьезно изучать плюсы. Прочитать книжку, чтобы понимать примеры по WinAPI и хватит. Для работы же Delphi, как единственный вменяемый язык для генерации нативного кода (нет, а у какого еще языка под Win32\64 есть нормальная IDE и документация?), и C#, как то, что в ближайшие 10 лет точно не потонет. Си и асм по необходимости. Вопросы скорости кода и оптимизации под очередные шедевры Intel не затрагиваю, все это замечательно, но сколько программистов работает в серьезных конторах и занимается разработкой игр, или чем-то еще, где оптимизация под процы критична? Много ли программистов пишет драйверы? Нет, в основном клепается прикладное ПО. Игру же в одиночку можно склепать в Game Maker (который, о ужас, написан на Delphi) и все равно не иметь проблем с производительностью даже на процах 10-летней давности. Это сообщение отредактировал(а) Beltar - 5.4.2013, 16:10 -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. (с) я, хотя может и нет Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
serger |
|
|||
Опытный Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 0 Всего: 5 |
Beltar, мне не нравится не язык, а идеология. Пишите на fp. А то win, win, win... %) не серьёзно!
Ну а по языку только субъективные претензии: выделенные var, например. Длинные ключевые слова. -------------------- упс! |
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Ну так-то скорость написания программ намного ниже чем скорость печати, так что ничуть не мешает. Выделенные var это как раз хороший стиль позволяющий содержать переменные в относительно порядке. Зря они сделали послабление. В языке С ведь тоже правило определения в начале блока. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Akella |
|
||||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
Почему именно 2009? Добавлено через 2 минуты и 53 секунды
О каком послаблении речь? |
||||
|
|||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
В языке С переменные можно было объявлять только вначале блока. Получалась примерно такая же схема как в паскале, только в паскале вложенные блоки заменялись вложенными подпрограммами. В С++ сделали послабление по отношению к языку С разрешив определять переменные где угодно. Собственно я всегда говорил, что язык С и С++ 2е большие разницы. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Beltar |
|
||||
Опытный Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 2 Всего: 7 |
Потому что все эти нововведения появились именно в ней. С тех пор серьезных изменений синтаксиса не было.
В Delphi Prism и в учебном Pascal ABC.NET можно написать что-то вроде begin var s:String:='Эта строка объявлена прямо в коде'; end; -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. (с) я, хотя может и нет Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
||||
|
|||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Ну Delphi Prism это отдельная песня. Сделали почти что полный клон C# . Зачем делать 2 языка, которые ну совсем уж похожи. Если Delphi.NET можно было рассматривать как основу для порта старых программ написанных на делфи на платформу .NET, то Delphi Prism отказались от обратной совместимости и сделали нечто ни к селу ни к городу.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Фантом |
|
|||
Вы это прекратите! Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: нет Всего: 49 |
||||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
+1 Мне нужно построить абстрактную фабрику, скомпоновать проект из частей описанных в XML файлах или вызывать функции из плагинов, названия которых я не знаю на этапе компиляции и не знаю типы и количество параметров. Чем мне тут помогут шаблоны? Шаблоны обеспечивают статическое связывание. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Beltar |
|
|||
Опытный Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 2 Всего: 7 |
Мне вот интересно, хоть кто-то портировал старый проект на Delphi .NET? Какой в этом профит? Паникеры же, при выходе Delphi 8, скорее всего, сразу капитулировали перед MS. Призма, точнее компилятор изначально продукт сторонний, но как компилятор Паскаля для .NET он никому не мешает, пусть и разницы там между языками 0, только шарп равнее других. Смысла в переделывании VCL под .NET, где и так есть аналогичная библиотека я никакого не вижу. На .NET по-моему вообще ловить остальным нечего, полностью подконтрольная MS территория. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. (с) я, хотя может и нет Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
serger |
|
|||
Опытный Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 0 Всего: 5 |
Ну дык кто мешает исполнять? И не надо путать теорию с практикой. Удобнее и комфортнее когда я сам могу решить где объявлять. Ну да - это источник опечаток. -------------------- упс! |
|||
|
||||
Beltar |
|
|||
Опытный Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 2 Всего: 7 |
Но у того, кто после тебя в твой код может полезть (а ты сам через месяц=другой человек) вполне может возникнуть желание взять за яйца того, кто черт знает что и где наобъявлял. Проблему, правда, маленько сглаживает возможность перехода к объявлению в современных IDE.
Вообще если послушать сишников, то они write only-программисты, порождающие код со скоростью печати. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. (с) я, хотя может и нет Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
LSD |
|
|||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15709 Регистрация: 24.3.2004 Репутация: 9 Всего: 537 |
Не понимаю чем это может помочь. Чем ближе к месту использования объявлена тем лучше. Зачем делать областью видимости переменной весь метод, когда реально она используется только в одном блоке? -------------------- 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. |
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Дело в не области видимости переменных блока, а в том что объявление переменных размазывают тонким слоем по всему блоку, а потом после нескольких правок, локальная переменная блока удаляется случайно, и код, который с ней работал благополучно цепляет переменную с таким же именем из вышестоящего блока, в результате получается непредсказуемое поведение и чудеса в программе. Вынесение переменных в начало блока улучшает культуру кода и повышает устойчивость к правкам. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
serger |
|
|||
Опытный Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 0 Всего: 5 |
Alexeis, от привычки зависит. Опыт портирования говорит мне, что в паскале менее удобнее
-------------------- упс! |
|||
|
||||
LSD |
|
||||||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15709 Регистрация: 24.3.2004 Репутация: 9 Всего: 537 |
Нет именно в этом. Мой вопрос был про то зачем счетчику цикла быть доступным вне этого цикла?
Шанс удалить нужную переменную которая объявлена "по месту", намного ниже чем переменную объявленную где-то в другом месте. Ну и плюс это никак не решает проблему
А доводы типа:
это какое-то абстрактное философствование. -------------------- 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. |
||||||
|
|||||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Это еще почему? Редактируешь код, выделил, зацепил, снес. Откомпилировал, все работает! Вот и нет ошибки. Особенно это касается любителей запихивать несколько выражений в одну строку. В случае локального описания, после удаления фрагмента кода, как правило, компилятор выдает ворнинг о том, что остались лишние переменные, после чего ты лезешь в определение и удаляешь лишнюю переменную. Правило 1 функция - 1 экран никто не отменял, так что за удалением далеко лезть не нужно. На паскале в качестве блока выступает вложенная функция. Сначала пишешь главную функцию и ее подзадачи делегируешь вложенным функциям, которые ты еще не написал. У тебя перед глазами и переменные и весь код функции. После написания основной функции поднимаешься к описанию переменных и поочередно пишешь реализацию для каждой вложенной функции вставляя ее код сразу за переменными и константами основной функции. Для каждой вложенной функции можно написать еще вложение. Таким образом производим декомпозицию задачи на подзадачи, причем каждую из вложенных функций можно раздувать на целый экран при этом сохраняя читабельность. Разумеется каждый уровень вложенности функции отделяется отступом. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Счетчик цикла не должен быть доступен везде. Паскаль не позволяет его объявлять локально, зато громко материться при попытке задейстовать его вне цикла. Более того, он даже скажет, что счетчик при возможности оптимизируется регистром и его значение после цикла может быть неопределенным. Согласен, что вынос его не особо помогает, зато определение переменных вначале быстро отучивает писать функции на сто листов, заставляет программиста разбивать задачи на небольшие функции, которые решают одну свою задачу. В общем язык сам способствует улучшению качества кода. С++ же не ограничивает программиста в возможностях по написанию ###кода. Для начинающего программиста С++ просто находка. Столько ошибок можно накосячить! Конечно, тонкие намеки паскаля, порой слишком тонкие , так что безусловно чудят. Учитывая что порог вхождения в паскаль на порядок ниже чем в С++, то и процент "чудо-кода" выше, но те кто продолжают работать на паскале и дальше, потом не променяют его на С++ . -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Beltar |
|
||||
Опытный Профиль Группа: Участник Сообщений: 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 в котором изменение контрольных переменных перенесено. И вот такое вот ****
У меня сейчас Билдер сожрал и даже варнинга не выдал. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. (с) я, хотя может и нет Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
||||
|
|||||
LSD |
|
||||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15709 Регистрация: 24.3.2004 Репутация: 9 Всего: 537 |
Это точно так же и на паскаль распространяется, выделили неиспользуемую переменную, зацепил, снес и далее по тексту.
Это касается только цикла for, а вот если мне надо реализовать не "цикл от 1 до N", а что-то более сложное, то тут уже компилятор не поможет.
Далеко не всегда это можно сделать, вернее не всегда это имеет смысл. -------------------- 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. |
||||
|
|||||
serger |
|
|||
Опытный Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 0 Всего: 5 |
Интересно, а итераторы в делфях уже есть? -------------------- упс! |
|||
|
||||
Beltar |
|
|||
Опытный Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 2 Всего: 7 |
Вообще-то я тему поднял именно вопросом, что есть в плюсах, чего нет в Delphi. Навскидку могу только вспомнить функции с переменным числом аргументов, которые вот сколько пишу ни разу не понадобились за исключением встроенных вроде WriteLn. Итератор, слово-то. for each давно есть, хотя я не юзаю, да и раньше проблем с перебором никаких не было. Х)
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. (с) я, хотя может и нет Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
serger |
|
|||
Опытный Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 0 Всего: 5 |
пример можно? -------------------- упс! |
|||
|
||||
Beltar |
|
|||
Опытный Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 2 Всего: 7 |
Если коротко из справки, то:
Дальше там еще много интересного, хотя пока есть TList<T> и TCollection<T>, которые можно спокойно через for i:=0 to Count-1 перебрать, вряд ликто-то будет сидеть и писать свои энумераторы. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. (с) я, хотя может и нет Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
Akella |
|
|||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
||||
|
||||
Beltar |
|
|||
Опытный Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 2 Всего: 7 |
Ты об изменениях RTTI в 2010? Или о том, что часть фич, в частности foreach, перегрузка операторов, статические поля в классах, что-там-еще-забыл появилась в 2005?
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. (с) я, хотя может и нет Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
Akella |
|
||||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
что под итератором подразумевается? http://softwaremaniacs.org/blog/2005/05/06/iterators/
Добавлено @ 13:14 и вообще https://www.google.com/search?ie=UTF-8&...%82%D0%BE%D1%80 Добавлено @ 13:19
хелперы стандартных типов http://www.webdelphi.ru/2012/09/delphi-xe3...ovleniya-v-rtl/ |
||||
|
|||||
Beltar |
|
|||
Опытный Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 2 Всего: 7 |
Гы, а я не заметил, хотя хелперы вроде Integer.ToString могли и сразу включить в библиотеку.
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. (с) я, хотя может и нет Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
drug007 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
Если уж искать замену плюсам с генерацией нативного кода - D programming language. Если Дельфи всю жизнь догоняет плюсы, то Ди уже давно его обгоняет, то что только появилось в С++11 там уже давно было реализовано. У Ди (имхо) один только существенный недостаток - не очень развитая экосистема, писать биндинги надоедает. Зато:
Язык для программиста, а не для гика - те же шаблоны просто прелесть по сравнению с плюсами. Метапрограммирование вообще супер - инъекции кода, например, шаблоны с переменным числом аргументов. Поддержка многопоточности - как разделяемые, так и immutable подход. Функциональщина + императивность+прочее в одном флаконе Модульность. UTF из коробки Диапазоны вместо итераторов (хотя иногда итераторы удобнее, но редко) Скорость компиляции - есть возможность юзать D как скриптовый язык, т.к. скорость реально большая (ну если не юзать кучу шаблонов) Это все на вскидку и безсистемно, но в любом случае посмотреть и поиграться стоит - в принципе, это то, чем должны быть плюсы если бы не тяжелое наследие. |
|||
|
||||
Akella |
|
|||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
drug007, покажи программы, написанные на D. Меня морды интересуют. Интерфейс. Как там можно дизайнить формы, компоненты, элементы и т.д.?
|
|||
|
||||
drug007 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
Ай, вопрос с подковыркой, да? С гуями там не очень - что я и имел в виду под не очень развитой экосистемой. Лично я пробовал DWT - порт SWT с явы и GTKD - биндинг к GTK+. Практически с полпинка в винде у меня завелся DWT (да и в линуксе тоже), а с GTK (только под винду пробовал) я помучился (мне нужна была поддержка opengl), но запустил. И последнее время поддержка у GTKD растет, буквально недавно вышла новая версия биндинга, причем довольно серьезно человек относится, приятно код смотреть. Но у меня гуй простейший, больше несложная 3Д графика, приложения баз данных я не делал, поэтому полноценного отзыва дать не могу. Биндинги к куте брошены, автор сказал, что отпала необходимость. Был еще wxd - тоже как я понял брошенный. Из рекомендуемых только вот DWT и GTKD - оба кроссплатформенные, но DWT только на 32 бита портирован. Под винду если чисто там выбор побольше, но я не интересовался. Вообще жемчужиной является vibe.d - фреймворк для веб-приложений, сайты, говорят, летают, но я сам не пробовал. Хвалят vibe.d езе за демонстрацию возможностей языка - код обильно использует фичи языка и рекомендуют его просто изучить, чтобы понять возможности языка. |
|||
|
||||
Akella |
|
|||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
Кому-то нужны серверные программы, кому-то сайты или ещё что-то. Мну интересуют десктопные пользовательские приложения ну и мобильные. Никаких подковырок
|
|||
|
||||
drug007 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
Понял. Для морд Д не очень приспособлен сейчас по сравнению с другими средствами - там, конечно, делегаты и замыкания и прочие удобства для этого дела есть, но в данный момент еще есть шероховатости. Они отполируются и будет все отлично, пока же нужно быть готовым, что на шарпе или дельфях это будет проще. Хотя тот же моно юзает именно GTK - так что вопрос с гуями в Ди это временный вопрос. Лично по мне лучше Делфей в этом деле нет. Уж точно не майкрософт вижуал с.
|
|||
|
||||
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Это сообщение отредактировал(а) ТарасАтавин - 5.9.2013, 11:43 -------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
Правила ведения Религиозных войн | |
|
1. Уважайте собеседника 2. Собеседник != враг 3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez" С уважением, Smartov. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Религиозные войны | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |