Re[45]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: vdimas Россия  
Дата: 11.08.21 06:53
Оценка:
Здравствуйте, Sinclair, Вы писали:

V>>Т.е. объясняю одному недостаточно зрелому коллеге, почему он здесь ошибается:

V>>

V>>то ей будет ничуть не сложнее вычитать эти же символы из модулей

S>Ну так это так и есть. Вы зачем-то предположили, что структура модулей будет совпадать со структурой .LIB, а не со структурой .h.

Сам себе противоречишь. ))
Экономию времени и памяти будет давать только совпадение со структурой LIB.


S>Бесполезное бла-бла-бла — это "если бы в С++ были модули, то в начале 2000х ему для работы не хватало бы памяти".


В реальной жизни для компиляции на линухах порой имеющихся двух стандартных метров на борту не хватало.
С модулями вообще не взлетело бы.


S>Совершенно верно. ЕМНИП, поправили это ближе к концу 2000х, но я уже не застал — к моменту, когда VC научился более-менее прилично работать с pch, я с С++ уже ушёл. Я свой последний проект на плюсах доделывал аккурат под прямой эфир из NYC, 9/11.


9/11 — это 2001-й, а не конец 2000х.
Который тогда был VC — он вышел в 1998-м, следующие плюсы вышли уже не отдельным продуктом, а в составе студии 2002, т.е. речь может быть о компиляторе из 98-го.

Следующий от 2002-го жутко глючил в течении года, что народ (в т.ч. и я) подключал туда VC от предыдущего VC, а уже в Студии 2003 компилятору полегчало.

Плюс случилось главное — стало можно писать кроссплатформенный код не только на Си, но и на С++, т.к. компиляторы покрыли официальным стандартом С++03 и теперь они стали воспринимать плюсы плюс-минус одинаково.

До этого писать на плюсах кроссплатформенный код было мукой, бо каждый компилятор имел своё видение, т.е. приходилось обыгрывать не только разночтение даже в POSIX-подмножестве АПИ осей (тогда в ходу было много плохосовместимых *никсов, не только Linux), но и разночтения компиляторов.
Уверен, тут полно коллег, которым в конце 90-х и почти все нулевые приходилось, как и мне, писать в т.ч. под спарки/солярис.


S>В лучшем случае требуется меньше памяти


Да не меньше никак.
Потому что вообще всё, что видно из h-файла, должно быть видно из модуля.

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


S>В худшем — столько же, т.к. "расположение в модулях" занимает плюс-минус столько же места, сколько информация о расположении в .h файлах. Ну, то есть меньше — т.к. нам не нужно вплоть до строчки и колонки.


Инфы на каждый символ будет чуть больше, теперь еще признаки модуля, видимости из модуля и т.д.


V>>Неразрешимой проблему никто не называл (очередной тебе минус за враньё), я пояснял, почему технология не обязательно вызовет экономию ресурсов и ускорение процессов.

S>Ещё раз: если у вас технология модулей не вызывает экономию ресурсов и ускорение процессов, то что-то очень сильно не так с проектированием и реализацией технологии модулей.

Это потому что ты вырос на паскалевских TPU.
Но где Паскаль и где С++?

Ключевое там "не обязательно вызовет экономию ресурсов".
Для современных template-only библиотек скорее всего не вызовет или экономия будет незначительной (единицы процентов прибавки к скорости компиляции в сравнении с прошлыми ср-вами, типа stdafx.h).


V>>Чаще будет ровно наоборот, бо зачитка текстового кода происходит не сильно медленней и текстовый код может быть порой компактней бинарного описания, а скорость компиляции сейчас часто зависит от скорости чтения с диска, т.е. от размеров исходников.

S>В среднем бинарное описание значительно компактнее текстового.

Когда компилишь либы с опцией link-time code generation, то бинарники таких библиотек резко больше исходников получаются.
А это примерно оно и есть.

Еще навскидку — с 7-мибитным кодированием целых типов обычно не заморачиваются, бо это тоже некоторые тормоза при кодировании/раскодировании.
А при фиксированной их ширине, как оно есть в большинстве бинарных форматов файлов, — никакой экономии.
Где в тексте 1-2 символа, там в бинарнике честные 4.

Где в тексте операция использует окружающий контекст, сопровождающирй операцию различными признаками, там в бинарнике к каждой операции привязывают уже вычисленные аттрибуты/признаки.

Где в исходнике при вызове шаблонного метода используется автовыводимый тип аргумента, который явно нигде не упоминается, там в бинарнике многоэтажное декорированное имя типа выражения присутствует явно. А в теле шаблонов это имя будет еще и параметризировано.


S>Если у вас не так — вам нельзя писать компилятор, найдите кого-то, кто умеет.


Это ты сейчас с кем разговаривал?


S>Вы, похоже, путаете бинарное описание с бинарным кодом.


Я сейчас нон-стоп зеваю, если по-чеснаку.

Плохо, Синклер.
Очень плохо.
Принципы трасляции С++ кода весьма просты, я бы даже сказал — примитивнейшие.
Как там можно умудряться плавать?

И даже если ты эти принципы не знал, за 10 мин более-менее грамотный разработчик насосёт из пальца свои, точно такие же.
Но у тебя всё мимо каждый божий раз...

В общем, я еще не уверен, но скорее всего отваливаюсь, бо это беспросветно...
Отредактировано 12.08.2021 0:44 vdimas . Предыдущая версия . Еще …
Отредактировано 11.08.2021 6:58 vdimas . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.