Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 08 дек 2019, 23:01

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




Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: Модульность и язык Си
СообщениеДобавлено: 16 фев 2018, 05:55 
Не в сети

Сообщения: 104
trurl писал(а):
vlad писал(а):
Я согласен со всем, что ты написал в предыдущем сообщении. У меня претензии к осмысленности оригинальных тезисов. Потому что они:
1. Не отражают текущую "best practice" для С/С++. Вкрапления разумного смешаны с какой-то херней типа grep'a.

Что за "С/С++"? Для С вполне отражают.


И для C++ что-то отражают. Ты действительно хочешь по пунктам обсудить этот бред?


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Модульность и язык Си
СообщениеДобавлено: 16 фев 2018, 16:43 
Не в сети

Сообщения: 144
А почему бы всерьёз не обсудить? Можно начать с grep.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Модульность и язык Си
СообщениеДобавлено: 17 фев 2018, 07:14 
Не в сети

Сообщения: 104
Comdiv писал(а):
А почему бы всерьёз не обсудить? Можно начать с grep.


Хорошо. Что подозрительного в использовании grep?


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Модульность и язык Си
СообщениеДобавлено: 17 фев 2018, 12:28 
Не в сети

Сообщения: 144
Что подозрительного в использовании grep для поиска прототипа функции? В том, что использующий такую технику программист, вероятно, не понимает структуру проекта, в создании которого он участвует. Если проект действительно пишется в модульном стиле, то достаточно открыть нужный файл сразу, без полнотекстового поиска. Думаю, именно это автор имел ввиду, когда писал
Цитата:
Если прототип расположен не на своем месте, то это, скорее всего, ошибка


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Модульность и язык Си
СообщениеДобавлено: 18 фев 2018, 02:12 
Не в сети

Сообщения: 104
Comdiv писал(а):
Что подозрительного в использовании grep для поиска прототипа функции? В том, что использующий такую технику программист, вероятно, не понимает структуру проекта, в создании которого он участвует.


А если программист использует Ctrl+Shift+F - то понимает? Или если у него нормальная IDE с нормальной навигацией, то это вообще не программист?

Короче, упоминание grep там вообще не в тему, тем более отдельным пунктом. Достаточно сделать упор на то, что по местоположению прототипа должно быть очевидно расположение реализации. Или реализаций. Я, например, с успехом применял подход, когда был один хедер и несколько реализаций в разных файлах для разных платформ. Намного приятнее многострадальных #ifdef'ов.

Comdiv писал(а):
Думаю, именно это автор имел ввиду, когда писал


Автор мог иметь ввиду чего угодно, может даже и правильные вещи, но то что написано никак нельзя использовать кому-то, кто не в теме.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Модульность и язык Си
СообщениеДобавлено: 18 фев 2018, 10:30 
Не в сети

Сообщения: 28
Почему-то так и знал, что начнут цеплятся к словам.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Модульность и язык Си
СообщениеДобавлено: 18 фев 2018, 12:35 
Не в сети

Сообщения: 144
vlad писал(а):
Автор мог иметь ввиду чего угодно, может даже и правильные вещи, но то что написано никак нельзя использовать кому-то, кто не в теме.
Согласен, что высказать мысль можно было яснее и чётче. Но высказываться нечётко, слишком узко или наоборот - слишком обобщая, да ещё в расчёте на понимание другими контекста - это обычное человеческое явление. И относиться к этому нужно с пониманием.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Модульность и язык Си
СообщениеДобавлено: 18 фев 2018, 16:53 
Не в сети

Сообщения: 104
trurl писал(а):
Почему-то так и знал, что начнут цеплятся к словам.


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


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Модульность и язык Си
СообщениеДобавлено: 18 фев 2018, 16:57 
Не в сети

Сообщения: 104
Comdiv писал(а):
Согласен, что высказать мысль можно было яснее и чётче. Но высказываться нечётко, слишком узко или наоборот - слишком обобщая, да ещё в расчёте на понимание другими контекста - это обычное человеческое явление. И относиться к этому нужно с пониманием.


Еще раз - посмотрите на реакцию prospero78su.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Модульность и язык Си
СообщениеДобавлено: 18 фев 2018, 17:57 
Не в сети

Сообщения: 104
Поскольку народ настаивает...

Цитата:
Модульное программирование на языке Си возможно


Тут, конечно, хорошо бы более специфично указать, про какое именно модульное программирование идет речь. Ссылкой или хотя бы "как в языке X".

Цитата:
• На каждый модуль должен приходиться ровно один header-файл. Он должен содержать лишь экспортируемые прототипы функций, описания и ничего другого (кроме комментариев).


Сформулировано коряво, но "не буду придираться к словам". Не буду также упоминать, что есть довольно распространненная практика по более детальному делению хедеров в С++ на forward declaration, декларации классов и декларации определений шаблонов. Т.е. хередров будет более одного и ничего крамольного в этом не будет.

Цитата:
• Внешней вызывающей процедуре об этом модуле должны быть известны только комментарии в header-файле.


[1]
Еще более коряво. Но тоже можно догадаться чего имел ввиду автор. Однако суть правила не раскрыта. Использовать что-то, что не задекларировано в С невозможно и без всяких правил, это все-таки не динамический язык. Единственное исключение - вызов функции без прототипа, который специфичен только для С (не С++) и "правило" для которого описано ниже.

Цитата:
• Для проверки целостности каждый модуль должен импортировать свой собственный header-файл.


Какой целостности? Без контекста выглядит просто как пугалка. Не написал "#include" и все, никакой целостности? Тут мне не догадаться, бред 100%.

Цитата:
• Для импорта любой информации из другого модуля каждый модуль должен содержать строки #include, а также комментарии, показывающие, что, собственно, импортируется.


См. мой комментарий [1]. А касательно комментариев про то, что именно импортируется - похоже на личных тараканов автора, во всяком случае точно не общая практика.

Цитата:
• Прототипы функций можно использовать только в header-файлах. (Это правило необходимо, поскольку язык Си не имеет механизма проверки того, что функция реализуется в том же модуле, что и ее прототип; так что использование прототипа может маскировать ошибку «отсутствия функции» — «missing function»).


Бред 100%. Но можете попробовать переформулировать.

Цитата:
• Любая глобальная переменная в модуле, и любая функция, кроме той, что импортируется через header-файл, должны быть объявлены статическими.


Специфично для C. Для С++ для этого есть анонимный namespace. Опять же, что будет если не следовать этому правилу не поясняется. Потеря целостности? :) На самом деле или ничего не будет или будет ошибка линковки.

Цитата:
• Следует предусмотреть предупреждение компилятора «вызов функции без прототипа» (function call without prototype); такое предупреждение всегда нужно рассматривать как ошибку.


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

Цитата:
• Программист должен удостовериться в том, что каждому прототипу, заданному в header- файле, соответствует реализованная под таким же именем в том же модуле неприватная (т.е. нестатическая в обычной терминологии Си) функция. К сожалению, природа языка Си автоматическую проверку этого делает невозможной.


Неправда. При нарушении этого правила будет ошибка линковки. Да, компилятору будет пофиг, но программа не соберется. Опять пугалка.

Цитата:
• Следует с подозрением относиться к любому использованию утилиты grep. Если прототип расположен не на своем месте, то это, скорее всего, ошибка.


Это уже обсудили.

Цитата:
• В идеале программисты, работающие в одной команде, не должны иметь доступа к исходным файлам друг друга. Они должны совместно использовать лишь объектные модули и header-файлы.


Опять какие-то тараканы автора. Очень специфичный workflow, никак не общие правила.

Цитата:
Очевидная трудность в том, что мало кто будет следовать этим правилам, ибо компилятор не требует их неукоснительно соблюдать.


Опять же может быть прочитано как пугалка. Создается впечатление, что копилятор ничего не проверяет и все крэшается (никакой "целостности"), если не следовать этим "правилам". Это не так. На самом деле правила могли бы пояснять правильную организацию кода в Си проекте. Если бы были нормально описаны.


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

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


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

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


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club