это не питон лёгкий, это плюсы превратились за десятилетия в адовы напластования костылей.
эт по сути уже не один язык, а несколько, совместить которые в одном проекте будет проблематично.
Какие-то неправильные представления о плюсах. Эти "пласты костылей" называются обратная совместимость. И это очень круто. Тот же питон не парился, а просто сделал python3, сломав к чертям всю обратную совместимость. Вот уж где действительно "не один язык, а несколько".
А подход плюсов хорош тем, что твой код редко ломается при переходе на новый компилятор, но всегда можно улучшить код, используя новый стандарт.
Посмотрите на этих двух программистов, вот они пытаются править свои коды без комментариев и трясут друг перед другом компиляторами, чтобы определить кто из них папка и родить уже рабочий проект.
упарываться обратной совместимостью в ущерб консистентности - плохо. результат будет вот такой, какой в плюсах. это тот же самый технический долг, только в языке.
зато огребают новички, которые вынуждены в этом аду разбираться.
ну и вообще, можно проги 20-летней давности распространять в бинарях, а не в сорцах. синтаксис улучшать, а бинарную совместимость не трогать. но ее и так никто не трогал бы, она ж еще от сишки досталась.
а еще можно собирать проги 20-летней давности компиляторами 20-летней давности
Почитайте интервью со Страуструпом. Это очень грамотный дядька и говорит много интересного. В частности, что когда у твоего языка аудитория в миллионы программистов, а используется он практически вообще везде нахуй, это накладывает определенную долю ответственности.
они выбрали неправильную стратегию развития языка.
совершенно не обязательно упарываться полной обратной совместимостью, чтоб народ понимал правила игры и мог прогнозировать развитие своего кода.
если тебе нужен какой-то код - инвестируй в него время на допиливание его под новые стандарты языка.
А что конкретно в С++ старое говно, мешающее развивать язык и понимать его новичкам? Есть какие-то идиомы программирования, которые могли устареть (напр. SFINAE при наличие концептов). Но они в головах и книжках, а не в языке. Ну... Разве что с инициализацией хуйня.
Что делает с++ сложным (по крайней мере, для меня) - это стопицот крайних случаев. Его делают какие-то слишком умные люди, которые делают слишком обобщенные подходы, и пихают иди zero-cost abstraction и "и не плати за то, что не используешь" везде. Да, это сильная сторона С++, из-за которой их и выбирают. Но блять. Если посмотреть на концепты (самое свежее, что там есть) - это какой-то инфернальный ад из нескольких вариантов синтаксиса и кучи правил, что можно, что нельзя. Сложно? Да. Из-за легаси? Нет.
из-за легаси эти концепции в плюсах приобретают инфернальные формы. в исходных языках, откуда их утянули, такого не было.
о чем я и писал выше. консистентность проёбана в угоду совместимости
Куча UB не из-за обратной совместимости, а в угоду производительности, "не платить за то, что не используешь" и возможности компиляторам оптимизировать всякое дерьмо.
а на хер мне тогда вообще плюсы? если можно взять более новый, более консистентный язык. плюсы учатся для поддержки легаси, а там уж насколько легаси твоё легаси - как повезёт
На плюсах в мире пишут новый код. Начинают новые проекты. Да и на си тоже. Кончено, меньше, чем говно-формо-шлепства на жс (не весь жс - формошлепство, но многий). Замены С и С++ в их нишах пока нет. Живите с этим.
Замен нет? А как же все эти жавы, шарпы, питоны итп итд, которые вытеснили с++ в ниши аысокопроизводительного, низкоуровнего и встраиваемого кода?
А если мы говорим о заменах в этих нишах, что там у нас? Rust и D? Ну D популярности не снискал, а Rust набирает ее (самый фап-язык по статистике стаковерфлоу два года подряд). Но он пока сырой. И особенности разработки не позволяет ему (пока) заменить си в области safety-critical.
"популярности не снискал"
плюсовики кичатся своей илитарностью, а ведутся на хайп, как хомяки, лабающие на жабоскрипте. мы вроде как инженеры, должны руководствоваться логикой всё-таки, не?
по моему опыту, кто пробует новые языки - они им находят применение. и радуются потом этому.
но большинство просто вообще ничего не пробует.
Ещё раз.
В индустрии применяются стопицот языков, от кобола до хаскеля, далеко не одни плюсы. Они занимают на такую большую нишу, посмотрите по вакансиям.
Выбор языка зачастую не рядовым программистом выбирается. Вот нарваться мне раст, ну я сижу, дрочу немного из любви к искусству. Но он редко применяется в продакшне, нет вакансий почти, даже меньше, чем на си. Потому что новый, потому что мало программистов, потому что хуй пойми, что будет. И менеджмент/лиды решают не рисковать. А где-то применяют. Это бизнес, деньги, а не самомнение плюсовиков.
Я тоже адепт. Мне очень понравился раст, куда больше, чем плюсы. Увы, пока он вытесняет в более высокоуровневых задачах, где были плюсы, а не си, зря создавался именно как язык системного программирования. На территорию си он пока мало зашёл. Хотя сам Линус сказал, что не против не-сишных, возможно, растовых, модулей ядра.
В чем проблема. Раст очень крут в плане безопасности. Во всяком случае, декларируемой. Не знаю, насколько там компилятор не имеет ошибок и насколько ему можно верить. Но тем, где нужна это конечнная упоротая безопасность - в safety critical, раст к пустят долго, потому что не сертифицировано. Продолжут на C/C++ с MISRA код стайлом писать и IAR'ом компилировать...
> В чем проблема. Раст очень крут в плане безопасности. Во всяком случае, декларируемой. Не знаю, насколько там компилятор не имеет ошибок и насколько ему можно верить.
Для сейф кода доказано что он sound - то есть невозможно написать программу, нарушающую гаратии раста. Понемногу верифицируют стандартную библиотеку - вот атомики не так давно проверили: https://people.mpi-sws.org/~dreyer/papers/rbrlx/paper.pdf
То есть не просто "протестировали", а математически доказали, что ошибок там нет и быть не может. Что до мисра и остального - вопрос времени. Раст уже 5 лет как живой с момента релиза 1.0 (и ещё был сколько-то времени в версиях 0.х), в той же фуксии гугл его юзает как один из основных языков, при этом их любимый го запрещен. Майкрософт для Azure IoT сделал целый фреймворк actix. В общем, живы будем не помрём, развиваемся потихоньку. Даст бог сбросим оковы неудобства и будем писать на чем-то более-менее адекватном.
О, тема верификации - это очень интересно, это дерьмо я люблю, спасибо.
> Для сейф кода доказано что он sound -
Доказано, что гм... формальная модель sound, или что компилятор не сотворит херню? Ведь компилятор - дохера большая и сложная штука, чтобы ее верифицировать.
Было бы приколньо строить инфраструктуру языка (начиная с компилятора) с какого-нибудь минимального верифицируемого языка, теорем прувера или типо того, поверх которого все строится. (Вот в раст втащили, вроде, некую вариацию пролога для вывода типов, но это другое). Наверняка, где-то сидят бошковитые задроты по type theory, которые таким упарываются.
Я думаю в Idris как-то примерно так и сделано. Но в верификации всегда краеугольным вопросом является ОЧЕВИДНО, потому что доказывать что 1+1=2 не всегда удобно. Я несколько дней потратил на доказательство, что если из множества s удалить элемент x, то в результирующем множестве {s \ x} не будет этого нашего x. Причем перебрал несколько возможных способов определения множества, пока нашел такое, для которого достаточно простое чтобы я смог его осилить.
У C++ есть большой косяк - там бинарной совместимости просто нет. Нет, он не совместим бинарно с си, там есть и классы, и перегрузка, и многое другое. Гуглите манглинг имён, а дальше, как пойдет. Это реально проблема, что плюсы с плюсами бинарно не совместимы. Думаете, зачем на винде каждая вторая прога тащит C++ Redistributible? Это вам не libc.
Ладно, она существует, но де-факто, не де-юре, да и то не везде и ограничено. Ещё был в истории пример, когда с переходом на C++11, подобие на бинарную совместимость таки сломали, и от этого некоторые ортодокс-конторы не переходили на с++11 и новее лет десять. Бедные.
> ну и вообще, можно проги 20-летней давности распространять в бинарях
Угу, и ошибки не исправлять. А дневник компиляторы - ещё больше зло.
Я не слишком опытный юзер, но для меня одна из главных проблем С++ это необходимость дублировать информацию в h и cpp файлах. Когда меняется список аргументов функции в cpp, надо делать то же самое в h. Понятно, что это наследство от С, но по-хорошему никакое изменение кода не должно обязательно тянуть за собой другие изменения.
По-моему если хочешь современный язык - бери тот же питон, его стараются поддерживать на самом современном уровне, и даже пренебрегают совместимостью. Если нужна совместимость - тут уже С++ без альтернатив.
Там модули уже завезли, возрадуйтесь. Теперь не надо.
Кстати, нас самом деле хедеры в си, на в с++ - это топ просто. Вы можете положить в них публичный интерфейс, а все потроха споятать. Такого больше нет ни в одном языке. Вы можете писать public, private, но я открываю ваш файл и вижу как публичный интерфейс, так и приватную реализацию. Глаза разбегаются. А в сишечке хедер открыл, и видно только нужное. Конечно, можно именно интерфейс вынести, как отдельную сущность, но интерфейс - это лишняя косвенность. Да и интерфейс ради одного наследника - возможно, вы что-то делаете не так.
*Минутка дроча на раст и трейты*
"Такого больше нет ни в одном языке"
фейспальм.жпг
такое везде. в любом языке с модулями. только менее черезжопно: метаинфа собирается при сборке, не надо ее дублировать руками
Видимо, мы не так поняли. Если я открываю сурс файл на шарпе, то я вижу как публичный интерфейс, так и всякую private хуйню и реализацию, которая мне неинтересна. Можно в явном виде вынести интерфейс, чтоб все скрыть, но будет то же самое.
"А в сишечке хедер открыл, и видно только нужное"
А если это темплейт класса? Тогда ведь по-любому реализация тоже в h файле?Получается что хедер - это не всегда только интерфейсы.
До модулей я пока не дошёл, спасибо за совет.
когда программист даже запомнить не может, какие вариации синтаксиса что делают - это приводит к тому, что в каждой конторе возникает своё подмножество плюсов, за которое стараются не вылезать. а потом либы этих контор хера состыкуются в одном проекте
вон чувак косяки только в 1 фиче час разбирает:
Плюсы совершили ошибку LISP'а. Как LISP нечитаемый из-за того, что представляет собой AST-дерево самого языка, так и плюсы стали нечитаемой хренью из-за попыток объединить в одном синтаксисе высокоуровневый и низкоуровневый подходы, и вдобавок начали запихивать функциональнщину, которая идеологически не ложится на современную аппаратуру. И поэтому мы имеем теперь в наличии фразу Мейерса, что у нас теперь три языка и смешивать их не надо.
Не совсем правда. Новые std::ranges выглядят хорошо, лямбды тоже. Мало языков позволяют писать высокоуровневый код, не отбирая гибкость и производительность низкоуровневого подхода.
Безусловно есть Rust, который хорош, но ему было проще, потому что в нем не было огромного легаси и груза обратной совместимости, как у плюсов.
Ничего себе. В язык наконец завезли анонимные вложенные функции (c++11) и работу со списками (c++14). Жалко только, что это было гораздо важнее, чем сделать нормальную инициализацию статических членов класса (c++17).
Так про то речь и идет, что груз обратной совместимости не позволяет сделать нормальное решение, делают костыльное, и год за годом костыли обрастают и через какое-то время это становится невозможно поддерживать.
Да что там говорить: вот идет доклад по С++, в зале есть члены комитета С++, то есть люди которые днями только и делают, что изучают язык и его нюансы. И их спрашивают "как думаете, какая семантическая модель этого кода", и *у них разные ответы*. Что уж говорить про простых смертных, а не комитетчиков. Не уверен, что на планете найдется хотя бы один человек, который для любого небольшого сниппета на плюсах сможет правильно ответить, что компилятор с ним сделает.
Да, только техдолг копить вечно не получится, и в итоге плюсы умирают. Медленно, конечно, и умирать лет 10-20 такими темпами будут, и в итоге превратятся в какой-нибудь нишевый кобол, но тем не менее.
Питон тоже хреново поступил со сломом третей версии. Зато показал всем, как делать не надо.
В общем, можно долго спорить о том, лучше ломать ли не ломать совместимость, но то что плюсы неподъемные - это факт. Что говорить, это наверное единственный компилируемый язык с *неразрешимой грамматикой*.
Плюсовики говорят, что не надо при изучении современных плюсов изучать какие-то подходы, паттерны, хаки итп, которые использовались стопицот лет назад, в частности, до с++11. Есть C++ Core Guidelines, где пишет, втч, сам Страуструп. Этакий расово верный способ учить современные плюсы и best practices.
современные плюсы - это вообще оксюморон. ни одной фичи своей там не появлялось несколько десятилетий. фичи тянутся из других языков, да и то медленно. догоняющее развитие.
как-будто другие языки не делают всего того, что и плюсы. делают, но почему-то спеки в разы короче, поведение интуитивное, компиляется быстрее, сборка параллелится, инкрементально делается и тд.
от каких от таких?
мсье изволит спиздануть, что нет современных языков с указателями и встроенным асмом?
мсье может пойти на хуй, их полно.
при этом особым образом будут помечены все те загончики, где извращения разрешены
Вы говорите "как-будто другие языки не делают всего того". И мы хз какие языки вы имеете ввиду, поэтому DoroViska на интуицию говорит, что нет, от "таких" языков не требуется производительность. Так что прежде чем наезжать с претензиями, предъявите их себе и выложите список языков которые ВЫ имели ввиду.
Языки вечно друг у друга заимствуют фичи. А так, большинство фич, которые пришли в мейнстрим языки за последние лет десять (и не связанные с устранением недостатков данного конкретного языка) были в ML, Haskell или где-то ещё лет 30 назад.
> как-будто другие языки не делают всего того, что и плюсы
Нет. Иначе бы никто не писал на С++, потому что это медленнее и дороже. Думаете, бизнес выбирает С++ из любви тратить деньги на программисто-часы? Есть области, где с и с++ живее все живых. Производительность выше: математика, рендеры, игры, моделирование, высокопроизводительный финтех итп итд. Нет рантайма, меньше код, меньше/нет накладных расходов, прямая работа с памятью (читай: с железом), нет GC - микроконтроллеры, встраиваемые системы, системы реального времени, ядра ос итп итд.
Там, где можно писать не на плюсах, уже пишут не на плюсах. C#, Java, Python, JS - тысячи их. Из замены плюсов и си разве что Rust, но он сырой. Ещё D, но не во всех приложениях применим. Ну и остаются тысячи программ на си и с++ в основе всей инфраструктуры, которые не выкинуть
производительность выше - это байка. прост у плюсовиков нет времени оторвать голову от проекта и глянуть, а кто что может из современных технологий.
а вообще вот нафига писать и микроконтроллеры и бизнес логику какого-нибудь финтеха на одном языке? по-моему это тупо. разные задачи требуют разных инструментов.
основная причина, на мой взгляд, - эт оси. оси писались давно и их апи сишное. что в самих осях тоже вызывает кучи косяков. почти все косяки с безопасностью - из-за этого.
нам нужны более человеческие оси, и я надеюсь, в ближайшем будущем появится что-нибудь с wasm-овским апи
А может и не выдать. Ещё jit-у нужна информация о типах, которой нет во всяких мейнстримных JS-ах, поэтому тот же V8 занимается очень нетривиальными приседаниями.
А вот ещё есть MLTon, компилятор языка Standart ML, за счёт функциональщины оптимизирует лучше Си. И язык куда богаче, чем си, с++ и даже шарпы с жсами. Но все это не мейнстрим и не везде применимо.
Ещё, если у вас time-critical (управление ебеным роботом, производством, высокочастотный трейдинг, стриминговая передача данных) ваш jit (и gc) заодно идёт нахуй из-за недерменированных задержек.
вот не надо ля-ля. высокочастотный трэйдинг на жабе существует, и оч даже неплохо. распределенных вычислений больше на яве, базы данных на яве существуют.
кстати говоря, jit вполне себе детерминированный. сколько-то раз мы зашли в метод - и он джитится.
про realtime gc ты тоже не слышал
а потом такие вот эрудиты дохуя и говорят: "да хули там, давайте новый проект на плюсах лабать" и вся хуйня идет на второй круг
Если у нас реалтайм, особенно, жесткий реалтайм, джит нельзя. Вот работает система, тут произошла редкая ситуация, которой ещё не было в этой сессии. Вызывается обработчик, он начинает джитится. Латентность подскакивает на плрядки. Рука робота сносит голову китайскому рабочему.
Про gc в задачах жестокого реального времени я и правда не слышал, буду рад, если что-то скиньте почитать.
Я как раз реалтаймом занимаюсь. И мы тут дрочим кэш мисы, очереди пакетов в сетевухе и QoS PCIe шины, чтоб уменьшить латенси на ... микросекунды.
а что мешает подёргать все обработчики на старте чтоб всё заджитилось?
реалтайм обычно далеко не быстрый. он просто гарантированно реагирует за какое-то время. ну так есть реализации gc, которые дольше заданного времени не тормозят. у ibm есть такая, у azul. эт для явы.
потому что твой Jit для генерации нормального кода должен очень долгое время профилировать то-что он высрал. jit не способен сразу из-под пинка генерировать быстрый код, для этого ему нужно долгое время составлять callratings, weak мапы функций и другие высероты чтобы хоть как-то апнуть perfomance. Куда смешней не то что jit это longtime задача, куда смешней то что в тех задачах в которых требуется большая производительность jit всё ломает, мапинги near символов быстро захлёбываются и в результате код начинает компоноватся абсолютно не эффективно. В итоге получается игра по типу space engineers которая всем своим видом доказывает мой аргумент. Да и сам глава keen говорил что главная проблема производительности их игры это jit и в особенности gc.
одна из: разница между С++ и условным С# в том что в С++ код полностью оптимизируется со стороны кодогенерации что не может себе позволить "строгие, без UB" языки на подобии java/js/C#/питон-гандон. в этих языках нету никакого контроля над памятью а там где его нет - нет высокой производительности.
И чем это лучше, чем AOT? AOT же это не си с плюсами. Джава может компилироваться AOT (см. Android), сишарп, вроде, тоже.
К тому же, как я понимаю, jit приводит к дополнительной косвенности (вставляет trampoline на скомпилированнную функцию), а это кэш (и что хуже, page) мисы, есть задачи, где это критично. Но я могу быть не прав.
ну дак не пользуйся софтом который написан на легаси языках.
да и в игры не грай которые на легаси языках написаны.
байкот поможет и все сразу будут писать на питоняшах-говняшах как в твоей кануре
принятно. но приводить можно только нормальные аргументы с ссылками на доказательства и на источники. а на всякую придуманную херню по типу твоей принято отвечать примерно подобной аргументацией, только без маски интеллигента.
Этим людям бесполезно что-то доказывать. единственное что они заслуживают это прямое оскорбление, и даже без жиру, и это будет эквивалентно их аргументам.
Чем какие-то байки про плюсовиков рассказывать, посмотрели бы на реальные проекты. Я не хотел хамить, но каждый одно и то же транслирует. Си и с++ и так отлично заменяются другими языками. Сложные проекты пишут на разных языках. Никто не будет писать на дорогом языке, если в этом нет необходимости. Ну, кроме Яндекса, наверное. Хотя, может, и у них есть причины.
> а вообще вот нафига писать и микроконтроллеры и бизнес логику какого-нибудь финтеха на одном языке?
Потому что он позволяет удовлетворить требованиям заказчика, на рынке есть программисты?
> оси писались давно и их апи сишное. что в самих осях тоже вызывает кучи косяков
Какие косяки из-за сишного апи, а не сишных внутренностей? Сишное апи позволяет прикрутить что угодно куда угодно.
> появится что-нибудь с wasm-овским апи
WASM - это же LLVM-подобный байткод для виртуальной машины, если я не путаю? Ещё там вроде апи для обмена с JS. Как это соотноситься с ОС? Я Я что-то слышал, что думают над WASM в десктопе (круг эволюционных технологий замкнулся, бля), и там POSIX-подобное API. Лол, посикс - это то самое сишное апи.
по сути, васм - примерно та же ява, тока с линейной памятью
но эта хуйня стандартная.
уже есть вм для запуска его на сервере.
далее ожидается дистрибуция кода в этом формате
а там рукой подать до осей, в которых это будет единственным форматом распространения кода, ибо нафига какие-то другие?
ну а апи там наверн будут в виде чего-то типа IDL. мета инфа для линковки в каком-то виде по-любому нужна, но в каком именно - не суть важно.
Проблема с++11 в том, что он должен называться с++2000. И половина гайдлайна должна быть не сборником советов, а интегрирована на уровне синтаксиса в язык. Но тогда, па-па-пам, мы получим что-то типа джавы.
Только вот кодовая база на С++ до С++11 никуда не делась, и когда такой "современный плюсовик" придет на работу он не сможет прочитать/поправить и строчки. Что говорить, большнинство моих знакомых только в этом году затащили С++11, некоторые С++14. А уж про то, что не все фичи C++17 поддерживаются в принципе в гцц\мсвц\кланге\... это уже добивающий.
смею тебя огорчить, у разработчиков все начинается с академических знаний классических паскаля/С/джавы, а потом уже в зависимости от выбраной профы: веб/приклад/бек и т.д. подбирается язык/фреймворк + модные свистоперделки.
"знакомство начинается с пайтона, js и php", это только у 300к/сек после 2 недельных курсов.
P.S. Все хейтят JS, но из тройки "пайтона, js и php" JS наиболее похож с C/Java так как базовый синтаксис и операторы почти идентичны, свичнуться JS -> C / C -> JS достаточно легко (да, второй вариант сложнее)
P.S.S Пайтон вообже фу, куча глобальных функций вместо методов и гребанный отступы со "списками". ИМХО
Если человек освоил один язык, в котором есть хоть что-то похожее на обычное процедурное и около-ооп программирование, т.е. основные концепции, то он освоит любой похожий язык легко на базовом уровне. А отличие профи от базового уровня - это втч дроч деталей, нюансов и особенностей, которых полно на любом стеке.
куча глобальных функций вместо методов
Оп, ооп головного мозга детектед. И их не куча: https://docs.python.org/3/library/functions.html. Python - довольно элегантный язык, позволяющий многие вещи писать очень легко и компактно. Другое дело, что я очень считаю что питон, что js непригодными к разработке больших проектов из-за отсутствия компиляции и строгой статической типизации. Напоминает ходьбу по минному полю.
Тайпскртпт - хороший язык, я на спорю. На самом деле, это не джава. Там более интересная система типов, которая включает в себя такие удобные и модные ныне вещи, как типы-суммы, not-nullable (вроде) и прочее.
К сожалению, тут есть ряд проблем.
1. ТС идеалогически остаётся надмножеством жс и сохраняет его недостатки. Например, там нет перегрузки операторов, что делает очень больно при написании, к примеру, математики (мне было больно)
2. ТС позволяет напихать Any (или что там вместо него) вообще везде и превратиться в жс. Если какой-то говнокод прошел проверку компилятора почему-то, то в рантайме он все равно может заработать на так, как надо. Проблем с труЪ компиляторами меньше. Я видел, как GCC генерируют невалидный код, но редко.
3. Главная проблема тс - программисты на тс. У них жс головного мозга. Вставлять Any как заглушки, если что-то идёт не так? Пожалуйста. Игнорировать крутые фичи языка? Пожалуйста. Там система типов лучше, чем во многих языках, зачем низводите до сишарпа?
Я молюсь чтобы его не добавляли. Свят-свят. Не надо нам этого говна. У нас уже и без того есть Proxy, getter, setter, и это при том, что всё является hashmap. С перегрузкой операторов мы просто сгинем в пучине хаоса. Пускай скалисты с этим ебуться.
> ТС позволяет напихать Any
Это меньшее из зол. Банишь any на уровне линтеров и проблема ушла. Однако - хуй там плавал. Проблема в том что у TS unsound система типов. Ты без всяких any можешь в 3 строки её обмануть и типы не сойдутся. И это без приведения типов, без any, без guards. Сам язык устроен так, что он не может проверить типы наверняка. Если интересно накидаю пример. Но суть такая - ты никогда в большом проекте не можешь быть до конца уверенным, что типы в коде и в runtime -е одни и те же.
> Там система типов лучше, чем во многих языках, зачем низводите до сишарпа?
Я ниже писал уже - система типов сложная и если на проекте нет вменяемого архитектора, то народ просто не может её осилить. А так как привычка писать супер высокоуровневый код с JS осталась, то они просто не могут взять удобные концепты из JS и типизировать её на TS. Это бывает очень не тривиальным.
> У нас уже и без того есть Proxy, getter, setter, и это при том, что всё является hashmap
Имхо, это наследие жс, которое делает боль. Операторы очень удобны, например, всякие векторы/матрицы дрочить через a.mult(b) не особо удобно (или mult(a, b)?).
> Сам язык устроен так, что он не может проверить типы наверняка
Во, это то, что я пытался сказать, но я плохо знаю ТС, поэтому чувствовал жопрй, что там нет статических гарантий. Было бы очень интересно посмотреть на примеры.
> дрочить через a.mult(b) не особо удобно (или mult(a, b)?
Ой да ладно, не вижу принципиальной разницы между a * b и a.mult(b) (а лучше mult(a, b)). Зато невооружённым взглядом видно, что под капотом что-то хитрое. Я очень ценю очевидность.
> Было бы очень интересно посмотреть на примеры.
https://bit.ly/3rttkkA
держи. Тут в m1 попадает arg1.b неправильного типа. Без всяких приведений типов и any. И без guards. Почему? Потому что структурная система типов. Она даёт шикарную алгебру типов и вот такие вот уязвимости в одном флаконе
В какой-то степени это он и есть. Только слева направо, а не справа налево. https://github.com/tc39/proposal-pipeline-operator вот пропозал. Там они до сих пор (уже который год) не могут договориться какой синтаксис взять, один из который даже называется "F#"
> что js непригодными к разработке больших проектов из-за отсутствия компиляции и строгой статической типизации
Второе решается за счёт Typescript. Только сразу скажу, что система типом там зверски сложная. Это не Java/C#. А первое... 1-е никто пока и не пробовал решать :) Компиляция JS в WASM ничего не даст.
Не очень понимаю хейт в сторону отступов, т.к. всё равно все адекваты делают отступы в своем коде и на других языках что бы его реально вообще было читать.
> что бы его реально вообще было читать
для этого в других языках кроме отступов еще используют { } (begin/end привет паскаль/делфи), которые и позволяют не ломать себе глаза при просмотре кода и писать все хоть в одну строку.
Мне отступы сильно не понравились тем, что нельзя быстро взять какой-то кусок постороннего кода вставить и тут же запустить. Приходится сидеть и раздрючивать все эти отступы. И так во множестве других ситуациях редактирования.
Какие-то повторяющиеся простые вещи бывает проще писать в одну строку, но в питоне хрен, будь добёр растягивай эту гирлянду на на три экрана.
Ну наверное, я не особо прогер, прогаю только небольшие скрипты для научной работы, так что вполне возможно что я не прав. Хотя может просто для этого питон и нужен, разобраться просто и в не громоздком коде всё очень красиво и удобно. По поводу первого могу только сказать что пользуюсь пайчармом для своих задач и он рисует небольшую линию которая помогает визуально легко отличать между собой блоки даже с большим количеством отступов. Так что это тоже не беда
IMHO PHP куда больше похож на Java. Они прямо в эту сторону последние годы и движутся. Даже type hinting завели. Да и вообще Java ассоциируется с ООП, где классы классами погоняют. Где абстрактные фабрики абстрактных фабрик и fizzbazz пишется в 70 файлов. И... туда же идёт PHP.
А JS скорее двигается в сторону FP языков. Особенно учитывая концепт иммутабельных структур данных (один из самых ожидаемых proposal).
В первую очередь стоит учиться решать алгоритмические задачи, а для этого прекрасно подойдёт и питон. А уж низкоуровневые особенности при желании можно изучать потом.
Неа, если осили объектно-ориентированное в питоне, то ваще изи всё.
Если нет, то будет тяжко. Как тот кто не осилил говорю.
Да и питон мне для мелкого ускорения того, что можно вручную через оптимизацию автоматическую.
Ну вообще-то знание особенностей работы железа может быть полезным, чтоб иметь представление, что да как, и что ваши программы исполняет не магический джин. Ну, хрестоматийный пример - это работа кжшей, когда правильное расположение данных в памяти (соблюдение локальности, array of struct vs struct of aarays итп) дают нихуевый буст производительности. Иногда приходится дрочить даже большую экзотику. Сейчас не нашел, но смотрел выступление Яндекса, где они делали какое-то кэширование для своего веба, и им пришлось оптимизировать с учётом работы TLB.
Что касается именно ASM, то современные оптимизирующие компиляторы сделают код на C++ не хуже, чем если бы его писали на ASM руками. Иногда даже лучше. Во всяком случае, если он и будет хуже, то настолько незначительно, что на фоне разницы трудозатрат ее не видно.
Это важные, но не обязательные знания для рядового программиста. Чаще всего код тормозит не из-за неоптимальных вычислений, а обращениям по сети и к диску.
Я там ниже привел более приближенный к жизни пример. Но вообше, текущие абстракции - это не только про железо, течет (и куда чаще) просто более низкий уровень софта. О котором стоит знать.
Ну, к примеру. Есть ORM entity framework. И есть там такая штука, как lazy loading. Какая красота, не надо писать SQL, не надо джойнты писать, просто работай как с обычным объектами! Ой, почему у меня при итерировании N товаров на странице произошло N+1 запросов в БД и все легло?
Хоспаде, как приятно смотреть на то как у ненавистников С++, которые не смогли его выучить, горит пердак. Приятно наблюдать, как они приводят в аргументы, слова которые написали таки-же идиоты как они. И тем самым они помечают себя флажками любителей пожевать калл. жаль на реакторе не сидят люди которые являются искренними фанатами своего дела и фанатами производительности, и никто меня не поддержит.
С++ язык на века, и на этом точка, всё остальное либо медленное как черепаха либо не имеет столько возможностей сколько даёт С++, удовлетворяя даже самую жирную самку бигимота.
Мне кажется тебя в этой теме минусят как плюсовики, так и все остальные. По сути просто минусят все за дебильность. Т.е. проблема не в твоей позиции (она как раз более менее вменяемая - плюсы и правда быстры и имеют свою нишу). Тебя минусят за дебилизм. И вот тут плюсы тебе уже не помогут.
ну блэт. я как бы с 4х лет за компом(33 в ноябре было), да и iq не обделен. а токсичный я и так - так хоть за компом буду реально хоть что-то зарабатывать.
Окей. Мне надо заставить робота ехать куда надо. На производительность моего кода мне похуй, потому что робот точно едет медленнее кода. Вопрос: мне платят за то чтобы считалось быстрее или чтобы робот приехал куда надо? Готов ли заказчик терпеть месяц, пока я ебусь с плюсами пару месяцев ради мифической скорости или я возьму скриптовый язык типа питона и сделаю все за неделю, если даже питоновской производительности за глаза и уши?
Робот? Их есть у меня. Писал планировщик пути для робота. Планировщик накидывает кандидаты, интерполируеи, матан туда-сюда, коллижн детекшн. Написал на питоне, ибо изи. Но очень медленно. Питон важнее медленный, шо пиздец, куда хуже жс. Попытался поебстись с альтернативами CPython'у, типо pypy с jit, пытался в numba... Потом плюнул, переписал в лоб на с++, получил +9000 перфоманса, даже забил на дальнейшую оптимизацию, хватило с запасом.
Ну вообще никто, кроме фанатиков, не спорит, что для разных задач разные языки.
Питон - один из самых медленных мейнстрим языков. Это у него не отнять. Он куда медленнее, чем тот же JS (который весьма быстрый). Существуют различные ускорялки питона, такие как pypy, numba. Не всегда применимы.
О каких текущих абстракциях питона вы мне пытаетесь намекать? На кучу оверхеда даже на инт, на кучу аллокаций/деаллокаций, на кучу косвенности? Ну я в курсе. Смысл вашей три мне не ясен.
иллюстрация всего нашего разговора.
люди не шарят в применимости технологий, не шарят, как делать быстро.
и винят технологии, а не своё невежество.
еще и окружающих пытаются убеждать.
и плодят вокруг себя всякие мифы.
Я где-то винил питон или его применимость? Я пишу на питоне в последнее время даже больше, чем на си. И использую его для определенного круга задач. Где питон мне использовать не удобно, использую другие языки. Problems?
Можно делать быструю java, c#, js, haskell и ещё ряд всяких извращений. В определенных условиях или для определенных задач они могут почти не уступать или вовсе не уступать нативному коду. Но не грёбанный питон, который интерпретатор, не JIT даже. Есть несколько реализаций JIT разной степени кривизны. Есть namba - JIT для маленького подмножества питона, чтоб ускорять математику. Там векторизация, параллелизм и прочее. Иногда можно ускорить просто охуенно, иногда не подходит.
если ты шаришь в питоне, зачем брал его для робота, как написал выше?
если я шарю в технологии, то не беру ее туда, куда не надо. ну и не рассказываю, как оно медленно и хуже богомерзкого жс
Для того, чтоб накидать прототип, сделать алгоритм, покрутить туда-сюда и смоделировать. Легкость написанная кода, куча библиотек математики, включая нумпай, быстрая разработка - поэтому и взял питон. Потом переписал на плюсы. Брат может, может было и питон оптимизировать, но мне так проще. Я не сказал, что питон говно или что он не подходит для задачи. Он подходил именно для задачи прототипирования, поэтому я на нем и прототипировал.
Ну и прекрасно. Питон - отличный "клей", чтобы легко склеить кучу разного дерьма. Всякие опенсв, нумпаи и прочее дерьмо.
А есть еще ультимативный способ получить овер9000 производительность - оффлайн описание вычислительного графа и отдать его на откуп среде исполнения, которая его векторизует, распараллелит, еще на гпу запустит, а, может, даже на кластере через MPI. А сам код на питоне простой и элегантный. Да, я говорю про всякие TensorFlow и прочие.
Проблема скриптовых языков в том что без типчиков что-то сколько-нибудь сложное трудно написать, а когда пишешь оказывается говно. Можно посмотреть на пример стандартной библиотеки JS, когда майкрософт сделал TypeScript и типизировал всё что динамисты за пару десятилетий навертели и всё говно всплыло наружу. Моё любимой - HeadersInit, можно посмотреть как из трех равнозначных вариантов вместо того чтобы выбрать что-то одно жсеры решили использовать все 3 варианта сразу.
Но и плюсцы тоже для такого робота ни к чему.
Если писать что-то больше 500 строк (а роботу наверное нужно больше) то я бы взял любой высокоуровневый язык с гц, который и проще плюсов, и компилятор помогает с типовыми ошибками
Тут от ситуации зависит. За что платят, то и делать. Можно плюсы из-за одних только либ, коих миллион, брать, чтобы не велосипедить. Или если критичное или аппаратное, то больше контроля над кодом, но тогда от модных фич немного останется. Лично я придерживаюсь мнения, что у каждого языка свои плюсы и минусы и своя область, и забивать гвозди микроскопом это плохо)))
Если вопрос либ то тогда вопроса выбора языка не стоит - на чем либа есть, на том и пишешь. В редких случаях пишешь на любом другом япе и обмзываешься клеем FFI
Но если брать плюсы, то С++ "эксклюзивов" не так уж и много, а общая база библиотек у питона/жабы будет побольше.
Я начинал с Бейсика, потом Паскаль, потом уже в университете Asm, С, С++. Все с преподавателями. Питон освоил самостоятельно и могу точно сказать, что это хороший язык, как пролог к C# ил иC++.
Продвинутая
Ргоггёепс!
разработка
Бесплатный курс от экспертов*9^^
Старт курса: сентябрь Подать заявку
Заполни анкету-
августа
заполни анкету-резюме чтобы мы могли оценить твой опыт
г Пройди 1
отправим письмо с
результатами
проверки анкеты-
резюме и пригласим
на интервью А
Стар
эт по сути уже не один язык, а несколько, совместить которые в одном проекте будет проблематично.
А подход плюсов хорош тем, что твой код редко ломается при переходе на новый компилятор, но всегда можно улучшить код, используя новый стандарт.
ну и вообще, можно проги 20-летней давности распространять в бинарях, а не в сорцах. синтаксис улучшать, а бинарную совместимость не трогать. но ее и так никто не трогал бы, она ж еще от сишки досталась.
а еще можно собирать проги 20-летней давности компиляторами 20-летней давности
совершенно не обязательно упарываться полной обратной совместимостью, чтоб народ понимал правила игры и мог прогнозировать развитие своего кода.
если тебе нужен какой-то код - инвестируй в него время на допиливание его под новые стандарты языка.
Что делает с++ сложным (по крайней мере, для меня) - это стопицот крайних случаев. Его делают какие-то слишком умные люди, которые делают слишком обобщенные подходы, и пихают иди zero-cost abstraction и "и не плати за то, что не используешь" везде. Да, это сильная сторона С++, из-за которой их и выбирают. Но блять. Если посмотреть на концепты (самое свежее, что там есть) - это какой-то инфернальный ад из нескольких вариантов синтаксиса и кучи правил, что можно, что нельзя. Сложно? Да. Из-за легаси? Нет.
о чем я и писал выше. консистентность проёбана в угоду совместимости
Тебе не обязательно изучать Си (malloc, free, и т.п.), чтобы писать на плюсах. (Полезно, не спорю, но не обязательно)
замен полно, но ригидность мышления плюсовиков не способствует их повсеместному внедрению
А если мы говорим о заменах в этих нишах, что там у нас? Rust и D? Ну D популярности не снискал, а Rust набирает ее (самый фап-язык по статистике стаковерфлоу два года подряд). Но он пока сырой. И особенности разработки не позволяет ему (пока) заменить си в области safety-critical.
Ну ещё nim, хуим и прочая экзотика.
плюсовики кичатся своей илитарностью, а ведутся на хайп, как хомяки, лабающие на жабоскрипте. мы вроде как инженеры, должны руководствоваться логикой всё-таки, не?
по моему опыту, кто пробует новые языки - они им находят применение. и радуются потом этому.
но большинство просто вообще ничего не пробует.
В индустрии применяются стопицот языков, от кобола до хаскеля, далеко не одни плюсы. Они занимают на такую большую нишу, посмотрите по вакансиям.
Выбор языка зачастую не рядовым программистом выбирается. Вот нарваться мне раст, ну я сижу, дрочу немного из любви к искусству. Но он редко применяется в продакшне, нет вакансий почти, даже меньше, чем на си. Потому что новый, потому что мало программистов, потому что хуй пойми, что будет. И менеджмент/лиды решают не рисковать. А где-то применяют. Это бизнес, деньги, а не самомнение плюсовиков.
Бьерн Страуструп.
В чем проблема. Раст очень крут в плане безопасности. Во всяком случае, декларируемой. Не знаю, насколько там компилятор не имеет ошибок и насколько ему можно верить. Но тем, где нужна это конечнная упоротая безопасность - в safety critical, раст к пустят долго, потому что не сертифицировано. Продолжут на C/C++ с MISRA код стайлом писать и IAR'ом компилировать...
Для сейф кода доказано что он sound - то есть невозможно написать программу, нарушающую гаратии раста. Понемногу верифицируют стандартную библиотеку - вот атомики не так давно проверили: https://people.mpi-sws.org/~dreyer/papers/rbrlx/paper.pdf
То есть не просто "протестировали", а математически доказали, что ошибок там нет и быть не может. Что до мисра и остального - вопрос времени. Раст уже 5 лет как живой с момента релиза 1.0 (и ещё был сколько-то времени в версиях 0.х), в той же фуксии гугл его юзает как один из основных языков, при этом их любимый го запрещен. Майкрософт для Azure IoT сделал целый фреймворк actix. В общем, живы будем не помрём, развиваемся потихоньку. Даст бог сбросим оковы неудобства и будем писать на чем-то более-менее адекватном.
> Для сейф кода доказано что он sound -
Доказано, что гм... формальная модель sound, или что компилятор не сотворит херню? Ведь компилятор - дохера большая и сложная штука, чтобы ее верифицировать.
Было бы приколньо строить инфраструктуру языка (начиная с компилятора) с какого-нибудь минимального верифицируемого языка, теорем прувера или типо того, поверх которого все строится. (Вот в раст втащили, вроде, некую вариацию пролога для вывода типов, но это другое). Наверняка, где-то сидят бошковитые задроты по type theory, которые таким упарываются.
Ладно, она существует, но де-факто, не де-юре, да и то не везде и ограничено. Ещё был в истории пример, когда с переходом на C++11, подобие на бинарную совместимость таки сломали, и от этого некоторые ортодокс-конторы не переходили на с++11 и новее лет десять. Бедные.
> ну и вообще, можно проги 20-летней давности распространять в бинарях
Угу, и ошибки не исправлять. А дневник компиляторы - ещё больше зло.
По-моему если хочешь современный язык - бери тот же питон, его стараются поддерживать на самом современном уровне, и даже пренебрегают совместимостью. Если нужна совместимость - тут уже С++ без альтернатив.
pimpl.
Кстати, нас самом деле хедеры в си, на в с++ - это топ просто. Вы можете положить в них публичный интерфейс, а все потроха споятать. Такого больше нет ни в одном языке. Вы можете писать public, private, но я открываю ваш файл и вижу как публичный интерфейс, так и приватную реализацию. Глаза разбегаются. А в сишечке хедер открыл, и видно только нужное. Конечно, можно именно интерфейс вынести, как отдельную сущность, но интерфейс - это лишняя косвенность. Да и интерфейс ради одного наследника - возможно, вы что-то делаете не так.
*Минутка дроча на раст и трейты*
фейспальм.жпг
такое везде. в любом языке с модулями. только менее черезжопно: метаинфа собирается при сборке, не надо ее дублировать руками
А если это темплейт класса? Тогда ведь по-любому реализация тоже в h файле?Получается что хедер - это не всегда только интерфейсы.
До модулей я пока не дошёл, спасибо за совет.
вон чувак косяки только в 1 фиче час разбирает:
Безусловно есть Rust, который хорош, но ему было проще, потому что в нем не было огромного легаси и груза обратной совместимости, как у плюсов.
Да что там говорить: вот идет доклад по С++, в зале есть члены комитета С++, то есть люди которые днями только и делают, что изучают язык и его нюансы. И их спрашивают "как думаете, какая семантическая модель этого кода", и *у них разные ответы*. Что уж говорить про простых смертных, а не комитетчиков. Не уверен, что на планете найдется хотя бы один человек, который для любого небольшого сниппета на плюсах сможет правильно ответить, что компилятор с ним сделает.
Питон тоже хреново поступил со сломом третей версии. Зато показал всем, как делать не надо.
В общем, можно долго спорить о том, лучше ломать ли не ломать совместимость, но то что плюсы неподъемные - это факт. Что говорить, это наверное единственный компилируемый язык с *неразрешимой грамматикой*.
как-будто другие языки не делают всего того, что и плюсы. делают, но почему-то спеки в разы короче, поведение интуитивное, компиляется быстрее, сборка параллелится, инкрементально делается и тд.
мсье изволит спиздануть, что нет современных языков с указателями и встроенным асмом?
мсье может пойти на хуй, их полно.
при этом особым образом будут помечены все те загончики, где извращения разрешены
> как-будто другие языки не делают всего того, что и плюсы
Нет. Иначе бы никто не писал на С++, потому что это медленнее и дороже. Думаете, бизнес выбирает С++ из любви тратить деньги на программисто-часы? Есть области, где с и с++ живее все живых. Производительность выше: математика, рендеры, игры, моделирование, высокопроизводительный финтех итп итд. Нет рантайма, меньше код, меньше/нет накладных расходов, прямая работа с памятью (читай: с железом), нет GC - микроконтроллеры, встраиваемые системы, системы реального времени, ядра ос итп итд.
Там, где можно писать не на плюсах, уже пишут не на плюсах. C#, Java, Python, JS - тысячи их. Из замены плюсов и си разве что Rust, но он сырой. Ещё D, но не во всех приложениях применим. Ну и остаются тысячи программ на си и с++ в основе всей инфраструктуры, которые не выкинуть
а вообще вот нафига писать и микроконтроллеры и бизнес логику какого-нибудь финтеха на одном языке? по-моему это тупо. разные задачи требуют разных инструментов.
основная причина, на мой взгляд, - эт оси. оси писались давно и их апи сишное. что в самих осях тоже вызывает кучи косяков. почти все косяки с безопасностью - из-за этого.
нам нужны более человеческие оси, и я надеюсь, в ближайшем будущем появится что-нибудь с wasm-овским апи
Полный бред.
и твой взгляд говно. изучай тему лучше.
jit может выдать более производительный код, чем aot, за счёт предварительного профилирования
А вот ещё есть MLTon, компилятор языка Standart ML, за счёт функциональщины оптимизирует лучше Си. И язык куда богаче, чем си, с++ и даже шарпы с жсами. Но все это не мейнстрим и не везде применимо.
Ещё, если у вас time-critical (управление ебеным роботом, производством, высокочастотный трейдинг, стриминговая передача данных) ваш jit (и gc) заодно идёт нахуй из-за недерменированных задержек.
кстати говоря, jit вполне себе детерминированный. сколько-то раз мы зашли в метод - и он джитится.
про realtime gc ты тоже не слышал
а потом такие вот эрудиты дохуя и говорят: "да хули там, давайте новый проект на плюсах лабать" и вся хуйня идет на второй круг
Про gc в задачах жестокого реального времени я и правда не слышал, буду рад, если что-то скиньте почитать.
Я как раз реалтаймом занимаюсь. И мы тут дрочим кэш мисы, очереди пакетов в сетевухе и QoS PCIe шины, чтоб уменьшить латенси на ... микросекунды.
реалтайм обычно далеко не быстрый. он просто гарантированно реагирует за какое-то время. ну так есть реализации gc, которые дольше заданного времени не тормозят. у ibm есть такая, у azul. эт для явы.
К тому же, как я понимаю, jit приводит к дополнительной косвенности (вставляет trampoline на скомпилированнную функцию), а это кэш (и что хуже, page) мисы, есть задачи, где это критично. Но я могу быть не прав.
да и в игры не грай которые на легаси языках написаны.
байкот поможет и все сразу будут писать на питоняшах-говняшах как в твоей кануре
> а вообще вот нафига писать и микроконтроллеры и бизнес логику какого-нибудь финтеха на одном языке?
Потому что он позволяет удовлетворить требованиям заказчика, на рынке есть программисты?
> оси писались давно и их апи сишное. что в самих осях тоже вызывает кучи косяков
Какие косяки из-за сишного апи, а не сишных внутренностей? Сишное апи позволяет прикрутить что угодно куда угодно.
> появится что-нибудь с wasm-овским апи
WASM - это же LLVM-подобный байткод для виртуальной машины, если я не путаю? Ещё там вроде апи для обмена с JS. Как это соотноситься с ОС? Я Я что-то слышал, что думают над WASM в десктопе (круг эволюционных технологий замкнулся, бля), и там POSIX-подобное API. Лол, посикс - это то самое сишное апи.
но эта хуйня стандартная.
уже есть вм для запуска его на сервере.
далее ожидается дистрибуция кода в этом формате
а там рукой подать до осей, в которых это будет единственным форматом распространения кода, ибо нафига какие-то другие?
ну а апи там наверн будут в виде чего-то типа IDL. мета инфа для линковки в каком-то виде по-любому нужна, но в каком именно - не суть важно.
"знакомство начинается с пайтона, js и php", это только у 300к/сек после 2 недельных курсов.
P.S. Все хейтят JS, но из тройки "пайтона, js и php" JS наиболее похож с C/Java так как базовый синтаксис и операторы почти идентичны, свичнуться JS -> C / C -> JS достаточно легко (да, второй вариант сложнее)
P.S.S Пайтон вообже фу, куча глобальных функций вместо методов и гребанный отступы со "списками". ИМХО
куча глобальных функций вместо методов
Оп, ооп головного мозга детектед. И их не куча: https://docs.python.org/3/library/functions.html. Python - довольно элегантный язык, позволяющий многие вещи писать очень легко и компактно. Другое дело, что я очень считаю что питон, что js непригодными к разработке больших проектов из-за отсутствия компиляции и строгой статической типизации. Напоминает ходьбу по минному полю.
И дроч с сериализованными данными, да. Как впрочем у любых языков с нестрогой типизацией.
К сожалению, тут есть ряд проблем.
1. ТС идеалогически остаётся надмножеством жс и сохраняет его недостатки. Например, там нет перегрузки операторов, что делает очень больно при написании, к примеру, математики (мне было больно)
2. ТС позволяет напихать Any (или что там вместо него) вообще везде и превратиться в жс. Если какой-то говнокод прошел проверку компилятора почему-то, то в рантайме он все равно может заработать на так, как надо. Проблем с труЪ компиляторами меньше. Я видел, как GCC генерируют невалидный код, но редко.
3. Главная проблема тс - программисты на тс. У них жс головного мозга. Вставлять Any как заглушки, если что-то идёт не так? Пожалуйста. Игнорировать крутые фичи языка? Пожалуйста. Там система типов лучше, чем во многих языках, зачем низводите до сишарпа?
Я молюсь чтобы его не добавляли. Свят-свят. Не надо нам этого говна. У нас уже и без того есть Proxy, getter, setter, и это при том, что всё является hashmap. С перегрузкой операторов мы просто сгинем в пучине хаоса. Пускай скалисты с этим ебуться.
> ТС позволяет напихать Any
Это меньшее из зол. Банишь any на уровне линтеров и проблема ушла. Однако - хуй там плавал. Проблема в том что у TS unsound система типов. Ты без всяких any можешь в 3 строки её обмануть и типы не сойдутся. И это без приведения типов, без any, без guards. Сам язык устроен так, что он не может проверить типы наверняка. Если интересно накидаю пример. Но суть такая - ты никогда в большом проекте не можешь быть до конца уверенным, что типы в коде и в runtime -е одни и те же.
> Там система типов лучше, чем во многих языках, зачем низводите до сишарпа?
Я ниже писал уже - система типов сложная и если на проекте нет вменяемого архитектора, то народ просто не может её осилить. А так как привычка писать супер высокоуровневый код с JS осталась, то они просто не могут взять удобные концепты из JS и типизировать её на TS. Это бывает очень не тривиальным.
Имхо, это наследие жс, которое делает боль. Операторы очень удобны, например, всякие векторы/матрицы дрочить через a.mult(b) не особо удобно (или mult(a, b)?).
> Сам язык устроен так, что он не может проверить типы наверняка
Во, это то, что я пытался сказать, но я плохо знаю ТС, поэтому чувствовал жопрй, что там нет статических гарантий. Было бы очень интересно посмотреть на примеры.
Ой да ладно, не вижу принципиальной разницы между a * b и a.mult(b) (а лучше mult(a, b)). Зато невооружённым взглядом видно, что под капотом что-то хитрое. Я очень ценю очевидность.
> Было бы очень интересно посмотреть на примеры.
https://bit.ly/3rttkkA
держи. Тут в m1 попадает arg1.b неправильного типа. Без всяких приведений типов и any. И без guards. Почему? Потому что структурная система типов. Она даёт шикарную алгебру типов и вот такие вот уязвимости в одном флаконе
Спасибо за пример
имхо для этого нужен именно pipe-оператор а не перегрузка
f(g(x)) == f . g x
Второе решается за счёт Typescript. Только сразу скажу, что система типом там зверски сложная. Это не Java/C#. А первое... 1-е никто пока и не пробовал решать :) Компиляция JS в WASM ничего не даст.
для этого в других языках кроме отступов еще используют { } (begin/end привет паскаль/делфи), которые и позволяют не ломать себе глаза при просмотре кода и писать все хоть в одну строку.
Какие-то повторяющиеся простые вещи бывает проще писать в одну строку, но в питоне хрен, будь добёр растягивай эту гирлянду на на три экрана.
- какой-то блок кода стал большим и теперь тяжело соотнести границы глазами.
- в коде стало много строк, которые просто не поместились в одну строну
Эти две вещи ломают картинку. Пока там 2+2 оно выглядит опрятно и прикольно. А чуть какой мудрёж и уже хочешь фигурных скобок\begin\end
А JS скорее двигается в сторону FP языков. Особенно учитывая концепт иммутабельных структур данных (один из самых ожидаемых proposal).
Если нет, то будет тяжко. Как тот кто не осилил говорю.
Да и питон мне для мелкого ускорения того, что можно вручную через оптимизацию автоматическую.
Что касается именно ASM, то современные оптимизирующие компиляторы сделают код на C++ не хуже, чем если бы его писали на ASM руками. Иногда даже лучше. Во всяком случае, если он и будет хуже, то настолько незначительно, что на фоне разницы трудозатрат ее не видно.
Ну, к примеру. Есть ORM entity framework. И есть там такая штука, как lazy loading. Какая красота, не надо писать SQL, не надо джойнты писать, просто работай как с обычным объектами! Ой, почему у меня при итерировании N товаров на странице произошло N+1 запросов в БД и все легло?
С++ язык на века, и на этом точка, всё остальное либо медленное как черепаха либо не имеет столько возможностей сколько даёт С++, удовлетворяя даже самую жирную самку бигимота.
Ну вообще никто, кроме фанатиков, не спорит, что для разных задач разные языки.
"и эти люди запрещают мне ковыряться в носу"
конечно, питон виноват, кто ж еще
О каких текущих абстракциях питона вы мне пытаетесь намекать? На кучу оверхеда даже на инт, на кучу аллокаций/деаллокаций, на кучу косвенности? Ну я в курсе. Смысл вашей три мне не ясен.
люди не шарят в применимости технологий, не шарят, как делать быстро.
и винят технологии, а не своё невежество.
еще и окружающих пытаются убеждать.
и плодят вокруг себя всякие мифы.
Можно делать быструю java, c#, js, haskell и ещё ряд всяких извращений. В определенных условиях или для определенных задач они могут почти не уступать или вовсе не уступать нативному коду. Но не грёбанный питон, который интерпретатор, не JIT даже. Есть несколько реализаций JIT разной степени кривизны. Есть namba - JIT для маленького подмножества питона, чтоб ускорять математику. Там векторизация, параллелизм и прочее. Иногда можно ускорить просто охуенно, иногда не подходит.
Давайте, расскажите, как ускорять питон.
если я шарю в технологии, то не беру ее туда, куда не надо. ну и не рассказываю, как оно медленно и хуже богомерзкого жс
А есть еще ультимативный способ получить овер9000 производительность - оффлайн описание вычислительного графа и отдать его на откуп среде исполнения, которая его векторизует, распараллелит, еще на гпу запустит, а, может, даже на кластере через MPI. А сам код на питоне простой и элегантный. Да, я говорю про всякие TensorFlow и прочие.
Но и плюсцы тоже для такого робота ни к чему.
Если писать что-то больше 500 строк (а роботу наверное нужно больше) то я бы взял любой высокоуровневый язык с гц, который и проще плюсов, и компилятор помогает с типовыми ошибками
Но если брать плюсы, то С++ "эксклюзивов" не так уж и много, а общая база библиотек у питона/жабы будет побольше.
"Пролог", кстати, тоже учил.