Вышла новая версия компилятора FreePascal

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Re: Вышла новая версия компилятора FreePascal

Сообщение kazalex » 15.12.2015 01:04:38

Лекс Айрин писал(а):Было время и я вполне использовал турбопаскаль в объеме виртовского функционала.... это не проблема

Бело время... Было время люди в шкурах ходили и мамонтов кушали. Виртовскому паскалю 45 лет, сладких снов.

Лекс Айрин писал(а):Конечно... это лишь причина появления несогласованности. И, как следствие, проблем

Увы, но причина в другом. Когда в дельфях изменили формат строк проблем было ровно ноль. То есть, у тех кто справку читал и следовал рекомендациям их небыло. Причина не в бобине, как обычно.

Лекс Айрин писал(а):сбрось поддержку дельфи и почисть язык и будет намного легче

И количество пользователей FPC умножится на ноль. В FPC приходят с дельфей, не будет совместимости - не будет и пользователей.

Лекс Айрин писал(а):А ничего не путаете? Поддержка это не обязательно отсутствие проблем

Не путаю и ещё раз повторяю, я говорю только о заявленной поддержке. Например nested types и advanced records... http://bugs.freepascal.org/view.php?id=27349

Mikhail писал(а):Замыкания это все-таки "фишка" из мира функционального программирования, зачем это нужно в императивном Паскале?

Для того же, для чего оно нужно в куче других императивных языков. Тем более, что замыкания ортогональны понятию императивности или функциональности языка.
kazalex
постоялец
 
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

Re: Вышла новая версия компилятора FreePascal

Сообщение Дож » 15.12.2015 01:08:37

Mikhail писал(а):
Дож писал(а):
Кстати, а какое время жизни у такой переменной и как вообще в FPC в этом случае осуществляется управление памятью?

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

т.е. так работать не будет?
Код: Выделить всё
{$mode objfpc}{$H+}
{$MODESWITCH NESTEDPROCVARS}
program project1;
type TAdd = function (A, B: Integer): Integer is nested;

procedure Create(var T: TAdd; AC: Integer);
var C: Integer;
function Add(A, B: Integer): Integer;
begin
  Result :=A + B*C;
end;

begin
C:=AC;
T:=@Add;
end;

var T1, T2: TAdd;
begin
Create(T1, 1);
Create(T2, 2);
writeln(T1(1,1));
writeln(T2(1,1));
end.     

Не будет, после выхода из Create вызов T становится UB.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Вышла новая версия компилятора FreePascal

Сообщение Лекс Айрин » 15.12.2015 09:36:05

Дож писал(а):На чём будем писать, подскажите, эксперт Лекс?

в бинарных кодах.

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

Добавлено спустя 12 минут 54 секунды:
kazalex писал(а): Виртовскому паскалю 45 лет, сладких снов.

Боюсь, он переживет, в разных реинкарнациях, многие другие языки.

kazalex писал(а):И количество пользователей FPC умножится на ноль.

Не думайте о людях плохо. Если лично ВЫ перешли, то это не значит, что у других такой же путь. Я, например, дельфи только посмотрел и не смог в нем работать. А когда смог бы, то не стал, так как нашел Lazarus. Тем более, что дельфи не существует под никсами. Ее мертворожденный никсовый клон уже давно почил.

kazalex писал(а):Не путаю и ещё раз повторяю, я говорю только о заявленной поддержке.

Я тоже повторю, что скорее всего придется искать другой язык. Или не пользоваться данной возможностью. Иногда уже сейчас непонятно как работает тот или иной код и в исходниках языка(библиотеки Lazarus) каша. Взять туже поддержку русского языка... я просто не смог подправить путь до нужных мне файлов((( По идее, уж это-то элементарная задача.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Вышла новая версия компилятора FreePascal

Сообщение Дож » 15.12.2015 10:13:12

А так он нее можно достаточно безболезненно отказаться. но ошибок будет больше...

Голословное утверждение, а проблема выдуманная. Она является ключевой только в Вашем воображении. Либо предъявляйте факты, иначе смысла в Ваших словах никакого нет.

Есть такой сайт
http://cpphints.com/
На нём еженедельно разбираются ошибки из реальных C++ проектов, и там почему-то пока нет ошибки «не прочли результат функции, потому что у нас не различаются function и procedure».
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Вышла новая версия компилятора FreePascal

Сообщение Лекс Айрин » 15.12.2015 10:45:58

Дож, такие легко находимые ошибки должны отсекаться на этапе компиляции. Если они появятся в разделе багов реальной программы, то это просто напросто причина увольнения программиста. Ну или отправить его на курсы по программированию. И, кстати, в языках сишной группы нет ключевого слова "procedure"... или уже есть?

кстати, код типа for (;;) я бы поостерегся называть корректным. Малейшая ошибка в написании тела цикла может привести к зацикливанию программы. Но на сайте он красуется в разделе корректного.

Сам факт, что они вылезли в коде примера говорит, что ошибки такого рода не редкость. Особенно, если пример пишет сишный программист, у которого немного другие привычки написания кода.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Вышла новая версия компилятора FreePascal

Сообщение Дож » 15.12.2015 11:04:36

И, кстати, в языках сишной группы нет ключевого слова "procedure"... или уже есть?

Нет, и поэтому, согласно Вашим же словам, программисты С++ должны постоянно страдать от ошибок, чего не наблюдается в реальном мире.

кстати, код типа for (;;) я бы поостерегся называть корректным. Малейшая ошибка в написании тела цикла может привести к зацикливанию программы. Но на сайте он красуется в разделе корректного.

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

На этом всё, я в дальнейшей дискуссии с Вами не участвую.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Вышла новая версия компилятора FreePascal

Сообщение kazalex » 15.12.2015 11:30:53

Лекс Айрин писал(а):Боюсь, он переживет, в разных реинкарнациях, многие другие языки

Я о том, что невозможно решать современные задачи на диалекте полувековой давности.

Лекс Айрин писал(а):Тем более, что дельфи не существует под никсами

Ты ещё скажи, что новые юзеры в паскаль из никсов приходят...

Лекс Айрин писал(а):Или не пользоваться данной возможностью

Отличное решение. Это, несомненно, увеличивает привлекательность FPC.
kazalex
постоялец
 
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

Re: Вышла новая версия компилятора FreePascal

Сообщение Лекс Айрин » 15.12.2015 13:22:01

Дож писал(а):потому что в реальных программах возникает потребность в бесконечных циклах

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

Дож писал(а):Нет, и поэтому, согласно Вашим же словам, программисты С++ должны постоянно страдать от ошибок, чего не наблюдается в реальном мире.

Если лично ВЫ этого не видите, то это не значит, что этого не бывает.

kazalex писал(а):Я о том, что невозможно решать современные задачи на диалекте полувековой давности.


да ну... на паскале написан был компилятор языка С и первые версии виндовс. И, да, когда (и если) я созрею до своего компилятора, то сомневаюсь, что я сильно выйду за рамки классического паскаля. И уж в нем не будет многих "фишек" fpc будут другие, приближающие его к потокориентированной парадигме программирования.

kazalex писал(а):Ты ещё скажи, что новые юзеры в паскаль из никсов приходят...


Если что, то fpc под никсами всегда доступен. Причем, почему-то не GNU Pascal, а как раз fpc...

kazalex писал(а): Это, несомненно, увеличивает привлекательность FPC.

это уменьшает его привлекательность... пользуются особыми возможностями всего процентов пять программистов. Остальным они просто до лампочки, но от их наличия код компилятора, а иногда и программы, сильно разбухает.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Вышла новая версия компилятора FreePascal

Сообщение Cheb » 15.12.2015 18:07:54

Анонимные методы - это лишь узаконивание, и гарантирование работающести, существующей практики.
Хак основан на том, что метод - это, технически, функция/процедура с ещё одним скрытым параметром.
Т.е. при компиляции
Код: Выделить всё
TMyClass = class
  function f(x: longint): longint;
end;

и
Код: Выделить всё
function f(Self: TMyClass; x: longint): longint;

дают код, работающий абсолютно идентично.
Только в исходнике вызов оформляется по разному:
Код: Выделить всё
y:= o.f(x);

и
Код: Выделить всё
y:= f(o, x);

И таким хаком тыщу лет все пользуются. НО! у разработчиков компилятора оно как кость в горле, мешает хитрым оптимизациям.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Вышла новая версия компилятора FreePascal

Сообщение Лекс Айрин » 15.12.2015 18:18:05

Cheb, и зачем тогда нужен такой хак, из-за которого код становится хуже?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Вышла новая версия компилятора FreePascal

Сообщение and » 15.12.2015 19:25:02

Дож писал(а):(объект нужно объявить, описать конструктор и метод, создать и уничтожить
Классовые функции позволяют забить на создание-уничтожение. В пакете fcl-stl функция сравнения подаётся как раз таким образом.
 
Не могу понять, почему некоторым из присутствующих так встали поперёк горла замыкания. Как по мне, так с точки зрения языка более нелогичным выглядит, что описываемая совершенно одинаковыми словами процедура/функция
Код: Выделить всё
Function MyProc(param:tParam):tResult
на самом деле является представителем одной из трёх совершенно не совместимых (с точки зрения компилятора, хаки не рассматриваем) между собой сущностей: собственно подпрограмма, или метод, или вложенная подпрограмма. Костыль в виде "of object"/"is nested" хоть какую-то синтаксическую определённость возвращает.

Добавлено спустя 9 минут 57 секунд:
Лекс Айрин писал(а):люди будут постоянно обращаться к функции с возвращаемым значением, как к функции без оного
Ой! А я постоянно так делаю. Я плохой, да?
Лекс Айрин писал(а):И наоборот
И такое поведение вполне штатно. Начиная со вполне "виртовскопаскальной" [s]функции[/s] процедуры Val. Через var-параметр значение возвращается. А если вдруг подпрограмма возвращает больше одного результата (как та же Val), то это единственный (не считая описания нового сложного типа, e.g. record) способ. Так что разница между процедурой и функцией - чисто сахарная. Не надо возводить её в ранг ключевой фичи.

Добавлено спустя 11 минут 48 секунд:
Лекс Айрин писал(а):сомневаюсь, что я сильно выйду за рамки классического паскаля. И уж в нем не будет многих "фишек" fpc будут другие, приближающие его к потокориентированной парадигме программирования
Modula-2?

Добавлено спустя 18 минут 49 секунд:
Глупо консервировать язык. С ЯП ситуация такая же, как с естественными языками: заимствования засоряют "расово чистый" лексикон, но повышают информационную насыщенность. Лично я вполне "распробовал" generic'и, и мне без них ужЕ не комфортно. Перегрузка операторов также пришлась по вкусу, хотя и без неё вполне хорошо. Печально, что скрещение этих двух фич сейчас кривооое...
А вот advanced records стали imho лишними: получился этакий недо-object. Ну и ладно: мне не понравилось - я не пользуюсь. Это ж не повод стенать, что FPC скатывается в УГ.
Главное, чтобы не получилось как в анекдоте "а теперь мы со всей этой х..нёй попытаемся взлететь".
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Re: Вышла новая версия компилятора FreePascal

Сообщение Лекс Айрин » 15.12.2015 20:13:09

and писал(а):Так что разница между процедурой и функцией - чисто сахарная.


В принципе, да. Тут я соглашусь.

and писал(а):Не надо возводить её в ранг ключевой фичи.

Иначе просто не нужно было бы ее вводить.


and писал(а):Ой! А я постоянно так делаю. Я плохой, да?


Да нет. Это как раз вполне нормально.

and писал(а):И такое поведение вполне штатно. Начиная со вполне "виртовскопаскальной" [s]функции[/s] процедуры Val. Через var-параметр значение возвращается.


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

and писал(а):Modula-2?


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

Ух да я уберу процедуры (объединю с функциями.) -- соответственно, у меня функции могут не возвращать значения.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Вышла новая версия компилятора FreePascal

Сообщение kazalex » 15.12.2015 21:19:09

Лекс Айрин писал(а):И, да, когда (и если) я созрею до своего компилятора, то сомневаюсь, что я сильно выйду за рамки классического паскаля

Разговор, вижу, совсем в бессмысленный превратился. Удачи с {$mode tp}.
kazalex
постоялец
 
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

Re: Вышла новая версия компилятора FreePascal

Сообщение Лекс Айрин » 15.12.2015 21:49:23

kazalex, спасибо...

Зря ты думаешь, что разговор бессмысленный. По крайней мере, лично я услышал ТВОЕ мнение. То, что я с ним не согласен еще не повод ругаться друг с другом. Да, я пока не созрел до написания своего компилятора. И созрею вряд ли скоро. Пишется он вяло... есть более насущные проекты, на которых я поучусь программированию. А если я брошу... что же... значит я нашел идеальный для себя язык (IDE), который написал кто-то другой. Например, тот же Мартин. И не вижу в этом ничего плохого. По крайней мере, я за это возьмусь. Кто знает, может быть мы сделаем это вместе. Жизнь ведь поворачивается по разному.

А может, FPC (Lazarus) и превратится в такой язык.
kazalex писал(а): Удачи с {$mode tp}.


Не... как раз в tp больше лишнего. Хоть и поменьше, чем в дельфи. Лучше ориентироваться как раз на классический (желательно виртовский) паскаль. И если вдруг я решусь добавить те же самые замыкания, то легче их добавить, чем потом выпиливать.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Вышла новая версия компилятора FreePascal

Сообщение Mikhail » 17.12.2015 13:17:30

Дож писал(а):Не будет, после выхода из Create вызов T становится UB.

Тогда это какое-то недозамыкание. :)
Да еще и разрешаются заведомо ошибочные действия. Плохая, негодная фича. :)
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Пред.След.

Вернуться в Free Pascal Compiler

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

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

Рейтинг@Mail.ru
cron