Планирую большую серию статей по FPC/Lazarus

Обсуждаются как существующие проекты (перевод документации, информационная система и т.п.), так и создание новых.

Модератор: Модераторы

Планирую большую серию статей по FPC/Lazarus

Сообщение Иван Шихалев » 11.10.2011 09:07:05

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

Общая концепция: аудитория — не новички в программировании как таковом (для совсем начинающих, как мне кажется, уже достаточно материала), но, возможно, люди, ни разу не видевшие Free Pascal. Охват материала — максимальный, какой смогу (скажем, 3d-графика и мультимедиа — не мои темы). Степень углубления определится по ходу дела.

Ссылки:


Новые записи будут появляться по тегу «fpcnotes». Надеюсь на комментарии.
Последний раз редактировалось Иван Шихалев 26.08.2012 22:05:43, всего редактировалось 2 раз(а).
Причина: Добавил новые ссылки в правильном порядке
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Планирую большую серию статей по FPC/Lazarus

Сообщение v-t-l » 11.10.2011 10:40:10

Иван Шихалев писал(а):В устаревших версиях компилятора 1.x, которые можно попытаться найти на p-зеркалах в интернете, поскольку на официальном p-сервере

странные символы (Firefox 7.0.1, Chromium 14.0.818.0 - win32 xpsp2; Firefox 7.0.1, Chromium 15.0.871.0 - Ubuntu 10.04 x86).
Иван Шихалев писал(а):Итого: вы можете, используя Free Pascal и/или Lazarus, писать, как проприентарные
v-t-l
энтузиаст
 
Сообщения: 733
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Планирую большую серию статей по FPC/Lazarus

Сообщение Иван Шихалев » 11.10.2011 11:41:29

Спасибо. Fixed.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Планирую большую серию статей по FPC/Lazarus

Сообщение Little_Roo » 11.10.2011 12:01:46

Иван Шихалев писал(а):Спасибо. Fixed.

Не совсем Fixed :cry:
Код: Выделить всё
RunTime Library (RTL): Reference Guide [9]

Код: Выделить всё
[5] Официальный p-сервер

Код: Выделить всё
[9] RunTime Library (RTL):
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Планирую большую серию статей по FPC/Lazarus

Сообщение Иван Шихалев » 11.10.2011 12:37:10

Done.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Планирую большую серию статей по FPC/Lazarus

Сообщение alexey38 » 11.10.2011 16:37:38

В вводной статье можно было несколько слов сказать про версии какие где брать и чем отличаются, смысле что есть стабильные версии и есть ежедневные версии.
Также пару слов можно сказать про то как получать самую последнюю версию и как ее собирать на основных платформах.
Новичков на freepascal/lasarus это может изначально смутить, не разобравшись с начальными действиями человек может потерять интерес.
На начальном этапе можно указать на самые ключевые настройки, от которых зависит успешность компиляции.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: Планирую большую серию статей по FPC/Lazarus

Сообщение Little_Roo » 11.10.2011 17:26:22

alexey38 писал(а):В вводной статье можно было несколько слов сказать про версии какие где брать и чем отличаются, смысле что есть стабильные версии и есть ежедневные версии.
Также пару слов можно сказать про то как получать самую последнюю версию и как ее собирать на основных платформах.
Новичков на freepascal/lasarus это может изначально смутить, не разобравшись с начальными действиями человек может потерять интерес.

но ведь автор...
Общая концепция: аудитория — не новички в программировании как таковом (для совсем начинающих, как мне кажется, уже достаточно материала

А так, очень полезное начинание, и я думаю (надеюсь) разрастется в нормальную, ПОЛНУЮ доку с добавлениями, исправлениями, обменом опытом и багами :D
Наш ответ Википенделю :shock:
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Планирую большую серию статей по FPC/Lazarus

Сообщение Иван Шихалев » 11.10.2011 19:49:41

alexey38 писал(а):В вводной статье можно было несколько слов сказать про версии какие где брать и чем отличаются, смысле что есть стабильные версии и есть ежедневные версии.

С этим согласен, спасибо за замечание.

alexey38 писал(а):Также пару слов можно сказать про то как получать самую последнюю версию и как ее собирать на основных платформах.

Это не для вводной.

alexey38 писал(а):Новичков на freepascal/lasarus это может изначально смутить, не разобравшись с начальными действиями человек может потерять интерес.

Новичкам лучше пользоваться последней стабильной версией. Ночные сборки и SVN — для тех, кто понимает, что делает.

alexey38 писал(а):На начальном этапе можно указать на самые ключевые настройки, от которых зависит успешность компиляции.

Это какие, например?

Да, одна заметка — не равно одна статья. Статья — скорее всего, три–четыре заметки. Версии, установка, зависимости и т.д., по всей видимости опишу отдельной заметкой типа «Перед началом работы», которая в итоге войдет во вводную статью вместе с тем, что уже есть.

Добавлено спустя 3 минуты 27 секунд:
Little_Roo писал(а):и я думаю (надеюсь) разрастется в нормальную, ПОЛНУЮ доку

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

Добавлено спустя 10 часов 49 минут 50 секунд:
Вторая заметка:

Добавлено спустя 1 минуту 20 секунд:
Вторая заметка — не продолжение первой статьи, а начало второй. В продолжение первой, как сказано выше, планируется рассказ о версиях, установке и проч.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Планирую большую серию статей по FPC/Lazarus

Сообщение Sergei I. Gorelkin » 12.10.2011 11:58:33

Пара замечаний по второй части:
- Требование наличия внешнего ассемблера зависит от платформы. Для x86 внутренний ассемблер реализован, а для того же ARM - нет, поэтому внешний ассемблер таки необходим.
- Можно получить листинг в "привычном" формате, добавив ключ -Amasm (вместе с -al). Собрать его masm-ом скорее всего не получится, но для чтения сойдет.
- Строки типа ShortString не завершаются нулевыми байтами. В приведенном примере компилятор зачем-то добавил его к литералу, но полагаться на это в общем случае нельзя. А вот строки остальных типов (ansistring,widestring,unicodestring) - завершаются нулем всегда и гарантированно.
- В состоянии {$h+} литералы компилируются как ansistring, а если они содержат символы >127, то как unicodestring (строго говоря, так было до последних изменений с Дельфи-подобными строками. После них это утверждение может поменяться).
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Планирую большую серию статей по FPC/Lazarus

Сообщение Иван Шихалев » 12.10.2011 16:37:25

Sergei I. Gorelkin писал(а):- Требование наличия внешнего ассемблера зависит от платформы. Для x86 внутренний ассемблер реализован, а для того же ARM - нет, поэтому внешний ассемблер таки необходим.

Ну, я почти так и написал... Впрочем, исправлю на более явное утверждение.

Sergei I. Gorelkin писал(а):- Можно получить листинг в "привычном" формате, добавив ключ -Amasm (вместе с -al). Собрать его masm-ом скорее всего не получится, но для чтения сойдет.

На amd64 — нельзя. Я попытался.
Код: Выделить всё
Warning: Assembler output selected "MASM" is not compatible with "Linux for x86-64"
Warning: "AS" assembler use forced

Было мне ответом.

Sergei I. Gorelkin писал(а):Строки типа ShortString не завершаются нулевыми байтами. В приведенном примере компилятор зачем-то добавил его к литералу, но полагаться на это в общем случае нельзя.

Опаньки. Исправлю.

Sergei I. Gorelkin писал(а):В состоянии {$h+} литералы компилируются как ansistring

Хм. Сейчас полезу проверять — дело в том, что ключ -Sh не поменял ничего...

Добавлено спустя 2 минуты 32 секунды:
Проверил. Ничего не поменялось и с {$h+}

Добавлено спустя 9 минут 32 секунды:
Sergei I. Gorelkin писал(а):а если они содержат символы >127, то как unicodestring

При условии, что явно указана кодировка источника. Иначе — то же ShortString получается.

Кстати, никак не могу получить строку без завершающего нуля из литерала... И мне кажется, что его добавление само по себе было б вполне оправданно — чтобы быстрей работали конструкции вида PChar('lalala')...

Добавлено спустя 1 минуту 21 секунду:
Иван Шихалев писал(а):Ну, я почти так и написал...

Ан нет, сорри, буду исправлять.

Добавлено спустя 59 минут 25 секунд:
Уточнил про ассемблер и UnicodeString, добавил предупреждение о том, что внутренние представления могут меняться, и полагаться на них нельзя...

Добавлено спустя 3 минуты 20 секунд:
PS. Кстати, интересно, что литералы ShortString помещаются в секцию .rodata, тогда как UnicodeString — в .data. Хотя оно и логично — сама-то строка меняться не будет, а вот счетчик ссылок...
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Планирую большую серию статей по FPC/Lazarus

Сообщение Sergei I. Gorelkin » 12.10.2011 17:53:56

Иван Шихалев писал(а):На amd64 — нельзя. Я попытался.Код: Выделить всёWarning: Assembler output selected "MASM" is not compatible with "Linux for x86-64"Warning: "AS" assembler use forcedБыло мне ответом.


Это в линуксе нельзя, потому что там нет проприетарного ml64. В винде - можно. А вообще он при запуске с ключом -h пишет, помимо всего прочего, список поддерживаемых ассемблеров.

Иван Шихалев писал(а):Хм. Сейчас полезу проверять — дело в том, что ключ -Sh не поменял ничего...Добавлено спустя 2 минуты 32 секунды:Проверил. Ничего не поменялось и с {$h+}

Вот бардак... Не так давно исследовали этот момент, выяснили, что в режиме {$h+} все операции со строками вычисляются как ansistring, даже shortstring1:=shortstring2+shortstring3, причем это очень непросто исправить. Ну раз я неправ, значит неправ.

Иван Шихалев писал(а):Кстати, никак не могу получить строку без завершающего нуля из литерала... И мне кажется, что его добавление само по себе было б вполне оправданно — чтобы быстрей работали конструкции вида PChar('lalala')...

Приведение shortstring к pchar запрещено (хотя выражение @s[1] компилируется), а выражение pchar('литерал') создаст в ассемблерном листинге строку с нулем в конце, но без байта длины в начале.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Планирую большую серию статей по FPC/Lazarus

Сообщение Иван Шихалев » 12.10.2011 17:59:21

Sergei I. Gorelkin писал(а):Это в линуксе нельзя, потому что там нет проприетарного ml64. В винде - можно.

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

Sergei I. Gorelkin писал(а):Вот бардак...

Ну, я на SVN-транке все делаю... Там без бардака никак :)

Добавлено спустя 7 минут 36 секунд:
Sergei I. Gorelkin писал(а):создаст в ассемблерном листинге

Мда... Сейчас немного поэкспериментировал...
Код: Выделить всё
program Test;

const
  a = 'Hello, World!';

var
  p : PChar;
  s : shortstring;
  n : ansistring;

begin
p := a;
s := a;
n := a;
end.

Создает три копии самой строки в различных форматах... Не, оно, конечно, понятно, но как-то неэкономно...

Добавлено спустя 4 часа 36 минут 31 секунду:
Sergei I. Gorelkin писал(а):Не так давно исследовали этот момент, выяснили, что в режиме {$h+} все операции со строками вычисляются как ansistring, даже shortstring1:=shortstring2+shortstring3, причем это очень непросто исправить.


Видимо исправили:
Код: Выделить всё
# [9] a := 'Hello, ';
   movq   $U_$P$TEST_$$_A,%rdi
   movq   $_$TEST$_Ld1,%rdx
   movq   $255,%rsi
   call   fpc_shortstr_to_shortstr
# [10] b := ' World!';
   movq   $U_$P$TEST_$$_B,%rdi
   movq   $_$TEST$_Ld2,%rdx
   movq   $255,%rsi
   call   fpc_shortstr_to_shortstr
# [11] c := a + b;
   movq   $U_$P$TEST_$$_B,%rcx
   movq   $U_$P$TEST_$$_A,%rdx
   movq   $U_$P$TEST_$$_C,%rdi
   movq   $255,%rsi
   call   fpc_shortstr_concat

a, b и c — типа ShortString;

Добавлено спустя 1 минуту 21 секунду:
Да, это при {$h+}, впрочем, при {$h-} — ровно то же самое.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Планирую большую серию статей по FPC/Lazarus

Сообщение Sergei I. Gorelkin » 13.10.2011 00:10:24

Иван Шихалев писал(а):Видимо исправили:

Я уж было обрадовался, но истина, как обычно, оказалась посередине. Две переменные действительно дают результат типа shortstring (даже если слева от присвоения находится переменная типа ansistring, т.е. при сложении двух строк по 250 символов рез-т будет обрезан), переменная + литерал - то же самое, но если литерал поставить первым, результат вычисляется как ansistring:
Код: Выделить всё
{$H+}
var
  a,b: shortstring;
begin
  b:='world';
  a:='hello '+b;
end;
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Планирую большую серию статей по FPC/Lazarus

Сообщение Иван Шихалев » 13.10.2011 01:09:48

Мда. Занятно. А вообще, работа со строками сейчас активно изменяется? Имеет смысл в ней поковыряться и описать, или овчинка выделки не стоит — все равно все скоро поменяется?
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Планирую большую серию статей по FPC/Lazarus

Сообщение Sergei I. Gorelkin » 13.10.2011 11:20:23

На мой взгляд, пока лучше подождать.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

След.

Вернуться в Разное

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

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

Рейтинг@Mail.ru