OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 13:32

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: Воскресенье, 19 Март, 2023 03:44 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
просматривая давеча некоторые свои сишные исходники, заметил интересное.

1. код насквозь больной premature optimisation. получается так почти рефлекторно, а если этого не делать — то ощущается дискомфорт: у нас же (с придыханием) системный язык! надо «оптимизировать» сразу!

2. циклы забиты break'ами, потому что п.1. а чего, если метка явно не объявлена — то неструктурный переход не считается!

3. и забавное: очень часто после циклов стоят assert-ы, которые проверяют постусловие. некоторое время я считал это признаком хорошего и надёжного кода. простите, если вы пили чай/кофе и только что поперхнулись.

и про стадность явней: когда я пишу на обероне (компонентном паскале, но неважно), давление пункта 1 про «настоящие программисты сразу оптимизируют» почти исчезает. вместе с ним исчезает множество (но, каюсь, далеко не все) assert-ов из пункта 3 — в силу ненадобности.

печальное: полностью излечиться никак не удаётся, и эмуляторы break через булы всё равно подло пробираются в код.

мечтательное: подавляющее большинство современных программистов (включая меня) надо запирать в отдельные камеры, и выдавать им еду исключительно за правильно написаные циклы.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Март, 2023 02:05 

Зарегистрирован: Пятница, 13 Март, 2015 16:40
Сообщения: 597
arisu писал(а):
и выдавать им еду исключительно за правильно написаные циклы.

Похоронные ж конторы озолотятся... (-;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Март, 2023 02:21 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
Artyemov писал(а):
arisu писал(а):
и выдавать им еду исключительно за правильно написаные циклы.

Похоронные ж конторы озолотятся... (-;
ну вот, даже двойная польза: и похоронным конторам хорошо, и на выходе получим людей, которые на уровне вбитых рефлексов уже не могут писать неправильные циклы. а правильные циклы — это огромная часть хорошего кода.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 13 Июль, 2023 14:05 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
arisu писал(а):
просматривая давеча некоторые свои сишные исходники, заметил интересное.

1. код насквозь больной premature optimisation. получается так почти рефлекторно, а если этого не делать — то ощущается дискомфорт: у нас же (с придыханием) системный язык! надо «оптимизировать» сразу!

2. циклы забиты break'ами, потому что п.1. а чего, если метка явно не объявлена — то неструктурный переход не считается!

3. и забавное: очень часто после циклов стоят assert-ы, которые проверяют постусловие. некоторое время я считал это признаком хорошего и надёжного кода. простите, если вы пили чай/кофе и только что поперхнулись.

и про стадность явней: когда я пишу на обероне (компонентном паскале, но неважно), давление пункта 1 про «настоящие программисты сразу оптимизируют» почти исчезает. вместе с ним исчезает множество (но, каюсь, далеко не все) assert-ов из пункта 3 — в силу ненадобности.

печальное: полностью излечиться никак не удаётся, и эмуляторы break через булы всё равно подло пробираются в код.

мечтательное: подавляющее большинство современных программистов (включая меня) надо запирать в отдельные камеры, и выдавать им еду исключительно за правильно написаные циклы.

Break - плохо. Логические переменные уже гораздо лучше.
Насчет assert, в них нет ничего плохого. Они, как неустаревающие комментарии, должны проверять код, что ничего не поломалось.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 13 Июль, 2023 17:11 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
assert'ы после циклов обозначают нечёткую формулировку инварианта. при хорошем коде цикл не может завершиться так, чтобы последующий assert провалился.

проще говоря, сам цикл и является сторожем-проверкой. если он эту роль не выполняет, или выполняет неочевидно — в коде что-то очень плохо, и надо чинить цикл, а не подпирать его сторожами.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 18 Июль, 2023 01:48 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
Утверждения вставляют не для того, чтобы они проваливались точно так же, как страховку приобретают не для того, чтобы катастрофа произошла.
Конечно, не нужно ставить их для каждого цикла, но не ставить, потому что код «должен» быть написан правильно и нечего это проверять - это ещё более плохая идея.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 18 Июль, 2023 09:30 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
я, однако, веду речь конкретно про циклы. и ассерт после цикла — это тупо копипаста сторожей. соответственно, он или никогда не сработает, или сломается вместе с циклом (или останется с неправильными сторожами после правок). то есть, с правильными циклами такой ассерт проверят и гарантирует ровно ничего.

в некоторых случаях, впрочем, его имеет смысл писать, если цикл сложный (хотя это уже code smell) — просто в качестве упрощённой документации по ожидаемым результатам.

я же фигачил такие ассерты по правилу: «чем больше сдадим — тем лучше!» а это и читать мешает, и показывает злоупотребление всякими break, которые нарушают читаемость.

как-то вот так.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB