[15:47:44] <valexey> читаю Ada for C++ or Java developers. Такое ощущение, что автор С++ знает на уровне Си с классами образца 1998 года.. Плюс там в плюсовом коде еще и ошибки регулярно встречаются
[15:48:03] <valexey> это довольно сильно портит общее впечатление
[15:48:41] <yeo> оригинал? или перевод?
[15:48:45] <valexey> Оригинал
[15:50:50] <valexey> например:
template <class AType>
AType swap (AType & left, AType & right) {
AType temp = left;
left = right;
right = temp;
}
[15:51:11] <valexey> даже IDE ругается на такой код. компилятор выдает варнинг, или (как у меня настроено) ошибку.
[15:52:12] <yeo> :) ну это плюс IDE, а не языку. книжка же не про возможности IDE
[15:52:50] <yeo> $ gcc -c /tmp/swap.cpp
$
[15:53:22] <valexey> дык и Ада такое может пропустить если код чуть менее тривиальным будет.
[15:54:01] <valexey> но еще раз - тут в коде просто ошибка. и логически не ясно нафига было так вот писать, да и по факту этот код может привести к UB.
[15:54:04] <valexey> нафига так делать?
[15:54:06] <yeo> зато ровно такое компиятор не пропустит :)
[15:54:40] <valexey> ну, я бы понял, если бы pdf был бы про надежность. но они там вроде как аналогичный код показывают.
[15:55:06] <valexey> ну и еще. папир 2013 года, но.. "It’s easy to express iteration over the contents of a container (for instance, an array, a list, or a map) in Ada and Java."
[15:55:16] <valexey> почему это не easy in C++? С чего? Почему?
[15:55:25] <yeo> pdf же вроде про надежность
[15:55:27] <valexey> почему код далее только жабный и адский?
[15:55:36] <valexey> http://www.adacore.com/uploads_gems/Ada_for_the_C++_or_Java_Developer-cc.pdf
[15:55:46] <valexey> тут ничего про надежность нету :-)
[15:55:59] <valexey> это про то, как слезть с c++ и начать жить на Аде
[15:56:01] <yeo> ах
[15:56:16] <valexey> При этом глаз плюсиста плюсовый код просто режет в этой статье.
[15:56:27] <valexey> Ну это ж капец. Никто так не пишет.
[15:56:50] <valexey> там почти КАЖДЫЙ кусок плюсового кода не прошел бы в проде кодревью
[15:57:21] <valexey> 2013 год. но про c++11 мы конечно не слышали
[15:57:50] <valexey> про стандартную либу и как ей пользуются - не знаем, поэтому юзаем чисто сишные массивы и прочую ересь.
[15:59:50] <valexey> У меня бы так не бомбило, если бы читая параллельно вот точно такую же статью про Rust for C++ developers, я бы не видел такой контраст. Там человек пишущий в курсе про с++. Знает и с++11 и с++14. И когда говорят про безопасность по памяти например, не сравнивают malloc/free or new/delete с тем, что есть в Rust, сравнивают std::unique_ptr, std::smart_ptr с тем, что есть в Rust.
[16:00:05] <yeo> итерации по адскому контейнеру - еще тот костыль :(
[16:00:12] <valexey> также там, почему то, в курсе и про наличие std::vector, std::array и проч.
[16:01:12] <valexey> поэтому растовая статье не вызывает у плюсиста отторжения, в отличие от Адской. При том, что сил на написание Адской статьи явно положено больше. Видно, что работали люди. Только вот ни одного плюсиста у них под рукой не оказалось. :-/
[16:01:55] <yeo> ну обидно, что тут скажешь...
[16:02:15] <valexey> "Java and Ada both provide support for concurrency in the language. The C++ language has added a concurrency
facility in its most recent revision, C++11, but we are assuming that most C++ programmers are not (yet) familiar with
these new features. We thus provide the following mock API for C++ which is similar to the Java
Thread class"
[16:02:19] <valexey> :-/
[16:02:29] <valexey> то есть даже кто-то был в курсе про с++11, но...
[16:03:04] <valexey> а то, что в с++11 эти новые фишки в стандартую либу приходят из буста, которым все плюсисты пользуются на регулярной основе, видимо уже не знали...
[16:05:32] <yeo> надо писать свои статьи!
[16:09:20] <valexey> ну, или хотя бы написать критику на текущую статью.. может хоть исправят...
[16:09:43] <valexey> предложить бесплатные услуги с++-говнюка :-)
[16:10:08] <valexey> ну, кстати, действительно можно ведь весь плюсовый код исправить в статье. не так уж там и много, кода того.
[16:10:29] <valexey> авторы например не в курсе, про существование ключевого слова override в с++
[16:12:31] <yeo> брошурка же под Creative Commons, можно брать и править без спроса
[16:13:04] <valexey> а насколько просто раздербанить pdf?
[16:13:27] <valexey> ну и хорошо бы вернуть изменения назад, чтобы у адакоры оригинал стал более вменяемым
[16:17:03] <yeo> можно попробовать заюзать новомодный gitbook, тогда изменения будут ввиде diff-а
[16:19:14] <valexey> Еще:
while (Variable < 10000) {
Variable = Variable * 2;
}
Плюсист скорее всего написал бы так:
while (Variable < 10'000) {
Variable *= 2;
}
[16:20:47] <valexey> (ну, это за вычитом того, что naming convention тут инопланетный для плюсов)
[16:21:42] <yeo> я могу попробовать сконвертировать pdf -> html -> wiki/gitbook
[16:23:05] <valexey> было бы хорошо
[16:27:00] <valexey> https://github.com/Robert-Tice/Ada_For_The_CPP_Java_Developer
[16:27:05] <valexey> кажется всё украдено до нас :-)
[16:28:36] <yeo> круто!
[16:28:42] <valexey> Robert Tice - это ж какой-то адакорный чел?
[16:29:36] <yeo> не слыхал :(
[16:29:53] <valexey> ну, в гитхабном профиле у него ссылка на адакор-сайт
[16:30:15] <valexey> https://github.com/Robert-Tice
[16:32:14] <yeo> точно
[16:33:51] <valexey> клонировать и слать пулреквесты :-)
[16:36:33] <yeo> да, конвертор из pdf сделал все намного хуже
[16:36:58] <valexey> ну, похоже на гитхабе там лежит прям таки исходник-исходник. или близко к тому
[16:58:47] <yeo> во как gitbook импортировал мой ODF http://www.ada-ru.org/files/_book/index.html
[17:00:08] <valexey> дас. блоки с кодом нужно того-с. допиливать руками.
[17:07:20] <valexey> кстати, забыть вернуть значение из функции - любимая ошибка автора в плюсовом коде
[17:07:22] <valexey> int main(int argc, const char* argv[]) {
cout << "Hello World" << endl;
}
[17:07:25] <valexey> например
[17:07:34] <valexey> прямо первый же плюсовый кода кусок
[17:43:24] <valexey> http://www.electronicdesign.com/industrial/rust-and-spark-software-reliability-everyone
[17:43:36] <valexey> Автор в курсе про существование Rust'a :-)
[17:43:53] <valexey> (тот же автор, что и Ada For C++ or Java developer)
[19:59:28] <valexey> А для Ады есть google protobuf и (лучше) FlatBuffers?
[20:13:49] <yeo> нету. а надо?
[20:19:04] <valexey> ну, неплохо бы иметь возможность как-то общаться с внешним миром :-)
[20:19:22] <valexey> а внешний мир разговаривает на google protobuf и на google flatbuffers
[20:19:43] <valexey> и в вебе и в робототехнике исследовательской
[20:21:07] <valexey> https://github.com/ApolloAuto/apollo/blob/master/modules/perception/proto/perception_obstacle.proto
[20:21:09] <valexey> например
[20:21:45] <valexey> https://github.com/ApolloAuto/apollo/blob/master/modules/planning/proto/decision.proto
[20:32:44] <yeo> да сколько уже было этой субстанции... CORBA, SOAP, гуг буферс, теперь вот OpenAPI какой-то
[20:33:43] <valexey> ненене, никаких корб. никакого RPC
[20:34:09] <valexey> нужно тупо уметь сериализовать и десериализовать. точнее - генерить код по спецификации. десериализатор и сериализатор
[20:34:09] <yeo> а что так?
[20:34:47] <valexey> c RPC слишком жирно. не гибко и нинужно
[20:35:25] <valexey> в 90 процентах случаях google protobuf юзают без rpc
[20:35:56] <valexey> ибо мне сообщения бы рассылать. нафиг rpc?
[20:36:15] <valexey> например телеметрию.
[20:48:03] <valexey> rpc еще потому не годится, что часто источник сообщения может быть произвольным и по любому протоколу. tcp, udp, file, всё что угодно.
[20:48:19] <valexey> rpc же часто привязываются к конкретным транспортам и адресации.
[20:48:41] <valexey> ну и стриминг через rpc сделать не всегда тривиально. особенно двусторонний. особенно эффективный.
[21:03:51] <yeo> зато Protocol Buffers компактнее! ;)
[21:05:51] <valexey> компактнее кого? :-)
[21:06:07] <valexey> ну, т.е. для скорости юзают flat buffers, для компактности protobuf
[21:06:12] <yeo> компактее flatbuffers!
[21:06:40] <valexey> в ROS часто юзают собственную балалайку - rosmsg, но от нее отказываются потихоньку
[21:06:59] <valexey> ну и бывает, что ноды росовские таки юзают flatbuf or protobuf
[21:07:53] <valexey> (а так, в мечтах и в будущем ROS собирается переехать на что-то страшное индустриальное, на DDS)
[21:08:15] <valexey> еще, из потобафоподобных бывает cap-n-proto
[21:09:03] <valexey> а из json-подобных (но бинарных) - msgpack
[21:09:13] <valexey> но вот он совсем нинужен в моей области :-)
[21:09:28] <yeo> я бы сделал Protocol Buffers, но мне не надо :(
[21:09:48] <valexey> тебе небось msgpack ближе :-)
[21:09:55] <valexey> https://msgpack.org/index.html
[21:23:36] <yeo> а строки у них (flat buffers) в какой кодировке?
[21:28:20] <valexey> пишут, что Strings are simply a vector of bytes, and are always null-terminated.
[21:30:21] <valexey> в protobuf говорят, что A string must always contain UTF-8 encoded or 7-bit ASCII text.