17:58

この世界は。。。いいですか?
Как надо писать учебники по программированию: https://learnxinyminutes.com/docs/go/

Порадовало:


Не, умом-то я понимаю, что "под капотом" там просто массив, но... ведь и правда, зачем делать руками, если транслятор может сам?

Ещё:

Это самое толковое объяснение, что такое замыкания и зачем они нужны. Наконец-то я понял это, притом изучая новый язык, который вообще впервые вижу. Java? Javasсript? C++11? Не, там в мануалах такого наворочено, чёрт ногу сломит...

Комментарии
12.07.2018 в 22:54

...и вечером плащ демиурга и мага, а утром по новой колпак дурака...
О, nio, расскажите и мне, зачем нужны замыкания. :) Пока всё, что я узнал, так это то, что они нужны чтобы навесить дополнительную функциональность туда, где её раньше не было. Например, умеет граф.библиотека функции обратного вызовы вызывать по нажатию кнопки. А мы хотим чтобы в эту функцию ещё и класс кнопки передавался по ссылке. Лабаем лямбду или функтор и вот уже замыкание готово. Компилятор скрыл неявную передачу параметра. НО. На мой взгляд это нарушает инкапсуляцию. А это плохо. Как я понимаю.
Впрочем, я читая habr, не понимаю, то ли я тупой, что не использую все эти замыкания, лямбды, шаблоны с переменным количеством аргументов, алгоритмы stl и прочее из Си++ 11 и выше, то ли эти люди умеют писать крохотную часть программы и потому так узко специализированы, что кроме всего перечисленного делать не умеют ничего. Потому что я привык сам делать программы от и до. Нет у нас специальных архитекторов, тим-лидов и прочих. У нас даже ТЗ или ТТ на программу не выдадут. Так вот, есть у меня (полностью моя - я единственный автор) программа под Unix-подобную ось для обслуживания комплекса на Си++. Исходников там только текста 4 МБ в 340 модулях. Собирается долго и в исполняемый файл почти 1.9 МБ. И в этой программе почему-то нет ни единого алгоритма из stl. Вот контейнерные классы есть, а алгоритмов нет. Нет там и паттернов, за исключением нескольких фабрик-синглтонов. Полиморфизм, правда, есть, вместе с интерфейсными классами, плюс виртуальное множественное наследование (и интерфейсов - так было надо). И программа достаточно сложная и с кучей автоматики и работы с аппаратурой. Поэтому я решительно не понимаю, как же пишут программы обитающие на хабре? Или это просто теоретики? Для чего им чистые функции и все эти заморочки? Хаскель вот нафига им сдался? Я не понимаю. То ли я безнадёжно отстал, то ли есть какой-то нюанс.
13.07.2018 в 02:29

この世界は。。。いいですか?
Полагаю, для того весь этот синтаксический сахар и создаётся, чтобы не было 4 мб исходников в 340 модулях.
Можно задать нескромный вопрос? Что будет с программой, когда вы уволитесь?
13.07.2018 в 06:38

...и вечером плащ демиурга и мага, а утром по новой колпак дурака...
А нет, в том-то и дело, что как раз весь этот "сахар" (только почему только синтаксический? Та же лямбда практически никогда вам не понадобится - разве только у вас реально есть нужда где-то по-быстрому подставить как указатель на функцию в другую функцию. Но таких вещей много не может быть) с сокращением объёма не поможет вообще никак. Он, наоборот, плодит модули и уровни абстракции.
В том-то и фишка, что с программой всё будет очень хорошо - она написана так, чтобы её можно было легко поддерживать. Отсюда и такое разбиение на модули. Она достаточно близка к SOLID. А, да. В ней также ещё есть RAII и шаблоны (не с переменным количеством аргументов).
Как получаются все эти модули? Вот у вас есть команды. Почти все команды - послать по CAN 8 байт. Заводим интерфейсный класс, общий для всех команд. Заводим класс базовых методов команды. Заводим на каждую команду по классу с наследованием от интерфейса и базового класса. Текста получается много и модулей тоже. Но программа становится гораздо удобнее для модификации.
13.07.2018 в 07:15

...и вечером плащ демиурга и мага, а утром по новой колпак дурака...
Есть у меня ещё одна больная тема. Unit-тесты. Вот всем на хабре они нравятся, все их делают, но ни разу ещё не встретил статьи, где бы показали, как же тестируется реальный проект чуть сложнее простейшей функции на Си++ и куда эти тесты в программу засунуть, как вызывать и как не смешать программу и тест, если они в одном проекте совмещены (и при этом нужны все эти моки и стабы на каждый тестируемый модуль чуть сложнее a+b). Однако, по ходу выяснения оказалось, что объём тестов будет стабильно превышать размер программы в десятки раз! То есть, мне чтобы вышеуказанное приложение протестировать нужно будет написать текста не на 4, а где-то так на 80 Мб (там ведь модули взаимодействуют друг с другом и всё это надо организовывать)! Я такое написать не могу. Я даже не представляю как. Потому техника написания реальных unit-тестов мне не доступна.
20.07.2018 в 02:01

この世界は。。。いいですか?
Я сейчас занимаюсь в одном Ынтытрпрайзном Проекте как раз юнит-тестированием. Когда градус маразма перейдёт все пределы, напишу большой пост или даже статью о том, как это происходит в Большой Японской Компании.
20.07.2018 в 15:25

...и вечером плащ демиурга и мага, а утром по новой колпак дурака...
У вас web... По web много написано про тестирование. Да почти каждая статья с хабра про тестирование только к web и относится. А вот про обычный Си++ почти ничего вменяемого и нет. Есть, правда, библиотеки для организации такого процесса, но что выбрать и как ими пользоваться - загадка.
Правда, практика показывает, что обычно с модулями-то как раз всё в порядке. А вот с логикой и идеологией в целом могут быть бо-о-ольшие проблемы. С аппаратной частью так это вообще сплошь и рядом: то в прерывание зайдёт, когда не надо бы, то задержки не позволяют решить задачу, то внезапно аппаратура работает не так, как описано у производителя (есть нюанс).
20.07.2018 в 19:04

この世界は。。。いいですか?
Не, у нас не web, web - это лично у меня.
А у нас - Кровавый Ынтырпрайз: микроконтроллеры, С, местами С++, и всё как Вы сказали - и аппаратура не так работает, как описано, и задержки, и вообще, замкните эти два контакта резистором, а то сирена орать будет... Но не больше 100 кОм, а то ай-ай-ай.

В общем, пост скоро созреет, напишу.
25.07.2018 в 17:55

この世界は。。。いいですか?
О, nio, расскажите и мне, зачем нужны замыкания.
Вот хороший пример: чтобы избавиться от указателей на функцию.
26.07.2018 в 12:27

...и вечером плащ демиурга и мага, а утром по новой колпак дурака...
«Вот хороший пример: чтобы избавиться от указателей на функцию.»

Каким образом? И при чём тут указатель на функцию?
Замыкание ведь есть всего лишь передача функции контекста вызова. С таким же успехом можно было бы в эту функцию передать все нужные параметры и так (если вы её автор).