LINUX.ORG.RU

Системное программирование в UNIX средствами FreePascal


1

0

А.П. Полищук и С.А. Семериков написали новую книгу, охватывающую большой круг вопросов системного программирования для UNIX с использованием FreePascal, кроме разве что хакинга ядра :) Всего в книге 13 глав и 4 приложения. Каждая глава в книге заканчивается практическими упражнениями. По словам Семерикова все примеры были проверены в ALT Linux Master 2.2

Ознакомиться с текстом книги можно в FIDO конференции RU.FREE.PASCAL куда он был помещён 26.09.2005 самим Семериковым или, что более привычно, скачать по приведённому в ссылке адресу.

>>> Скачать книгу "Системное программирование в UNIX средствами FreePascal"

Ответ на: комментарий от Sun-ch

>Аду знают все. Авария ракеты Arian 5 в 1996-ом году включила ее в книгу рекордов Гиннеса.

Человек тоже попал в КРГ и надо заметить не один раз.

shut_up
()
Ответ на: комментарий от anonymous

> Дело в том, что "C язык профессионалов" я и сам так считаю.

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

MAPA3MATuK
()
Ответ на: комментарий от atrus

> А на паскале, точнее, на Delphi: ... Miranda (известный в win ICQ клон)

Миранда писана на Си. По крайней мере, вот эта:

.../sourceforge/miranda-icq/miranda-im-v0.3.3.1-src.zip

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

--

SVK

anonymous
()

Народ, вы как в детском саду. Давно известно, что почти любую программу можно написать и на Си и на Паскале (и не надо мне рассказывать, что Си существенно круче Паскаля или наооборот,
это примерно равноценные языки). Дело в другом - сейчас много
развелось недопрограммеров или кул_хацкеров, которые толком
сами ничего не умеют делать, а обсирать друг друга - это всегда
с удовольствием.

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

> На паскале пишет только ламочье!
ну конечно же, это и так все знают такие как ты.
Я не уверен, что ты на Си можешь грамотно написать прорамму, а понты разводить мы умеем.

anonymous
()
Ответ на: комментарий от anonymous

Интересно, а как в паскале выглядит указатель на массив указателей на функции?

И как указатель на функцию передать в качестве параметра при вызове функции?

Sun-ch
()
Ответ на: комментарий от atrus

> Age Of Wonders II

На самом деле все 3 игры серии. 1-я часть на 5-ке (или 3-ке?), 2-я на 6-ке, Shadow Magic на 7-ке.

> Miranda (известный в win ICQ клон)

&RQ, а не миранда.

-- wrar

anonymous
()
Ответ на: комментарий от Sun-ch

> Интересно, а как в паскале выглядит указатель на массив указателей 
на функции? 

type
 proc=procedure;
 arrproc=array[1..n] of proc;
//Или можно исп. динамический массив, он сразу уже указатель.
var
 p:^arrproc; 

.....
 p^[i]:=@SomeProcedure; p^[i];//Запуск на исполнение i-ой функции. 

> И как указатель на функцию передать в качестве параметра при вызове функции? 

Да так и передать, как и любой другой тип или указатель. 

В Виртовском паскале, согласен с этим проблемы, но во FreePascal и 
Delphi есть тип-функция и работа с ним ничем не отличается от других. 


В BP/TP до версии 7.0 такой тип тоже есть, но если в Delphi и 
FreePascal'е тип-функция используется как указатель, то в BP/TP -- 
нет, там вышеприведённый пример выглядит как: 

type
 proc=procedure;
 pproc=^proc;
 arrproc=array[1..10] of pproc;
var p:^arrproc;

 ....

 p^[i]:=@SomeFunction;//Или p^[i]^:=SomeFunction;
 p^[i]^;//Запуск на исполнение. 

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

anonymous_incognito ★★★★★
() автор топика
Ответ на: комментарий от Sun-ch

Запросто:

1: ==================================================== type PFunction = function(A,B:integer):integer;

TFunctions = array[1..10] of PFunction; PFunctions = ^TFunctions;

переменная типа PFunctions - это и есть указатель на массив указателей на функции

2: ====================================================

var pf:PFunction;

function sum(A,B:integer):integer; begin Result := A+B; end;

begin pf := @sum; ShowMessage('2+2= ' + IntToStr(pf(2,2))); end;

Интересно, а как это будет выглядеть на Си ?

anonymous
()
Ответ на: комментарий от anonymous

Запросто:

1:
====================================================
type
PFunction = function(A,B:integer):integer;

TFunctions = array[1..10] of PFunction;
PFunctions = ^TFunctions;

переменная типа PFunctions - это и есть указатель на массив указателей на функции

2:
====================================================

var
pf:PFunction;

function sum(A,B:integer):integer;
begin
Result := A+B;
end;

begin
pf := @sum;
ShowMessage('2+2= ' + IntToStr(pf(2,2)));
end;

Интересно, а как это будет выглядеть на Си ?

Извиняюсь - строки съехали

anonymous
()
Ответ на: комментарий от anonymous_incognito

> В Виртовском паскале, согласен с этим проблемы, но во FreePascal и Delphi есть тип-функция и работа с ним ничем не отличается от других.

Кстати, сам Вирт тоже все эти годы с момента создания Паскаля не сидел без дела и многие его недостатки исправил в своих последующих разработках: в Модуле-2 и в Обероне.

Информация на эту тему есть здесь: www.oberon2005.ru

ИМХО, Оберон весьма интересная штука. Правда, лично мне он не нравится, но по причинам, общим для всех языков семейства Алгола (в т.ч. и C/C++).

--

SVK

anonymous
()
Ответ на: комментарий от anonymous

Даже Borland Pascal под виндовс а потом и Делфи написан на С / (паскаль под дос написан на самом паскале) . вот был такой Virtual Pascal под OS/2 вот это СИЛА (со слабой поддержкой win32 и никакой поддержкой linux). Реально удобный инструмент для написания системных программ на котором и сейчас под ось реально пишут

anonymous
()
Ответ на: комментарий от anonymous

"Делфи написан на С" Ага. А gcc написан на вижуал бейсике. Мне одна тетя так сказала.

anonymous
()
Ответ на: комментарий от anonymous

> Даже Borland Pascal под виндовс а потом и Делфи написан на С

Вызывающе неверная информация. Доказательства в студию.

-- wrar

anonymous
()
Ответ на: комментарий от anonymous

> Даже Borland Pascal под виндовс а потом и Делфи написан на С

Вызывающе неверная информация. Доказательства в студию.

-- wrar

anonymous
()
Ответ на: комментарий от anonymous

> Миранда писана на Си.

Да, в этом случае была "вызыюще неверная информация". Delphi там тоже есть, в плагинах.

atrus ★★★★★
()
Ответ на: комментарий от Sun-ch

> Интересно, а как в паскале выглядит указатель на массив указателей на функции?

По русски, плз... Указатель всегда выглядит как указатель.

> И как указатель на функцию передать в качестве параметра при вызове функции?

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

atrus ★★★★★
()
Ответ на: комментарий от I3rain

>>Чего курим ?

>TurboPascal строка 8 бит

Хе-хе... Turbo - немножко не Паскаль... Там и прямой доступ к памяти был через mem[сегмент:смещение], и строки asciiz, хотя это уже в последних версиях, перед Делфи практически... Работа с указателями не сказать бы, что хуже, чем в C...

AS ★★★★★
()
Ответ на: комментарий от anonymous

>> Даже Borland Pascal под виндовс а потом и Делфи написан на С

>Вызывающе неверная информация. Доказательства в студию.

Borland Pascal for Windows написан на C (7ой Борланд паскаль и предыдущая версия под Windows) / Какие компоненты Делфи на каком языке мне разбираться не хочется

anonymous
()
Ответ на: комментарий от anonymous

Вот представьте себе: Первый компилятор ot Borland с Windows GUI был Турбо Паскаль 1.0 для Виндовс (скомпилированный и написанный на Турбо С который сам на тот момент GUI Windows не имел) / и первый коммерческий компилятор с ООП был - Турбо паскаль 5.5 (DOS only) а вовсе не С с плюсами

anonymous
()
Ответ на: комментарий от anonymous

"Borland Pascal for Windows написан на C" Какие ваши доказателства?

anonymous
()
Ответ на: комментарий от anonymous

> mozilla thunderbird

Не впечатлила, пока. Хотя под Linux именно ей и пользуюсь и FF в качестве смотрелки. Но под виндой :-( Хотя под виндой не могу ее сравнить так-как давно сижу на лотусе и выхода на внешние pop сервера не имею...... Корпаративный культур, однако.......

vvvictor
()

Чем программировать системно в win на проприетарном Delphi, лучше пусть программируют в открытой ОС на открытом fp, хоть системно, хоть несистемно.

P.S. Вчера мне попался один курсач, и там была программа на C++Builder'е. А в ней смотрю - модификатор доступа к членам класса какой-то "__published". Так я и не понял, что это за хрень такая.

seiken ★★★★★
()
Ответ на: комментарий от seiken

А это из Object Pascal'я фактически. Поскольку C++Builder какая-то помесь Delphi и BC++, притом VCL так и написан на ObjectPascal.

private -- поля и методы доступны исключительно в том же файле, где описывается класс.

protected -- то же, что и private, но доступ возможен для наследников.

public -- доступно всем.

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

anonymous_incognito ★★★★★
() автор топика
Ответ на: комментарий от anonymous

>> Насчет Ады - одна ось на ней уже давно написана и используется (MaRTE OS), а другая - AdaOS - еще в разраюотке.

>а линками поделится?! >а еще лучше впечатлениями от использования и информацией о лицензиях.

http://marte.unican.es/ http://adaos.net/

Первая ос встроенная - под ней к примеру роботы в футбол играют. Вторая еще не написана, а работы там для бвух челов хватает - написать компилер Ады-2005 (хотя даже фирма-разработчик GNAT этого еще не сделала =)...

P.S. Ада мне нравицца прежде всего тем, что в ней очень сложно допустить баг. Кстати я только один раз по-серьезному отлаживал прогу на Аде-95 из-за одной большой глупости. Так что сейчас разрабатываю на ней собственную параметрическую твердотельно-поверхностную CAD-систему не опасаясь бесконечной отладки как в Ц/Ц++

AiLr ★★
()

и где там исходник с примером который паказывает как на паскале читать тот самый сраные sysprfpc.doc?

anonymous
()
Ответ на: комментарий от anonymous

Язык, в котором нет такой вещи, как шаблон, заставляет писать один и тот же код повторно. А значит - совершать ошибки. Макросы С, конечно, не сравнить с механизмом шаблонов С++, но и это хоть что-то.

Насколько я знаю, шаблонов/макросов в Паскале нет. И потому, к примеру, реализация B-дерева на C++ для чисел и строк - это один и тот же код, инстанцированный от разных типов. На С - макросы + код. А на Паскале - два *разных* кода.

Касаемо системного программирования, то тут вопрос предельно простой: системное программирование следует вести на том языке, на котором написана система. Хотя бы для того, чтобы не тащить с собой чужой runtime.

Я вообще поражаюсь с затейников, пишущих системные приложения на экзотических языках. Чтобы собрать и заставить работать системное, подчеркиваю _системное_ приложение ставить еще компилятор языка, его runtime и кучу библиотек... ЗАЧЕМ?

anonymous
()
Ответ на: комментарий от anonymous

>Насколько я знаю, Насколько я вижу нифига ты не знаешь. Шаблоны есть (Delphi, Fee Pascal, Chrome) . Макросы есть в Fee Pascal. К тому же язык развивается. Что то устаревает , что то привносится, в том числе удачные конструкции из других языков - и это нормально. На счёт необходимости написания системных приложений - вопрос спорный, что то можно писать, что то категорически нельзя - и это тоже нормально , т.к. небывает универсальных языков.

anonymous
()
Ответ на: комментарий от anonymous

> ЗАЧЕМ?

Затем, что ставить компилятор, рантайм, кучу библиотек - это задача минимальной сложности, её вообще в рассчёт не берём. Но если программа на Java будет написана в 20-30 раз быстрее, чем то же на C, то ссылаться на левые "ненужные" рантаймы будет только очень глупый человек. Или очень фанатичный, что ещё хуже.

MAPA3MATuK
()
Ответ на: комментарий от MAPA3MATuK

>Затем, что ставить компилятор, рантайм, кучу библиотек - это задача минимальной сложности, её вообще в рассчёт не берём. Но если программа на Java будет написана в 20-30 раз быстрее, чем то же на C, то ссылаться на левые "ненужные" рантаймы будет только очень глупый человек. Или очень фанатичный, что ещё хуже.

Уже ли вы собираетесь писать на Java системные приложения?

Hint: Читайте внимательнее то, что пишут и не выдергивайте слова из контекста. Речь шла о _системных_ приложениях.

anonymous
()
Ответ на: комментарий от anonymous

> Уже ли вы собираетесь писать на Java системные приложения?

Нет. Не собираюсь. Давно пишу уже. Пусть тормоза думают, собираться им или не собираться - пока додумаются, поезд да-алеко уже уйдёт.

MAPA3MATuK
()
Ответ на: комментарий от MAPA3MATuK

>Нет. Не собираюсь. Давно пишу уже. Пусть тормоза думают, собираться им или не собираться - пока додумаются, поезд да-алеко уже уйдёт.

Не могли бы Вы привести названия _системных_ программных продуктов, в разработке которых Вы принимали участие? А еще лучше - URL сайтов, где про них можно почитать.

anonymous
()
Ответ на: комментарий от anonymous

Не могу. Это всё закрытые коммерческие штучные разработки.

Замечу только, что написание J2ME-приложений - это в значительной степени системное программирование - такая уж система специфичная, что J2ME - это самый низкий доступный уровень (или близкий к низкому, если это Symbian).

Разработка компиляторов - это тоже системное программирование (в классическом его определении). Всякое там софт-риалтайм телекоммуникационное барахло - тоже системное программирование. Тому, кто попробует заставить меня всё это писать на Си - голову отрублю мочетом.

MAPA3MATuK
()
Ответ на: комментарий от MAPA3MATuK

>Не могу. Это всё закрытые коммерческие штучные разработки.

Слив засчитан. Продолжайте в том же духе.

anonymous
()
Ответ на: комментарий от MAPA3MATuK

Файломанагер -- не системное приложение, а пользовательское. Вот модуль ядра - это системное приложение.

Касаемо кала -- ПНХ.

anonymous
()
Ответ на: комментарий от anonymous

Системное, деточка, системное, если ОС как таковой нет вовсе. Иди, деточка, изучай спецификации MIDP и J2ME, а потом уж, деточка, гавкай.

А ещё, животное ничтожное, прочитай классический учебник Л. Бека, "Введение в системное программирование" - там сказано, что такое системное программирование, а что - прикладное. Твоими быдловскими представлениями о дерьмовых модулях сраного ядра оно ну никак не ограничивается.

MAPA3MATuK
()
Ответ на: комментарий от anonymous_incognito

> В основу данной книги положено второе издание руководства > программиста UNIX System Programming: A programmer's guide to > software development by Keith Haviland, Dina Gray, Ben Salama.

С одной стороны, не хочется идти по пути авторов, выпускающих под своими именами переводы документации или компиляцию из нескольких книг, не всегда даже удосужившись понять написанное. С другой, известны примеры, когда хороший текст становится основой для нескольких книг под разные системы/языки/средства. Конечно, можно было бы заменить его, и достаточно быстро - но станет ли от этого он хуже?;) IMHO, хотя оригинальный текст и был изрядно изменен, лучше было с самого начала честно сказать об "источнике вдохновения".

> Да и на Паскале, как я убедился, не так уж мало народу пишет, может > эта информация поможет кому-нибудь уйти от Delphi/Windows в Linux/BSD, > а в книге даются корректные правила программирования в Unix.

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

- адресная арифметика,

- стандартная библиотека ввода/вывода;

- расширенное управление памятью и т.п.

На тех же примерах можно спокойно слепить вполне функциональный busybox - есть в разных вариациях cp, ls, cd, chmod, chown, ps, df и другие.

От авторов - Сергей Семериков

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.