この世界は。。。いいですか?
Как надо писать учебники по программированию: https://learnxinyminutes.com/docs/go/
Порадовало:
Не, умом-то я понимаю, что "под капотом" там просто массив, но... ведь и правда, зачем делать руками, если транслятор может сам?
Ещё:
Это самое толковое объяснение, что такое замыкания и зачем они нужны. Наконец-то я понял это, притом изучая новый язык, который вообще впервые вижу. Java? Javasсript? C++11? Не, там в мануалах такого наворочено, чёрт ногу сломит...
Порадовало:
Не, умом-то я понимаю, что "под капотом" там просто массив, но... ведь и правда, зачем делать руками, если транслятор может сам?
Ещё:
Это самое толковое объяснение, что такое замыкания и зачем они нужны. Наконец-то я понял это, притом изучая новый язык, который вообще впервые вижу. Java? Javasсript? C++11? Не, там в мануалах такого наворочено, чёрт ногу сломит...
Впрочем, я читая habr, не понимаю, то ли я тупой, что не использую все эти замыкания, лямбды, шаблоны с переменным количеством аргументов, алгоритмы stl и прочее из Си++ 11 и выше, то ли эти люди умеют писать крохотную часть программы и потому так узко специализированы, что кроме всего перечисленного делать не умеют ничего. Потому что я привык сам делать программы от и до. Нет у нас специальных архитекторов, тим-лидов и прочих. У нас даже ТЗ или ТТ на программу не выдадут. Так вот, есть у меня (полностью моя - я единственный автор) программа под Unix-подобную ось для обслуживания комплекса на Си++. Исходников там только текста 4 МБ в 340 модулях. Собирается долго и в исполняемый файл почти 1.9 МБ. И в этой программе почему-то нет ни единого алгоритма из stl. Вот контейнерные классы есть, а алгоритмов нет. Нет там и паттернов, за исключением нескольких фабрик-синглтонов. Полиморфизм, правда, есть, вместе с интерфейсными классами, плюс виртуальное множественное наследование (и интерфейсов - так было надо). И программа достаточно сложная и с кучей автоматики и работы с аппаратурой. Поэтому я решительно не понимаю, как же пишут программы обитающие на хабре? Или это просто теоретики? Для чего им чистые функции и все эти заморочки? Хаскель вот нафига им сдался? Я не понимаю. То ли я безнадёжно отстал, то ли есть какой-то нюанс.
Можно задать нескромный вопрос? Что будет с программой, когда вы уволитесь?
В том-то и фишка, что с программой всё будет очень хорошо - она написана так, чтобы её можно было легко поддерживать. Отсюда и такое разбиение на модули. Она достаточно близка к SOLID. А, да. В ней также ещё есть RAII и шаблоны (не с переменным количеством аргументов).
Как получаются все эти модули? Вот у вас есть команды. Почти все команды - послать по CAN 8 байт. Заводим интерфейсный класс, общий для всех команд. Заводим класс базовых методов команды. Заводим на каждую команду по классу с наследованием от интерфейса и базового класса. Текста получается много и модулей тоже. Но программа становится гораздо удобнее для модификации.
Правда, практика показывает, что обычно с модулями-то как раз всё в порядке. А вот с логикой и идеологией в целом могут быть бо-о-ольшие проблемы. С аппаратной частью так это вообще сплошь и рядом: то в прерывание зайдёт, когда не надо бы, то задержки не позволяют решить задачу, то внезапно аппаратура работает не так, как описано у производителя (есть нюанс).
А у нас - Кровавый Ынтырпрайз: микроконтроллеры, С, местами С++, и всё как Вы сказали - и аппаратура не так работает, как описано, и задержки, и вообще, замкните эти два контакта резистором, а то сирена орать будет... Но не больше 100 кОм, а то ай-ай-ай.
В общем, пост скоро созреет, напишу.
Вот хороший пример: чтобы избавиться от указателей на функцию.
Каким образом? И при чём тут указатель на функцию?
Замыкание ведь есть всего лишь передача функции контекста вызова. С таким же успехом можно было бы в эту функцию передать все нужные параметры и так (если вы её автор).