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

Твердыня модульных языков
Текущее время: 22 окт 2017, 03:06

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




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Модульность и язык Си
СообщениеДобавлено: 19 янв 2017, 22:02 
Не в сети
Аватара пользователя

Сообщения: 842
Откуда: Днепропетровская обл.
Цитата:
Модульное программирование на языке Си возможно, но лишь в том случае, когда программист придерживается ряда довольно жестких правил:

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

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

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

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

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

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

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

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

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

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

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


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

Сообщения: 22
Легче удавиться, чем следовать этим правилам)))

_________________
Действия профессионала предсказуемы. Но в мире полно любителей!


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

Сообщения: 26
prospero78su писал(а):
Легче удавиться, чем следовать этим правилам)))


Это специально, чтоб оберонщики даже не смотрели в сторону С :) А то еще начнут использовать "утилиту grep".


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

Сообщения: 842
Откуда: Днепропетровская обл.
Влад, а ты сам не оберонщик? ;-) В сторону Си не смотришь?

Это я к тому, что редкий оберонщик не знает других технологий.


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

Сообщения: 26
Zorko писал(а):
Это я к тому, что редкий оберонщик не знает других технологий.


Это я к тому, что озвученные тезисы "Модульного программирования на языке Си", даже в контексте знания Си, вызывают сомнения в адекватности автора (или как вариант - автор имел дело с Си лет 20 назад и в весьма специфичной предметной области). А уж вне контекста - священный ужОс как у prospero78su.


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

Сообщения: 842
Откуда: Днепропетровская обл.
А я бы подтвердил эти тезисы о модульности своим личным опытом, иначе и копировать бы не стал.


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

Сообщения: 26
Zorko писал(а):
А я бы подтвердил эти тезисы о модульности своим личным опытом, иначе и копировать бы не стал.


Как много тебе приходилось работать с Си? Особенно интересно услышать про работу в команде и, в частности, "совместно использовать лишь объектные модули и header-файлы".


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

Сообщения: 842
Откуда: Днепропетровская обл.
Я программист-самоучка, до многих вещей доходил сам. Мне стоило больших усилий понять как пользоваться в Си раздельной компиляцией, что такое пре-хэширование заголовков, и зачем оно, я долго не мог понять, что в хидерах надо описывать только прототипы функций (я до сих пор встречаю исходники, в которых в хидерах находится весь код). Я очень слабо понимал, зачем нужно:
Код: "C"
#ifndef __ThisModule
#define __ThisModule
 
#endif
- это для хорошего стиля "модульности" для Си. Я не говорю сейчас о новейших стандартах Си и Си++, где, может быть, эти проблемы уже решены (или смягчены?), просто не слежу. А вот модульность Turbo Pascal и Delphi трудностей не вызывала никогда. Это к вопросу об обучении, на каком языке лучше учить.

В команде на языке Си не работал, но мне видится плохой идея раскрытия потрохов всех модулей только для возможности их использования. Куда уж лучше светить только интерфейсы. А их представлением в Си являются хидеры. Дело здесь не столько в секретности, сколько в том, насколько велик объём необходимых знаний, чтобы воспользоваться сторонним модулем.


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

Сообщения: 26
Zorko писал(а):
Я программист-самоучка, до многих вещей доходил сам.



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

Т.е. с тем же успехом можно было написать "в С/С++ нет модулей" - полезной информации столько же, а букв меньше.


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

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


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

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


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

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Тех.поддержка phpBB