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

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

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

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

Сообщение dedm0zaj » 01.12.2015 08:17:50

все темы всегда сводятся к строкам :D
dedm0zaj
постоялец
 
Сообщения: 108
Зарегистрирован: 05.10.2012 19:55:20

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

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

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

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

Сообщение dedm0zaj » 02.12.2015 13:00:19

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

очень странным выглядит привязка методов и свойств к простым типам
dedm0zaj
постоялец
 
Сообщения: 108
Зарегистрирован: 05.10.2012 19:55:20

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

Сообщение Лекс Айрин » 02.12.2015 13:17:32

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

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

Сообщение Дож » 02.12.2015 13:39:31

Фишка очень полезная гипотетически, но пока что малопригодная (или мне не удалось её завести).

Например, я хочу уметь получать в программе хеш от любых данных методом GetHash. Я могу написать:
Код: Выделить всё
THashDjb2ForAnsiString = type helper for AnsiString
  function GetHash: THash32; inline;
end;

function Djb2(P: PByte; Size: Int64): THash64;
begin
  Result := 5381;
  while Size > 0 do begin
    Result := ((Result shl 5) + Result) + P^;
    Inc(P);
   Dec(Size);
  end;
end;

function THashDjb2ForAnsiString.GetHash: THash32;
begin
  Result := Djb2(PByte(@Self[1]), Length(Self));
end;


И тогда от любого AnsiString-значения легко посчитать хеш (AnsiString('Hello').GetHash).

Но если я создам свой теймплейтный класс
Код: Выделить всё
generic THashMap<TKey, TValue> = object
  ...
end;

и внутри буду использовать TKey.GetHash, то все GetHash-хелперы будут видны только на момент написания дженерика, а не на момент его специализации, поэтому если я уже в клиентском по отношению к THashMap коде сделаю хелпер, скажем, на LongInt, то специализированный дженерик его не увидит. Это делает этот подход к заданию хеш-функции непригодным. А жаль.

И какие ещё могут быть архитектурные (т.е. не просто косметические изменения типа AnsiString('Hello').GetHash вместо GetHash('Hello')) применения у хелперов, кроме тупо наведения красоты?
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

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

Сообщение dedm0zaj » 02.12.2015 13:48:25

Лекс Айрин писал(а):dedm0zaj, почему? Очень удобная фишка. Посмотрим, как оно будет реализовано.


это чтобы не писать IntToString(i), а писать i.IntToString?
в принципе удобно при написании программ, когда после i. всплывают варианты, но при чтении мне наверно больше нравтся первый вариант.

хотя, с данным примером это смотрится нормально. но вот более сложные конструкции (которыми кишит java) читаются уже сложно. чтобы узнать что делается в данный момент, нужно перепрыгнуть через кучу объектов с точками и только потом прочесть сам метод. а в первом варианте сразу понимаем что делается и только потом - с чем это делается.
dedm0zaj
постоялец
 
Сообщения: 108
Зарегистрирован: 05.10.2012 19:55:20

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

Сообщение Лекс Айрин » 02.12.2015 13:52:41

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

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

Сообщение perlpunk » 06.12.2015 20:34:19

а замыкания и анонимные функции добавили ?
perlpunk
новенький
 
Сообщения: 90
Зарегистрирован: 26.09.2008 21:19:48

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

Сообщение Mirage » 06.12.2015 23:11:23

Зачем нужны анонимные функции? У них же синтаксис будет дельфовый, который на корню убивает всю пользу.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

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

Сообщение Дож » 07.12.2015 06:28:40

Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

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

Сообщение Cheb » 07.12.2015 17:35:18

Мдя, RTL на юникод (наконец-то!!!) переделали, а у классов с этим по прежнему туго. Бум делать заплатку.
Код: Выделить всё
type
  TFileStream = class(THandleStream)
  Private
    FFileName : UnicodeString;
  public
    constructor Create(const AFileName: UnicodeString; Mode: Word);
    constructor Create(const AFileName: UnicodeString; Mode: Word; Rights: Cardinal);
    destructor Destroy; override;
    property FileName : UnicodeString Read FFilename;
  end;
 
 
........


constructor TFileStream.Create(const AFileName: UnicodeString; Mode: Word);
begin
  Create(AFileName,Mode,438);
end;


constructor TFileStream.Create(const AFileName: UnicodeString; Mode: Word; Rights: Cardinal);

begin
  FFileName:=AFileName;
  If (Mode and fmCreate) > 0 then
    FHandle:=FileCreate(AFileName,Mode,Rights)
  else
    FHAndle:=FileOpen(AFileName,Mode);

  If (THandle(FHandle)=feInvalidHandle) then
    If Mode=fmcreate then
      raise EFCreateError.createfmt(SFCreateError,[AFileName])
    else
      raise EFOpenError.Createfmt(SFOpenError,[AFilename]);
end; 
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

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

Сообщение Лекс Айрин » 10.12.2015 11:07:32

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

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

Сообщение Cheb » 11.12.2015 22:20:26

Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

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

Сообщение perlpunk » 12.12.2015 15:38:13

Дож писал(а):А замыкания есть с 2.6.0 («is nested» ссылки)
http://wiki.freepascal.org/FPC_New_Feat ... _variables
http://www.freepascal.org/docs-html/ref/refse17.html



я имел ввиду чтото вменяемое

типа как в C++
Код: Выделить всё
   auto lambda = [](auto x) {
      return x;
   };

типа используем
        writeln(lambda("Hello generic lambda!\n"));


объявление сразу в блоке кода и присваивание переменной
будет такое?
perlpunk
новенький
 
Сообщения: 90
Зарегистрирован: 26.09.2008 21:19:48

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

Сообщение Лекс Айрин » 12.12.2015 15:45:43

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

Пред.След.

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

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

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

Рейтинг@Mail.ru