LINUX.ORG.RU

Ответ на: комментарий от byko3y

одна и та же сишная функция спокойно отработает на одном, но не заработает на другом без модификаций

Это какая функция? Если не вылезать за пределы glibc, все нормально на любой архитектуре работает. Понятно, что кое-какие вещи приходится с ассемблерными вставками делать, но так и ядро тоже не на 100% на сях писано!

даже 32-битные процессоры

Я уже давно забросил восьмибитки, пишу преимущественно под STM32. И все равно там очень много вещей, которые на ПК делаются совершенно иначе. Скажем, отсутствие MMU приводит к необходимости выкручиваться без malloc'а…

И да, там все равно очень скудно с ресурсами. Вот вчера сидел, думал, что бы мне еще такого к сборищу игрулек (описание - у меня в ЖЖ и в моей теме «паяю») добавить. Продумал алгоритм «арканоида» (ровно страница А4 на него ушла). Сейчас уже 20кБ занято шрифтами и т.п. — для «змейки» и «тетриса». И это с несчастным светодиодным дисплеем 64×32 пикселя! Для арканоида нужно будет под каждый уровень выделять массив в 320 байт для описания уровня + оперативы еще около килобайта (итого свободной остается 15кБ памяти).

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от Eddy_Em

Ничего не получается: тебе все равно нужно FREE вызывать в конце функции для удаления ненужных маллоков.

Нет. При использовании RAII free/delete становятся вообще не нужны, всё удаляется автоматом.

X512 ★★★★★
()
Ответ на: комментарий от X512

Я слышал о библиотеке, которая позволяет собирать мусор. Но она сама достаточно жирная и неповоротливая, поэтому мало кто ее использует.

Так что, смело могу сказать 4.2 на твои вопли! Невозможно «удалить все автоматом»: если уж ты где-то сделал malloc, тебе обязательно нужно будет сделать free! Всякое уродство вроде С++ я априори не рассматриваю.

Я уж молчу о читабельности кода: если ты в одном месте сделал alloc, но нигде нет free, то уже подсознание негодует: где-то явная утечка памяти!

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от Eddy_Em

Скажем, отсутствие MMU приводит к необходимости выкручиваться без malloc’а…

malloc прекрасно работает без MMU.

X512 ★★★★★
()
Ответ на: комментарий от Eddy_Em

обосрешься

как настоящий гений, сначала сдай хотя бы на 80.

впрочем еге к заннию языка ортогонален.

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

n_play
()
Ответ на: комментарий от ilovewindows

Лакмусовая бумажка используется как индикатор, конечно, никто в школе не уточняет её химический состав

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

Салат оливье изначально рябчики с раками и еще 50 всего, он и у Оливье один раз настоящий получился, да отставание от Франции, но зато в тазике

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

byko3y ★★★★
()
Ответ на: комментарий от X512

Не работает он прекрасно, т.к. тебе придется вручную контролировать выделение памяти. И это — просто жесть! Особенно если нужно большими кусками (по килобайту-два) выделять.

Нафиг не нужно. Частично из-за этого огораживания я против ртосей и никогда их не использую на простых МК.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Единственный вменяемый способ — это объявить в конце функции метку, где будут ряды FREE(x), FREE(y) и т.д, а потом уже return ret (макрос FREE разворачивается в do{if(x){free(x); x = NULL;}while(0))

Девяностые годы уже прошли, их не вернешь. В языках есть RAII, тот же attribute cleanup в gcc/clang, есть другие языки с RAII, вроде крестов или defer golang.

byko3y ★★★★
()
Ответ на: обосрешься от n_play

У меня было 5/4 за выпускное сочинение. Было бы и 5/5, но в этом случае нужно было «денежку куда надо занести» ☺

Да, уже почти 23 года прошло с моего выпуска, я стал намного меньше читать русскоязычной худлитературы (да и вообще худлитературы, тупо статьи и даташиты с мануалами), но таки «тотальный диктант» на пятерку пишу.

впрочем еге к заннию языка ортогонален

Вот здесь — да, поддерживаю. ЕГЭ вообще никак не отражает знания человека.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Я слышал о библиотеке, которая позволяет собирать мусор.

Нет тут никакого сборщика мусора, компилятор автоматически расставляет вызовы free/delete. После компиляции код получается такой же, как если бы free/delete писали руками. Никаких накладных расходов и рантаймов.

Невозможно «удалить все автоматом»: если уж ты где-то сделал malloc, тебе обязательно нужно будет сделать free!

Вызовы free компилятор C++ может вставлять автоматом.

Всякое уродство вроде С++ я априори не рассматриваю.

Продолжайте страдать.

Я уж молчу о читабельности кода: если ты в одном месте сделал alloc, но нигде нет free, то уже подсознание негодует: где-то явная утечка памяти!

Надо мыслить в понятиях владения, а не вызовов malloc/free, тогда и утечек не будет. Заодно будет более чистая и понятная архитектура.

X512 ★★★★★
()
Ответ на: комментарий от Eddy_Em

т.к. тебе придется вручную контролировать выделение памяти. И это — просто жесть! Особенно если нужно большими кусками (по килобайту-два) выделять.

Оправдания неосилятора. УМВР. Код malloc можно взять хоть из книг K&R, ОС не нужна.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от X512

К сожалению, это не «не нужно», а тупо оплошность создателей ЯП

А как надо?

А надо с выходами на произвольное число уровней — так называемая «иерархия Косарайю»:

https://en.wikipedia.org/wiki/Structured_program_theorem#Implications_and_ref...

В противположность Бёму-Якопини, у которых выходов не было в принципе, и которые создали такую же чисто теоретическую и практически бесполезную модель, как машина Тьюринга, на которой никто вообще не пишет, но на которую все ссылаются. Почти все апелляции по поводу «верните нам goto» были именно на тему выходов из блоков итераций. Выходы сделали — теперь никто не смеет раскрыть рот на тему «верните goto», потому что ниш у него почти не осталось.

byko3y ★★★★
()
Ответ на: комментарий от X512

А мне эти загоны нафиг не нужны. Если я захочу вдруг операционку, я просто возьму orange pi за 1000 рублей и поставлю туда линукс (могу хоть генту в qemu'вском чруте скомпилять, все равно меньше затрат будет), а на дешевом простом МК реализую то, что не умеет «апельсинка». Дешево и сердито. И без извращений с malloc'ами на микроконтроллере!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от no-such-file

Ну спасибо хоть оставили return и break, а то Вирт хотел и их из языков поубирать

С чего ты взял?

Их не было в раннем паскале.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Выходы сделали — теперь никто не смеет раскрыть рот на тему «верните goto»

Это в каком языке? В С, к счастью, никто goto не выбрасывал. Я уже говорил, что без goto вообще мало что дельного можно на С написать. Да и на С++ аналогично, наверное, если писать так, чтобы код мог читать человек, а не только компьютер!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от byko3y

А надо с выходами на произвольное число уровней — так называемая «иерархия Косарайю»:

Это всё реализуется через лямбды с return.

X512 ★★★★★
()
Ответ на: комментарий от Eddy_Em

Интересно, зачем китаезы на али назвали это lakmus paper?

Хороший качество лакмусовый показатель бумажный.

byko3y ★★★★
()
Ответ на: комментарий от X512

Это всё реализуется через лямбды с return

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

byko3y ★★★★
()
Ответ на: комментарий от Eddy_Em

вообще это бичь все современных экзаменов.

тесты - когда хотят охватить все области знаниий.

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

У меня было 5/4 за выпускное сочинение.

теперь от этого сочинения зависит максимум треть всей оценки (если не путаю).

так что снова мимо.

n_play
()
Ответ на: комментарий от byko3y

Их не было в раннем паскале.

В Обероне break/continue тоже нет, только RETURN и EXIT. EXIT – это аналог break и его можно использовать только внутри цикла LOOP END (аналог на Си for (;;) {}).

X512 ★★★★★
()
Ответ на: комментарий от mv

Очень простое. Даже во времена VESA добраться до нормального режима занимало времени и сил. И не везде работало.

MOV AX, 13H
INT 10H

не везде работало? Ну, да, на CGA и EGA не работало. А ведь 13Н - это первый нормальный режим на видеокартах. И на VGA и SVGA он работал везде.

А что же простого было в устройстве экранной памяти восьмибиток? Вот чтобы очень просто по заданным координатам Х и Y вывести точку заданного цвета?

tiinn ★★★★★
()
Ответ на: комментарий от question4

Где ты такое нашёл? Я вижу только 500 g за 7431.14 RUR. Нормальная цена за химреактивы

500 g раствора 0.5 г/л. То есть, 0.5 литров раствора содержат 0.25 г вещества.

byko3y ★★★★
()
Ответ на: комментарий от n_play

теперь от этого сочинения зависит максимум треть всей оценки

Вторая четверка у меня была по «этике и психологии семейной жизни». Я с директрисой что-то (уж не помню, что) не поделил. В итоге она вечно на меня «вызверивалась» (а она и вела этот нафиг не нужный предмет)…

Я и впоследствии грызся с преподавателями психологии и философии, называя их предметы «ненужным трëпом».

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Я и впоследствии грызся с преподавателями психологии и философии, называя их предметы «ненужным трëпом»

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

byko3y ★★★★
()
Ответ на: комментарий от Eddy_Em

судя по тому насколько криво и топорно написаны коменты к твоему говнокоду (будто промтом с китайского переведены) - с языками у тебя не очень.

n_play
()
Ответ на: комментарий от X512

Для начала это вызовы BIOS, а не видеокарты.

Да. А режимы на видеокарте переключаются с помощью вызовов BIOS, как вариант. 13H - номер видеорежима при вызове BIOS 10Н. Не вот уж прямо я наврал.

tiinn ★★★★★
()
Ответ на: комментарий от byko3y

500 g раствора 0.5 г/л. То есть, 0.5 литров раствора содержат 0.25 г вещества.

0,25 г лакмуса, 0,25 г сульфита натрия и 50 г обработанного по сложной технологии порошка сливок. Скорее цена определяется последним.

А индикатора много и не нужно добавлять. Лишь бы цвет был различим.

question4 ★★★★★
()
Ответ на: комментарий от Eddy_Em

setjump/longjump придумали для параллельных задач во времена одного процессора, а throw/catch это от безысходности, типа уупс, дерьмо случается, ловите

ilovewindows ★★★★★
()
Последнее исправление: ilovewindows (всего исправлений: 1)
Ответ на: комментарий от Eddy_Em

Исходники можно набивать на карты клавишным автономным перфоратором. И клонировать колоды, такие машины были с конца XIX века. Складывать колоды в коробку для перфокарт и приносить задание в ВЦ.

Но это не для Бейсика. Бейсик изначально нацелен на онлайн, чтобы неспециалисты могли пользоваться ЭВМ для несложных расчётов, как позднее электронные таблицы. Конечно, позже появились чисто пакетные реализации Бейсика, но зачем они нужны, если уже есть ФОРТРАН?!

t20
()
Ответ на: комментарий от X512

RAII. Починил.

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

praseodim ★★★★★
()
Ответ на: комментарий от praseodim

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

В исходниках компилятора Оберона прекрасно обходится. Посмотрите книгу Вирта Построение Компиляторов.

X512 ★★★★★
()
Ответ на: комментарий от Eddy_Em

С++ — говно. Читаемость никакая, отладка вообще через одно место. Нет уж, спасибки, не надо мне этих ваших ублюдств! Тем более, как показала практика, одно и то же я на С и человек на С++ делаем с одной скоростью

Ты совершенно забыл про более адекватную сему феномену теорию: С++ — говно, и Си — тоже говно. Это раз. Два: программа на Си, в среднем по палате, содержит намного больше уязвимостей и UB, чем средняя программа на C++. Именно потому, что крестовый кодер будет вынужден потратить кучу времени на то, чтобы доказать компилятору, что хочет сделать именно то, что хочет сделать, а сишный компилятор сделает тебе что угодно — ты потом сам будешь сидеть и разбираться, что же на самом деле происходит.

Ничего не получается: тебе все равно нужно FREE вызывать в конце функции для удаления ненужных маллоков. Так что, чушь ты несешь

https://habr.com/en/post/503536/ — Атрибут cleanup

byko3y ★★★★
()
Ответ на: комментарий от X512

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

praseodim ★★★★★
()
Ответ на: комментарий от byko3y

С++ — говно, и Си — тоже говно.

Ну, с таким подходом вообще придется на фортране писать…

программа на Си, в среднем по палате, содержит намного больше уязвимостей и UB, чем средняя программа на C++

Зависит исключительно от писаря.

Но лично мне С нравится тем, что позволяет не только выстрелить себе в ногу из дробовика, но и развернуть гранатомет задом наперед и снести себе башню! И это — здорово!!! Не люблю, когда меня ограничивают в свободе выбора.

Атрибут cleanup

Мало того, что отстой, так еще и несовместимо с С99.

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от praseodim

обходится какими-нибудь искусственными приемами, вплоть до процедур (функций) с exit или как-то красиво алгоритмически?

Там используется рекурсивный спуск и отдельный лексер. Код основан на структурном подходе т.е. ранние RETURN не применяются.

Есть набор паттернов структурного программирования, например линейный поиск:

First;
WHILE ~EndOfStream() & ~Found() DO Next END;
IF ~EndOfStream() THEN Found ELSE NotFound END;
X512 ★★★★★
()
Ответ на: комментарий от X512

битность процессоров и компьютеров – это не более чем маркетинговый приём.

согласен, да а ну за^W^Hись разводить на маленькой платке 64 провода шины данных, 8 намного проще.

XoFfiCEr ★★☆☆
()
Последнее исправление: XoFfiCEr (всего исправлений: 1)
Ответ на: комментарий от X512

Есть набор паттернов структурного программирования, например линейный поиск:

А если искать надо сразу несколько лексем, выставлять флаги при нахождении, а при некоторых лексемах прерывать поиск?

praseodim ★★★★★
()
Ответ на: комментарий от Eddy_Em

одна и та же сишная функция спокойно отработает на одном, но не заработает на другом без модификаций

Это какая функция? Если не вылезать за пределы glibc, все нормально на любой архитектуре работает

Давай разберемся: ты ядро линукса с glibc запускаешь на контроллере с 4 кБ памяти? Нет? Так почему ты их упоминаешь? Программа для линукса не запустится на таком контроллере, и программа с контроллера не запустится на линуксе — вот тебе и вся кроссплатформенность. K&R изначально делали Си для генерации кода для одного и того же кроссплатформенного ассемблера, работавшего на машинах с подобными доступными ресурсами и оборудованием вообще, ассемблером, который умел в структуры данных (сишные struct и массивы), и даже в лисповые макросы! Единственный затык в нем был — это различные размеры машинного слова, вроде 7 или 9 бит, что и пытались обойти K&R своим препроцессором для ассемблера, разные версии которого назывались «BCPL», «B», «C». Причем, этот зоопарк с целочисленными типами индустрия расхлебывала еще лет 25, пока не появился C99 с типами данных фиксированного размера (int16_t, int_least32_t, etc).

STM32. И все равно там очень много вещей, которые на ПК делаются совершенно иначе. Скажем, отсутствие MMU приводит к необходимости выкручиваться без malloc'а

Отсутствие MMU никак не запрещает malloc.

Сейчас уже 20кБ занято шрифтами и т.п. — для «змейки» и «тетриса». И это с несчастным светодиодным дисплеем 64×32 пикселя! Для арканоида нужно будет под каждый уровень выделять массив в 320 байт для описания уровня + оперативы еще около килобайта (итого свободной остается 15кБ памяти)

https://github.com/lz4/lz4 - 2 кБ кода, нулевое использование памяти при декомпрессии. Ты, я так понимаю, не знаком с людьми, которые упаковывают 3D шутаны в win32-бинарник 64 кБ. Естественно, DirectX и системные либы туда не упакованы, но сами игровые ресурсы целиком содержатся в 64 кБ.

byko3y ★★★★
()
Ответ на: комментарий от praseodim

А если искать надо сразу несколько лексем, выставлять флаги при нахождении, а при некоторых лексемах прерывать поиск?

Есть подозрение, что вы что-то делаете не так. Для начала надо написать грамматику синтаксиса, который собираетесь парсить и всё станет яснее.

В данном случае похоже, что надо искать только лексему окончания, а флаги ставить внутри цикла.

PROCEDURE Syntax (VAR flags: SET);
BEGIN
	WHILE (S.tok # S.nilTok) & (S.tok # S.semicolonTok) DO
		CASE S.tok OF
		| S.aTok: S.Get; INCL(flags, 0);
		| S.bTok: S.Get; INCL(flags, 1);
		| S.cTok: S.Get; INCL(flags, 2);
		ELSE S.Get END;
	END;
	IF S.tok # S.semicolonTok THEN H.Error('";" expected') ELSE S.Get END;
END Syntax;

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 3)
Ответ на: комментарий от Eddy_Em

С++ — говно.

На чём будешь писать вместо С в 23 году?

Ты вообще в курсе что в твоём С делается?

А я тебе расскажу:

  1. В комитете С сделали «C and C++ Compatibility Study Group» которые будут тянуть фичи из С++ в С. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2689.pdf

  2. Например хотят добавить auto и лямбды в С. Почитай: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2695.pdf

  3. Уже добавили и проголосовали за атрибуты из C++.

  4. Хотят добавить nullptr. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2692.pdf

  5. true, false, bool сделать типами в С а не макросами.

  6. Хотят перенести deprecate volatile из С++.

  7. Хотят добавить RAII.

И много чего ещё.

Чему я очень рад, то что С будет нормальным языком в котором можно писать на стандарте, а не использовать gcc расширения.

Но фанаты С вообще не следят за развитием языка :(

fsb4000 ★★★★★
()
Ответ на: комментарий от question4

0,25 г лакмуса, 0,25 г сульфита натрия и 50 г обработанного по сложной технологии порошка сливок. Скорее цена определяется последним

«skim milk powder» — это обезжиренное сухое молоко.

byko3y ★★★★
()
Ответ на: комментарий от fsb4000

В комитете С сделали «C and C++ Compatibility Study Group» которые будут тянуть фичи из С++ в С.

Зачем? Не проще закопать Си окончательно?

Но фанаты С вообще не следят за развитием языка :(

Зачем? Он для них и так идеальный. После таких изменений могут сказать что это уже не Си, а другой язык также как это было с C++.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от ilovewindows

Метки нужны были бы в том случае если бы был к примеру RAM-диск с файловой системой тогда можно было бы и редактор кода иметь, но всего этого не было в 1982 году.

XoFfiCEr ★★☆☆
()
Последнее исправление: XoFfiCEr (всего исправлений: 2)
Ответ на: комментарий от ilovewindows

throw/catch это от безысходности, типа уупс, дерьмо случается, ловите

Справедливости ради: исключения были в лиспе уже в конце 60-х годов. Но да, там другой язык был.

byko3y ★★★★
()
Ответ на: комментарий от t20

4-8-биток ещё не было в середине 1960-х. Минимум – 12-разрядные мини-ЭВМ

Ты что-то перепутал — в 60-х не было ни паскаля, ни Си, ни модулы, ни оберона.

byko3y ★★★★
()
Ответ на: комментарий от XoFfiCEr

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

ilovewindows ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.