From: Nil A 2:5015/46 30 Aug 2021 23:45 +0300
To: Valentin Nechayev 2:463/68.300
Subject: Golang
Hello, Valentin! Monday August 30 2021 21:30, from Valentin Nechayev -> Nil A: NA>> Моё итоговое мнение. Я не влюбился в гоу. Мне нравится, что у NA>> меня в арсенале два тула основных - плюсы (или иногда хардкорно NA>> Си) и питон. VN> Hу Go закрывает нишу где-то ближе к Java/C#, но в другом стиле. VN> Основные проблемы - урезанный специфический ООП без полноценного VN> наследования, фишка модная, но с современной практикой ведёт к VN> чудовищному копипастингу - это говорят собственно те, кто на нём много VN> реально пишет. Да-да, вижу тренд. Если на высоконагруженный бакэнд искали си++ программистов ещё лет десять назад, потом всё более на Джаве писали, видимо, на плюсах себе все ноги отстрелили, плюс Джависты подешевле плюсов идут. А сейчас стартапчеги, где надо на бэкенде что-то посчитать, или много тыс.коннектов поддержать, и где на NodeJs пришлось бы слишком много "инстансев" покупать, то вот сейчас модно-молодёжно на гоу пейсать. Радует, что в Фейсбуке на Расте стало много проектов. Так глядишь они язычёк продвинут в разряд Industry standard. Я бы на Расте пейсал, он ближе к железу, без сборки мусора. Но я не пейсал на Расте, пока проекта не нашлось, но хотелось бы попробовать на молодёжном языке. Best Regards, Nil
From: Eugene Muzychenko 2:5000/14 30 Aug 2021 23:27 +0300
To: Valentin Nechayev 2:463/68.300
Subject: Golang
Привет! 30 Aug 21 21:30, you wrote to Nil A: NA>> Вернуть можно сразу несколько переменных VN> А вот кодогенератор при этом гоняет всё через стек, и возвращаемые VN> данные тоже. Это ж не обязательно. В тех же C/C++ на интелах для возврата используются *AX/*DX - как раз для возврата двух 32- или 64-разрядных значений. ABI предусматривает возврат таким образом структур подходящего размера, и я как-то даже раскатал губу сделать класс для возврата результата, но сразу же обломался - оказывается, такое прокатывает только с POD. Для "честных" классов всегда неявно передается указатель, и возвращемое значение копируется туда. Hаверное, разработчикам ABI для C++ уже было лень расписывать частные случаи, и они решили не заморачиваться. VN> чтобы не писать RAII класс на каждый чих. Если для освобождения ресурса достаточно вызова функции, то в C++ ее можно извращенным способом подставить в универсальный шаблон в виде параметра-указателя. VC++ для такого даже делает статическую линковку, если функция указана явно (именем). Всего доброго! Евгений Музыченко eu-gene@muzy-chen-ko.net (все дефисы убрать)
From: Valentin Nechayev 2:463/68.300 30 Aug 2021 21:30 +0300
To: Nil A 2:5015/46
Subject: Golang
Hi, >>>> Nil A wrote: NA> Такое ощущение, что сделали его сюшники, которые хотели удобств как в NA> яве или питоне, но при этом они очень не любят плюсы и всё вот это ООП NA> и эксепшены. Hемного похоже, да, но там история сильно более сложная. NA> Синтаксис - почти Си, только объявляется всё наоборот, как в SQL, Как в Pascal с потомками, а также куче новых мест вроде Swift... и это как раз хорошо избавлением от проблем "а как раскрутить это в голове через левое ухо". NA> особенно через-одно-место объявляются массивы. Классов нет, но есть NA> структуры как в Си, и при этом можно к ним методы писать, но не вот NA> тут в структуре сразу, а потом где-нибудь сбоку. ООП нет, но есть NA> полиморфизм в виде интерфейсов, но они не как в яве, ты ничего не NA> экстендишь, а больше как питоновская утиная-типизация. Эксепшенов нет, NA> и всё как в Си, каждая функция возвращает ошибку и надо проверять. И масса проблем с этим, типа только nil у которого и указатель и тип пустые это nil, а если указатель пустой, но тип реален, то это нечто и nil, и не nil одновременно, смотря как смотреть. Hа этом можно знатно погореть. Статья типа https://habr.com/ru/company/mailru/blog/314804/ про такие хохмы. NA> Вернуть можно сразу несколько переменных, как картежи в питоне, и это NA> стандартная практика, два параметра возвращают, второй параметр это NA> ошибка. А вот кодогенератор при этом гоняет всё через стек, и возвращаемые данные тоже. Оно для современных процессов не так страшно, кэш помогает, и инлайнить он иногда умеет, но их желание всё сделать своими средствами немного удивляет. NA> Т.к. нет классов, то и нет конструкторов/деструкторов, а+ NA> значит RAII не сделаешь, и как потом не забыть закрыть файл? NA> Придумали NA> словечко defer, типа открыл файл и тут же defer на его закрытие, т.е. NA> когда блок кончится, или раньше если выйдешь, то вот это выполнится. NA> Забавное решение. А чего такого "забавного" - BOOST_SCOPE_EXIT делает то же самое, и это реально удобно, чтобы не писать RAII класс на каждый чих. NA> Вообще забавно, что нет мейкфайлов, точнее можно свой сделать, чтобы NA> что-нибудь ещё дополнительного выполнить, но сам Golang знает как NA> собрать проект, просто глядя во все импорты, и тесты, и NA> форматирование, и линты, тут продумано сразу. И при этом фиг отклонишься от линии партии. А если у тебя задача принять автогенерированный код, его сначала нужно пропустить через go vet, чтобы потом компилятор не отказывал по причине "ваш импорт не используется". NA> Главный козырь - халявная многопоточность. Да. NA> Моё итоговое мнение. Я не влюбился в гоу. Мне нравится, что у меня в NA> арсенале два тула основных - плюсы (или иногда хардкорно Си) и питон. Hу Go закрывает нишу где-то ближе к Java/C#, но в другом стиле. Основные проблемы - урезанный специфический ООП без полноценного наследования, фишка модная, но с современной практикой ведёт к чудовищному копипастингу - это говорят собственно те, кто на нём много реально пишет. -netch- ... Спамы, куки... Path: f4.n466!f50.n466!f1042.n5020!f68.n463!not-for-mail Newsgroups: su.c_cpp Distribution: world X-Comment-To: Nil A From: Valentin Nechayev Date: Mon, 30 Aug 2021 20:41:44 +0200 Subject: Golang Message-ID: <1630348918@p300.f68.n463.z2.ftn> References: <1629167070@f46.n5015.z2.ftn> Organization: Dark side of coredump X-FTN-AREA: SU.C_CPP X-FTN-REPLY: 2:5015/46 611b1dde X-FTN-MSGID: 2:463/68.300 612d2676 X-FTN-CHRS: CP1125 2 X-FTN-TZUTC: 0300 X-FTN-TID: hpt 1.2.4-release/bsd 30-05-03 X-FTN-Tearline: (none) X-FTN-Origin: Dark side of coredump (2:463/68.300) X-FTN-SEEN-BY: 50/109 250/25 301/1 341/66 450/1024 451/31 460/58 463/68 407 877 X-FTN-SEEN-BY: 463/1331 466/4 50 467/4 888 5000/111 5001/100 5005/49 5010/352 X-FTN-SEEN-BY: 5015/42 46 5020/113 620 715 830 846 1042 2047 2140 4441 5030/115 X-FTN-SEEN-BY: 5036/26 5049/1 5053/57 5054/89 5055/37 5058/104 5064/56 5083/1 X-FTN-SEEN-BY: 6090/1 X-FTN-PATH: 463/68 5020/1042 466/50 X-FTN-PATH: 466/4 Lines: 73 Hi, >>>> Nil A wrote: NA> Такое ощущение, что сделали его сюшники, которые хотели удобств как в NA> яве или питоне, но при этом они очень не любят плюсы и всё вот это ООП NA> и эксепшены. Hемного похоже, да, но там история сильно более сложная. NA> Синтаксис - почти Си, только объявляется всё наоборот, как в SQL, Как в Pascal с потомками, а также куче новых мест вроде Swift... и это как раз хорошо избавлением от проблем "а как раскрутить это в голове через левое ухо". NA> особенно через-одно-место объявляются массивы. Классов нет, но есть NA> структуры как в Си, и при этом можно к ним методы писать, но не вот NA> тут в структуре сразу, а потом где-нибудь сбоку. ООП нет, но есть NA> полиморфизм в виде интерфейсов, но они не как в яве, ты ничего не NA> экстендишь, а больше как питоновская утиная-типизация. Эксепшенов нет, NA> и всё как в Си, каждая функция возвращает ошибку и надо проверять. И масса проблем с этим, типа только nil у которого и указатель и тип пустые это nil, а если указатель пустой, но тип реален, то это нечто и nil, и не nil одновременно, смотря как смотреть. Hа этом можно знатно погореть. Статья типа https://habr.com/ru/company/mailru/blog/314804/ про такие хохмы. NA> Вернуть можно сразу несколько переменных, как картежи в питоне, и это NA> стандартная практика, два параметра возвращают, второй параметр это NA> ошибка. А вот кодогенератор при этом гоняет всё через стек, и возвращаемые данные тоже. Оно для современных процессов не так страшно, кэш помогает, и инлайнить он иногда умеет, но их желание всё сделать своими средствами немного удивляет. NA> Т.к. нет классов, то и нет конструкторов/деструкторов, а+ NA> значит RAII не сделаешь, и как потом не забыть закрыть файл? NA> Придумали NA> словечко defer, типа открыл файл и тут же defer на его закрытие, т.е. NA> когда блок кончится, или раньше если выйдешь, то вот это выполнится. NA> Забавное решение. А чего такого "забавного" - BOOST_SCOPE_EXIT делает то же самое, и это реально удобно, чтобы не писать RAII класс на каждый чих. NA> Вообще забавно, что нет мейкфайлов, точнее можно свой сделать, чтобы NA> что-нибудь ещё дополнительного выполнить, но сам Golang знает как NA> собрать проект, просто глядя во все импорты, и тесты, и NA> форматирование, и линты, тут продумано сразу. И при этом фиг отклонишься от линии партии. А если у тебя задача принять автогенерированный код, его сначала нужно пропустить через go vet, чтобы потом компилятор не отказывал по причине "ваш импорт не используется". NA> Главный козырь - халявная многопоточность. Да. NA> Моё итоговое мнение. Я не влюбился в гоу. Мне нравится, что у меня в NA> арсенале два тула основных - плюсы (или иногда хардкорно Си) и питон. Hу Go закрывает нишу где-то ближе к Java/C#, но в другом стиле. Основные проблемы - урезанный специфический ООП без полноценного наследования, фишка модная, но с современной практикой ведёт к чудовищному копипастингу - это говорят собственно те, кто на нём много реально пишет. -netch- ... Спамы, куки...
From: Eugene Muzychenko 2:5000/14 17 Aug 2021 11:32 +0300
To: Nil A 2:5015/46
Subject: Golang
Привет! 17 Aug 21 04:53, you wrote to All: NA> Такое ощущение, что сделали его сюшники, которые хотели удобств как в NA> яве или питоне, но при этом они очень не любят плюсы и всё вот это ООП NA> и эксепшены. И совершенно зря, между прочим. Я когда-то тоже не любил ООП и плюсы, пока вдруг не обнаружил, что на тех плюсах зачастую можно сделать изящнее и надежнее, чем на голых сях, не затратив ни одного лишнего байта двоичного кода. Эксепшены до сих пор не люблю, но в мало-мальски сложном софте, кроме слежения за успешностью вызовов, нужно организовать возврат человеческой информации об ошибках с нижележащих уровней на вышележащие. Если делать это без исключений, получается гораздо более развесисто, геморройно и ненадежно. NA> Придумали словечко defer, типа открыл файл и тут же defer на его NA> закрытие, т.е. когда блок кончится, или раньше если выйдешь, то вот NA> это выполнится. В реализации это ничем не отличается от деструктора, просто в данном случае логика более прямая. NA> Вообще забавно, что нет мейкфайлов, точнее можно свой сделать, чтобы NA> что-нибудь ещё дополнительного выполнить, но сам Golang знает как NA> собрать проект, просто глядя во все импорты, и тесты, и NA> форматирование, и линты, тут продумано сразу. Такое умеют многие IDE, что тут забавного? NA> Главный козырь - халявная многопоточность. Точнее, NA> Всё это, конечно, не бесплатно NA> у меня в арсенале два тула основных - плюсы (или иногда хардкорно Си) Зачем Си, если есть плюсы? Всего доброго! Евгений Музыченко eu-gene@muzy-chen-ko.net (все дефисы убрать)
From: Nil A 2:5015/46 17 Aug 2021 04:53 +0300
To: All
Subject: Golang
* Originally in su.c_cpp * Crossposted in nino.046.local Hello, All! Хотел поделиться. Немного оффтоа, но около, да и трафика чтобы поднять. По-работе заставили смотреть в код на Go, и там ещё надо что-то поправить и дописать. В синтакс я въехал быстро, один официальный тьюториал и вперёд. Такое ощущение, что сделали его сюшники, которые хотели удобств как в яве или питоне, но при этом они очень не любят плюсы и всё вот это ООП и эксепшены. Синтаксис - почти Си, только объявляется всё наоборот, как в SQL, особенно через-одно-место объявляются массивы. Классов нет, но есть структуры как в Си, и при этом можно к ним методы писать, но не вот тут в структуре сразу, а потом где-нибудь сбоку. ООП нет, но есть полиморфизм в виде интерфейсов, но они не как в яве, ты ничего не экстендишь, а больше как питоновская утиная-типизация. Эксепшенов нет, и всё как в Си, каждая функция возвращает ошибку и надо проверять. Вернуть можно сразу несколько переменных, как картежи в питоне, и это стандартная практика, два параметра возвращают, второй параметр это ошибка. Т.к. нет классов, то и нет конструкторов/деструкторов, а значит RAII не сделаешь, и как потом не забыть закрыть файл? Придумали словечко defer, типа открыл файл и тут же defer на его закрытие, т.е. когда блок кончится, или раньше если выйдешь, то вот это выполнится. Забавное решение. Вообще забавно, что нет мейкфайлов, точнее можно свой сделать, чтобы что-нибудь ещё дополнительного выполнить, но сам Golang знает как собрать проект, просто глядя во все импорты, и тесты, и форматирование, и линты, тут продумано сразу. Главный козырь - халявная многопоточность. Сделана она так, как будто у тебя бесконечное число тредов можно в системе пладить, прям на каждое соединение свой, и на чтение файлов и вообще, и при этом ОС не умрёт, ибо там рантайм решит что сейчас реально крутить на каком ОС треде. Чтобы начинающий программист не выстрелил себе в ногу в многопоточной программе, ему дают пообщаться сообщениями между потоками, и не надо запариваться с потоко-безопасностью. Ещё можно мьютексы использовать, чтобы в общие структурки лазить, но тут уже без RAII можно отстрелить себе. Всё это, конечно, не бесплатно, всмысле, что перформанс расходуется на то, чтобы в рантайме заниматся сборкой мусора, заниматься многопоточностью и сообщениями. Моё итоговое мнение. Я не влюбился в гоу. Мне нравится, что у меня в арсенале два тула основных - плюсы (или иногда хардкорно Си) и питон. Если просто там что-то навалять быстро - питон очень удобно, особенно когда необязательную типизацию используешь, и всё это в каком-нибудь IDE типа PyCharm, тогда ошибки и предупреждения, почти как настоящий компилятор, и PyCharm ещё свой линт там добавляет, помогает баги на этапе статического анализа выловить. Best Regards, Nil
From: Eugene Muzychenko 2:5000/14 26 May 2021 11:24 +0300
To: Нил А 2:5015/46
Subject: Zircon - ядро на C++
Привет! 25 May 21 23:24, you wrote to All: НА> Если во время собеседования на вакансию программиста, вы спрашивали, НА> или вас спрашивали, почему не пишут ядро на C++ Модули ядра NT начали писать на C++ больше двадцати лет назад. Чисто технически, не было никакой проблемы изначально писать на нем и все ядро, но на C++ гораздо больше возможностей порождать неэффективный код, чем на C, особенно при использовании шаблонов. При тогдашних ресурсах, перевод всего ядра на плюсы потребовал бы очень жесткого контроля за всей командой. НА> то вот таки уже пишут! При нынешних ресурсах ядро можно писать почти на чем угодно. Все равно наверху объемы/тормоза такие, что поглотят почти любую неэффективность ядра. НА> правда там список ограничений, чего нельзя использовать, типа НА> исключений, динамического приведения типов и тд и пр. Hу разумеется. Всего доброго! Евгений Музыченко eu-gene@muzy-chen-ko.net (все дефисы убрать)
From: Нил А 2:5015/46 26 May 2021 03:39 +0300
To: Gennadij Pastuhov 2:5036/26
Subject: Rust (was: Zircon - ядро на C++)
Hello, Gennadij! Wednesday May 26 2021 01:16, from Gennadij Pastuhov -> Нил А: НА>> вот таки уже пишут! Zircon - ядро ОС Fuchsia, написан на C++17, GP> Rust ниасилили? У раста порог вхождения высокий, и готовых таких программистов на рынке близко к нулю. Гуглы и фейсбуки в лёгкую перформатируют прогеров с опытом C/C++/Python/.. в Golang за две недели, и два месяца уходит на освоение ржавчины, и всё равно они пишут костыльный код. Собственно, на плюсах писать тоже надо долго учиться, особенно чтобы с хорошим дизайном получалось, но таких людей уже есть много на рынке. Пока ещё есть, ведь молодёжь всё меньше в этом направлении идёт. В индексе TIOBE (https://www.tiobe.com/tiobe-index/) ржавчина на 24ом месте, тогда как плюсы на твёрдом 4ом. Пока большие конторы не начнут в продакшене активно гонять раст, в-попу-лярности не будет.
From: Gennadij Pastuhov 2:5036/26 26 May 2021 01:16 +0300
To: Нил А 2:5015/46
Subject: Zircon - ядро на C++
Рад всех приветствовать! А особенно - Нил! Вторник мая 25 21 23:24 Нил А писал к All: НА> Если во время собеседования на вакансию программиста, вы спрашивали, НА> или вас спрашивали, почему не пишут ядро на C++, то вот таки уже НА> пишут! Zircon - ядро ОС Fuchsia, написан на C++17, правда там список НА> ограничений, чего нельзя использовать, типа исключений, динамического НА> приведения типов и тд и пр. Подробности тут НА> https://fuchsia.dev/fuchsia-src/development/languages/c-cpp/cxx Rust ниасилили? ... Jonny wanna live
From: Mykhailo Kapitanov 2:467/239@fidonet 18 Feb 2020 15:01 +0200
To: All
Subject: Сборка qBittorrent
Hello everybody! Понадобился сабж для Windows в виде NOX версии. Но на просторах Internet не нашел, решил собрать самостоятельно. Установил Msvc Build Tools (кстати, понравился). Компилял-компилял, даже Gentoo вспомнил что-то. Собрал zlib, OpenSsl, Boost, libtorrent и Qt (это было долго). Наступил черед самой программы, немного напильника, и тоже собралась. В конце сборки получил вот такие предупреждения: LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library LINK : warning LNK4217: symbol 'free' defined in 'libucrt.lib(free.obj)' is imported by 'zlib.lib(zutil.obj)' in function 'zcfree' LINK : warning LNK4217: symbol 'malloc' defined in 'libucrt.lib(malloc.obj)' is imported by 'zlib.lib(zutil.obj)' in function 'zcalloc' Впринципе, понимаю что тут написано. Но насколько проблемма, программа работает вроде как нормально. Оставить как есть или что-то править? Первый раз собираю под Windows так много. PS: Каталог где собирал Ot занял более 100 Гб. =) Mykhailo
From: Vitold Sedyshev 2:5023/24.3752 18 Dec 2019 02:52 +0200
To: All
Subject: Очереди с таймаутом
Hello! Носоветуйте библиотеку сишную для очередй умеющих таймауты на pthread_cond_wait. Заранее спасибо. С наилучшими пожеланиями, Vitold Sedyshev.