• Как встроить в OS компилятор C++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Вам туда: wiki.osdev.org
    Ответ написан
    1 комментарий
  • Как дела в системном программировании?

    garrydvaraza
    @garrydvaraza
    человек
    По моему надо искать не то где больше перспектив, а то чем больше нравится заниматься.

    ps Говорить что в вебе больше перспектив конечно же правильно.
    Но тру-проггеры это разработчики граф движков, компиляторов, операционок, в общем разработчики инструментария для других разработчиков(в том числе и веб прогграммеров). И без них не было ничего. Так всегда было и будет.
    Ответ написан
    Комментировать
  • Почему в C++ нужно строить всю программу на ООП (длинный вопрос)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Мне нравится код ядра Linux. Никакого разделения программы на объекты там нет, и всё там окей, прекрасно без такого разделения живут.

    Да-да-да, https://lwn.net/talks/fosdem-kobject/

    Полиморфизм есть, но он есть только там, где это нужно. И никакого "А давайте всю программу разобьём на классы, просто потому что так надо" тут нет. На мой взгляд, Linux устроен совершенно верно, именно так и нужно писать.

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

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

    Сюда идеально подходит книга "Паттерны проектирования". (скан, кстати, не очень, пропущен важный кусок истории в конце). Только не надо читать про сами паттерны. Прочитай всё остальное: откуда они взялись, какова их история, как ими пользоваться.
    Ответ написан
    4 комментария
  • Почему в C++ нужно строить всю программу на ООП (длинный вопрос)?

    @Mercury13
    Программист на «си с крестами» и не только
    Задача ООП: 1) Локализовать изменения состояния объекта (инкапсуляция); 2) связывать разные кирпичики данных через стандартные интерфейсы (полиморфизм).

    Простейший тетрис не слишком велик, чтобы его писать на чистом ООП.
    Но представьте себе, мы начинаем налаживать настраиваемое управление джойстиком или клавиатурой. И тогда у нас появляется такой код.
    enum {
      BT_LEFT = 1,
      BT_RIGHT = 2,
      BT_ROTATE = 4,
      BT_SOFTDROP = 8,
      BT_HARDDROP = 16,
      BT_PAUSE = 32,
      BT_CONNECTED = 32768,   // бит, указывающий, что контроллер подключён
    };
    class Controller {  // интерфейс
    public:
      virtual unsigned poll() const = 0;   // сочетание битов BT_XXX
      virtual ~Controller = default;
    };

    Классы Keyboard и Joystick поддерживают интерфейс Controller, и подмена клавиатуры на джойстик и наоборот ничего не изменит.
    Вот вам полиморфизм.

    Текстовый редактор превращаем в многооконный — берём класс Editor и пристраиваем его не к программе в целом, а к MDI-окошку. Вот вам инкапсуляция — локализованное изменение состояния.

    Я как-то мучил движок Doom. Он написан в самом настоящем объектном стиле на чистом Си! Хотя и там были проблемы: сетевой код был куда хуже по качеству, чем сам движок. Писали разделённый экран, глобальную переменную netgame разделили на две, multiplayer и netgame и долго-долго правили баги, где multiplayer, где netgame (было дело, участник десматча ввёл IDKFA, это сработало и вызвало рассинхронизацию). А код пользовательского интерфейса — вообще медвежуть!
    Ответ написан
    Комментировать
  • Что делать, если твои коллеги(и ты сам) только что освоили git, и каммитят все подряд?

    По большому счету, коммит - это завершенная семантически, минимальная операция. К примеру, "Убрал кнопку", "Исправил опечатку", "Добавил новое поле", "Исправил ошибку такую-то". Ведь есть такая штука, как blame, которая позволяет увидеть в любом файле построчно, кто и что менял. Кто меня - понятно, а вот "что менял" как раз и берется из сообщения коммита. То есть, коммиты должны быть маленькими, семантически законченными, сообщение должно отражать суть изменения. Тогда историю можно будет удобно использовать.
    Для отдельных задач всегда делается отдельная ветка, пусть даже в ней будет один коммит. Потом эта ветка мержится в основную после code review.

    Вообще, есть отличная методология работы с git - git-flow. Вот хорошая статья на хабре об этом: Почему вы до сих пор не используете git-flow?
    Ответ написан
    Комментировать
  • Почему в функциональных языках принято использовать аббревиатуру xs для списков?

    sl_bug
    @sl_bug
    Скорее всего потому что «x» это элемент, а «s» это множественное число. А список это множество элементов. Что-то вроде item -> items
    Ответ написан
    1 комментарий
  • Почему Линус не любит C++?

    @lesha_penguin
    <Мысль_вслух>Если существует специальный «ад для говнокодеров», то наверняка, одним из самых жестких наказаний в нем была бы отладка того говнокода, который, который в С++ получается по принципу «делается более просто и изящно».</Мысль_вслух>

    Если начинать «от сотворения мира»:

    1) Как известно C++ был был придуман Страуструпом, мы не будем умалять его «ученные регалии» (ученных-то наград куча, но они по сути единственное чего «добился человек», кстати, 90% прямо или косвенно за c++). Однако, заметим, что Страуструп — как раз есть пример «чистого теоретика» (в отличии от «практика»-Торвальдса), т.е. является человеком за свою жизнь не принимавшим участия в разработке ни одного серьезного реального программного проекта. По сути компилятор c++ — единственное более-менее практическое дело в его жизни. Соотвественно о том с какими проблемами приходится сталкиваться в реальном «software development-е» с «высоты его ООП-теорий» он имеет весьма посредственное представление.

    2) Как верно заметили, в упомянутой статье, изначально это был как раз «Це с классами», т.е. изначально НЕ БОЛЕЕ ЧЕМ «академическая» попытка навернуть на C отдельные элементы «обьектности» (типа, Smalltalk обьектный, а давайте попробуем сделать такое на более низком уровне). Кстати, могу Вам сказать, что с C++ я впервые познакомился в 80-90е годы, когда языком «ученной среды» был Фортран, языком «системщиков» Си, а для обучения «всех непрофильных специальностей» основам программирования использовались Basic и Pascal. Да, но правда «тогдашний C++ 80» отличался от нынешнего — он реально производил впечатление «просто прикольной поделки» (на память помню, что например, тогда не было и половины привычного функционала например таких вещей как всяких «reinterpret_cast-ов» или namespac-ов.). Кстати, да… барабанная дробь… НЕ БЫЛО STL!!!

    3) Наверное Страуструповский «Це с классами», наверное так бы и остался в списке «прикольных поделок» в аналах истории, если бы не одно обстоятельство: «ВНЕЗАПНО» произошел «софтверный бум», соотвественно: a) «элитных» «олдскульных» программистов стало резко не хватать b) «требования к качеству софта» резко упали c) понадобилось средство для генерации достаточно низкоуровневого «говнокода в промышленных масштабах». И как ни странно, (ага, угадали, именно с появлением в C++ STL-я) C++ так и не избавившись от своих «академических болячек» был брошен в пучину «мейнстрима».

    4) Вам говорят истинную правду, когда говорят, что «C++» это маркетинговое название для «Це с классами». Да, это так. И можно сказать, к великому сожалению, он нашел свою рыночную нишу. (Сейчас любой дурак может легко «освоить C++ за 21 день (с бустом и стлем)», при этом не умея даже внятно ответить на простой вопрос «Если ты такой умный, обьясни тогда почему, c$k@, у тебя программа течет по памяти и падает», (про такие «неполиткорректные вопросы», как «зачем писать 100 строк на то, что пишется в две-три», мы вообще тактично молчим, а то, мало ли, может у человека «сдельная зарплата» за количество строк ;) ), зато с видом крутого Беара Грилса можно обсуждать такие «высокие материи» как «Паттерны» и «чистый ООП»).

    5) И к самому большему сожалению, в некоторых случаях альтернативы нет. Да, Я еще не встречал ни одного программиста, который в действительно реальной разработке софта активно использовал бы C++ и при этом от него бы не плевался. У C++ есть «Огромный ПЛЮС» — Его Мультипарадигменность! По-сути это его единственный плюс, позволяющий «не уйти в дебри» (типа попыток запихнуть «main()» в обьект только ради «идеи чистого ООП»)!

    6) А теперь, после такого «исторического» вступления еще раз перечистайте внимательно письмо Торвальдса, высказывание человека который лучше многих «теоретиков чистого ООП» знает как это оно «на собственной шкуре» разрабатывать сложные системы, и комментарии от хабраюзеров, которые «на живой практике» знают «почем фунт лиха» в топике. Под большинством утверждений я лично бы поставил свою подпись золотыми буквами.
    Ответ написан
    5 комментариев
  • Мотивация программирования — деньги. Это нормально?

    SLY_G
    @SLY_G
    журналист, переводчик, программист, стартапщик
    Вам нравится зарабатывать деньги, значит вам нужна работа, которая только из этого и состоит.
    Как насчёт фондовой биржи?
    Ответ написан
    2 комментария