Здравствуйте, Tilir, Вы писали:
T>Это ядро Linux. Ещё раз -- ядро. Операционной системы. То самое место, где любые "управляемые решения" с JIT, сборкой мусора и прочими подгузниками просто не роляют.
С чего ты взял?
T>Ошибки? Их не бывает только у тех, кто ничего не делает. А свобода программиста, которую даёт C, ну да в том числе и свобода ошибаться, это самое ценное что у меня, например, есть.
Тоже чушь, MS активно использует верификатор кода C, количество таких ошибок снижается на порядки.
Программирование уже давно не искусство, тут рулят надежные решения. На свободу насрать.
Re[2]: Павлу Дворкину: о понимании того что делаешь и просты
Здравствуйте, Tilir, Вы писали:
T>Это ядро Linux. Ещё раз -- ядро. Операционной системы. То самое место, где любые "управляемые решения" с JIT, сборкой мусора и прочими подгузниками просто не роляют.
А с какой радости? Чем плох JIT в ядре? Чем плох realtime GC в ядре? Мало было в линухе утечек?
Все эти предрассудки против управляемых сред давно уже пора бы пресечь.
T> Ошибки? Их не бывает только у тех, кто ничего не делает. А свобода программиста, которую даёт C, ну да в том числе и свобода ошибаться, это самое ценное что у меня, например, есть.
Что там получилось — обсуждать сейчас не буду, так как жду ответа на мое утреннее письмо. Ну а о прочем порассуждаем.
Нужна ли нам свобода ? Для того, чтобы ответить, надо задать другой вопрос — а что вообще надо ?
Говорить буду от своего имени. Согласные могут присоединиться
Мне надо
1. Иметь возможность делать все, что я хочу. Разумееется, в рамках того, что мне позволяет аппаратура и (возможно) операционная система, а также мои мозги. Слово "возможно" здесь не случайно. В определенных границах я могу изменить поведение ОС, добавив к ней свой модуль (драйвер)
2. Чтобы это работало как можно более быстро и потребляло ресурсов как можно меньше. Я пишу не серверное ПО, а моя ОС не MS-DOS, так что работать это все будет в коммунальной квартире, а поэтому ванную занимать на 3 часа нечего и свет в туалете надо тушить.
3. Чтобы в этом коде было как можно меньше ошибок. Говорить "чтобы не было ошибок" не буду, так как программа без ошибок есть абстрактное теоретическое понятие.
4. Чтобы я на это потратил как можно меньше своего времени.
Замечу, что эти пожелания выстроены мной строго в соответствии с моими приоритетами. Иными словами, если мне предлагается нечто, резко улучшающее пункт i+1 за счет ухудшения в пункте i — меня это не устроит.
Ты мне предлагаешь начать с пунктов 3 и 4. Обещаешь, что в коде будет меньше ошибок, и я смогу написать быстрее. Насчет второго не спорю, а первое еще обсудим, попозже.
Первый мой вопрос — а как с п.1 и 2 будет. Гарантируете ли вы, что я по-прежнему смогу делать все. что я умею делать, использовать все те возможности ОС, которые умею использовать ? И будет ли это работать столь же быстро и требовать ресурсов не больше ?
Как только я этот вопрос задаю, так сразу мои оппоненты начинают юлить. Сможешь , наверное, только вот иногда тебе придется на неуправляемый код переходить, а иногда и вообще не получится. Но ты мол, не огорчайся, если не получится, то это значит, что тебе такое и не надо, мы тебе другое предложим... И работать это будет быстрее. Ах, у тебя все же медленнее получается... Ну значит , ты неправильно меряешь, не на тех тестах , и вообще имей в виду — в светлом будущем наш код намного лучше будет. Светлое будущее обещать они очень любят.
Я утрирую ? Нет. Ну насчет скорости — мы тут уже столько копий сломали, что вряд ли стоит еще одно ломать. А вот насчет возможностей... Никакой я не специалист в C# и .NET, я там просто дилетант, не более. Но тем не менее мне неоднократно доводилось давать советы в форуме по .NET, причем за эти советы я получал баллы в рейтинге. Разумеется, мне и в голову не придет давать совет, когда речь идет о каких-то итераторах или замыканиях, но вот когда речь заходит о взаимодействии с Windows, об использовании ее механизмов — мои советы порой звучат для некоторых там как откровение.
Так что , увы, по п. 1 и 2 ощущения у меня складываются ... как бы это помягче сказать... не очень. Цена отказа от свободы для меня слишком уж велика.
А теперь перейдем к п.3. Вот тут мои оппоненты сразу отыграться готовы. Да, пусть ты кое-что в плане свободы потеряешь, но это мелочи. Зато мы тебе взамен предлагаем безопасность. Ошибок будет меньше. Это же хорошо ?
Хорошо, конечно. Что я еще могу сказать! Вы предлагаете мне отказаться от свободы, но в ответ обещаете, что я смогу писать код без ошибок ? Да — мне в ответ.
Без любых ошибок ?
И тут опять мои опппоненты юлить начинают. Мемори ликов у тебя не будет. Ладно, говорю, спасибо, хотя у меня их и так не много, инструменты для их обнаружения есть. Индекс у тебя за пределы массива не выйдет. Тоже спасибо, отвечаю я, он и так у меня как правило не выходит, если только я сам не хочу, чтобы он выходил. Что там еще ? Уничтоженные объекты не будешь использовать. Тоже спасибо, хотя и так попытка взятия по NULL определяется без особого труда.
А от логических ошибок вы меня оградите ? От ошибок алгоритма или его реализации ? От того, что я при вычислении корней уравнения вместо b*b-4*a*c написал b*b+4*a*c ? От того, что я понимал эту задачу так-то, а она, оказывается, выглядит совсем не так, но это проявляется в одном случае на миллион ? С IndexOutOfRange я как-нибудь и так справлюсь, а вот с этим-то что делать ? Поможете ?
А в ответ — либо тишина, либо рассуждения о светлом будущем, когда весь код будет верифицироваться (надо полагать, верификатор будет распознавать подпрограмму вычисления корней уравнения, знать этот алгоритм и подскажет мне — ты там плюс вместо минуса поставил Остается только понять — почему он в таком случае за меня программу сам не написал.)
Кстати, и твой пример с пайпами. Я до конца не разобрался, в чем там ошибка, гипотеза — мютекс создается после защищаемого объекта (а надо до, эту ошибку я тоже как-то делал). Да, управляемый код скорее всего вместо UB и следующей за ним уязвимости просто устроит exception. Но при написании кода была допущена логическая ошибка (если это так). Помочь мне не допустить , чтобы я эту ошибку сделал, кто мне может ? Никто. Тот код, который ты показал, при определенных условиях вполне безупречен.
И вот эти логические ошибки меня больше всего и беспокоят. Они у меня львиную часть времени съели. А не выходы индексов и прочая чепуха.
Резюмирую. Готов ли я отдать свою свободу (в программировании, конечно, только там) за что-то ? Пока не дадите твердого ответа на п.1 и 2. — категорически не готов. А когда дадите — тогда поторгуемся по п.3. Пока хорошо не заплатите — тоже не отдам.
Но!
Если встретится задача, где можно ваши способы и методы использовать — а почему бы и нет ? Если п. 1-2 несущественны или не лимитируют — да бога ради. Попастись на вашем поле я вполне готов, но как только понадобится что-то серьезное сделать — на свободу! В пампасы . Там трава погуще, хотя и львы бегают.
И в заключение лирическое отступление.
Есть такая машина — вертолет называется. Летает себе куда хочет, садится — почти где хочет, взлетает там, где села. Жаль, не довелось мне на ней полетать. Вот представляю себе — летим, а внизу шоссе. И на нем — поток машин. Все в одном направлении едут. А вот здесь вообще стоят — пробка.
Ну зачем вы все как на параде, в одну сторону едете ? Вам же в разные места надо! Возьмите карту, проложите прямую (или геодезическую), да по прямой, по прямой! Ах, там дома, говорите. Ну и что ? У них же высота — жалкие десятки, ну сотни метров. А в горы вы сможете, а ? На Мерседесе — да прямо в горы, без дороги ? А как насчет речку пересечь ? Мост вам, оказывается нужен, или паром. А я пересек и не заметил. И чего вы так медленно едете ? Я , пока вы там в пробке стоите, вокруг вас несколько раз облетел и язык вам показал.
В общем, лучше вертолет, чем автомобиль. Намного лучше. Но один недостаток у него есть. Серьезный. Иногда они падают. Не часто, но бывает. И последствия обычно тяжелые.
А автомобили — не падают. Сталкиваются — да, с обрыва летят — тоже бывает. Я так думаю, что они при этом очень хотят хоть напоследок полетать. Свободы им хочется. Той самой, о которой они уже и думать забыли.
Но не получается. Рожденный ползать — летать не может.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>И тут опять мои опппоненты юлить начинают. Мемори ликов у тебя не будет. Ладно, говорю, спасибо, хотя у меня их и так не много, инструменты для их обнаружения есть. Индекс у тебя за пределы массива не выйдет. Тоже спасибо, отвечаю я, он и так у меня как правило не выходит, если только я сам не хочу, чтобы он выходил. Что там еще ? Уничтоженные объекты не будешь использовать. Тоже спасибо, хотя и так попытка взятия по NULL определяется без особого труда.
PD>А от логических ошибок вы меня оградите ? От ошибок алгоритма или его реализации ? От того, что я при вычислении корней уравнения вместо b*b-4*a*c написал b*b+4*a*c ? От того, что я понимал эту задачу так-то, а она, оказывается, выглядит совсем не так, но это проявляется в одном случае на миллион ?
Проблема в том, что голова не безразмерная и чем больше думаешь про "мемори-лики", тем меньше про логику программы
PD>С IndexOutOfRange я как-нибудь и так справлюсь, а вот с этим-то что делать ? Поможете ?
ну и аргумент, охренеть — ваша кофеварка не умеет стирать бельё!??? в топку её!
Re[2]: Павлу Дворкину: о понимании того что делаешь и просты
Здравствуйте, Tilir, Вы писали:
T>Здравствуйте, kochetkov.vladimir, Вы писали:
KV>>Я вот сижу и думаю, а может ну ее нафиг эту свободу, а?
T>Не так давно от одного моего друга слесаря прозвучало
T>
T>Я бы так сказал — токарный станок дает мне свободу делать все, что я хочу. А это неизбежно сопряжено с возможностью сделать и ошибку. Чтобы свободой как следует воспользоваться, надо хорошо понимать, что при этом можно, и что нельзя делать. Например палец туда совать нельзя.
T>Вместо "палец" он употребил иное слово, но вы понимаете, слесарь...
Я совершенно согласен, но, думаю, это все же был токарь
PD>1. Иметь возможность делать все, что я хочу. Разумееется, в рамках того, что мне позволяет аппаратура и (возможно) операционная система, а также мои мозги. Слово "возможно" здесь не случайно. В определенных границах я могу изменить поведение ОС, добавив к ней свой модуль (драйвер)
И мне это надо. Но C++-ов мне при этом даром не надо.
PD>2. Чтобы это работало как можно более быстро и потребляло ресурсов как можно меньше. Я пишу не серверное ПО, а моя ОС не MS-DOS, так что работать это все будет в коммунальной квартире, а поэтому ванную занимать на 3 часа нечего и свет в туалете надо тушить.
Это точно не к C++.
PD>3. Чтобы в этом коде было как можно меньше ошибок. Говорить "чтобы не было ошибок" не буду, так как программа без ошибок есть абстрактное теоретическое понятие.
Ну тут вообще C++ не при делах.
PD>4. Чтобы я на это потратил как можно меньше своего времени.
C++ по части boilerplate-кода не имеет себе равных.
PD>Первый мой вопрос — а как с п.1 и 2 будет. Гарантируете ли вы, что я по-прежнему смогу делать все. что я умею делать, использовать все те возможности ОС, которые умею использовать ? И будет ли это работать столь же быстро и требовать ресурсов не больше ?
Например, с Ada? Ещё бы, как не гарантировать.
PD>Как только я этот вопрос задаю, так сразу мои оппоненты начинают юлить. Сможешь , наверное, только вот иногда тебе придется на неуправляемый код переходить, а иногда и вообще не получится.
Что плохого в "иногда на неуправляемый код переходить"? Особенно если он генерится в динамике из управляемого.
PD>И вот эти логические ошибки меня больше всего и беспокоят. Они у меня львиную часть времени съели. А не выходы индексов и прочая чепуха.
Сейчас thesz про Agda расскажет.
PD>Резюмирую. Готов ли я отдать свою свободу (в программировании, конечно, только там) за что-то ? Пока не дадите твердого ответа на п.1 и 2. — категорически не готов. А когда дадите — тогда поторгуемся по п.3. Пока хорошо не заплатите — тоже не отдам.
Какая же это на фиг свобода? Вот метапрограммирование, при наличии среди целевых языков и сколь угодно низкоуровневых — это свобода. А один примитивненький низкоуровневый язык — это не свобода, а фигня.
Здравствуйте, metaprogrammer, Вы писали:
M>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>И вот эти логические ошибки меня больше всего и беспокоят. Они у меня львиную часть времени съели. А не выходы индексов и прочая чепуха.
M> Сейчас thesz про Agda расскажет.
Здравствуйте, Odi$$ey, Вы писали:
OE>Проблема в том, что голова не безразмерная и чем больше думаешь про "мемори-лики", тем меньше про логику программы
Отчасти верно, только я о них слишком уж мало думаю, чтобы это всерьез повлияло.
PD>>С IndexOutOfRange я как-нибудь и так справлюсь, а вот с этим-то что делать ? Поможете ?
OE>ну и аргумент, охренеть — ваша кофеварка не умеет стирать бельё!??? в топку её!
Если меня больше всего интересует, как постирать белье , а ты мне предлагаешь кофеварку — в топку!
With best regards
Pavel Dvorkin
Re[3]: Павлу Дворкину: о понимании того что делаешь и просты
Здравствуйте, gandjustas, Вы писали:
GZ>>Уважаемый. А вам не кажется что вышеописанное ортогонально языку, и подобное можно сделать практически на любом языке. G>Ага, пример на .NET в студию.
Net — это не язык. Net — это платформа исполнения.
GZ>>Хотя для некоторых придется проявить выдержку, спокойствие и сообразительность? G>Там где сборка мусора такое сделать почти невозможно.
Тут вопрос цены ошибки. Если ты получишь NullReferenceException в ядре в неожиданном месте, то ненамного лучше не станет. В С++ кроме указателей есть много других опасностей.
1. Иметь возможность делать все, что я хочу. Аппаратура мне нужна только постольку поскольку она поддерживает высокоуровневые конструкции языка.
2. Чтобы в этом коде было как можно меньше ошибок. Это для меня самое важное.
3. Чтобы программа имела хорошую архитектуру.
4. Чтобы я на это потратил как можно меньше своего времени.
5. Чтобы это работало как можно более быстро и потребляло ресурсов как можно меньше.
Вывод: есть разные типы программистов с разными приоритетами.
Здравствуйте, metaprogrammer, Вы писали:
M>Здравствуйте, Tilir, Вы писали:
T>>Это ядро Linux. Ещё раз -- ядро. Операционной системы. То самое место, где любые "управляемые решения" с JIT, сборкой мусора и прочими подгузниками просто не роляют.
M> А с какой радости? Чем плох JIT в ядре? Чем плох realtime GC в ядре? Мало было в линухе утечек?
Вот только и JIT и GC сами-то пишутся на C++.
Re[3]: Павлу Дворкину: о понимании того что делаешь и просты
фсЗдравствуйте, gandjustas, Вы писали:
KV>>>"Суслика видите? А он есть..." GZ>>Уважаемый. А вам не кажется что вышеописанное ортогонально языку, и подобное можно сделать практически на любом языке. G>Ага, пример на .NET в студию.
GZ>>Хотя для некоторых придется проявить выдержку, спокойствие и сообразительность? G>Там где сборка мусора такое сделать почти невозможно.
Что невозможно? Гонку сделать? Чего ж тут невозможного?
Ну будет не падать программа, а деньги переводить на неправильный счёт. Если она падает — это ещё лучший исход.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>В общем, лучше вертолет, чем автомобиль. Намного лучше. Но один недостаток у него есть. Серьезный. Иногда они падают. Не часто, но бывает. И последствия обычно тяжелые.
Только вертолеты на несколько порядков дороже сами по себе и в эксплуатации. Да и далеко на нем не улетишь. Ну 500 км. А что бы 1000-2000 надо уже или самолет, который тоже очень дорогой, да и взлететь/сесть можно далеко не везде. Или автомобиль. Поэтому в большинстве случаев именно автомобиль является оптимальным выбором.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Замечу, что эти пожелания выстроены мной строго в соответствии с моими приоритетами. Иными словами, если мне предлагается нечто, резко улучшающее пункт i+1 за счет ухудшения в пункте i — меня это не устроит.
С такими низкоуровневыми приоритетами можно решать только низкоуровневые задачи. Для узкой группы задач вроде ковыряния в железках это возможно будет работать. О решении бизнес и ряда системных задач можно сразу забыть навсегда.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Павлу Дворкину: о понимании того что делаешь и просты
Здравствуйте, A13x, Вы писали:
A>Здравствуйте, kochetkov.vladimir, Вы писали:
KV>>... KV>>Я вот сижу и думаю, а может ну ее нафиг эту свободу, а?
A>А может тогда сразу нафиг программирование — и в дворники?
блин...а я прочитал — ...в Дворкины...
Re[3]: Павлу Дворкину: о понимании того что делаешь и просты
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, Tilir, Вы писали:
T>>Это ядро Linux. Ещё раз -- ядро. Операционной системы. То самое место, где любые "управляемые решения" с JIT, сборкой мусора и прочими подгузниками просто не роляют. G>С чего ты взял?
T>>Ошибки? Их не бывает только у тех, кто ничего не делает. А свобода программиста, которую даёт C, ну да в том числе и свобода ошибаться, это самое ценное что у меня, например, есть. G>Тоже чушь, MS активно использует верификатор кода C, количество таких ошибок снижается на порядки.
G>Программирование уже давно не искусство, тут рулят надежные решения. На свободу насрать.
Ну уменьшается,но всё же не всё найдёт верификатор