Functional C / Функциональный C: Предисловие

Английский оригинал Перевод на русский

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

Предисловие

Charlz_Klug 19.11.15 в 20:10

0

Отделы Компьютерных Наук многих университетов в качестве первого языка программирования обучают функциональному языку. Использование функционального языка с его высоким уровнем абстракции помогает подчеркнуть принципы программирования. Функциональное программирование - это только одна из парадигм с которыми должен быть знаком студент. Также важны Императивное, Параллельное, Объектно-Ориентированное и Логическое программирование. В зависимости от решаемой задачи выбирается одна из парадигм как наиболее естественная парадигма для этой задачи.

Charlz_Klug 19.11.15 в 20:17

0

Эта книга - материал курса для обучения второй парадигме: императивному программированию, используя C в роли языка программирования. В этой книге предполагается, что студент усвоил его первый курс функционального программирования на примере SML. Требованием книги является понимание принципов программирования: эта книга не нацелена на 'обучение решению задач' или 'программированию'. Эта книга нацелена на:

Charlz_Klug 19.11.15 в 20:25

0

Знакомство читателя с императивным программированием как другим способом реализации программ. Цель - сохранить стиль программирования, то есть, программист думает функционально при реализации императивной программы.

Charlz_Klug 19.11.15 в 20:28

0

Дать понимание различия между функциональным и императивным программированием. Функциональное программирование - это высокий уровень деятельности. Порядок вычислений и выделение хранилища является автоматическим. Императивное программирование, особенно в C, - это низкий уровень деятельности, где программист контролирует и порядок вычислений и выделение хранилища. Это усложняет императивное программирование, но даёт императивному программисту возможности для оптимизации, не доступные для функционального программиста.

Charlz_Klug 19.11.15 в 20:38

0

Познакомить читателя с синтаксисом и семантикой ISO-C, особенно с мощью языка (в то же время подчёркивая что мощь может и убить). Мы посетим все тёмные переулки C, с void * до арифметики указателей и присваиваний в выражениях. В отдельных случаях мы используем другие языки (такие как C++ и Pascal) для демонстрации концепций императивного программирования, не существующих в C. C был выбран из-за того, что он де факто стандарт в декларативном программировании и поскольку его низкоуровневая природа красиво контрастирует с SML. Те, кто хочет изучить, к примеру, Modula-2 или Ada-95 не должны столкнуться с большими трудностями.

Charlz_Klug 19.11.15 в 20:49

0

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

Charlz_Klug 20.11.15 в 21:19

0

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

Charlz_Klug 20.11.15 в 21:27

0

Провести студента от спецификации и математики до реализации и построения программного обеспечения. В первых главах мы делаем акцент на написании корректных функций, когда мы достигнем успехов, то акцент будет постепенно смещён в трансформирование корректных функций в эффективные и многократно используемые функции. Чистый и ясный интерфейс имеет первостепенное значение, и только в крайних случаях он будет приноситься в жертву лучшей эффективности.

Charlz_Klug 20.11.15 в 21:36

0

Каждая задача в этой книге решается в три шага:

Charlz_Klug 20.11.15 в 21:37

0

Создание спецификации задачи.

Charlz_Klug 20.11.15 в 21:37

0

Нахождение соответствующего алгоритма, дающего решение, удовлетворяющее спецификации.

Charlz_Klug 20.11.15 в 21:39

0

Реализация как можно более эффективного алгоритма. Акцент всей книги приходится на этот третий шаг.

Charlz_Klug 20.11.15 в 21:41

0

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

Charlz_Klug 20.11.15 в 21:46

0

Соответствующие алгоритмы даны в SML. SML свободно доступен для широкого числа платформ (персональные компьютеры, рабочие станции UNIX, Apple) поэтому он популярен в роли обучающего языка. Поскольку многие функциональные языки не сильно отличаются от SML, то в приложении дан краткий обзор SML для тех, кто знаком с другими популярными языками программирования, такими как Miranda, Haskell, Clean или Scheme.

Charlz_Klug 20.11.15 в 21:51

0

Поскольку перед языком мы ставили цель реализовать решения в императивном стиле, то выбор был остановлен на C. Выбор в использовании C, а не C++ был труден. Оба языка популярны, и следовательно пригодны для использования. Мы выбрали C поскольку он более чисто определяет низкоуровневое программирование. Для иллюстрации рассмотрим механизм предоставляемый языком для вызова через ссылку. В C аргументы должны явно передаваться в виде указателя. Вызывающая сторона должна передать адрес, а вызываемая сторона должна разыменовать указатель. В контрасте этому находится механизм вызова через ссылку в C++ (и Pascal и Modula-2). Этот явный вызов через ссылку является дидактическим качеством, поскольку он явно описывает модель, стоящую за вызовом по ссылке и её опасности (в виде нежелательных псевдонимов).

Charlz_Klug 20.11.15 в 22:10

0

Поскольку эта книга предназначена для использования на первом курсе, то количество требований, предъявляемых для студентов очень мало. Рассуждения о корректности программ требуют навыков доказательств, которые возможно ещё не выработались у студентов на данном этапе. Поэтому мы обозначили все упражнения с доказательствами специальной меткой. Упражнения требующие доказательств помечены астериском. Мы считаем что книгу можно использовать не выполняя ни единого доказательства. Однако, при втором чтении мы рекомендуем студентам выполнять доказательства. Ответы к одной трети упражнений даны в Приложении А.

Charlz_Klug 24.12.15 в 21:02

0

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

Charlz_Klug 24.12.15 в 21:08

0

Благодарности

Charlz_Klug 24.12.15 в 21:09

0

Для нас очень важными были помощь и комментарии Хью Глэйзера (Hugh Glaser), Энди Грэйвелла (Andy Gravell), Лауры Лафев (Laura Lafave), Денис Николь (Denis Nicole), Питера Сестофта (Peter Sestoft) и анонимных читателей. Материал книги прошёл первое испытание в Саутгемптоне в 1995/1996 годах. Большое количество полезных отзывов пришло от студентов первого курса 1995 года набора, в частности от Джейсона Датта (Jason Datt) и Алекса Уолкера (Alex Walker).

Charlz_Klug 24.12.15 в 21:18

0

В процессе работы над книгой мы использовали множество общественно доступных программных инструментов. Особенно полезными были: система грамотного программирования noweb Нормана Рамси (Norman Ramsey), инструменты построения синтаксических диаграмм от L. Rooijakkers, gpic от Брайана Кернигана (Brian Kernighan), TeX, LaTeX, New Jersey SML, и компилятор Gnu C.

Charlz_Klug 24.12.15 в 21:27

0

Gnu C-compilerTM - торговая марка Free Software Foundation.
IBM PC TM - торговая марка IBM.
MacintoshTM - торговая марка Apple Computer, Inc.
Miranda TM - торговая марка Research Software Ltd.
UNIXTM - торговая марка Novell.
Postscript TM - торговая марка Adobe Systems, Inc.
TEX TM - торговая марка American Mathematical Society.
X Window System TM - торговая марка MIT.

Charlz_Klug 25.12.15 в 05:31

0
Минутку...