Даже то, что я написал вверху, не совсем правда. Можно заставить имплементить разницу указателей.
Если указатель в не аллоцированной или в конце — 0 (нельзя выделить ноль памяти, так что норм).
Но эта «фича» сделает ещё больше UB, потому что начнут кастовать в int нечётное количество байт (по ошибке) мерять это вот таким вот sizeof и опять ракеты начнут падать.
И ещё я досмотрел New Game, не озаботившись найти что-то новое. И теперь из недосмотренного и не харддропнутого у меня остались только Peace Through Bread! и Furi Kuri. Всё очень плохо /)_(\
На самом деле, они принадлежат типу… Но мы привыкли писать так, чтобы они прилипали к имени, но воспринимать это как то, что они принадлежат типу. Но вот так писать — это как-то совсем тупо…
Окей, я проиграл. Они принадлежат имени так реально никто не пишет, я забыл
Но мне прям ужасно не нравится это контекстно зависимое прочтение. Это тип указателя, или оператор?
Если тип/имя можно написать без чего-либо — оно не принадлежит типу/имени.
Но к сожалению в C/C++ это не так.
Мой мир рухнул.
*Пошёл сносить все свои C/C++ проекты на гитхабе*
Не обязательно. Элементы системы могут дополнять друг друга, чтобы
Язык и ЭВМ позволяют автоматизировать задачи и решать их безошибочно. Этого не может человек.
Человек знает о недостатках языка и ЭВМ, и использует свои знания, чтобы исключить влияние этих недостатков на решение задачи.
Неидеальные части дополняют и корректируют друг друга, образуя идеальную систему.
<-<
Наверное, наследством от B, автором которого является тот же Ритчи, и гениальностью нашей любимой парочки K&R.
В B имен типов не было. Переменные объявлялись как auto a, b, c;. И даже в современном Си их можно так объявлять >-<
И если ты пишешь auto * const b;, то Си решит, что это как int * const b;…
в сколь-нибудь больших проектах так не бывает. это только в чём-то уровная лабораторки можно вычистить все ошибки, пушо коду от силы на две страницы а область применения чётко описана в условиях)
если есть прерывание текущего рантайма, разворот стека и возможность поймать, то это исключение
я даже научился различать их, если кидать только реализующие определённый интерфейс. При этом остаётся возможность определить, что оно не кастуется в мой интерфейс
Да почему. Классное название. Морская тематика. Те кто пишут на Расте зовутся Rustacean — от Crustacean. Библиотеки раста называют crates — тип ящики. А маскот Раста — краб Феррис. Все отлично.
Почему не выбрать красивое имя для языка? Можно говорящее, отражающее суть.
Я не могу сказать что названия C/C++ хороши. Они никакие. Это просто буква.
Нет. Судить объект по имени — бред, да.
Судить само имя — нет. Я даю оценку имени, как сущности.
Я лошадь могу назвать Рухлядь. Вот просто. Она от этого хуже не станет. Но имя то плохое.
лично моё мнение — я лучше буду писать лапшу из ифов чем половину кода оборачивать в try блоки
а если интересно — в расте ошибки действительно являются «enum»ом Result (в кавычках потому что технически это тагнутые юнионы) с двумя вариантами — Ok и Err.
проброс ошибки через несколько уровней производится через синтаксический сахар "?", например
let val = i_may_fail()?;
этот сахар работает по-моему так же как следующий код
let val = match i_may_fail() {
Ok(val) => val,
Err(e) => return Result::Err(e),
}
естественно, так можно сделать если функция, в которой мы работаем тоже возвращает Result с типом ошибки совместимым с ошибкой, возвращаемой функцией (долго объяснять)
что делать если мы не возвращаем ошибку из функции? мы паникуем:
let val = i_may_fail().unwrap();
ихсодный код Result::unwrap выглядит примерно так
match self {
Ok(val) => val,
Err(e) => panic!(...),
}
вот мы и дошли до паникования
согласно документации, panic должен быть использован тогда и только тогда когда «a program reaches an unrecoverable state»
после вызывания паники поток сразу же прерывается, стек разворачивается, если надо — печатается бэктрэйс
но в нормальной работе программы паники происходить не должны никогда
HIR — это еще только преобразованное синтаксическое дерево, от High же. MIR — Middle. MIR транслируется в LLVM IR — совсем низко, но все еще выше ассемблера…
У HIR не очень большое разнообразие типов выражений, и If там нет, только Match. А вот в AST (синтаксическом дереве), еще есть If.
почти, на самом деле
между вызовами макросов нельзя состояние сохранять
мне в один момент такое надо было, но пришлось обойтись чуть более сложным синтаксисом макроса
ну, в тот момент я пытался написать клиентскую библиотеку для X11 на чистом расте
мне надо было сгенерить огромное количество структур, и для каждой добавить в централизованый enum один вариант
я хотел изначально для каждого structа делать свой вызов макроса, но в итоге понял что легче будет просто сделать всё за один вызов макроса
ля, rustc тоже использует quote и syn
иногда немного странно осозновать что компилятор раста написан на расте
и либы компилируются компилятором который использует эти либы…
единственный рабочий проект с графикой в окошках — это мой эмулятор chip-8
был написан давно, так что ни за красивость, ни за работоспособность не отвечаю
Ещё один плюс такого подхода к обработке ошибок, имхо — сразу и всегда понятно, может ли данная функция фэйлнуться. Нужно ли для неё делать обработку ошибок. Какие ошибки может вернуть эта функция — тип ошибки описывается в декларации функции.
Я смотрю на декларацию функции в плюсах и вижу что она возвращает тип. Кидает она исключения? Какого типа исключения она кидает? Сиди и гадай
да и вообще хорошие программисты учителем работать не пойдут, разве что на полгодика, чисто по фану. пушо зарплата различаться будет едва не на порядок
Нет, чисто способного — недели две-три.
Но если ты прям «выбираешь» то надо посмотреть как себя ведёт человек, его код, его психологию (да, я это не упомянул выше, каюсь).
Это очень дорогой рекрутинг, но привести гения к себе в команду — бенефит всем.
обычно способных видно более-менее сразу, они ж не могут сидеть без дела, что-то делают сами по себе, что-то изучают сами по себе. Обычно уже сразу есть на что посмотреть. Можно на одном занятии посоветовать пару ресурсов, а потом через полгода ещё раз прийти и посмотреть результаты. Совсем необязательно для этого подаваться в рабство к школоло за пять тысяч в месяц)
За месяц ты можешь посмотреть на его активность. За 2-3 — какие-то простые задачи, как пишет код. За 6 — на его подход к сложным задачам и на софт-скиллы (прям вот полностью и в деталях).
Напомню что пары 1-2 раза в неделю)
712 комментариев
какой ужас.
Вы только на аватарку гляньте, там же револьвер! Разве можно такому доверять и рассчитывать на него?
Я не бедный, но блин…
Хотя за проверки ренджа в стандартной библиотеке — сам бы за жопу укусил.
Почему за 80 лет существования языка не заставили аллокаторы реализовывать возврат размер блока по указателю на него? <_<
Если указатель в не аллоцированной или в конце — 0 (нельзя выделить ноль памяти, так что норм).
Но эта «фича» сделает ещё больше UB, потому что начнут кастовать в int нечётное количество байт (по ошибке) мерять это вот таким вот sizeof и опять ракеты начнут падать.
const char *
— это одно целое для меня >->Спойлер
удачи дебажить)
так реально никто не пишет, я забылНо мне прям ужасно не нравится это контекстно зависимое прочтение. Это тип указателя, или оператор?
Но к сожалению в C/C++ это не так.
Мой мир рухнул.
*Пошёл сносить все свои C/C++ проекты на гитхабе*
int * const a, * const b;
Такой синтаксис объявления переменных сделать deprecated в C++23.
И removed в C++26.
Оно чем-то оправдано?
Занятие и инструменты не имеют значения.
для идеальности инструменты тоже должны быть идеальными
Язык и ЭВМ позволяют автоматизировать задачи и решать их безошибочно. Этого не может человек.
Человек знает о недостатках языка и ЭВМ, и использует свои знания, чтобы исключить влияние этих недостатков на решение задачи.
Неидеальные части дополняют и корректируют друг друга, образуя идеальную систему.
>->
hue-hue-hue
Во всяком случае, на словах <_<
Наверное, наследством от B, автором которого является тот же Ритчи, и гениальностью нашей любимой парочки K&R.
В B имен типов не было. Переменные объявлялись как
auto a, b, c;
. И даже в современном Си их можно так объявлять >-<И если ты пишешь
auto * const b;
, то Си решит, что это какint * const b;
…радуюсь отчасти из-за того что не пишу на го
Подумать только, как же ограниченны ваши познания <-<
Вот смотри, таблицы для матчинга типов есть?
я даже научился различать их, если кидать только реализующие определённый интерфейс. При этом остаётся возможность определить, что оно не кастуется в мой интерфейс
Но все равно в Rust это так не используется.
И это наша официальная позиция.
Прям как Го — маскота.
Я не могу сказать что названия C/C++ хороши. Они никакие. Это просто буква.
Судить само имя — нет. Я даю оценку имени, как сущности.
Я лошадь могу назвать Рухлядь. Вот просто. Она от этого хуже не станет. Но имя то плохое.
А маскот Го это просто фейл.
->T<-
а если интересно — в расте ошибки действительно являются «enum»ом Result (в кавычках потому что технически это тагнутые юнионы) с двумя вариантами — Ok и Err.
проброс ошибки через несколько уровней производится через синтаксический сахар "?", например
этот сахар работает по-моему так же как следующий код
естественно, так можно сделать если функция, в которой мы работаем тоже возвращает Result с типом ошибки совместимым с ошибкой, возвращаемой функцией (долго объяснять)
что делать если мы не возвращаем ошибку из функции? мы паникуем:
ихсодный код Result::unwrap выглядит примерно так
вот мы и дошли до паникования
согласно документации, panic должен быть использован тогда и только тогда когда «a program reaches an unrecoverable state»
после вызывания паники поток сразу же прерывается, стек разворачивается, если надо — печатается бэктрэйс
но в нормальной работе программы паники происходить не должны никогда
Результат тот же, значит тоже самое!на самом деле уровнем пониже все ифы преобразуются в match но тсссМагия!на каком-то этапе обработки исходного кода все ifы преобразуются в match
я почему-то думал что HIR идет после MIRа
ошибся, извините
У HIR не очень большое разнообразие типов выражений, и If там нет, только Match. А вот в AST (синтаксическом дереве), еще есть If.
ну, как, «простые» макросы написать смогу, но для чего посложнее мне проще написать proc-macro
между вызовами макросов нельзя состояние сохранять
мне в один момент такое надо было, но пришлось обойтись чуть более сложным синтаксисом макроса
мне надо было сгенерить огромное количество структур, и для каждой добавить в централизованый enum один вариант
я хотел изначально для каждого structа делать свой вызов макроса, но в итоге понял что легче будет просто сделать всё за один вызов макроса
Так ты занимался гуи на расте?
гуи — нет, скорее просто созданием окон и рисованием на них линий посредством opengl
и то, только на линухе и совсем чуть-чуть на винде
иногда немного странно осозновать что компилятор раста написан на расте
и либы компилируются компилятором который использует эти либы…
хотя, если подумать, то это логично…
помню только что она на расте написана и всё
был написан давно, так что ни за красивость, ни за работоспособность не отвечаю
Но исключение лучше ифов.
Я смотрю на декларацию функции в плюсах и вижу что она возвращает тип. Кидает она исключения? Какого типа исключения она кидает? Сиди и гадай
Но если ты прям «выбираешь» то надо посмотреть как себя ведёт человек, его код, его психологию (да, я это не упомянул выше, каюсь).
Это очень дорогой рекрутинг, но привести гения к себе в команду — бенефит всем.
Школьник ничего не может ещё, очень редко они действительно независимы от родителей.
Напомню что пары 1-2 раза в неделю)
Короч, все кроме нормального оружия.
[ Автор ] [ Бура ] [ Скачать ]
Наверх ↑
Тут +8 на улице и батареи еле тёплые. Я даже процессор на 5% разогнал, чтобы теплее было :<
теперь го вкусные штаны