Форум программистов, компьютерный форум, киберфорум
Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.66/65: Рейтинг темы: голосов - 65, средняя оценка - 4.66
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4

Тест быстроты сгенерированного кода

10.05.2021, 18:45. Показов 15189. Ответов 100

Студворк — интернет-сервис помощи студентам
Синтетический тест быстроты сгенерированного кода разных компиляторов на основе алгоритма быстрой сортировки.

## Требования

1. Алгоритм быстрой сортировки (сортировка Хоара с разбиением по Хоару).
2. Сортировка по возрастанию: от маленького значения к большему.
3. Посторонние библиотеки для сортировки не использовать.
4. Сортировка в одном потоке.

### Измерения

1. Измеряется время сортировки массива.
2. Десять циклов измерений времени, выводится среднее.

### Данные

1. Длина массива 50000000 (пятьдесят миллионов).
2. Тип данных массива: структура из двух полей типа Double: {LowPart, HighPart}.
3. На каждом цикле массив заполняется случайными значениями в интервале `[0, 1)`.
4. Генератор случайных чисел инициализируется заново перед каждым заполнением массива.
5. Количество рекурсивных вызовов функции сотировки должно быть одинаковым на одном и том же наборе данных.
6. Затравка для генератора случайных чисел равна нулю.
7. Функция сравнения переменных a и b (возможна оптимизация):

```
(a.HighPart < b.HighPart) Or ((a.HighPart = b.HighPart) And (a.LowPart < b.LowPart))
```

### Вывод

1. Время выполнения сортировки по каждому циклу.
2. Количество рекурсивных вызовов сортировки (должно быть одинаковым).
3. Среднее время.


Для компиляции этой программы необходим gcc (для "-gen gcc" на x86) и mingw (для утилиты mingw32-make). Необходимые пути к компилятору и утилитам указаны в пакетных файлах.

В результате:

FreeBASIC с задником GCC 5.2.0: среднее время 12080 миллисекунд.
FreeBASIC с задником GCC 8.1.0: среднее время 12445 миллисекунд.
FreeBASIC с задником GCC 10.2.0: среднее время 10993 миллисекунд.

Забавно, что звучащая фоном музыка может замедлять задачу на 1000 миллисекунд.

Приглашаю вступить в игру пропагандистам других диалектов бесика.
Миниатюры
Тест быстроты сгенерированного кода  
Вложения
Тип файла: zip QuickSort.zip (71.0 Кб, 48 просмотров)
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.05.2021, 18:45
Ответы с готовыми решениями:

Ошибки сгенерированного кода
Всем здрасти! Решил сделать свой первый шаг в интерфейсо-строении и столкнулся со следующей проблемой: Создаю новый пустой проект...

Выполнение кода, сгенерированного Roslyn
Здравствуйте. Пишу проект, в котором использую рослин для кодогенерации и столкнулся с проблемой, когда нужно использовать сгенерированный...

Чтение сгенерированного кода в Visual Studio
такая проблема. в одной теме здесь нашел, как преобразовать файл Word в код C# по статье сделал все, но не понимаю, как вывести...

100
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,024
Записей в блоге: 7
23.05.2021, 23:34
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Quiet Snow Посмотреть сообщение
А андроид 5-й там отваливался каждые несколько секунд
У вас нет устройств на андроиде (телефонов, ТВ приставок и др.)? Не знаете как работает андроид на устройствах?

Цитата Сообщение от Quiet Snow Посмотреть сообщение
виртуалка медленнее
Причем здесь виртуалка? На устройствах андроид работает не на виртуалке. На них все плавно.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Также сразу начинаем иметь понятие о кроссплатформенности и оптимизирующих компиляторах
Как это связано с эмуляцией ARM на x86 процессорах?

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Телевизор это просто чтобы смотреть ТВ и фильмы с флешек.
Нужно время чтобы скачать на флешку, но зачем если можно смотреть прямо с сети? https://4pda.to/forum/index.php?showtopic=848635
https://4pda.to/forum/index.php?showtopic=786390

Цитата Сообщение от Quiet Snow Посмотреть сообщение
А чтобы смотреть ютуб нужна ещё и клавиатура, это неудобно, или надо покупать специализированную беспроводную.
Беспроводная клавиатура с тачпадом (мышкой как в ноуте) стоит около 5$.
Еще есть аеромышки с голосовым поиском.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Качественные сборные уверен и сейчас есть.
Все современные процессоры для ноутов припаяны. Съемных нет. С видеокартами также.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
если я туда не лезу, это не значит что мне не хватит квали сделать хорошо
Я просто объясняю что программирование под DOS это не самое хардкорное что может быть. Есть задачи намного сложнее и что оптимизация ЯВУ комилятора играет очень важную роль. У меня есть опыт программирования с использованием GCC для микроконтроллеров и я знаю на что он способен в плане оптимизации, т. к. сравнивал асм с -O0 и -O2, -OFast.
Для компа оптимизатор тот же, просто трансляция в x86-x64 асм.
Повторюсь, полный контроль имеем только при разработке на асме. Если пишем на ЯВУ, качество трансляции в асм зависит от компилятора и у оптимизирующих оно выше, чем у не оптимизирующих.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Пока я увидел коробочку которая грузит свои приложения по 10 секунд и более
На этом видео тоже по 10 секунд грузит? https://youtu.be/-ZT27s3AEqw

Цитата Сообщение от Quiet Snow Посмотреть сообщение
насколько понял ещё не самой паршивой конфигурации.
Какова цена такое и качество. Что вы хотите от приставки за 20$?

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Использовать заместо компа - нет.
Кто-то предлагал использовать вместо компа?
Это ТВ приставка и использовать ее нужно по назначению.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Про браузер вообще молчу. У меня по 70-100 вкладок бывает открыто, разных
Зачем?
У меня редко бывает открыто больше 10 вкладок.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
24.05.2021, 01:03
Цитата Сообщение от locm Посмотреть сообщение
Лучше это видео посмотрите. https://youtu.be/-ZT27s3AEqw
Оно более объективное и от знающего человека. Посмотрите сколько у него на канале обзоров на разные устройства в том числе ТВ приставки. А то что вы выложили, явно не от профи.
Профи говорит, что эта штука греется до 88 градусов, имеет проблемы при просмотре роликов
с жёсткого диска, причина простая - USB 2.0. А также на ютубе не умеет в 4k.
Можно конечно сказать что ему досталась плохая приставка.
Вот тут он резюмирует что "ютюбчик и потоковое до 1080p":
https://youtu.be/-ZT27s3AEqw?t=1030

Адекватный чувак.

Добавлено через 27 минут
Цитата Сообщение от locm Посмотреть сообщение
Кто-то предлагал использовать вместо компа?
Это ТВ приставка и использовать ее нужно по назначению.
Согласен.

Цитата Сообщение от locm Посмотреть сообщение
Причем здесь виртуалка? На устройствах андроид работает не на виртуалке. На них все плавно.
Уже объяснял. Билд на x86 чётко под чип. Всё по обсуждаемой тут в теме схеме: код на яву
кроссплатформенно транслируется на разные чипы(которых в мобильных устройствах был целый
зоопарк и упрекать тут x86 не надо).
За одним лишь исключением, чуваки пилили это аккурат под слабые чипы, на сильных x86 с приличными
SIMD-ами - оно должно летать, чисто физически ТОЧНО могло. Однако работает как говно.
Потому что и написано ужасно и сам принцип пиши на ЯВУ а оптимизируют за тебя - хреновый,
и каждый спец это знает, а оправдывают потому что мол "никто не будет писать на каждый чип своё".
Ну не будут и ладно, а я вот врать не буду, говорю как есть. Плохая критика? Зато правдивая.

Плавно было 20 лет назад на PC. Андроиды это тупящее уродское неоптимизированное говно, с 20 FPS
интерфейсом, который при разной собственной анимации часто испытывает оголтелые фризы, это люди
почему-то считают за "плавно". Кто этого не замечает - я не в силах помочь. Плавность как раз вижу
предельно хорошо, в сравнительном тесте могу с ходу сказать где быстрее работает глядя на экран,
производя какие-либо действия, скроллинг, перетаскивание и т.п.. Если разница хотя бы на 30% есть -
это мгновенно бросается в глаза. А фризы видны сразу(я даже на записанном NVenc-ом замечаю фризы,
образовавшиеся из-за скидывания буфера на внутренний жёсткий диск, в это время ряд процессов
кратковременно блокируются и кодировщик испытывает нехватку ресурсов, чего не происходит при
работе с внешним жёстким диском, т.к. там срабатывает неблокирующий потоки буфер интерфейса
устройства).

Цитата Сообщение от locm Посмотреть сообщение
У вас нет устройств на андроиде (телефонов, ТВ приставок и др.)? Не знаете как работает андроид на устройствах?
Устройств нет. Мне это говно даром не нужно. Как работает знаю, настраивал людям их телефоны.
Повторюсь. В сравнении с ПК 20 летней давности - интерфейс работает как говно и сделан как говно.

Добавлено через 17 минут
Цитата Сообщение от locm Посмотреть сообщение
Все современные процессоры для ноутов припаяны. Съемных нет. С видеокартами также.
Ну тогда рекомендовал бы людям либо сразу брать приличные ноуты, либо на вторичку
за нормальными, где можно заменить. Вот тут человек пишет, что есть ещё такие:

https://habr.com/ru/post/513964/

Добавлено через 39 минут
Цитата Сообщение от locm Посмотреть сообщение
На этом видео тоже по 10 секунд грузит? https://youtu.be/-ZT27s3AEqw
Бывает грузит, но очень редко, это надо какой-нибудь видос 10 летней давности откопать,
который никто не смотрит. В основном конечно нет. Просто не понимаю как можно говорить за всех,
ты в одном месте находишься, я в другом и люди в разных местах, разное расстояние до серверов
разные трассы, разные провайдеры, у них разное оборудование, у людей разное железо, разные
файерволлы, блокировщики реклам и прочее. В магазине то ни разу не видел телевизор 8k,
у нас таких просто нет. Года три назад ещё прилично стримил, чисто по наблюдениям,
половина народу не могла смотреть даже не FullHD, а тот самый 12MBit с голого NVenc.
С планшетов процентов 80 не могли нормально смотреть. Не думаю что сильно что-то изменилось,
как будто все готовы менять свои устройства по малейшему чиху. Да нет конечно.
Сайты ещё больше отожрались, тот же ютуб. Сейчас да могу в 6 Mbit уложить, другой уровень
комфорта для людей сделать, twitch подтянул свой сервис, раньше 3.8MBit там был предел,
сейчас 6 может, наверное, не всегда хорошо, но тем не менее может.


Цитата Сообщение от locm Посмотреть сообщение
Я просто объясняю что программирование под DOS это не самое хардкорное что может быть. Есть задачи намного сложнее и что оптимизация ЯВУ комилятора играет очень важную роль. У меня есть опыт программирования с использованием GCC для микроконтроллеров и я знаю на что он способен в плане оптимизации, т. к. сравнивал асм с -O0 и -O2, -OFast.
Для компа оптимизатор тот же, просто трансляция в x86-x64 асм.
Повторюсь, полный контроль имеем только при разработке на асме. Если пишем на ЯВУ, качество трансляции в асм зависит от компилятора и у оптимизирующих оно выше, чем у не оптимизирующих.
Прикладники так не считают:
http://www.virtualdub.org/docs_compiling.html
Isn't assembly language dead with modern compilers?

http://www.virtualdub.org/oldnews.html
3/17/2004 News: Taking the 64-bit plunge

Там куда не плюнь жопа.
А демщики на x86 под DOS делали хардкорнее, чем всё, что ты когда-либо видел.
Примеры показывал и не раз. Текущим жопоруким такое даже с кучей денег и преподавателей
не снилось.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
24.05.2021, 07:58  [ТС]
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Любой софт, написанный с применением принципов проектирования использующихся ранее в DOS,
всегда будет смотреться выигрышнее на фоне более современных решений
Есть всем известные парадигмы программирования: процедурное, структурное, объектно‐ориентированное. Вы видите у бейсика некий особый путь, своё развитие, что бейсик не должен вписываться в какую‐нибудь парадигму программирования. Что это значит на практике? Это значит что бейсик просто нарушает парадигмы. Парадигмы появились не просто так, а вырабатывались практикой, годами упорного труда учёных.
Особый путь — это когда вы хотите:
* вместо структурного кода получить спагетти‐код
* вместо процедур — GOTO по номеру строки
* об объектах вообще речи нет, потому что они все для молодых бородатых мужчин в клетчатых рубашках сделаны.

Нет какого‐то «особого пути». Есть только различия в синтаксисе и семантике. У бейсика verbose‐синтаксис, в си принято использовать ASCII‐арт и псевдографику вместо синтаксиса, вот эти все закорючки в коде *&||!;{}++--<<>>. Вот и всё различие.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Синтаксис встроенных функций для людей залётных, которым насрать на бейсик
и судьбу данного ЯП, всегда будет представлять нелогичную, глупую вещь
Неправда, синтаксис должен быть согласован и консистентен. Когда одна конструкция противоречит другой — это просто плохой дизайн языка.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Синтаксис
без скобок - это возможность ЯП для операторов, как и строгое разделение функций и операторов.
Повышало читаемость кода.
Нет конечно. Читаемость повышается когда всё трактуется однозначно, без исключений и нужды лезть в документацию. Очевидно, что вызов функций без скобок нарушает контекстно‐свободную грамматику бейсика, создаёт зависимость от контекста и ставит язык программирования в категорию языка си, со своей контекстно-зависимой грамматикой.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Глобальные переменные - крайне удобная вещь, требующая соотв. навыков
при обращении с ними, часто критикуется людьми, которые не умеют разработать алгоритм на листе
бумаге и писать документацию. В силу того, что всё делается "на ходу" допускаются абсолютно глупейшие
ошибки, которые потом тяжело обнаружить и исправить.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
"Вы просто не умеете их готовить"
Всё с точностью до наоборот. Любая сущность:
* должна быть объявлена там, где она используется
* существовать столько времени, сколько она нужна
* не протекать туда, где ей не место.
Мало того, что глобальные переменные явно нарушают все эти три пункта, так они ещё вносят неявные проблемы с конфликтом имён и параллельным выполнением.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
ополнительно в том насколько хорошо
была сделана IDE по своему времени и насколько быстро она позволяла писать код.
Ну когда‐то было. Сейчас любой Notepad++ уделывает такие IDE в пухи и прахи.


Цитата Сообщение от CoderHuligan Посмотреть сообщение
Очень крутая штука, я вам скажу!
Нет. Нумерацию строк делает текстовый редактор, нет смысла дублировать работу редактора. Во‐вторых, эта стройная концепция с нумерацией рушится в когда требуется вставить что‐то между 10 и 11.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
позволяет писать код в простом блокноте
Нет. Даже блокнот в строке состояния показывает текущий номер, а по Ctrl+G позволяет перейти на нужную.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Люди начинают ценить красивость кода, а не красоту алгоритма и пр.
Нет. Алгоритм должен соответствовать схеме, а не привязываться к номеру строки в тексте.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
внятные комментарии еще никто не отменял
Один из признаков кода с запашком — это наличие комментариев.
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,024
Записей в блоге: 7
24.05.2021, 10:22
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Профи говорит, что эта штука греется до 88 градусов
В синтетическом тесте.
При просмотре видео обычно таких температур не бывает. Почему греется? Вы ее размеры видели? Думаете реально обеспечить хорошее пассивное охлаждение в закрытом пластмассовом корпусе небольшого размера?

Цитата Сообщение от Quiet Snow Посмотреть сообщение
имеет проблемы при просмотре роликов с жёсткого диска, причина простая - USB 2.0.
Роликов в 4К если скорость чтения файла видео больше чем может обеспечить USB 2.0.
Берите приставку про которую я писал. У нее USB 3.0 и таких проблем нет.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
24.05.2021, 14:31
Строго говоря, номера строк были не совсем тем, что вы имеете в виду. Это скорее номера конкретных команд, и переход осуществлялся на эти номера команд, а не на номера строк. При этом обычный редактор не может подменить собой то, что требовалось бейсиком с номерами, - это совершенно очевидно для всякого, кто с этим соприкасался.
Касаемо вставки между строк, то вы видимо вообще не знакомы с этим делом... Строки нумеровались с шагом 10, а если этого средства было мало, то был такая замечательная команда renum.
Цитата Сообщение от Замабувараев Посмотреть сообщение
Нет. Алгоритм должен соответствовать схеме, а не привязываться к номеру строки в тексте.
Кто тут залетный?..
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
24.05.2021, 14:41  [ТС]
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Строго говоря, номера строк были не совсем тем, что вы имеете в виду. Это скорее номера конкретных команд, и переход осуществлялся на эти номера команд, а не на номера строк. При этом обычный редактор не может подменить собой то, что требовалось бейсиком с номерами, - это совершенно очевидно для всякого, кто с этим соприкасался.
В 1964 году отсутствовали мониторы, команды писали на бумаге, вводили перфокартой и выводили на принтере, но не очень понятно зачем в 21 век с несколькими мониторами у компьютера тащить эту концепцию. Строки нумерует любой текстовый редактор, нет нужды повторять это поведение в тексте.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
замечательная команда renum
И слетали все GOTO и GOSUB, очень замечательно.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
24.05.2021, 16:32
Цитата Сообщение от Замабувараев Посмотреть сообщение
Один из признаков кода с запашком — это наличие комментариев.
После этого коммента дальше можно не продолжать.
Вы мало того что не понимаете концепцию классического BASIC, так ещё и с оформлением кода у вас проблемы.

Именно поэтому много раз видел в инете у людей кривожопое оформление вида
a=(b*c/3) вместо a = (b * c / 3)
всякие REM-ы вместо простого '
отступы в одну позицию, а не легко читаемой глазом мозаикой
закрытие NEXT-ом длинных циклов без указания переменных
и полное отсутствие комментов, что выказывает пофигизм человека на всех кто этот код будет читать,

Цитата Сообщение от Замабувараев Посмотреть сообщение
Особый путь — это когда вы хотите:
* вместо структурного кода получить спагетти‐код
* вместо процедур — GOTO по номеру строки
* об объектах вообще речи нет, потому что они все для молодых бородатых мужчин в клетчатых рубашках сделаны.
Не приписывайте мне этот бред.
И об объектах - никогда не буду миксовать два координально разных принципа кодирования.

Цитата Сообщение от Замабувараев Посмотреть сообщение
Ну когда‐то было. Сейчас любой Notepad++ уделывает такие IDE в пухи и прахи.
Ни разу нет. И уже объяснял почему. Выделить отдельно код процедуры, показывая только его такие блокноты не в состоянии.

Цитата Сообщение от Замабувараев Посмотреть сообщение
неявные проблемы с конфликтом имён и параллельным выполнением.
Эти проблемы испытывают только дилетанты. Профи используют области видимости аккуратно
и объяснил почему, это было даже отцитировано.
Правила вида "должна" придумывают залётные птицы, которые только получили оперение, ещё
не научились летать, но уже бойко вступают в дискуссии пытаясь учить давно летающих.

Добавлено через 10 минут
...........

Добавлено через 11 минут
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Кто тут залетный?
Можно прямо ткнуть пальцем, например ты. Разглагольствуешь о бейсике, шерстишь на си,
проектов ни там ни там пока не видели. Определись уже в какой-нибудь один клан, если
несколько не по силам.

Добавлено через 3 минуты
Строки нумерует любой текстовый редактор, нет нужды повторять это поведение в тексте.
Это фетиш для миллениалов, которые не в состоянии посмотреть на строку состояния.
Расплачиваются местом по горизонтали, куда могло влезть ещё несколько символов.

Добавлено через 6 минут
Цитата Сообщение от locm Посмотреть сообщение
Почему греется? Вы ее размеры видели? Думаете реально обеспечить хорошее пассивное охлаждение в закрытом пластмассовом корпусе небольшого размера?
Хорошее - нет. Достаточное для безопасной работы чипа - да. Для этого нужно использовать
алюминиевый корпус и монтировать на него контактные площадки с термоинтерфейсом.
Китайцам это не надо.

Добавлено через 22 минуты
Цитата Сообщение от Замабувараев Посмотреть сообщение
Очевидно, что вызов функций без скобок нарушает контекстно‐свободную грамматику бейсика

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

Code
1
PutPixel (x, y, color)
Code
1
PutPixel  x, y, color
Так вот братцы, скобки тут вовсе не нужны. Это лишний мусор в строке, они ничего не идентифицируют,
ничего не определяют. Если можно от него избавиться - это прекрасно.
Ещё более прекрасно то, что никто не заставляет писать без скобок.
При отсутствии скобок например сразу становится понятно, что процедура пользовательская, это мгновенно
выхватывается глазом из кода. Позволяет быстрее найти нужный кусок кода.
Функции таком способом сделать невозможно, например по причине их использования в
операторе PRINT, где параметры разделяются запятыми и визуально(не технически) невозможно будет вычленить
где параметры функции, а где просто значения.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
24.05.2021, 17:41  [ТС]
Цитата Сообщение от Quiet Snow Посмотреть сообщение
с оформлением кода у вас проблемы.
Комментарии создаются тогда, когда автор сам понимает, что его код недостаточно очевиден и понятен. В таких случаях комментарии играют роль «дезодоранта», то есть пытаются заглушить дурной запашок недостаточно проработанного кода. Самый лучший комментарий — это хорошее название функции или класса. Если есть ощущение, что фрагмент кода будет непонятным без комментария, следует изменить структуру кода так, чтобы любые комментарии стали излишними.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Вы мало того что не понимаете концепцию классического BASIC
Да, не понимаю. Я действительно считаю спагетти‐код плохим кодом.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Не приписывайте мне этот бред.
А у вас выбора не остаётся. На одной чаше весов всем известные парадигмы программирования, а на другой спагетти‐код. Вы не сможете одновременно создавать и хороший код, и нарушать общеизвестные парадигмы.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Профи используют области видимости аккуратно
У вас либо глобальные переменные, либо области видимости. Потому что это две противоречащих друг другу сущности.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Так вот братцы, скобки тут вовсе не нужны. Это лишний мусор в строке, они ничего не идентифицируют,
ничего не определяют. Если можно от него избавиться - это прекрасно.
Тут есть, там нету, там хочу ставить, тут не хочу, тут обязательно, там не обязательно… Проще на стадии компиляции не допускать потенциальных неоднозначностей в коде и запретить использовать подпрограммы без скобок.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
сразу становится понятно, что процедура пользовательская
Зачем это надо различать? В чём фундаментальная разница где находится процедура: написана вами или лежащая рядом в подключаемой библиотеке? Как это влияет на алгоритм? У «встроенных» функций есть какое‐то преимущество или недостаток?
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
24.05.2021, 18:27
Цитата Сообщение от Замабувараев Посмотреть сообщение
Комментарии создаются тогда, когда автор сам понимает, что его код недостаточно очевиден и понятен. В таких случаях комментарии играют роль «дезодоранта», то есть пытаются заглушить дурной запашок недостаточно проработанного кода. Самый лучший комментарий — это хорошее название функции или класса. Если есть ощущение, что фрагмент кода будет непонятным без комментария, следует изменить структуру кода так, чтобы любые комментарии стали излишними.
Комментарий ставят не потому что код голимый. А для того чтобы человек быстрее в нём разобрался.
Сложность может быть не в коде, а в используемом алгоритме, в мелких но важных нюансах и деталях.
Приведу пример:
PureBasic
1
2
3
4
5
FOR i = 0 TO 254
  FireZalp2(i) = IMAGECREATE (32, 30, 0, 32)   ' Третий параметр 0
                                               ' это hint для корректной работы Alpha Blend
  PUT FireZalp2(i), (0, 0), FireZalp2(255), ALPHA, i
NEXT
Если не указать, что третий параметр должен быть обязательно равен нулю, какая-нибудь обезьяна
посчитает, что можно схлопнуть и убрать(сделать параметр необязательным). В таком случае всё похеривается.
Это относится к косякам Gfx, о которых я хотел как раз поговорить. Разрабы не спешат устранять говно.
Сходу прозрачность загруженных прозрачных *.Png не пашет, чтобы работало - нужно подготавливать
набор имаджей указанным образом. Вместо того чтобы просто сделать PUT с ALPHA и значением.

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

Цитата Сообщение от Замабувараев Посмотреть сообщение
Да, не понимаю. Я действительно считаю спагетти‐код плохим кодом.
Вы видели хоть раз спагетти код?
Я вот колупал такой, 300 строк кода и 60 GOTO\GOSUB. Это устаревшая концепция программирования,
не потому что плохой результат, там тоже спецы те ещё, а потому что разбор такого алгоритма - это боль.
Когда говорят про GOTO и про его разумное(точечное и редкое) применение имеют в виду не спагетти
код, а нормальный структурный вид и разумеется только там, где это оправдано(где реструктуризация
может привести(и приведёт) к ошибкам в коде из-за её количества и сложности).
Если проект пишется под дедлайн такие случаи бывают. В чистовых работах по понятным причинам(кодинг по документации) GOTO не используется.

Слушать кодера хулигана стоит очень осторожно, но лучше вообще не слушать, там здравых мыслей кот наплакал.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
24.05.2021, 18:55
Цитата Сообщение от Замабувараев Посмотреть сообщение
Строки нумерует любой текстовый редактор, нет нужды повторять это поведение в тексте.
А с шагом все могут? А с произвольного числа все?
Цитата Сообщение от Замабувараев Посмотреть сообщение
не очень понятно зачем в 21 век с несколькими мониторами у компьютера тащить эту концепцию.
Шоб було. Объясню. Тут намедни упоминал Quiet Snow о том, что FB превратили в бейсикоподобный си, так вот, не только FB этим грешит, то бишь потерей своего лица, но и практически большинство языков, которые хотят позиционировать себя в качестве мэйнстримовых. А для этого они все просто из кожи вон лезут, чтобы только иметь у себя под капотом что-только есть у других, чтобы не прослыть отсталыми и устаревшими. Увы - это все коммерция, снобизм и к творчеству имеет мало отношения.
Создатель FB изначально ставил задачу эмуляции qbasic, но в итоге напихал туда всего, что только узнал сам.. Причем напрочь забыв о концептуальной простоте basic. То есть создал очередной клон си с классами. При этом там нет даже встроенных списочных структур, что сейчас в 21 веке как бы считается очень плохим тоном. А нужно было сделать нечто вроде кортежей из euphoria, хотя бы. Нет, предлагается писать все как в си, с нуля. Спасибо хотя бы за то, что строки не надо аллоцировать самостоятельно..
Вот и попробуй тут одно goto оставь, сразу запишут в полоумные и махнут рукой. Однако существуют любители старых ЯП, например forth, есть форумы посвященные только конкретным языкам. Структурных языков вагон, а где неструктурные? Их просто не осталось. Но именно они позволяют писать свободно, без привязки к определенной парадигме и пр. условностям.
Цитата Сообщение от Quiet Snow Посмотреть сообщение
вот колупал такой, 300 строк кода и 60 GOTO\GOSUB. Это устаревшая концепция программирования,
Насчет GOSUB возможно соглашусь. Имена процедур не должны "плавать" - сложно документировать подобный код. Насчет же goto то за ним будущее. Все дело в том, что именно goto позволяет естественным образом конструировать машины состояний - автоматы, и ничто его не заменит в этом деле. Разбирать код с goto без документации или хотябы комментариев конечно сложно, но это не говорит о его принципиальной ущербности.
----------
Возможно я в чем-то и ошибаюсь, как человек, но разумное зерно в моих рассуждениях думаю найдется.)
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
24.05.2021, 20:12
Цитата Сообщение от Замабувараев Посмотреть сообщение
У вас либо глобальные переменные, либо области видимости. Потому что это две противоречащих друг другу сущности.
У тебя дискретная алгебра была? Вспомни множества, там два кружочка ещё рисовали.
Ничего там не противоречит. Локальная(в основном коде, без доступа из процедур), никак не выделяется.
Глобальная выделяется SHARED-ом(полный доступ). Это области видимости переменных и массивов.
Это не обособленные объекты класса с делегированием доступа, совершенно другая концепция,
тут всё проще, по простой примитивной логике.

Добавлено через 11 минут
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Увы - это все коммерция, снобизм и к творчеству имеет мало отношения.
Это не коммерция, это называется "смешались кони люди". Когда одна группа людей, по их мнению
главенствующая, пытается навязать свои принципы. Или преподнести мол нам сирым и убогим
в наши тёмные углы луч просвещения. На деле это часто сопряжено с корыстными интересами.
Мол си для нас слишком геморроен, постоянно геморроится мы не хотим, дайте нам примитивный бейсик,
с функционалом си и можно будет тырить код пачками и в потолок плевать. Мода тоже, конечно, влияет.
Самое забавное, что ничего принципиально нового не будет, микс идеологий, ребрендинг и по кругу.
Эти языки десятками можно рожать перемывая кости. Был бы толк.

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Создатель FB изначально ставил задачу эмуляции qbasic
QuickBasic не "ку". "ку" это для детей, Quick позиционировался как раз как проф среда разработки.

Добавлено через 14 минут
Цитата Сообщение от Замабувараев Посмотреть сообщение
А у вас выбора не остаётся. На одной чаше весов всем известные парадигмы программирования, а на другой спагетти‐код. Вы не сможете одновременно создавать и хороший код, и нарушать общеизвестные парадигмы.
Не пишу спагетти код. Использование одного, двух переходов в толстенной программе, где-нибудь
на видном месте ничего не нарушает. В чистовых прогах надобности в этом нет, т.к. вся схематика делается
заранее на листочке. Этим многие грешат, просто делают вид что они все правильные, а как жёсткие
сроки впаивают - деваться некуда, любые средства идут в ход, чтобы ускорить разработку, дабы было время
на тестирование.

Добавлено через 12 минут
И про "парадигмы", ещё раз, в 80-е 90-е и вплоть до начала нулевых такого термина даже не существовало,
об этом никто не говорил.
Это уже потом теоретики натеоретизировали. Самое страшное, люди уже не понимают что такое 3GL и 4GL.
Взошли плоды так сказать.

Добавлено через 37 минут
Цитата Сообщение от Замабувараев Посмотреть сообщение
Зачем это надо различать? В чём фундаментальная разница где находится процедура: написана вами или лежащая рядом в подключаемой библиотеке? Как это влияет на алгоритм? У «встроенных» функций есть какое‐то преимущество или недостаток?
Преимущества небольшие есть, недостатков нет. Просто приятная мелочь. Когда окружающий код
пестрит скобками, там скобки, тут скобки, снизу, сверху, да ещё сами параметры формулами сделаны
и тоже там эти скобки то избавиться хотя бы от боковых - это как бальзам на душу, когда часами в этом коде
возишься уже в глазах рябить начинает от этих скобок, визуально проще ориентироваться.
Ну и два байта с каждой строки как с куста, но об этом мало кто парится сейчас.
Короче, это чисто вкусы, кому что надо.
Если напрягает, можно написать софтину, которая считает все декларации, найдёт в коде
считанные процедуры и добавит скобки. Делов там на пару часов работы, может даже меньше.
1
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,024
Записей в блоге: 7
24.05.2021, 22:49
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Так вот братцы, скобки тут вовсе не нужны
Вот код со скобками
Code
1
PutPixel(x, y, rgb(255, 0, 0))
А вот без скобок
Code
1
PutPixel x, y, rgb 255, 0, 0
Какой из них проще читать?
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
25.05.2021, 01:29
Цитата Сообщение от locm Посмотреть сообщение
Какой из них проще читать?
Процедуру без скобок проще. Но запись должна быть корректная. А т.е.

Code
1
PutPixel  x, y, RGB(255, 0, 0)
На свой вкус добавляю лишний пробел после имени процедуры.
Об этой ситуации написал, когда говорил про PRINT. Технически люди могли такое сделать,
т.е. второй вариант в твоём посте, почему не сделали? - Как раз поэтому.
Это сильно усложнило бы разбор семантики и параметры функции было бы сложно вычленить из
параметров процедуры. Без специализированного хелпера в редакторе подобный код читать
и редактировать крайне тяжело. Так что у меня тут без вопросов, всё сделано отлично.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
25.05.2021, 08:59  [ТС]
Цитата Сообщение от Quiet Snow Посмотреть сообщение
У тебя дискретная алгебра была?
Нет конечно, Я ещё пешком под стол хожу, молоко на губах не обсохло, яйцо, которое куриц не учит, и борода ещё не сбрита.

Цитата Сообщение от CoderHuligan Посмотреть сообщение
А с шагом все могут? А с произвольного числа все?
Какую задачу решает отображение ложной информации о номере строки?

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Структурных языков вагон, а где неструктурные? Их просто не осталось. Но именно они позволяют писать свободно, без привязки к определенной парадигме и пр. условностям.
Это не концепция бейсика. Это концепция плохого, грязного кода, который невозможно расширять, поддерживать и сопровождать.

Добавлено через 4 минуты
Цитата Сообщение от CoderHuligan Посмотреть сообщение
концептуальной простоте basic.
Нет «концептуальной простоты». Если лишь много функций из стандартной библиотеки.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
25.05.2021, 12:46
Цитата Сообщение от Замабувараев Посмотреть сообщение
Какую задачу решает отображение ложной информации о номере строки?
Причем здесь ложная-неложная? Посмотрите как должна выглядеть настоящая программа. обратите внимание на номер начала и конца кода. http://www.moorecad.com/classi... e/word.bas Начало произвольное и конец тоже. Автор немного прикололся в конце что добавляет изюминки в код - а код без изюминки плох, потому что автор лох, шутка. Если я встречаю в коде например комментарий, который заставит меня улыбнутся, этот автор для меня человек, а не сухой сноб. По крайней мене я вижу, что код писал живой человек, который способен улыбаться, шутить.
Цитата Сообщение от Замабувараев Посмотреть сообщение
Это не концепция бейсика. Это концепция плохого, грязного кода, который невозможно расширять, поддерживать и сопровождать.
Документация на программу решает вопрос. Если вам в лом писать обычные комменты, то нет вопросов.
Цитата Сообщение от Замабувараев Посмотреть сообщение
Нет «концептуальной простоты». Если лишь много функций из стандартной библиотеки.
Даже функции из стандартной библиотеки уже позволяют облегчить себе жизнь. Концептуальная простота, это когда многое в языке делается автоматически, например сборка мусора, экранные режимы бейсика и пр..
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
25.05.2021, 13:46  [ТС]
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Если вам в лом писать обычные комменты, то нет вопросов.
Моя мысль очень проста: понятный код в комментариях не нуждается. Зачем нужно комментировать очевидные вещи?
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Посмотрите как должна выглядеть настоящая программа.
Это нечитаемое месиво.
1
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
25.05.2021, 19:28
Цитата Сообщение от Замабувараев Посмотреть сообщение
понятный код в комментариях не нуждается. Зачем нужно комментировать очевидные вещи?
Например чтобы избавиться от эзопова языка. Это когда посредством имен функций и переменных пытаются нечто донести, но при этом изобретая некий псевдо язык наполненный уродствами. Можно ли понять что делает функция mbstowcs из стандартной библиотеки си? Без стакана ядреного самогона никак, и то не гарант. Нужен по крайней мере комментарий - напоминание, чтобы тот, кто разбирает ваш код мог не лезть в доку, и терять свое время.
Цитата Сообщение от Замабувараев Посмотреть сообщение
Это нечитаемое месиво.
Это месиво надо сперва научиться читать.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
25.05.2021, 19:37  [ТС]
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Можно ли понять что делает функция mbstowcs из стандартной библиотеки си?
1. Зачем копировать в исходный код информацию из справки?
2. Сделайте "#define MultiByteToWideString mbstowcs" и всё сразу станет ясно.

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Это месиво надо сперва научиться читать.
А куда делась вся простота?
Цитата Сообщение от CoderHuligan Посмотреть сообщение
В более простом синтаксисе. Язык то создавался для обучения, для более широкой аудитории пользователей, чем профессионалы.
Вы противоречите сами себе.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
26.05.2021, 19:16
Цитата Сообщение от Замабувараев Посмотреть сообщение
Нет конечно, Я ещё пешком под стол хожу, молоко на губах не обсохло, яйцо, которое куриц не учит, и борода ещё не сбрита.
Я кстати без приколов. Это абсолютно примитивная вещь, про что писал.
Она не требует специализированных знаний, для понимания работы и никаких
противоречий там нет, всё как раз по базе дискретки, или по тем же азам логики.
Всё что в данном случае требуется - лишь умение проектировать алгоритмы
и писать документацию, это как раз и превентирует возможность допустить ошибку.
Работая в реал тайме действительно можно накосячить, тут уже приходится надеятся
только на свои навыки(усидчивость, внимательность, опыт).

Добавлено через 5 минут
Цитата Сообщение от Замабувараев Посмотреть сообщение
2. Сделайте "#define MultiByteToWideString mbstowcs" и всё сразу станет ясно.
Венгерская нотация ни для кого не секрет. У неё есть один сильный недостаток.
Длинные имена например счётчиков - это жопа. И в принципе если всё так писать
текст будет тяжело уложить в экран. Так или иначе сокращать приходится, чисто
для удобства.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
26.05.2021, 20:07  [ТС]
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Длинные имена например счётчиков - это жопа. И в принципе если всё так писать
текст будет тяжело уложить в экран. Так или иначе сокращать приходится, чисто
для удобства.
Это всё разобрано уже даже не по атомам, а по субатомным частицам в умных книжках типа «Чистого кода»:
Цитата Сообщение от Чистый код
Длина имени должна соответствовать длине его области видимости. Переменным с крошечной областью видимости можно присваивать очень короткие имена, но у переменных с большей областью видимости имена должны быть длинными.
Если область видимости переменной составляет всего пять строк, то переменной можно присвоить имя i или j:
PureBasic
1
2
3
4
5
6
7
Function Sum(Vector() As Integer)
    Dim S As Integer = 0
    For i As Integer = LBound(Vector) To UBound(Vector)
        S += Vector(i)
    Next
    Return S
End Function
Смысл переменной i абсолютно очевиден. Какое‐нибудь раздражающее имя вида rollCount только затемнило бы смысл этого тривиального кода. С другой стороны, смысл коротких имён переменных и функций рассеивается на длинных дистанциях. Таким образом, чем длиннее область видимости имени, тем более длинным и точным должно быть её имя.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.05.2021, 20:07

Как сравнить эффективность сгенерированного кода Си VS2003 VS Pelles C ver.7
Как сравнить эффективность сгенерированного кода Си VS2003 VS Pelles C ver.7 ? Насколько быстрый код и у кого?

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

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

Подкрашивание ячеек для быстроты отбора данных
Подскажите юному познавателю Excel)) Поставлено на работе такое задание, а именно условное форматирование на листе в столбце доза СЗР так...

Какие сервисы можно преспокойно выключить для быстроты загрузки?
В литературе Колисниченко не все сервисы описаны, и к тому же на английском. Я могу только Блутуз выключить, не пропаду ) И проверка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru