170 похожих чатов

Читаю тут статью о синтаксисе раста и там пишут: "Программа,

написанная на Rust, не имеет информации о типах во время выполнения, так как при компиляции происходит "стирание типов". "

то есть как так?? типа как в тайпскрипте? типы только во время компиляции? наверное в чат раста лучше...

32 ответов

41 просмотр

Бред

Pavel-Shakhov (pongo) Автор вопроса

может там про какую-нибудь рефлексию идет речь?

Не знаю🤷‍♂

Типизация- это представление данных в удобном для человека виде Чтобы он использовал правильные операции над данными Для скомпилированной программы тип данных не имеет смысла

Имеет смысл как раз больше для скомпилированной программы) Без типизации можно спокойно обойтись, что и делают А при указании типов, ты даёшь команду сколько ячеек в оперативной памяти бронировать, там выигрыш по памяти огромный

Когда ты соберёшь программу- будет инфа сколько выделить памяти и тд Ну и от компилятора зависит ещё

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

Компилятор знает, под что бронирует, так как знает, под какую разрядность компилирует бинарник лол

Ясно, пусть будет так)

Оно так и есть лол

лол, хорошо, лол, главное на собеседовании этого не говори, лол, у меня нет желания что-то доказывать рандомному чуваку из инета, лол 😉

Чел, выебывайся в дворе своем, пожалуйста

Ой бля, начинается... 🤦‍♀ Завязывай, обиделся что-ли?))

!ро выясняет отношения и стебет без причин

комплятор не может прогнать все возможные варианты

О таргетах слышал?

нет

Вы что тут развели? Компилятор в глаза не видели и ещё о таргетах не слышали. Выделение ОЗУ одно из не многих, что есть программирование

Думаю, он совсем о другом писал В зависимости от условий тебе в рантайме надо будет принять решение о том, что именно создаётся, экземпляр а, или экземпляр б, которые занимают разное место. И вот поэтому в рантайме типы и важны

Для этого используются библиотеки обычно которые информацию о типе собирают в бинарник сам

Ты конкретно о расте? В плюсах, например, тип в рантайме сохраняется, есть таблица функций, связанная с конкретным классом, на которую ссылаются экземпляры, и dynamic_cast работает опять же в рантайме

все равно ничего не мешает тебе создать какой-нибудь void поинтер и кастануть потом во что нибудь другое

Я на плюсах не писал, помню только си

И что? Это что показывает/доказывает? Кастануть приведением типов в стиле си ты можешь (хотя смысл не ясен, зачем иметь указатель на void), а вот dynamic_cast`ом - нет

И да, этот ответ четкий и без херни, которую чел выше писал

Оно разве не должно жрать производительность, кстати?

Да, считается, что это дорогая операция (относительно, конечно)

да типизация присутствует в том или ином виде во всех языках с которыми приходилось сталкиваться, даже пыха и джаваскрипт🧐

Стат типизацию можно добавить поверх языка, например через аннотации + стат анализатор, прикрученный к CI. В php например появился psalm, имеет почти все фичи TS.

Указатель это просто переменная, которая может указывать на любой участок памяти. Сам по себе указатель никак не связан в рантайме с типом, не несёт информацию о нём Возможность кастовать указатели без проверки типов (указание нужного типа в скобках) в плюсы пришла по наследию из си и вообще то использование такого приведения типов крайне не рекомендуется, и вряд ли пройдёт код ревью. Правда есть reinterpret_cast, который делает то же самое, но и его использование код ревью вряд ли пройдёт, конечно же если оно не оправдано и используется вместо других преобразований (dynamic/static cast). Необходимость reinterpret_cast это редкие кейсы, и я лет за пять написания кода на плюсах ни разу с такими не сталкивался А для преобразования типов в рантайме в плюсах используется dynamic_cast, который как раз проверяет возможность каста и кидает исключение при попытках приведения несвязанных родством типов (или возвращает nullptr, если преобразование идёт от предка к потомку) Вообще можно допустить ситуацию, что указатель на экземпляр типа А будучи жёстоко приведенным к не связанному с ним типу Б (через преобразование в си стиле, или через reinterpret_cast) позволит корректно обращаться к полям/методам объекта: если таблицы методов для объектов этих классов будут совпадать (на самом деле хз, будет ли так даже если объявления классов будут идентичны с точностью до символа). Но это будет просто читом В общем, информация о типах в рантайме в плюсах сохраняется А вот что там в расте - хз, но интересно, как они решили проблемы, если у них действительно в рантайме нет инфы

Речь идёт о структурах как в C. Там тоже происходит стирание типов. Выразились криво просто. Не суди ребят строго

В комментариях выяснили этот вопрос, автор как-то подозрительно умолк, видимо всё-таки фигню сморозил

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта