All streams
Search
Write a publication
Pull to refresh
2
0
Send message

В крестах, есть моё любимое noexcept, который явно задаёт будет ли функция бросать исключение или нет. Это очень удобно если либа написана "правильно", ты дёргаешь вызов и с рукой у сердца понимаешь что тут ничего упасть не может. (А ещё эта гадость не может вычислится самостоятельно и тебе надо писать трёхэтажные метавыражения чтоб оно считалось правильно)

ЗЫ: ИМХО, исключения на то и исключения что это исключительные ситуации, а узнать открылся файл или нет можно из стейтов-кодов.

4-гигагерцевые 8-ядерные процессоры такое не потянут?

В теории да, на практике любая подсистема в сотый-тысячный раз копирует метры таблиц и релокейтов и заново проводит инициализацию.

Когда уже динамические либы станут реально динамическими?

Просто в С++ много камней подводных. У тебя долгое время даже std::array мог создать UB на ровном месте, а ты бы даже этого не заметил.

Тут подоспел мем с "Давайте перепишем вселенную на Rust ", ибо они сделали невозможное, запихали всё что может ломаться в unsafe, а наружу торчит красивое и безопасное API и хомячки не переживают что случится отвал жопы в случайном месте (теперь они пытаются обойти тупые ограничения чтобы написать код похожий на С++)

ЗЫ и притом код компилит не хуже плюсов, что тоже плюс.

Самое грустное что существует тьма либ которыми все пользуются где есть UB и всем всёравно. Многие "старые" библиотеки для математики 3D графики используют union не правильно. Но эти либы стали чуть ли не отраслевым стандартом, особенно таких много для OpenGL.

Тут надо прям полностью базовые инструменты менять, чтоб это всё корректно работало, а это много работы.

Я смотрю они весь zerocost увели в такую вещь как compiletime. Теперь ты можешь на этапе компиляции сделать ну ОЧЕНЬ много вещей. Чуть ли не корутину собрать, что тебе только байтики скопировать нужно будет.

А в данной фиче всё упрётся в реализацию, увы.

Пользуюсь их связью и в целом доволен, но вот денежная политика... Это буквально обдиралово, за такое судится надо.

Я не пользовался связью месяца 3, ибо уезжал. Приезжаю, интернет не работает, висит не оплачено, хорошо. Открываю ЛК там долг на ~4-5 тысячи, а тариф у меня 500р в месяц. Тоесть они заблокировали интернет за месяц неуплаты и начали начислять пени в 100% от суммы дополнительно продолжая добавлять потарифные счета. Прикольно чо могу сказать

Я так понимаю, прям из каропки решений нет. Приходится искать как это работает, что бы сделать хорошо

Региональные провайдеры периодически показывают жизнь. Если какой-нибудь Ростелеком лежит, то вот сосед с какими нибудь "быстрые связи" нормально работает.

ЗЫ Неожиданно для себя обнаружил что ютуб съедал очень много свободного времени, я даже стал обедать раза в 3 быстрее. Хоть на этом спасибо, лол

Микрософт для этого SAL замутили (не прижилось). Правда оно только варнинги в консоли показывает и выглядит ужасно, зато работает)

Эта та самая штука где ты задаёшь огромную штору при каких параметрах/условиях оно должно работать. Есть те же фичи с in out out_optional и всякое такое. Посмотреть как это безобразие используется можно в исходниках по winapi, которые обычно с вижуалкой идут.

Статья эта какой-то мусор и не объясняет почему оно так работает.

Итак.... Любое чтение тривиального типа который не содержит значения является UB. Значение же приобретается либо в конструкторе(не дефолтном), либо в присвоением уже инициализированного объекта. Если тип это агрегат, в том плане что просто хранит другие тривиальные типы, то если он не до конца инициализирован, то обращение к этим не инициализированым полям или присвоение этого объекта другому тоже UB. И да, все встроенные/фундаментальные типы являются тривиальными по умолчанию.

Допустим, программист читает её умышленно (например, пишет программу-шпион). Тогда что ему делать?

Если до С++20, то копированием сырых байт в уже подготовленный объект. Если после С++20, то использовать bit_cast который по сути копирует уже подготовленные типы, если после С++23, то start_lifetime_as который не копирует а сразу представляет память как объект. В любых других случая молится господу что ваш конкретный компилятор сможет сгенерировать нужный вам код, или попытаться покалдовать с ассемблером или несовершенством линковки TU.

ЗЫ этот язык буквально ментальное оружие. Либо ты освоишь его и сможешь кабанов с одного выстрела убивать, либо тебе оторвёт ноги и ты будешь жаловаться что оно кривое и ваще я капитаном корабля хотел стать)

Ну если после университета идти, то в целом неплохо, соглашусь. Но лично у меня опыта хватает, просто так сложилось что я в серой зоне всё время был и стабильной зарплаты не было. В итоге хоть куда подался и, мягко говоря, был впечатлён как дела на нижних уровнях делаются. Платят чуть ли не как уборщице, а требуют вагон знаний, ибо владелец часто не разбирается что он хочет.

В итоге я соскачив с нестабильной работы и поработав на стабильной опять решил занятся нестабильной, не фриланс так производство оборудования всякого... Эххх

В целом это справедливо и для RISC. У них всё тот же микрокод. Просто там не так много выбора как именно сделать одно действие. У того же х86 просто загрузить данные в регистр можно кучей разных способов, кода у RISC на это всего одна-две команды.

Раньше развлекаясь нашёл забавную вещь. В х86 можно написать банальный for(i) цикл используя 2 байтную команду, но компилятор не использовал её ибо на целевом интуле это команда работала условно 40 тактов, а вот последовательность из +5 команд всего в 3 такта. (некоторые команды могут объединятся на конвейере)

Я в курсе как устроен CPU, писал свои процессоры на досуге.

В целом проблема CISC буквально только в декодере. Если мы берём традиционное представление CISC где команда может иметь переменное количество байт на команду, то выходит что мы просто физически не можем увеличить подачу инструкций на конвейер. Тоесть ограничены условными 3-4 командами на такт. Спасает то что эти команды обычно комплексные и позволяют закодировать 1-4 действия в одну команду, потому отставание не кажется таким уж существенным. Можно строить всякие эвристические декодеры, которые бы просто наугад кэшировали мопы для участков кода, но это буквально костыли)

В итоге потенциальный потолок у RISC архитектур выше, декодеры можно тупо в ряд делать получая свыше 8 инструкций на такт. Но всё же переменное кодирование инструкций очень полезная вещь, в современных RISC есть всякие флаги/режимы позволяющие менять размер команды на кратное двойке значение. Эдакий CISC на минималках. Что в целом является отличным компромисом между этими двумя типами архитектур.

Тоесть получаем CISC с командами переменной длины = зло, а CISC/RISC с командами перемнной длины кратные двойке = спасение. Почему кратные двойки? Вместо оценки длины команды и определения какому декодеры скармливать команду, мы можем тупо сделать матрицу из 16/32/64 битных декодеров и не получать издержек на определение длинн, как в традиционных CISC. В итоге на одном теоритическом декодере можно получить от 4 до 16 инструкций на такт, сильно да?

Как всегда, правда где-то посередине

Боже, я тут шарюсь по помойкам в поисках опыта/стажа, в России тоже такое есть.

Тебя нанимают за 40к₽ на С++ софт написать или проект переписать какой, а в итоге ты -"java,Javascript,python,android,Linux,windows,opencv,ML,opticflow,SQL,qt/qml,rust,c/c++,с#,dsp,delphi" разработчик и желательно чтоб проект был готов завтра. А когда начинаешь намекать что это не норма и надо бы зарплату нормальную платить начинают фыркать "ну ладно, на 5к₽ зарплату поднимем".

Причём такие интересные конторы часто попадаются, и там зачастую сидит один техлид которому платят нормально и пачка студентов. (из рассказов знакомых)

Тоесть в итоге получаем, "теоретический CISC лучше, ибо по-сути представляет из себя сжатый набор команд закодированный по частоте использования"

На практике у нас есть только х86, который уже давно перестал быть оптимальным решением

Предположу что это близко к истине, ибо нейроны любят активироваться синхронно, и всё что может нарушить это вызывает возмущения. Тоесть, сеть всегда стремится к некой стабильной "рабочей частоте", которую иногда всякими ритмами называют.

Ща-ща, я тоже добавлю.

В один день, когда я был мелким, у нас была гроза и на следующий день в стекле появился пузырь. Я тогда так удивлялся мол "ваааау как там пузырик появился", родственники просто пожали плечами и сказали - "ого, наверное шаровая молния залетела"

-Конец-

Работаю в одной из таких отраслей. И какбы... да! Стоимость коробки которая по +10шим каналам чем-то управляет уже под 50К стоить может. Если при этом стоимость микроконтроллера будет в районе 5К, то это не сильно поменяет погоды.

Потому думаю что самая лучшая стратегия, на сейчас, это организовать производство именно микроконтроллеров с каким-нибудь интересными особенностями, чтоб было проще делать подобные решения. Для этого супер низкие техпроцессы не нужны, даже 100нм хватит.

Information

Rating
6,297-th
Registered
Activity