LINUX.ORG.RU

Релиз 2.2.4 свободного компилятора Free Pascal

 ,


0

0

На радость школьникам и студентам 12 апреля, в День Космонавтики, вышел новый стабильный релиз свободного компилятора языка программирования Free Pascal, который считается средством разработки кросс-платформенных приложений.

Страница для загрузки

В основном эта версия посвящена исправлению ошибок.
Список изменений, которые могут повлиять на уже существующие проекты
Логи изменений в Subversion

>>> Сайт проекта

★★★★★

Проверено: svu ()
Ответ на: микроэтюд от impfp

> // как эту функцию реализовать на Си?

Добавить t в параметры h явным образом. Понятности только прибавиться. Кстати, вложенные функции -- вещь довольно спорная.

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

> Это реализуется простейшим циклом

Примерчик оного по последней моде, пожалуйста. Раньше он был не совсем простейшим. >2. Ограничение set of byte. set of (16 где) могло бы и быть, но в моём fp set of word падает. set of anything нет и быть не может. > А сколько такие множества будут занимать памяти

8Кб для ворд, для остальных нужно хитрить.

> и насколько эффективно их будет использовать?

А это программист для себя решит.

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

> а в C по другому чтоли будет?

Да. Include объединяются. :)

> Ты перед тем, как метанировать почитал бы доки к fpc.

Я выше поправился, что эта фраза верна только для Дельфи.

> 4.2 В каком месте глючит fp?

У меня валится компиляция на s: set of word или что-то такое.

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

> Я попал в 1994-й год? :)

Давно были в российском вузе? У нас с 1994-го почти ничего и не поменялось.

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

> Но послушаем Профессора > "Лженаука начинается с того места, когда начинают заявлять, что Жабка - удобный и якобы "простой" язык. А уж почитать бредни малограмотного Гослинга о том, как языки дизайнить надо - так и вовсе обхохотаться можно."

И что? Яву так и использовуют в образовании -- базовый язы во второсортных вузах в США, единственый -- в третисортных. И в РФ так же можно было бы -- контигнета, не могущего написать решение кв. уравнения на паскале, тут хвататет.

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

Ну а программирование в рамках VCL/LCL ко вложенным функциям и не предрасолагает :)
Эх, был бы паскаль не паскаль можно было бы проворачивать что-то типа замены Карри:

type Func = function(x: integer): integer;
function f(x: integer): Func;
  function g(y: integer): integer;
  begin
    g := y + x;
  end;
begin
  f := @g;
end;

Но "ах" и "увы"... :)

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

> В Стэнфорде читают курс из 28 лекций по методологии программирования. Используют Java. Курс считается одним из самых длинных и... самых удачных.


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

Лекция 1. Как сделать на яве y=f(x)
Лекция 2. Как сделать на яве double h(double(*f)(double x)).
Лекция 3. Как сделать на яве КА
Лекция 4. Почему у народа нет и не должно быть потребности в препроцессоре (и всего остального, чего в яве нет)
...
Лекции 20-26. Как cделать на яве DSL и забыть об этом кошмаре.
Лекция 27. Как, казалось бы, сделать кодогенерацию на яве.
Лекция 28. Как же делать кодогенерацию на яве, учитывая её дебильное ограничение в 64К на файл.

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

"Generics are templates for generating classes. It is a concept that comes from C++, where it is deeply integrated in the language. As of version 2.2, Free Pascal also officially has support for templates or Generics. They are implemented as a kind of macro which is stored in the unit files that the compiler generates, and which is replayed as soon as a generic class is specialized. Currently, only generic classes can be defined. Later, support for generic records, functions and arrays may be introduced." (c) ref.pdf

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

>Сферический препод в вакууме о нем может и не знать, все просто, нет в методичке - от лукавого, и разбираться, чем он от борланда отличается никто не будет.

Да, "не знать" это девиз преподов информатики в российской школе. Ведь речь не о scheme, а всё-таки о gnu C.

Place-des-Arts
()
Ответ на: комментарий от sv75

>Примерчик оного по последней моде, пожалуйста. Раньше он был не совсем простейшим.

Эээ.. Тебе реализацию, как в цикле проверять состояние соответствующих битов?

>8Кб для ворд, для остальных нужно хитрить.


Есть кстати идеи, как хитрить? Для неконстантных множеств, ес-но. Или урл, если уже есть интересные реализации.


>> и насколько эффективно их будет использовать?

>А это программист для себя решит.


Многие программисты и не подумают о том, что те же 8КБ не в каждый кэш влезут.

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

>Ну, квантор всеобщности. Опиши, пожалуйста, с использованием одного только этого квантора предикат разложения множества в последовательность.

А начерта м не последовательность? Мне надо для каждого элемента множества сделать действие. Порядок не имеет значения.

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

> Эээ.. Тебе реализацию, как в цикле проверять состояние соответствующих битов?

Да нет, банально, как сейчас на fp принято писать цикл для перебора элементов set of MyType

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

Посмотри как set реализован в нормальных библиотеках. Там это дерево(C++), интерфейс к дереву или хэштаблице(java). Вот оно как раз легко перебирается, однако требует сравнимости или хэшируемости элементов, и обращение происходит за n*log(n)

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

для хэштаблицы конечно же за константу, но довольно большую.

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

>Да нет, банально, как сейчас на fp принято писать цикл для перебора элементов set of MyType

А зачем их перебирать? Это же не произвольные объекты, над которыми можно производить какие-то действия. Для таких ситуаций, насколько я понимаю, используется TList и производные от него. А Set полезно в том случае, если нам надо выполнить какое-то действие при наличии нескольких условий, чтобы не писать развесистый if ... then с множеством and внутри него.

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

>Да нет, банально, как сейчас на fp принято писать цикл для перебора элементов set of MyType

Понятия не имею, как принято.

var
myset:set of char=['a','c','d','z'];
bb:array[0..31] of byte absolute myset;
a:char;

begin
for a:=#0 to #255 do
if( (bb[byte(a) shr 3])and (1 shl (byte(a) and 7)) <>0 ) then
writeln('do somethibg with '+a) ;
end

Как-то так, наверное :)
Не уверен правда, что соберется, но принцип думаю понятен. Простора для оптимизации хватает, это лобовой вариант.

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

>Посмотри как set реализован в нормальных библиотеках. Там это дерево(C++), интерфейс к дереву или хэштаблице(java). Вот оно как раз легко перебирается, однако требует сравнимости или хэшируемости элементов, и обращение происходит за n*log(n)

Ну так это же совсем не то, что set в паскале, и для других целей.

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

>«Процесс программирования совсем не связан с теми процессами, которые используются для решения математических уравнений» © Аллен Голуб

/очередной гвоздь, забитый в голову профессоропоклонников

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

> Для таких ситуаций, насколько я понимаю, используется TList и производные от него.

О чём и речь -- set не ясно, зачем и нужен, кроме как if opt in Options then и является неясным костылём.

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

> Кхм. Вообще-то это не глюк: "A set can contain at most 255 elements."

Я в курсе. Но то, что компилятор валится с segmentaion fault -- это глюк (на set of integer -- выдаёт корректную ошибку).

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

> «Процесс программирования совсем не связан с теми процессами, которые используются для решения математических уравнений» © Аллен Голуб

/очередной гвоздь, забитый в голову профессоропоклонников

Неужто vsl считал, что программирование -- это типа решения ax^2+bx+c=0?

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

>> for a:=#0 to #255 do

>Вот я как раз о том, как сюда принято писать first(s) и end(s) ;)


Ну добавь в тот цикл return(a) и назови это first(s) :) Для end(s) цикл в обратную сторону..

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

>Аналогом set в паскале является конструкция switch в C. я имею в виду способ работы и эффективность. farafonoff (*) (15.04.2009 23:48:44)

В паскале элементы множества задаются номерами битов и операция проверки принадлежности заключается в сдвиге бит и побитовой конъюнкции. При чем тут switch/case? Это совершенно разные операции. (switch реализуется операциями сравнения).

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

http://www.ibm.com/developerworks/ru/library/l-gcc-hacks/index.html

Применение специальных возможностей GCC в ядре Linux ...c). Кроме того, при использовании switch/case в компиляторе включается оптимизация, использующая реализацию таблиц перехода.

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

>В С вроде бы switch реализуется через таблицы. в java кажется тоже.
>farafonoff (*) (16.04.2009 16:38:54)

Case стандартно реализуется с помощью команд сравнения регистров:

	switch(c){
	  case 0:printf("0\n"); break;
	  case 1:printf("1\n"); break;
	}

; 12   : 	switch(c){

	mov	al, BYTE PTR ?c@@3DA			; c
	mov	BYTE PTR -4+[ebp], al
	cmp	BYTE PTR -4+[ebp], 0            ; case 0
	je	SHORT $L535
	cmp	BYTE PTR -4+[ebp], 1            ; case 1
	je	SHORT $L537
	jmp	SHORT $L532
$L535:

; 13   : 	  case 0:printf("0\n"); break;

	push	OFFSET FLAT:??_C@_02LOGN@0?6?$AA@	; `string'
	call	_printf
	add	esp, 4
	jmp	SHORT $L532
$L537:

; 14   : 	  case 1:printf("1\n"); break;

	push	OFFSET FLAT:??_C@_02KIMH@1?6?$AA@	; `string'
	call	_printf
	add	esp, 4
$L532:

; 16   : 	return 0;

	xor	eax, eax

; 17   : }

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

>В С вроде бы switch реализуется через таблицы

И какая таблица потребуется для такого:

case 1:
...
case 10000:
....
case -10000000:
....

? :)

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

>> На с++ учить нельзя, поскольку это не язык, а бардак и каша. Можно на яве или си-диезе.

> В Стэнфорде читают курс из 28 лекций по методологии программирования. Используют Java. Курс считается одним из самых длинных и... самых удачных.

Для java требуется хорошее знание ооп. Да и к тому же недостаточно лаконичный синтаксис языка -постоянно использовать длинные конструкции типа public static void main(). Методологию ооп еще можно изучать, но для начального обучения программированию вряд ли подходит.

Хотя все зависит от курса и на каком уровне сложности изучается язык(в cлучае с с++). Можно учить и на с++, если использовать возможности на уровне паскаля, он по моему ничем не хуже.

>Потому как надо учить в ВУЗе математике, а не ремеслу быдлокодера

это скорее зависит от качества курса, а не от языка

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

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

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

>Вообще по-моему легче оптимизировать вручную самому.

Вообще-то реализация case как и всего остального - целиком и полностью на совести компилятора, ручная "оптимизация" подобных конструкций - дело бесполезное и часто даже вредное. Лучше изучить работу компилятора, чем каждый раз делать ненужную работу.
http://www.insidepro.com/kk/031/031r.shtml

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

>целиком и полностью на совести компилятора > ручная "оптимизация" подобных конструкций - дело бесполезное и часто даже вредное

согласен, но все зависит от конкретной программы, в некоторых ситуациях программист может знать лучше чем компилятор, вообще компилятор по идее должен иметь возможность отключения оптимизации, к тому же в самой статье говорится что при оптимизации может получаться код с "плавающей" производительностью

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

>Руками оптимизировать можно только на конкретную целевую платформу.

4.2

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

Tu3eK, наверно препод по Паскалю в свое время привил патологическую ненависть к предмету? Лучше спокойно к этому относиться. Раз Паскаль существует, развивается, значит кому-то нужен, и изменить это нам скорее всего не суждено. Можно ознакомиться с аргументами других и высказать свое мнение, а ругать то, чем не пользуешься, не по-мужски. Кстати, на моей работе используются небольшие программки, написанные на Паскале под какие-то конкретные задачи, и всех "просто пользователей" это ПОЛНОСТЬЮ устраивает.

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