Да уж, ситуация печальная. Стандартом языка расставлено множество граблей, а всем, кто не желает по ним ходить, лепят ярлык некомпетентных, неаккуратных, ленивых и т.д.
Недавно я делал 96-битную арифметику на стандартном Си. Только сложение и вычитание. Сложение получилось быстро, с вычитанием пришлось долго повозиться. Затраты времени на это оказались в десятки раз выше, чем на написание соответствующего кода на ассемблере.
Стандарт C допускает такие платформы, где указатель не может быть без потерь преобразован ни в один целочисленный тип (типы вида uintptr_t являются опциональными и могут отсутствовать). Думаю, автор привёл int для примера и экономии места.
Да уж. Функция «Создать ярлык» (Create Shortcut), которая у конкурирующей платформы Windows доступна ещё со времён Windows 95, в Линуксе по каким-то причинам отсутствует.
Возможно, дело в идеологии. Пользователям предлагается сначала изучить gedit, а лучше — VIM или nano. Потом изучить формат .desktop-файлов, и только тогда появится возможность создавать ярлыки для запуска программ. Любителям задач повышенной трудности предлагается изучить программирование и формат .desktop-файлов, после чего сделать GUI-приложение для создания помянутых ярлыков.
Реклама пытается присосаться к любой интересной людям деятельности. Потому, что с такой деятельностью связано человеческое внимание — то, что требуется рекламщикам.
Но реклама, как болезнь, отравляет всё то, куда ей удалось проникнуть, и приводит организм-носитель к деградации и гибели.
Боюсь, что «принципиального удаления» недостаточно. Хитрые продажники и рекламщики сделали так, что как минимум название продукта или бренда вы запомните. И когда будете ходить по магазину и выбирать, какой стиральный порошок купить — то купите тот, который рекламировался.
Реклама работает. В противном случае её бы не было.
Мне недавно пришлось объяснять школьнику, что такое рекурсия и как её использовать. После нескольких неудачных попыток объяснить с опорой на тот язык программирования, с которым мы работали (C#); после приведения нескольких простых примеров, что тоже не помогло, я от отчаяния ввёл иллюстративный язык программирования.
Этот язык был близок к BASIC, и в нём были команды, аналогичные GOTO, GOSUB, RETURN и IF-THEN, а также понятие стека. Тогда, наконец, зашло.
«Соблюдение законов против отмывания денег» — этот пункт несовместим с принципом децентрализации, заложенным в саму идею криптовалют. Для «соблюдения законов» в системе должны быть привилегированные пользователи, которые могут:
— конфисковать деньги, принадлежащие другим пользователям;
— иметь доступ к информации о личности владельца кошелька;
— подтверждать или отвергать регистрацию новых пользователей и привязки кошельков к личности;
— контролировать эмиссию валюты.
Но для этого больше подходят централизованные системы вроде банков, Paypal, Webmoney, Яндекс-кошельков и т.д. Наверняка в Mastercard это понимают. Просто они хотят перехватить внимание пользователей и под видом криптовалюты продать им «обычные» централизованные электронные деньги, которые управляются из единого центра, и которые могут в любой момент быть конфискованы.
Ну вот и надо применять принцип электродвигателя к человеческому телу. Например: начинаем совершать круговые движения руками. Раз руки совершают вращательное движение — значит, с ними связан момент импульса, а по закону сохранения момента импульса, остальная часть тела будет вращаться в противоположную сторону. Приняв нужное положение, останавливаем вращение.
В Германии за сокрытие подобной информации вам в почтовый ящик может прийти письмо от какой-нибудь частной правозащитной организации со счётом примерно на 400 евро и требованием подписать «обязательство о недопущении повторных правонарушений» (Unterlassungserklärung), за нарушение которого полагается штраф (в пользу указанной правозащитной организации) на 5001 евро. Причём оба требования, в случае неудовлетворения, можно принудительно исполнить через суд (правда, при этом штраф за повторное нарушение будет в пользу государства). За третье нарушение ответственность возрастает ещё в 5 раз. «Обязательство» действует всю оставшуюся жизнь.
Вот эта просадка напряжения на ионисторах портит всю малину. Во-первых, первоначально напряжение конденсаторов выше номинального напряжения стартера. Во-вторых, ближе к концу процесса оно падает ниже номинального. В-третьих, после пуска мотора (удачного или неудачного) на ионисторах остаётся остаточное напряжение и связанная с ним энергия, которые нельзя использовать.
Решение проблемы могло бы состоять в преобразователе, который поначалу понижает выходное напряжение конденсаторов, а потом (когда оно станет ниже номинального напряжения стартера) — повышает. Более полное использование энергии; более благоприятный режим работы стартера.
Хотя, конечно, с токами в сотни ампер, такой преобразователь будет дорогой и сложной игрушкой.
Представьте себе, что вы разработчик. К вам приходит руководитель и говорит: «срочно нужно вставить в программу новую функцию А.Б.В. Времени в обрез. Проект горит, а также горят другие проекты, с которых мы вас снимаем ради этой функции».
Вы приняли задание, реализовали нужную функцию, но из-за спешки — коряво. Работает, но не очень надежно; чувствуется, что код хорошо бы переписать заново, начисто. Но руководитель доволен, его работа программы устраивает. Он принимает работу и, не оставляя вам времени на приведение кода в порядок, поручает вам следующее задание — такое же срочное.
А потом кто-то из клиентов попадает на ошибку в вашей программе. Подаёт на фирму в суд. Фирма подаёт регрессный иск к вам — ведь вы разработчик. И вы несёте ответственность. Хорошие перспективы?
Не подали. А Microsoft подал. Были ранее зарегистрированы патенты на аналогичное изобретение? Нет, не были. Значит, это инновация. В патентном праве кто первый встал — того и тапки.
Мобилка уже постоянно ведёт аудиозапись. Значит, всё, что вы сказали, сохраняется в базе. Всё, что написали, чем в интернете интересовались, с кем, о чём и как общались — тоже.
Бывают такие команды процессора, которые состоят из нескольких шагов, и между шагами тоже может вклиниться прерывание. Например, это команды блочной пересылки и поиска.
Во всех случаях программист должен хорошо знать систему команд процессора, на котором работает. Но если он её знает — то ему не составит труда увидеть, что некоторой команды, которая стоит в программе, в системе команд процессора нет, и учесть последствия.
Код, правильность исполнения которого зависит от количества стоящих в нём машинных команд, даже при программировании на чистом ассемблере встречается довольно редко. А критичные участки, такие, как переключение контекста задач, примитивы синхронизации и т.д. всё равно вылизываются вручную с очень пристальным вниманием, и там обычно не применяются незнакомые макросы.
Когда программировал на ассемблере Z80, я часто с помощью макросов создавал для себя дополнительные, часто встречающийся, «команды процессора». Никаких проблем не было.
в начале вычисляем y([0, 5]) = ([0, 5])^2 + 1 = [0, 25] + 1 = [1, 26], затем вычислим y([5, 10]) = [5, 10]^2 + 1 = [25, 100] + 1 = [26, 101]. Как мы видим в первой половине значения варьируются от 1 до 26, а во второй от 26 до 101.
Это работает только для монотонных функций. Вычисление же значений произвольной функции на концах отрезка не даёт вам информации о том, в каких пределах она на этом отрезке меняется.
Вот пример функции, на которой ваш метод не работает: y=4*x^3 — 3*x, нужно найти максимум на участке [-0.9, 0.9].
Следуя вашему методу, делим отрезок пополам, получаем два сегмента: [-0.9, 0] и [0, 0.9]. Вычисляем значения функции на концах. f(-0.9)=-0.21, f(0)=0, f(0.9)=0.21, отсюда делаем ошибочный вывод о том, что функция меняется в пределах [-0.21, 0] на первом отрезке и в пределах [0, 0.21] — на втором. Ваш метод будет искать максимум на правом сегменте [0, 0.9].
Но на самом деле максимум находится на левом сегменте, а выводы относительно пределов изменения функции — ошибочны. Можете построить график и убедиться в этом.
Почему же странную? Вполне себе типичную, часто применяемую в таких случаях. И качественную. Например, спектр полного периода такой последовательности в точности равен 1 на всех частотах.
Если вычислять заранее: где взять столько памяти, чтобы её хранить? Да и зачем? Вычислять быстрее, чем хранить. Период повторения 32-битного LFSR = 2^32-1 — то есть, за вычетом единицы, а это 4 гигабита, т.е. 500 мегабайт.
Недавно я делал 96-битную арифметику на стандартном Си. Только сложение и вычитание. Сложение получилось быстро, с вычитанием пришлось долго повозиться. Затраты времени на это оказались в десятки раз выше, чем на написание соответствующего кода на ассемблере.
Возможно, дело в идеологии. Пользователям предлагается сначала изучить gedit, а лучше — VIM или nano. Потом изучить формат .desktop-файлов, и только тогда появится возможность создавать ярлыки для запуска программ. Любителям задач повышенной трудности предлагается изучить программирование и формат .desktop-файлов, после чего сделать GUI-приложение для создания помянутых ярлыков.
Реклама пытается присосаться к любой интересной людям деятельности. Потому, что с такой деятельностью связано человеческое внимание — то, что требуется рекламщикам.
Но реклама, как болезнь, отравляет всё то, куда ей удалось проникнуть, и приводит организм-носитель к деградации и гибели.
Реклама работает. В противном случае её бы не было.
Этот язык был близок к BASIC, и в нём были команды, аналогичные GOTO, GOSUB, RETURN и IF-THEN, а также понятие стека. Тогда, наконец, зашло.
— конфисковать деньги, принадлежащие другим пользователям;
— иметь доступ к информации о личности владельца кошелька;
— подтверждать или отвергать регистрацию новых пользователей и привязки кошельков к личности;
— контролировать эмиссию валюты.
Но для этого больше подходят централизованные системы вроде банков, Paypal, Webmoney, Яндекс-кошельков и т.д. Наверняка в Mastercard это понимают. Просто они хотят перехватить внимание пользователей и под видом криптовалюты продать им «обычные» централизованные электронные деньги, которые управляются из единого центра, и которые могут в любой момент быть конфискованы.
Решение проблемы могло бы состоять в преобразователе, который поначалу понижает выходное напряжение конденсаторов, а потом (когда оно станет ниже номинального напряжения стартера) — повышает. Более полное использование энергии; более благоприятный режим работы стартера.
Хотя, конечно, с токами в сотни ампер, такой преобразователь будет дорогой и сложной игрушкой.
Вы приняли задание, реализовали нужную функцию, но из-за спешки — коряво. Работает, но не очень надежно; чувствуется, что код хорошо бы переписать заново, начисто. Но руководитель доволен, его работа программы устраивает. Он принимает работу и, не оставляя вам времени на приведение кода в порядок, поручает вам следующее задание — такое же срочное.
А потом кто-то из клиентов попадает на ошибку в вашей программе. Подаёт на фирму в суд. Фирма подаёт регрессный иск к вам — ведь вы разработчик. И вы несёте ответственность. Хорошие перспективы?
Не подали. А Microsoft подал. Были ранее зарегистрированы патенты на аналогичное изобретение? Нет, не были. Значит, это инновация. В патентном праве кто первый встал — того и тапки.
Во всех случаях программист должен хорошо знать систему команд процессора, на котором работает. Но если он её знает — то ему не составит труда увидеть, что некоторой команды, которая стоит в программе, в системе команд процессора нет, и учесть последствия.
Код, правильность исполнения которого зависит от количества стоящих в нём машинных команд, даже при программировании на чистом ассемблере встречается довольно редко. А критичные участки, такие, как переключение контекста задач, примитивы синхронизации и т.д. всё равно вылизываются вручную с очень пристальным вниманием, и там обычно не применяются незнакомые макросы.
Когда программировал на ассемблере Z80, я часто с помощью макросов создавал для себя дополнительные, часто встречающийся, «команды процессора». Никаких проблем не было.
Это работает только для монотонных функций. Вычисление же значений произвольной функции на концах отрезка не даёт вам информации о том, в каких пределах она на этом отрезке меняется.
Вот пример функции, на которой ваш метод не работает: y=4*x^3 — 3*x, нужно найти максимум на участке [-0.9, 0.9].
Следуя вашему методу, делим отрезок пополам, получаем два сегмента: [-0.9, 0] и [0, 0.9]. Вычисляем значения функции на концах. f(-0.9)=-0.21, f(0)=0, f(0.9)=0.21, отсюда делаем ошибочный вывод о том, что функция меняется в пределах [-0.21, 0] на первом отрезке и в пределах [0, 0.21] — на втором. Ваш метод будет искать максимум на правом сегменте [0, 0.9].
Но на самом деле максимум находится на левом сегменте, а выводы относительно пределов изменения функции — ошибочны. Можете построить график и убедиться в этом.
Если вычислять заранее: где взять столько памяти, чтобы её хранить? Да и зачем? Вычислять быстрее, чем хранить. Период повторения 32-битного LFSR = 2^32-1 — то есть, за вычетом единицы, а это 4 гигабита, т.е. 500 мегабайт.