Pull to refresh
19
0.2
Сергей @rukhi7

software developer, радиоинженер

Send message

Серьёзно?

Если бы у этого кода был смысл вы бы смогли его изложить. Дело в том что на бессмысленном примере можно доказать что угодно об этом еще древние греки знали.

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

я вам по секрету скажу что вы это сейчас рассказываете тому кто занимался, как раз, там, как раз, достижением Топовой Производительности со всеми MMX-ами, SSE-векторизациями, DirectX-ами, и фиг знает еще с чем. Ваш

лишний indirection в рантайме

это просто какой то ну 5-й класс средней школы по сравнению с какой-то академией если производить сравнение со всеми теми технодогиями который там используются для достижения Топовой Производительности.

и последствия её неинлайнинга?

еще: если у вас функция на три строчки вызывается 1000 000 раз надо подумать о структуре кода-алгоритма, а не шаблоны городить которые пытаются лечить неэффективно построенный алгоритм.

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

Что именно работает? Лишнее время на вызов виртуальной функции и последствия её неинлайнинга?

Лишнее время по сравнению с чем?

Если вы посмотрите в ассемблер то вы не обнаружите сколько нибудь заметной разницы между вызовом виртуальной функции и обычной статической функции. Или вы считаете что дополнительное копирование из памяти в регистр занимает много времени?

и последствия её неинлайнинга

это какое то новое слово в технике программирования, хотелось бы посмотреть пример функции которую вот прям нужно заинлайнить, опять же. Может и new тогда нужно заинлайнить?

Как без шаблонов в одном случае владеть объектом «линейное преобразование входных данных», а в другом — «квадратичное»?

владение объектом с интерфейсом преобразование входных данных нет? не подходит? Почему?

Если бы вы посмотрели как строится плеер видеофайлов (или даже транскодер) вы бы обнаружили что никаких шаблонов там не используется - только интерфейсы при этом нет никаких проблем с производительностью при работе через виртуальные функции, вы же HD кино на компе смотрите? Представляете какой там трафик генерируется-обрабатывается?

Более того если бы видео плеер был построен с использованием шаблонов пришлось бы каждый раз все перекомпилировать при добавлении нового формата данных, нового кодека.

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

я вам с удовольствием поверю если вы продемонстрируете какой-то пример в котором это работает так как вы говорите.

Традиционность DSL можно посмотреть по оценке

под DSL вы имеете ввиду domain-specific language ?

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

Но сложные шаблоны в итоге всем надоели

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

Я сам пытался найти смысл применения шаблонов, шаблонов со спецификациями еще в самом начале 2000-х и пришел к выводу что разные формы наследования и владения объектов работают гораздо эффективней шаблонов практически в любой задаче. Вы не найдете шаблонов в WPF например, в OpenGL, что еще привести для примера? Шаблоны хороши только для библиотек функций по коллекциям например.

А можете привести пример адекватной реализации какого-то алгоритма на основе сложных шаблонов? Адекватного в том смысле что его нельзя проще и эффективнее с точки зрения производительности скомпилированного кода переписать без сложных шаблонов?

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

Давайте остановимся на общем выводе что краш-тесты тоже имеют право на жизнь :) .

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

В этом принципиальна разница.

А как же Forth?

не знаю такого, забыл наверно. У него есть бесплатная среда разработки, компилятор?

за 25 лет я что-то не видел ни одной вакансии на Ассемблер. Хотя как раз 25 лет назад меня взяли на работу в очень известную фирму именно потому что я был единственный кто знал Ассемблер, как потом выяснилось, но даже в описании той вакансии Ассемблер не упоминался.

красиво выглядеть в глазах аудиториии

как-то так сложилось что это не моя специализация :)

Автомат должен быть спроектирован и реализован так, чтобы его состояния сменялись мгновенно/синхронно/атомарно. В таких условиях Ваш вопрос будет лишен смысла.

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

Это интересный аргумент!

Видимо, правду здесь пишете только вы.

В авиации бы так думали. Зачем нужна система предупреждения о столкновении с землёй? Хороший пилот и так всегда смотрит, куда летит. Только мешает время экономить.

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

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

декомпозиция, ревью-переделай

или просто параметризованные ответы на вопросы сформированные автоматически выдает.

А если вы могли нанять такого человека, но не наняли? Сколько вы денег потеряли продолжая ваше:

декомпозиция, ответ на вопросы, ревью-переделай

в ручном режиме?

Вы когда-нибудь задумывались, что "под капотом" у регулярных выражений? А там - конечный автомат (либо автомат с магазинной памятью).

мне не надо задумываться, я код вижу.

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

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

Зачем вообще программировать на C++, если достаточно дать высокоуровневое описание алгоритма — и инструмент сделает вам код, в два раза обгоняющий код на C++?

тут есть один простой вопрос: на чем написан инструмент, который сделает вам код, в два раза обгоняющий код на C++, хотя бы частично?

Я боюсь что тут вариантов никогда не будет: С++, С, Ассемблер.

Они бессмертны, пока есть процессоры система команд которых это и есть ассемблер.

Ну, у меня для этих сеньоров плохие новости.

и не только у вас :). Как говорит мой сын: жизнь такова, и больше не какова :)))

Information

Rating
2,273-rd
Date of birth
Registered
Activity

Specialization

Embedded Software Engineer, Software Architect
Lead