Откопал так откопал, молодца. Для справедливости — это не совсем Sigma-Aldrich, а Merck, который производит кучу всякой специализированной экзотики за бешенные деньги — в данном случае это 60 евро за 0.25 г лакмуса. У Ашота, торгующего анашой на районе, объемы рынка будут побольшей, чем у всей мировой «индустрии» лакмуса.
Для обучения азам программироваия 8 бит лучше: дешёвое оборудование, простой процессор, простое устройство экранной памяти, простое устройство всего. В 90-х, когда уже были современные ассемблеры и STS, программировать 8 бит было очень легко
Ты выступаешь с позиции «проще найти железо и софт на техасской помойке». Объективно же 16-32 битные архитектуры с фиксированной длинной команды, предельно простой адресацией памяти, без аппаратных умножителей и делителей (максимум какой-нибудь множитель Бута) имеют примерно такое же число транзисторов (ARM2, 27k), как куцые 8-битные с их 16-битной памятью (8086/8088, 29k).
Да, многие годы весь мир жрал то, что выкинет на мусорник США. А выкидывал на мусорник он 8-битные процессоры. Мир еще много лет жрал 8 бит — тот же «Специалист», схема которого опубликована в моделист-конструкторе, а потом игровые приставки Dendi, и еще гора подобных устройств на каком-нибудь Z80. Фреймбуфер для графики 640х480, внезапно, требует 300 кб памяти, что не влазит в 16 бит адреса. А, между тем, в совке ближе к концу его жизни уже выпускались https://ru.wikipedia.org/wiki/К565РУ7, из которых можно без особых проблем набрать мегабайт оперативки (не считая той проблемы, что половину микросхем для компьютеров в совке простой смертный не мог достать в принципе).
Так что говорить про «современные» я бы не стал, и особенно не стал бы говорить про «очень легко» в сочетании с «ассемблеры».
старые Бейсики с номерами строк и GOTO повсюду приводят к труднообратимой деградации навыков программиста
Чем это отличается от ассемблера, например? С другой стороны сейчас при всех ООП и т.п. люди тем не менее умудряются писать лютый говнокод. Может дело всё-таки не в языке?
Нет, это способствует привыканию к ущербным практикам. Лучше использовать компилируемый процедурный язык, такой как Паскаль/Модула/Оберон или Си. Для обучения работе CPU можно смотреть на дизассемблер и использовать inline ассемблер
А почему бы не окамль? Я считаю, что машина Тьюринга — это одна большая раковая опухоль, доставшаяся в наследство от 4-8-биток с их 4 кБ оперативной памяти, и которой было места в разработке софта уже в нулевых годах.
А из чего же сейчас делают «лакмусовую бумагу»? Я недавно купил на али три набора (бывает нужно иногда pH определять). Цветовая гамма на пачке нарисована такая же, как была у классического лакмуса.
Если оно выглядит как лакмус и меняет цвет как лакмус, то что это, если не лакмус?
goto боятся только вообще ударенные «утята»! Потому что если ты хоть раз писал на асме или же хотя бы читал асм, полученный из сишного кода, то видел, сколько там условных и безусловных переходов! Ну и, спрашивается, зачем тогда выдумывать всякий гемор для выхода из вложенных циклов или в других подобных ситуациях, если можно просто объявить метку и делать goto туда? А иногда даже «дальние переходы» используются (правда, в наше время они уже не актуальны).
Во-во. Долбаные спрайты приводили к тому, что народу приходилось дико извращаться, чтобы элементы графики в играх были одного цвета! Но все равно периодически проявлялись косяки (когда, скажем, взрывается ракета рядом с деревом, и кусок взрыва получается зеленым).
Фигасе... Я-то поступал в «провинции», поэтому мне тупо нужно было на собеседовании зачет получить (деканат на все шел, лишь бы набрать хотя бы 60-70 физиков; правда, за следующие три семестра нас стало вдвое меньше: совсем тупые быстро отсеялись).
goto боятся только вообще ударенные «утята»! Потому что если ты хоть раз писал на асме или же хотя бы читал асм, полученный из сишного кода, то видел, сколько там условных и безусловных переходов!
Так зачем нужен Си? И тем более кресты. Давай писать всё на асме. Циклы «for» нужны для школьников, мы же можем сделать всё эффективнее без них, на простых и понятных goto.
Потому что если ты хоть раз писал на асме или же хотя бы читал асм, полученный из сишного кода, то видел, сколько там условных и безусловных переходов!
Потому что в ассемблере по другому нельзя. И ассемблер обычно генерируется автоматически, на нём редко когда надо писать.
Ну и, спрашивается, зачем тогда выдумывать всякий гемор для выхода из вложенных циклов или в других подобных ситуациях
Оправдания писателей говнокода. Если возникает необходимость выходить из вложенных циклов, то с кодом явно что-то не так. Как минимум можно эти циклы вынести в отдельную функцию и сделать return.
На той картинке такого вещества нет. Я — частично дальтоник, поэтому ХЗ, как там какие цвета называются, но примерный переход: 1 - красный, 3 - оранжевый, 6 - грязно-желтый, 8 - грязно-зеленый, 10 - синий, 14 - грязно-фиолетовый.
Во-первых, намного больше писанины, чем на С. Во-вторых, язык не портабельный совершенно: для каждой архитектуры свой асм. С является кроссплатформенным ассемблером, поэтому я пишу на нем.
А на микроконтроллерах вообще часто приходится так выкручиваться, что программист для ПК охренеет…
Лакмусовая бумажка используется как индикатор, конечно, никто в школе не уточняет её химический состав. Не считаю это каким-то отставанием, так забавная история. Салат оливье изначально рябчики с раками и еще 50 всего, он и у Оливье один раз настоящий получился, да отставание от Франции, но зато в тазике.
Внезапно, то же устройство Даффа на современных процессорах работает медленнее, чем простой цикл, скомпилированный с оптимизацией. А если выкинуть вопрос производительности, то можно что угодно выполнять на виртуальной машине.
А теперь представь ситуацию: ты навыделял malloc'ами кучу памяти, а далее по ходу функции у тебя что-то происходит: выделяется новая память, вычисления и т.п.
И вдруг - бац, на каком-то этапе ошибка. И что делать? Единственный вменяемый способ — это объявить в конце функции метку, где будут ряды FREE(x), FREE(y) и т.д, а потом уже return ret (макрос FREE разворачивается в do{if(x){free(x); x = NULL;}while(0)).
Оправдания писателей говнокода. Если возникает необходимость выходить из вложенных циклов, то с кодом явно что-то не так. Как минимум можно эти циклы вынести в отдельную функцию и сделать return
К сожалению, это не «не нужно», а тупо оплошность создателей ЯП, тиражируемая из языка в язык. Return позволяет выходить из нескольких вложенностей, а break почему-то не хочет этого позволять. Ну спасибо хоть оставили return и break, а то Вирт хотел и их из языков поубирать.
Не было такого! Никто не мог себе такой роскоши позволить, чтобы исходники на перфокарты писать!
А многие для экономии времени (чтобы не использовать слабую машину с компилятором, куда тоже очередь была) самостоятельно переводили программу в машкоды и вручную перфорировали карточки. Был такой специальный ручной дырокол для них. У меня на работе до сих пор живы и продуктивно работают те, кто 40 лет назад вот таким ручным творчеством занимался.
К сожалению, это не «не нужно», а тупо оплошность создателей ЯП
А как надо?
Ну спасибо хоть оставили return и break, а то Вирт хотел и их из языков поубирать.
Я тоже по началу думал как Вирт, но потом пришёл к выводу, что ранние выходы + RAII позволяют писать более читабельные и надёжные программы, без них программа превращается в лестницу из вложенных IF’ов.
самостоятельно переводили программу в машкоды и вручную перфорировали карточки
Ну мы таки обсуждаем здесь ЯВУ. Исходники набивались на перфокарты. Одна срока - одна перфокарта. Именно отсюда растут ноги у 80 символов на строку - это ширина перфокарты.
Это вы про ваш говнокод с метками и FREE? Понимаю, писать на C++ религия не позволяет, приходится страдать. С RAII код получается проще, короче, понятнее и более стоек к ошибкам и исключениям.
Зато есть прикол в виде setjump/longjump, позволяющий в С реализовать хрень вроде крестовых throw/catch. Правда, логика «дальних прыжков» такая невменяемая, что в реальных исходниках я это не встречал…
При чем здесь религия? С++ — говно. Читаемость никакая, отладка вообще через одно место. Нет уж, спасибки, не надо мне этих ваших ублюдств! Тем более, как показала практика, одно и то же я на С и человек на С++ делаем с одной скоростью. Вот только свои сишные исходники я и через 10 лет смогу прочитать, подправить и скомпилить. А товарищ мой вряд ли сможет со своими исходниками что-то сделать, т.к. через 10 лет будет уже другой стандарт и трындец!
В общем, нет языка лучше С! И вряд ли когда появится.
С RAII код получается
Ничего не получается: тебе все равно нужно FREE вызывать в конце функции для удаления ненужных маллоков. Так что, чушь ты несешь.
Во-первых, намного больше писанины, чем на С. Во-вторых, язык не портабельный совершенно: для каждой архитектуры свой асм. С является кроссплатформенным ассемблером, поэтому я пишу на нем
Железо все равно разное доступные ресурсы разные — одна и та же сишная функция спокойно отработает на одном, но не заработает на другом без модификаций.
А на микроконтроллерах вообще часто приходится так выкручиваться, что программист для ПК охренеет
Я тебя огорчу, но далеко не всем нужно лепить устройства на контроллерах за 3 цента с 1 кБ оперативки. А если у тебя бюджет уже 1$+, то можно позволить себе десятки кБ памяти, и даже 32-битные процессоры.