Нельзя одновременно возмущаться подобными «беспределами», но в то же время выкладывать такие беспредельные картинки глобусов.
То есть, это получается, автор поста этой картинкой как бы говорит нам — вот тут властям беспредельничать можно, а вот тут нельзя. И тут же удивляется, что беспредельничают там, где нельзя.
Вы или приведите зеленую штриховку в соответствие — или возмущайтесь беспределами властей.
А насколько в питоне исключения быстро работают? В некоторых языках, например жава, не рекомендуется использовать исключения для штатных ситуаций, потому что это работает не очень быстро. В питоне, получается, такого нет.
Потому, что когда выпускают новый uefi, то старый bios перестают производить, и он становится фактически как лампочка с нестандартным цоколем. Какое-то время ее эксплуотировать конечно можно, если уже есть цоколь, который она включена. Но потом меняют и цоколь и лампочку.
Примерно то же самое будет с uefi. Например. Там по спецификации дрова к железу могут идти сразу uefi-ные, вшитые в устройство. И их не надо устанавливать, они «устанавливаются» вместе с втыкнутым устройством, а винда или линукс просто их использует. Пойдут такие устройства, люди с биосом, которые захотят эти устройства использовать, будут вынуждены купить материнку с uefi
Ну любой программист вам скажет, что если «оно работает», это еще не значит, что под капотом все чисто.
С биос груз прошлого тормозит развитие. Решения, которые там применены, себя изжили. Много лет инженеры пытались тянуть лямку обратной совместимости, но со временем груз становится все тяжелее. В какой-то момент это становится слишком дорого.
И плюс наседает маркетинг. Как это ни странно, появление uefi и смерть биос должно увеличить продажи.
Если по решению суда — это значит, что было некоторое время пока дело рассматривалось в суде. За это время компания могла: предупредить пользователей об опасности и сделать бэкапы данных.
Насколько понимаю, ничего из этого сделано не было.
Кроме того, могли бы и мониторить хоть иногда свои домейны, особенно новые, и прекращать их обслуживание в случае чего.
Кстати, для решения задачи перевода из инфиксной нотации в постфиксную есть «алгоритм сортировочной станции» придуманый Дейкстрой. Думаю, построение дерева с рекурсивным спуском — более сложный и потенциально более глючный метод.
Насколько понял, это защитит от ударной волны (вопрос дифракции волн, пока не учитываем), но практически не защитит от шрапнели.
Иными словами, даже если бы мн17 был оборудован такой системой, кабину может быть и не оторвало, но шрапнель все равно не оставила бы шансов.
Если я все хорошо помню, проект СОИ предполагал создание таких плазменных зон на пути полета ракет с ЯО. Резкий перепад условий среды, по мнению разработчиков, должен был вызывать деформацию и разрушение летящей ракеты. Если так — неясно чем разработка боинга отличается от наработок 1983 года. Идея-то одна — создать лазерами неоднородность среды.
Тоже пользовался динднс, пока он работал. Свет клином сошелся на нем потому, что он есть практически во всех роутерах, а во многих роутерах — только он один. Этот факт наверняка существенно увеличил их базу клиентов.
В итоге перешел на freedns. Его нету в роутерах, но свои плюсы сервис имеет. Обновление днс осуществляется http(s) запросом, по крону раз в 5 минут.
Это все происходит потому, что преподаватель при постановке задачи озвучил меньше требований, чем предполагал. На эту тему даже был анекдот про прапрщика и воду с газом или без газа. Конечно, возможен вариант, что некоторые требования подразумевались актуальными по умолчанию, а мы тут просто видим вырваную из контекста беседу.
Надо было сразу сказать: хочу чтобы оно компилилось на всем что можно, и занимало как можно меньше памяти. Возможно даже надо указать конкретные платформы, наборы библиотек, компиляторы и ключи запуска. Или может стоит оставить ключи запуска на усмотрение студента. Потому что необязательно требования такие всегда. Например, на спектруме применял следующий прием: угол два пи это 256 «градусов», и вычисляем синус по табличке. Работало очень быстро, но в памяти надо было держать эту таблицу.
Опять же, если изначально стоит задача написать приложение под конкретную платформу, и там уже есть нужные либы — то зачем повторять их функционал? А если все равно повторяешь их функционал — зачем тогда вообще использовать либы? Могут быть случаи где этому есть разумное обьяснение, а могут быть случаи, где нет.
Прочитал камент про то, что в С нет ссылок.
Всегда компилил g++ и не задумывался про это.
Получается, что да.
Есть у меня еще 1 идея — надо будет ее попробовать. Оптимизирует ли компилятор обращение через указатель на локальную переменную. Я как попробую — отпишу, если будет положительный результат.
Пока тест не провел — соглашусь с вами. Считаем, что так сделать не получится.
Есть, просто его назвали «Передача параметра по ссылке».
При достаточном уровне оптимизации происходит так:
«The compiler ignores any register definitions and allocates registers to variables and temporary values by using an algorithm that makes the most efficient use of registers.»
это из ARM Optimizing C/C++ Compiler v5.0 от ti
Эксперимент повторять лень, но суть в том, что ABI должно выполняться только при внешних вызовах. Вызовы внутри можно оптимизировать, и компилятор это делает, если его попросить.
Когда-то ковырял какой-то компилятор от техас инструментс, который вполне нормально справлялся с такой задачей — передаешь по ссылке две переменные, они ложатся в разные регистры, внутри функции эти регистры меняются определенным образом, а после возврата из функции используются. То есть в полной мере — возврат из функции двух значений через регистры. Так делал он при ненулевом уровне оптимизации. При нулевой он все данные гонял через стек. Правда ковырял его в режиме EABI, а не ABI.
Именно то что вы дали — это же оно и есть. Вы дали ссылку на 19 разных реализаций abi.
«Как вы результат компиляции собиратесь из нескольких модулей собирать, если вы в результате оптимизации испортили конвенцию о вызовах?»
Во-первых, конвенцию о вызовах надо соблюдать только когда зовешь внешние либы. Ну и когда их компилишь. А внутри программы допустима полная анархия. Тот же clang умеет делать link time optimization, например. А в старом паскале, насколько помню, был обратный по сравнению с С порядок параметров, изза чего были проблемы с передачей переменного числа аргументов. При этом вызовы в библиотеки он дергал по тому abi, который нужен этим библиотекам, разумеется. Во-вторых компилятор может добавлять адаптеры в нужное abi. Т.е., у функции получается несколько точек входа. gcc, вероятно так не делает, но я когда-то эксперементировал с каким-то компилятором под arm, и он такое вытворял.
А стек больше не делают не потому что нет ресурсов. Просто больше ненужно. Где-то на хабре писали. что тот же apache преспокойно работает со стеком 32кб. И все равно кэшируется он кусками по сколько-то (64) байт. И все равно при вызове функции адрес возврата пишется в стек — значит он все равно будет закэширован. Но это конечно рассуждение на уровне «мне так кажется». Я не знаю как это корректно померять.
Ясно. Все понятно кроме одного — почему в вызывающую функцию нельзя возвратить два значения в двух регистрах, без использования стека? зачем одну из переменных понадобится класть в стек?
Понимаю так: abi — это интерфейс, а не реализация. Т.е., нет никакого единого стандарта для всех компиляторов и всех платформ. Есть некоторое кол-во подходов, которые зарекомендовали себя, как хорошие, но не более. В каждом компиляторе своя реализация. плюс еще есть оптимизация и прагмы, которыми можно настроить компиляцию. Необязательно, что после глубокой оптимизации аби сохранится. Хотя в нормальном компиляторе будет документирована что он сделает в оптимизациях и что нет.
Насчет измерений. Это ж не я утверждал, что подход экономит быстродействие и память. Я утверждал совсем другое — что экономии нет. Если я и сделаю какие-то измерения — они покажут именно это :)
Корректно измерить быстродействие на сегодняшних cpu не представляется возможным, т.к. время выполнения команд недокументировано. Даже на архитектурах, где заявлено что одна команда выполняется за 1 такт, на практике это бывает не всегда так.
Измерять экономию памяти — скучно. Там и так ясно, что экономии или нет, или мало. Выше высказали предположение, что реальная экономия могла быть на старых cpu до 90ых годов. Этот тезис весьма убедителен.
То есть, это получается, автор поста этой картинкой как бы говорит нам — вот тут властям беспредельничать можно, а вот тут нельзя. И тут же удивляется, что беспредельничают там, где нельзя.
Вы или приведите зеленую штриховку в соответствие — или возмущайтесь беспределами властей.
Примерно то же самое будет с uefi. Например. Там по спецификации дрова к железу могут идти сразу uefi-ные, вшитые в устройство. И их не надо устанавливать, они «устанавливаются» вместе с втыкнутым устройством, а винда или линукс просто их использует. Пойдут такие устройства, люди с биосом, которые захотят эти устройства использовать, будут вынуждены купить материнку с uefi
С биос груз прошлого тормозит развитие. Решения, которые там применены, себя изжили. Много лет инженеры пытались тянуть лямку обратной совместимости, но со временем груз становится все тяжелее. В какой-то момент это становится слишком дорого.
И плюс наседает маркетинг. Как это ни странно, появление uefi и смерть биос должно увеличить продажи.
Насколько понимаю, ничего из этого сделано не было.
Кроме того, могли бы и мониторить хоть иногда свои домейны, особенно новые, и прекращать их обслуживание в случае чего.
А если серьезно, jit внутри не может быть by design, потому что это много чего сломает. Например, это сломает указатели на функции.
Иными словами, даже если бы мн17 был оборудован такой системой, кабину может быть и не оторвало, но шрапнель все равно не оставила бы шансов.
Если я все хорошо помню, проект СОИ предполагал создание таких плазменных зон на пути полета ракет с ЯО. Резкий перепад условий среды, по мнению разработчиков, должен был вызывать деформацию и разрушение летящей ракеты. Если так — неясно чем разработка боинга отличается от наработок 1983 года. Идея-то одна — создать лазерами неоднородность среды.
В итоге перешел на freedns. Его нету в роутерах, но свои плюсы сервис имеет. Обновление днс осуществляется http(s) запросом, по крону раз в 5 минут.
Надо было сразу сказать: хочу чтобы оно компилилось на всем что можно, и занимало как можно меньше памяти. Возможно даже надо указать конкретные платформы, наборы библиотек, компиляторы и ключи запуска. Или может стоит оставить ключи запуска на усмотрение студента. Потому что необязательно требования такие всегда. Например, на спектруме применял следующий прием: угол два пи это 256 «градусов», и вычисляем синус по табличке. Работало очень быстро, но в памяти надо было держать эту таблицу.
Опять же, если изначально стоит задача написать приложение под конкретную платформу, и там уже есть нужные либы — то зачем повторять их функционал? А если все равно повторяешь их функционал — зачем тогда вообще использовать либы? Могут быть случаи где этому есть разумное обьяснение, а могут быть случаи, где нет.
Всегда компилил g++ и не задумывался про это.
Получается, что да.
Есть у меня еще 1 идея — надо будет ее попробовать. Оптимизирует ли компилятор обращение через указатель на локальную переменную. Я как попробую — отпишу, если будет положительный результат.
Пока тест не провел — соглашусь с вами. Считаем, что так сделать не получится.
При достаточном уровне оптимизации происходит так:
«The compiler ignores any register definitions and allocates registers to variables and temporary values by using an algorithm that makes the most efficient use of registers.»
это из ARM Optimizing C/C++ Compiler v5.0 от ti
Эксперимент повторять лень, но суть в том, что ABI должно выполняться только при внешних вызовах. Вызовы внутри можно оптимизировать, и компилятор это делает, если его попросить.
Когда-то ковырял какой-то компилятор от техас инструментс, который вполне нормально справлялся с такой задачей — передаешь по ссылке две переменные, они ложатся в разные регистры, внутри функции эти регистры меняются определенным образом, а после возврата из функции используются. То есть в полной мере — возврат из функции двух значений через регистры. Так делал он при ненулевом уровне оптимизации. При нулевой он все данные гонял через стек. Правда ковырял его в режиме EABI, а не ABI.
«Как вы результат компиляции собиратесь из нескольких модулей собирать, если вы в результате оптимизации испортили конвенцию о вызовах?»
Во-первых, конвенцию о вызовах надо соблюдать только когда зовешь внешние либы. Ну и когда их компилишь. А внутри программы допустима полная анархия. Тот же clang умеет делать link time optimization, например. А в старом паскале, насколько помню, был обратный по сравнению с С порядок параметров, изза чего были проблемы с передачей переменного числа аргументов. При этом вызовы в библиотеки он дергал по тому abi, который нужен этим библиотекам, разумеется. Во-вторых компилятор может добавлять адаптеры в нужное abi. Т.е., у функции получается несколько точек входа. gcc, вероятно так не делает, но я когда-то эксперементировал с каким-то компилятором под arm, и он такое вытворял.
А стек больше не делают не потому что нет ресурсов. Просто больше ненужно. Где-то на хабре писали. что тот же apache преспокойно работает со стеком 32кб. И все равно кэшируется он кусками по сколько-то (64) байт. И все равно при вызове функции адрес возврата пишется в стек — значит он все равно будет закэширован. Но это конечно рассуждение на уровне «мне так кажется». Я не знаю как это корректно померять.
Насчет измерений. Это ж не я утверждал, что подход экономит быстродействие и память. Я утверждал совсем другое — что экономии нет. Если я и сделаю какие-то измерения — они покажут именно это :)
Корректно измерить быстродействие на сегодняшних cpu не представляется возможным, т.к. время выполнения команд недокументировано. Даже на архитектурах, где заявлено что одна команда выполняется за 1 такт, на практике это бывает не всегда так.
Измерять экономию памяти — скучно. Там и так ясно, что экономии или нет, или мало. Выше высказали предположение, что реальная экономия могла быть на старых cpu до 90ых годов. Этот тезис весьма убедителен.