All streams
Search
Write a publication
Pull to refresh
108
3.8
Send message

И вот этого я уже не понимаю. Есть код, который написал разработчик. Задача компилятора - сгенерировать эквивалентный ему машинный код! Это же даже не цикл, где можно вынести инвариант за тело, и сэкономить много машинных тактов. И не assert который можно выключить в продакшн-версии... Если компилятору даются такие широкие права по интерпретации намерений программиста (зачем?!) - надо вводить в язык новое ключевое слово, которое заставляет компилятор сгенерировать код следующего оператора (или блока) "как тут написано": verbatim if(p&1)...)

Вот я не понимаю логику этого решения. Сказать - unaligned access является implementation defined - понимаю. Дальше разработчик компилятора для конкретной платформы должен будет выбрать и задокументировать поведение в такой ситуации, и дальше консистентно его придерживаться. Это никак не ограничивает язык на конкретной платформе, ибо мы не диктуем единственно-правильное поведение (которое действительно на каком-то железе может быть очень дорого, или даже невозможно! реализовать). Например, разработчик компилятора может написать что для int * всегда генерируются машинные команды aligned access. Если там будет невыравненное значение - произойдет прерывание. Или он может добавить платформ-зависимые средства (ключ компиляции, дополнительный атрибут или intrinsic) чтобы сгенерировать медленный но всегда валидный код для unalgned access. Суть в том - что находясь на конкретной платформе - вы можете прочитать как это тут будет работать! И оно так будет работать всегда, а если изменится - то опять же об этом будет написано в документации.

А UB - это очень сильное утверждение: так никогда не может быть. И поэтому код с UB эквивалентен любому другому куску кода (в том числе пустому)... И дальше начинаются странные оптимизации, когда от изменения одного символа в исходном коде - у вас из объектного файла пропадает половина программы... Опять-таки, это больше бочка в сторону C++, а C был всегда более консервативен - и компилировал то, что программист написал, а не "абстрактную программу которая эквивалентна написанному программистом, но только лучше" (c). Плюс - что происходит с кодом UB - нигде не документируется, и компилятор может (формально - оставаясь той же версии) сегодня компилировать так, а завтра - этак...

И я не понимаю - с какой целью это сделано ? Тяжелое наследие гонок компиляторов за наносекундами в бенчмарках ?

Вопрос - а почему это именно Undefined, а не Implementation Defined Behavior ?! В существующей трактовке (правда, этим славятся C++ компиляторы - в C это не так явно выражено) - UB это снятие любых тормозов компилятора, и возможность приписать коду с UB любые свойства, удобные для дальнейшей оптимизации. Опять же, C++ предпочитает в силу тяжелой судьбы оптимизировать код методом удаления - поэтому код с UB обычно приводит к исчезновению целых кусков того, что вы написали в исходнике...

ИМХО тут в чистом виде Implementation Defined, а не UB. Конструкция легальная, код должен быть сгенерирован - а уж сработает он или нет - читайте руководство к своему компилятору и процессору...

С момента когда у вас появилась обязанность сдавать отчеты в электронном виде - точно нет!

Давайте так. Журнально ордерная система во времена СССР могла вестись вообще без средств автоматизации (если к таковым не отнести счеты). Была еще мемориально-ордерная - та в каком-то смысле еще проще.

В РФ первое серьезное усложнение системы было с введением НК РФ - когда появились независимые от бухгалтерского учета налоговые регистры. Это примерно удвоило объем работы. Кроме того, появился НДС со своими специфичными документами и отчетами.

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

В целом - это классический пример как увеличение автоматизации не приводит к увеличению производительности труда. Если бы принципы учета остались как в СССР - то один бухалтер с 1С вел бы 100500 предприятий. Но чем больше стало возможностей автоматизации - тем больше государство решило их использовать... В результате, количество бухгалтеров по сравнению с СССР - как бы еще и не увеличилось. И у каждого - персональный компьютер!

С продовольствием уже к концу 80-х творилась дичь! Я помню как мы из Омской области в Кемеровскую летом к родственникам везли рюкзаки мяса. Потому что в Омской области благодаря политике Манякина мясо было по 3.50 - а в Кемеровской области - его просто не было! От слова "совсем"!

Зато обратно мы везли из наборов "ко дню Металлурга" нашу же омскую сгущенку (в Омске ее не было категорически) и шоколадные конфеты. Естественно не чтобы есть, а на праздники. Оттуда же присылали к новому году чудо-чудное: майонез. Позже в 90-е годы я офигел что с майонезом можно есть все. Для нас это была исключительно праздничная еда...

Ну и года этак с 1985-1987 - начинаются очереди за хлебом и молоком/сметаной. Распорядок дня: подъем, домашка, час-полтора постоять в очереди за продуктами, а там уже и школа во вторую смену... Если не надо идти в магазин - значит надо в этот день идти в музыкальную школу - и еще непонятно что лучше...

Честно - не знаю. Для меня компьютер тогда был частичкой волшебства. Даже с 32К памяти на i8080, без цветов, и с псевдографикой (кажется 64x128 точек).

А с другой стороны, конечно - когда у тебя голая машина, то даже примитивная игра на бейсике - два символа гоняются друг за другом на экране - была чудом. А когда я запрограммировал (на ассемблере) аналог игрового автомата "Скачки" - к нам домой не зарастала народная тропа одноклассников... Потом кому-то купили спектрум, и мой ЧБ компьютер перестал котироваться. Ходили уже к нему. :-)

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

А так, да - мы учили программирование чтобы играть, и создавая игры учились программировать. Аналогичная история была в школе - у нас за несколько лет до прихода IBM - поставили Бесту-88 (на Motorola 68030) с RS-232 терминалами СМ-7238 и Unix Sys V. Полный комплект средств разработки - но никакой документации или игр. И несколько выпусков школьников до прихода IBM PC - были выдающимися в части программирования. А потом сошло на нет... При тех же учителях, и (пожалуй!) лучшем материальном обеспечении.

В те времена в СССР была настолько просто устроена бухгалтерия - что компьютер был, в общем-то, не нужен! У меня одна из бабушек была директором машинно-счетной станции. Там были СМ и были ЕС-машины. Но большинство экономических расчетов в интересах предприятий делали по-старинке на табуляторах.

Ну да - руководства были демотиватором. Но те кто сумели выжить и разобраться в ассемблере и подпрограммах монитора отечественных изделий - были чудовищно мотивированными подростками... Большинство детей сейчас - поставь их в эти условия - развернутся и навсегда забудут об таком глупом занятии: "программировать"...

О! Моя первая домашняя ЭВМ! :-) Правда модулей расширения мы не паяли, и вживую я их не видел...

Из неудобного в AVR пожалуй только что FLASH, EEPROM и RAM - это три разные памяти с разным способом доступа... Размещение констант во FLASH и использование отдельных функций avr-libc чтобы их достать - местами доставляет...

В "Спектруме" меня сильно удивило что во встроенном бейсике нельзя было набирать ключевые слова по буквам. Надо было обязательно нажимать на кнопку где это слово было целиком - и оно целиком же вставлялось. Там еще была довольно забавная клавиатура с разными цветами и разными командами на одну кнопку. Не знаю, зачем так было сделано - на Радио86РК и клонах бейсик был вполне стандартный.

Снимаю шляпу! У меня был "Партнер-01.01" - там было 64 кб памяти. У нас дома в какой-то момент состоялся консилиум, где три радиоинженера сравнивали между собой схемы "Кристы", "Микроши" и нашего "Партнера" - пытаясь понять как именно получить доступ ко вторым 32 кб. Опытным путем выяснили что из бейсика вторые 32К точно недоступны. Сейчас-то я умом понимаю что на вторую страницу памяти отображалась или ОЗУ, или адресное пространство слотов расширения - и надо было что-то в какой-то порт закинуть для переключения. Но тогда - загадка осталась неразгаданной. :-) А вы, значит, 256к со страничной организацией туда воткнули!...

Эмуляторы лежат в открытом доступе! Развлекайтесь сколько угодно! Я до сих пор немного помню опкоды i8080, благо они были простые (76 - hlt, 00 - nop, 21 - загрузить пару регистров HL, и т.д.). :-) А вообще - КР580 был довольно гадостной в применении вещью - одних только напряжений питания три штуки (и по-моему, подаваться должны в определенной последовательности)!

Если вы хотите вайб тогдашних 8-разрядных систем, то микроконтроллер AVR вам в руки! Скорость примерно та же, но плюс встроенная периферия и гораздо более дружественная среда разработки. Я даже не имею в виду Arduino-IDE, вполне годится avr-gcc + Makefile... В общем, у меня при работе с AVR-8 ощущения вполне как от домашних ПК в 80-е годы! :-)

Начнем с того, что СССР - банально опоздал сесть на поезд. Основная масса ПК 80-х - это клоны Радио-86РК на КР580ВМ80А (цельнотянутый i8080). Причем, каждый завод делал немного по-своему, в результате чего все эти Кристы, Микроши, Партнеры, и несть им числа - были не полностью совместимы между собой (хотя строились в общем-то на одном и том же наборе микросхем и архитектуре) - чем фрагментировали пользовательскую базу еще больше!

Плюс отсутствие периферии. На компьютере дома можно было а) считать или б) играть. Если вам надо было считать - скорее всего вы работали на оборонном предприятии, и у вас был свой ВЦ с цельнотянутым SYS/360 (а-ля ЕС1045 и ее товарищи) - и вы это делали на фортране. Фортрана для i8080 я не помню. Да и без математического сопроцессора на бейсике на i8080 много не насчитаешь... А чтобы делать игры в счет государственного плана - такая глупость ни одному члену политбюро 80-х в голову не могла прийди...

Так что - партия и правительство банально не понимали, зачем советскому человеку "компьютер в каждый дом" ? Производственные стойки с ЧПУ на микропроцессорах довольно бодро появились еще в 70-х. Зачем там нужен микропроцессор - партия вполне понимала...

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

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

Соответственно, волну Z80 и Спектрумов мы в СССР проспали. И тем более проспали x86. Если аналог PC XT радиопромышленность еще сумела сделать - то AT/286 уже делать было некому и негде. Отставание по аппаратным средствам стало непреодолимым.

Качество литературы и документации на советские ПК - это отдельная песня. Советская техническая литература вообще любила стиль повествования: "Кому надо - тот поймет, а кто не понял - тому и не надо!". Если вы не занимались до этого профессионально программированием или проектированием микропроцессорных систем - то что приходило с компьютером - было совершенно бесполезно. А популярная литература в основном ограничивалась блок-схемами и примерами на бейсике. Что-то было в журналах. Что-то можно было добыть из переводной литературы... Спасало до какой-то степени хорошее базовое математическое образование в школах и ВУЗах. Иначе объяснить - откуда на обломках пост-СССР образовалась сильная школа программирования - никак невозможно...

Я очень подозрительно отношусь к решениям из серии "нам нужны бесконечно мудрые и справедливые марсиане". Как правило, это не работает. Чиновник в патентном ведомстве чисто физически не может проверить суть патента, особенно если там будет написано не "скругленный уголок", а "поверхность заданная множеством характеристических точек являющихся решениями уравнения (и далее по тексту)". Может быть в 18 веке - он и мог, а сейчас ИМХО не может. Нужна система которая будет как бы сама собой согласовывать эгоистические действия всех участвующих.

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

А-а, нет. Я эту историю знаю как: "...накинуть одну копейку на цену хлеба - вот и будут деньги на строительство постоянной базы на луне"... История как раз из 1960-х...

А то бизнес сейчас налогов не платит ?

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

Вы давайте какие-то конкретные возражения приводите! Мне категорически не нравится ситуация когда государство за деньги налогоплательщиков энфорсит монополию владельцев патентов. Чтобы оно стало как вы предлагаете - полностью частным делом - это надо вообще отменить патентное право. А если у нас государственное регулирование - то тогда я хочу его в таком виде, чтобы оно поощряло максимально широкое применение изобретений, а не просто их регистрацию.

Но техническую-то экспертизу перед выдачей патента мы сохраним! Плюс наверное авторы будут как-то продвигать свои патенты чтобы производители их использовали... В целом - я бы посмотрел как эта система будет работать. И если будут явные недостатки - то их бы уже и лечил.

Ну тогда да - нет предела совершенству. У меня и алюминий потоньше, и в плату на STM32 я просто марлин-2 залил...

А в бюджете 100к - я бы уже о небольшом фрезере задумался. Кило этак на 60-80. :-) Ничто так не расширяет возможности 3д-принтера, как рядом стоящий фрезер и токарничек. :-)

Information

Rating
1,113-th
Registered
Activity