1.6, Светочка (?), 01:56, 23/08/2008 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Мое предложение по C++:
усилить типобезопасность языка (вплоть до того, чтобы убрать неявное преобразование unsigned int -> signed int), при этом ввести директиву наподобие typesafety <strong, weak, very strong>, для совместимости со старым кодом при отсутствии такой директивы будет предполагаться, что используются старые правила преобразования типов. Однако может возникнуть проблема, если такая директива появиться в заголовочном файле, который будет подключен к старому коду, т. к. компилятор может компилировать в режиме с усиленной типобезопасностью, после получения директивы из заголовка, старый код.
Также можно отказаться от использования заголовочных файлов (сделать так, как в java).
| |
|
|
3.17, Света (?), 17:06, 23/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>[оверквотинг удален]
>
>Для того, чтобы Вы могли понять это прямо сейчас, могу привести один
>из возможных способов решения проблемы неявного преобразования. Создаётся класс
>
>template <
> typename Underlying,
> typename OverflowUnderflowStrategy,
> typename CStyleCastStrategy>
>class safer_int;
>...
Только много строк кода получается. Так что встроенная поддержка усиленной типобезопасности не помешает.
| |
|
4.18, Александр Чуранов (?), 18:01, 23/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>Только много строк кода получается. Так что встроенная поддержка усиленной типобезопасности не помешает.
1) Это сломает совместимость с С на уровне исходников. А это боле чем важно, поскольку многие проекты используют и С и С++.
2) Критерий "много строк" - вот что является показателем серьёзности проекта. Для большого проекта это ничего не стоит: файлом больше - файлом меньше, а использовать можно потом десятилетиями. Вы же не обсуждаете, сколько строк кода в std::deque или std::locale.
Кстати, если посмотреть исходник Mozilla Firefox - то там для решения аналогичных проблем используется куча самописных классов подобного рода. Только их решения не настолько универсальны.
Вот стандартизовать такую библиотеку - это действительно полезно. Только к c++09 я уже не успел с предложением. Попробую предложить в следующий TR.
| |
|
|
2.9, Аноним (-), 03:37, 23/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>Также можно отказаться от использования заголовочных файлов (сделать так, как в java)
зачем C++ приводить к java?
он C++
и как по мне для класса программирования задач которые пишуться на многих платформах
исключая мобаил
C++ самый лучший
а вот ява уже для мобаил
вообще для плохого программста
любой язык плох
потому как нет способностей освоить его
и начинают изобретать что то новое
создавая армию ненужных клоно-ботов
| |
|
3.10, Александр Чуранов (?), 03:49, 23/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>исключая мобаил
Точнее, включая. :-)
C++ - отличный выбор для устройств с маломощными процессорами и небольшим количеством памяти. Да, я понимаю, что в свою Nokia я могу загружать только программы для JVM. И это сделано из соображений безопасности. Не удивлюсь, однако, если узнаю, что само ПО телефона и сама JVM написаны на C++.
| |
|
4.11, User294 (??), 04:21, 23/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>C++ - отличный выбор для устройств с маломощными процессорами и небольшим количеством
>памяти.
Ну, вообще, там си порой в большем почете.Особенно на реально маломощных процессорах с мизерной памятью где вся система собрана в 1 кристалле.Для более мощных где RAM и флеша побольше - и C++ вполне по зубам.
>Да, я понимаю, что в свою Nokia я могу загружать
>только программы для JVM. И это сделано из соображений безопасности.
Надо было покупать смартфон, а не тупую звонилку - симбиан на С++ в аккурат :D.Хотя сама система убогая - что-то типа "если бы MS-DOS переписали на сях++".Но программы именно нативные - шустрые, компактные, etc.
> И это сделано из соображений безопасности.
Ну вы просто не видели как хаксоры через эту "безопасную" машинный код выполняют на телефонах.На сименсах это например такой народный метод патчинга начального загрузчика (!!!) с целью сбить ограничения и позволить прошивать все что угодно.А вы говорите, безопасноть :)
| |
|
5.12, Александр Чуранов (?), 04:34, 23/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>Для более мощных где RAM и флеша побольше - и C++ вполне по зубам.
Здесь скорее не в мощности дело, а в привычках производителя. Приложения на С++ не более требовательны к ресурсам ЭВМ, а также потребляют не больше памяти и исполняются не медленнее программ на С.
Если указанное выше не соблюдается, то либо программы не одинаковы, либо компилятор плох. К сожалению, gcc не лучший. Знаю организацию, где продукт с С++ на С перевели, а толком теперь объяснить не могут, зачем. Достоверно известны две вещи, что в этой организации не знают С++ толком и что gcc компилирует C++ код медленней чисто сишного.
На вопрос "А почему hello-world на С++ компилируется в бинарник большего размера, чем аналогичная программа на С" Бъярн Страуструп ответил "а на моей платформе - в меньшего" :-)
>Ну вы просто не видели как хаксоры
Охотно верю, что взламывают. Думаю, что JVM выбирают в качестве "интерфейса" для телефонов, всё-таки чтобы доступ ограничить.
| |
|
6.22, User294 (ok), 09:26, 25/08/2008 [^] [^^] [^^^] [ответить] | +/– | Я охотно посмотрю как вы STL и прочая запихнете в чип с 16 кил флеша и 1 килом о... большой текст свёрнут, показать | |
|
7.24, Александр Чуранов (?), 20:30, 25/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>[оверквотинг удален]
>останется.Нет, я действительно очень хотел бы посмотреть как это будет выглядеть;).А
>на сях программят и такие чипы.И даже чипы с всего парой
>кил для кода, если изгальнуться, и то можно программить - выбросить
>лишний стартап, минималистичные библиотеки и усе, телемаркет.ЭВМ нынче бывают разные.В частности
>однокристальные а это бывает и восьмилапым тараканом с мизером памяти на
>борту.Си катит даже для програминга таких.А то тараканы бывают разномасштабные и
>скажем, 16 и более кило кода на асме колупать уже грустновато
>выходит.Не портабельно и башню програмеру срывает.В итоге C бывает разный.Например, AVR-GCC,
>и GCC для MSP430.Вполне себе хорошие и замечательные порты GCC под
>эти архитектуры.А вот C++ для них явно жирноват будет.
User294, давай адрес куда архив 3.6Кб положить. Там две тривиальные программы. Одна - на с, другая - на С++. Сам узнаешь, что куда запихать можно.
| |
|
|
5.15, Аноним (15), 09:02, 23/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>> И это сделано из соображений безопасности.
>
>Ну вы просто не видели как хаксоры через эту "безопасную" машинный код
>выполняют на телефонах.На сименсах это например такой народный метод патчинга начального
>загрузчика (!!!) с целью сбить ограничения и позволить прошивать все что
>угодно.А вы говорите, безопасноть :)
Если есть физический доступ к взламываемому объекту, то тут, конечно, безопасностью и не пахнет. Но вот можно ли взломать java-подсистему на телефонах удаленно, например, заставив пользователя установить определенное приложение? Фиг - как только оно попросит доступ к интернету, файловой системе, SMS и т.п - телефон спросит, разрешать доступ или нет. А иначе как с помощью виртуальной машины реализовать безопасное выполнение каких угодно программ на дешевых телефонах невозможно - аппаратного MMU там нет, и любая нативная программа имеет полный доступ ко всему.
| |
|
6.36, User294 (??), 19:03, 26/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>реализовать безопасное выполнение каких угодно программ на дешевых телефонах невозможно
>- аппаратного MMU там нет,
Это неправда.Обычно там ARM926EJS или подобное ядро.С MMU и акселережкой Java.И даже у ARM без MMU есть более примитивный модуль защиты памяти позволяющий ее побить на несколько сегментов с разным доступом(не такой навернутый как MMU и число сегментов сильно ограниченное, но для изоляции JVM от прочих много и не надо).Другое дело что самопальные операционные системы юзаемые в телефонах писаны абы как и о секурити там если и думали то не всегда в первую очередь.Посему включаются и откровенно тупые ляпы.Укрепляют там традиционно только одно - то что занимается SIM Lock.Вот этот кусок обычно укреплен весьма конкретно и густо обвешан цифровыми подписями, чексуммами, вагоном проверок и прочая.А что там случится с юзером и его данными обычно никого не колышет.
| |
|
5.20, iZEN (ok), 10:52, 24/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>> И это сделано из соображений безопасности.
>
>Ну вы просто не видели как хаксоры через эту "безопасную" машинный код
>выполняют на телефонах.На сименсах это например такой народный метод патчинга начального
>загрузчика (!!!) с целью сбить ограничения и позволить прошивать все что
>угодно.А вы говорите, безопасноть :)
Это исключение, связанное с ошибкой в KVM Siemens. И только. Насколько я знаю, другие мобильники через KVM не ломались ни разу.
Выбор для системного программирования C/C++ обусловливается наличием библиотек разработки и инфраструктуры, то есть элементарной ленью начинать писать всё с нуля, например, на Modula-2 или Oberon, не говоря уж о Forth.
В C++ слишком много разложено костылей над граблями, чтобы от них просто так отказаться.
| |
|
6.21, Александр Чуранов (?), 07:16, 25/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
> слишком много разложено костылей над граблями
Не знаю ни Modula-2, ни Oberon, ни Forth.
Однако, очень хорошо знаю Java и имею знакомство с Ruby. Могу точно сказать, что у них целевое использование отличается от C++, поэтому и решения другие. Они либо эффективность приносят в ущерб чему-то, либо строят всех в один ряд, навязывая решения. В C++ вносят только проверенные-перепроверенные решения. Изучите работу комитета по стандартизации, если есть сомнения. В ruby есть instance methods, добавляемые пользователями, в java - checked exceptions. Через комитет подобное не прошло бы.
> наличием библиотек разработки и инфраструктуры
Ну, не знаю, как для Oberon, а для Java инфраструктура НАМНОГО более развита, чем для С++. Рассмотрите Eclipse, IDEA и Tapestry. В С++ даже код подсветить или подсказать никто правильно не может. Ни emacs, ни visual studio 2008.
Дело в том, что кроме библиотек есть ещё и core language. А там различия огромны. В С++ есть то, на чём можно построить и boost::expressive и std::inner_product. Как правило, в других языках либо нельзя так сделать, либо тормозит. А С++ - единственный мне известный, сочетающий гибкость и скорость.
А грядущие concepts и rvalue references только усиливают указанные качества языка. Об этом и новость, собственно.
| |
6.26, User294 (??), 22:04, 25/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>Это исключение, связанное с ошибкой в KVM Siemens. И только.
Нет, не только.Почему-то как только я качаю себе жабу для браузера - в ней находят дыру вида "ой блин, удаленный хакер может вылезти за пределы песочницы и сделать все что душе угодно с правами текущего юзера".За***хался апдейтить в свое время.Теперь просто не юзаю ибо судя по багам такого плана разрешать аплетам запускаться из веба не сильно менее стремно чем позволить хакеру запускать просто бинарь в машинном коде под текущим юзером.
>Насколько я знаю, другие мобильники через KVM не ломались ни разу.
Потому что нахрен не нужно.Зато десктопная жаба ломалась немеряно раз.
> Выбор для системного программирования C/C++ обусловливается
... тем что на сях можно накатать и такой код, который иначе пришлось бы нудно и долго колупать на гольном асме.Ну вот например, FreeLDR из ReactOS.Гольный бинарь - даже не PE EXE и не ELF.А тем не менее на сях писан.Да, с специфичным стартап-кодом.Да, с собственной рантайм-библиотекой.Но, черт побери, на обычных сях.А теперь покажите другой язык где вот так вот запросто бац и можно без ассемблера и спецутилсов и вообще каких-либо специальных фортелей штатными средствами компилера и линкера такое изобразить.Для системного программинга по-моему такое актуально.
| |
|
|
4.16, null (??), 14:34, 23/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
В телефонах на ARM926 процах, можно сказать, не JVM, а JRM. Там до 95% java кода выполняется нативно. Это тебе не порно-x86 :)
| |
|
|
|
1.23, yantux (??), 11:03, 25/08/2008 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
C++ один из самый ёкнутых языков программирования. Вместо того, чтобы производить полезный продукт программёры извращаются в плане оптимизаций, поиска ошибок, т.е. делаеют всё только не производить полезный продукт.
Мне это напоминает дутых доцентов и профессоров.
| |
|
2.25, Александр Чуранов (?), 20:33, 25/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
Yantux, ты мои посты не читал, что ли?
Надо тебе точно в качестве капчи задачи по Software Engineering давать.
Хочешь что-то сказать - говори предметно, чтобы мы могли сравнить и измерить.
Вот, например, User294 про ресурсы сказал - я ему тест-приложения для анализа подготовил.
Надо дискуссию содержательно вести.
А, кстати, ты само интервью-то читал?
| |
|
3.27, Yantux (?), 00:15, 26/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
Читал. Я не берусь за задачи Software Engineering, которые как правило требуют знать стандарт С++ и прочие хитрые прибамбасы, которые знает один программист из ста. Например ваш первый пример про типы я догадываюсь как работает, но по большому счёту совершенно не осознаю. Я берусь за реальные жизненние задачи в области embedded devices.
Главный недостаток С и С++ - низкая скорость компиляции, pascal быстрее однозначно.
java - замечательный язык для разработки надёжного ПО, т.е. с обработкой исключений.
pascal, java - однозначно лучше С и С++.
| |
|
4.28, Александр Чуранов (?), 04:15, 26/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>Читал. Я не берусь за задачи Software Engineering...
Представляю архитектора моста, говорящего "ну, я за задачи civil engineering не берусь вообще-то, а занимаюсь реальными проблемами". Архитекторам мостов НАДО браться за civil, а приложений - за software engineering. А то под нагрузккой разрушатся и те и другие.
>Главный недостаток С и С++ - низкая скорость компиляции, pascal быстрее однозначно.
В значительной степени недостаток не языка, а компилятора. Хотя вряд ли в pascal есть specialization matching и SFINAE. От того и быстрее.
>java - замечательный язык для разработки надёжного ПО, т.е. с обработкой исключений.
Да, неплохой. Только я так понимаю, что в других языках исключений нет, что ли? Или они в Java как-то лучше реализованы? А что такое "проглоченные исключения" в Java? А других проблем с исключениями, там, случаем нет? А что такое детерминированность поведения, она в понятие "надёжность" не входит, да?
Кстати, про пример: можно сравнить что будет стоить программу на С++ перевести с встроенных целочисленных типов на защищённый из моего примера и что будет стоить в яве избежать переполнения и недополнения целых. Или это в "надёжность" совсем никак не входит?
>pascal, java - однозначно лучше С и С++.
Ну и хорошо. А вот для меня не всё так однозначно. У Java очень сильны позиции в web, а у С++ - в не-web. А pascal где применяется не в курсе. Все программы, которыми дома и на работе пользуюсь - на 90% С и С++ почему-то. Вот сейчас пишу этот текст в браузере и думаю: "а разработчики-то дурачки, надо браузер на паскале писать, или хотя бы на яве" :-)
| |
|
5.29, yantux (??), 10:35, 26/08/2008 [^] [^^] [^^^] [ответить] | +/– | Ваш пример я не понял - не у меня такой квалификации и не вижу смысла вникать в ... большой текст свёрнут, показать | |
|
6.31, Александр Чуранов (?), 14:41, 26/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>Такие задачи надо решать както проще.
typedef int my_int; // это сначала
void f(my_int x);
// и ещё 100 Мб кода в разных файлах
--- через пару лет ---
typedef safer_int <int, Throw, DisallowCast>::type my_int;
void f(my_int x);
// и ещё 100 Мб кода в разных файлах - не изменилось
Вот, спустя два года одной строчкой проект переведён с обычных целых на защищённые. Это гибкость. Это поддерживаемость. И надёжность. Куда проще-то?
>Ваш пример возможно поймёт один программёр изх 10-ти это
>не есть гуд.
К нам недавно в контору приходил человек на Team Lead'а собеседоваться. Не знает бинарный поиск. Да, это не есть гуд. Его не взяли, конечно.
>pascal однопроходной компилятор в отличии от С и С++. Этим и объясняется скорость
>компиляции.
А в С++ - многопроходной? Я не уверен. В коде GCC такого пока не находил. Да, язык сложнее. Действительно, можно освоить лопату и использовать без проблем. И ломается она редко. А то, что экскаватором управлять надо учиться - это, конечно, минус. Только почему же используют их, эти экскаваторы? Они ведь и стоят дороже. Глупые люди себе проблем ищут. Товарищи, копайте лопатами!
>Стек ошибок.
Не понял, о чём конкретно это. Можно объяснить?
>Я вижу разницу между int и float, char какие там ещё защищённые типы бывают не
>знаю и сомневаюсь что в них есть необходимость.
Ищите в Google по словам "integer vulnerabilities". А то может быть она есть, это необходимость?
| |
|
7.39, User294 (??), 20:18, 26/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>Ищите в Google по словам "integer vulnerabilities". А то может быть она
>есть, это необходимость?
Еще какая есть.Некоторые упыри хронически не хотят валидацию входных данных делать и крайне безбашенно потом с полученными данными обращаются.Что на сях, что на жабе, что на пхп, что на чем там еще.В результате куда не ткни, незапланированные данные введенные юзером вызывают красивые спецэффекты.Integer overflow один из таковых.
| |
|
|
5.30, yantux (??), 10:39, 26/08/2008 [^] [^^] [^^^] [ответить] | +/– | Ваш пример я не понял - не у меня такой квалификации и не вижу смысла вникать в ... большой текст свёрнут, показать | |
|
6.32, Александр Чуранов (?), 14:58, 26/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>От программистов же не требуют надёжность ПО. Сделал, работает и ладно.
Наверное, везде по-разному. У нас на надёжность почти все ресурсы и уходят. Код пишем 10% времени. И проверкой качества десятки человек занимаются.
| |
|
7.33, yantux (??), 17:15, 26/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
Значит вы делаете ПО не массового пользования. Делали бы на паскале и жабе всё былобы проще.
| |
|
6.41, User294 (??), 20:31, 26/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>Не знаю чем отличается целочисленный тип от защищённого.
Зато когда хаксоры пришлют вашей программе не то что по вашей задумке должен ввести юзер а то что им было удобно чтобы сломать вашу программу - узнаете :).Результат бывает разный, но как правило - ничего хорошего.Отказ в обслуживании, повышение прав или выполнение удаленным хаксором своего кода - типичные такие грабельки от integer overflow.
| |
|
|
4.38, User294 (??), 20:06, 26/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>Читал. Я не берусь за задачи Software Engineering, которые как правило требуют
>знать стандарт С++ и прочие хитрые прибамбасы, которые знает один программист
>из ста.
А вы случайно не из тех чудаков на букву эм которые пишут на чем умеют биллинги и тому подобное практическое добро?С логическими ошибками над которыми юзерье потом угорает, прокидывая обладателя чудо-поделия на много денег и т.п..Потому что язык языком а если архитектура и реализация безбашенные - они на любом языке дрянь дрянью будут.И никакая жаба от этого не спасает.А чем более тупой програмер писал программу тем больше там логических ошибок как правило.Что?Вы не любите ловить ошибки?Дебажить?Следить за всем и вся?Зато хакеры в отличие от вас очень любят подавать на вход таким поделкам вместо того что задумал програмер откровенный левак.А потом появляются если и не переполнения буфера так SQL иньекции, XSS скриптинг, доступ к привилегированной информации и прочие веселости :).Кажется в tomcat недавно пофиксили крайне забавную багу с directory traversal (кстати да, серверов с этим "безопасным" добром позволяющих хапнуть файлов которые по идее мне не полагается видеть - выше крыши.Иногда там встречаются и всякие интересности :D).
| |
|
|
2.37, User294 (??), 19:25, 26/08/2008 [^] [^^] [^^^] [ответить]
| +/– |
>C++ один из самый ёкнутых языков программирования. Вместо того, чтобы производить полезный
>продукт программёры извращаются в плане оптимизаций, поиска ошибок, т.е. делаеют всё
>только не производить полезный продукт.
Одна незадача - полезных продуктов писаных на C++ побольше чем всех остальных вместе взятых пожалуй.От компьютерных игр до десктопных сред.
| |
|
|