FPC, Lazarus зачем они Вам?

Любые обсуждения, не нарушающие правил форума.

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

Re: FPC, Lazarus зачем они Вам?

Сообщение скалогрыз » 02.10.2015 23:36:23

kazalex писал(а):Я же о другом. Если фичу таки решили добавить, то прорабатывать применимость и варианты использования нужно от и до. А то полу-работающие полу-фичи какие-то получаются

рисково же! Вот допустим реализовали фичу до 100% делфи совместимости. А потом ещё и улучшили! Всё вроде бы отлично.
Но делфи в следующей версии сама доработает фичу, но доработка может оказаться несовместимой с FPC.

И кто будет виноват? конечно же команда FPC. Потому что есть понятие "совместимость с делфи", но почему-то никто не диктует делфи "совместимость с FPC".

Как итог. любая полу-фича в делфи, очень может оказаться полу-фичей в FPC. Но с тем плюсом, что её можно отлючить/использовать по своему вкусу.
Как скажем нумерация Ansi/Wide/Unicode строк с 0-элемента, а не с первого
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: FPC, Lazarus зачем они Вам?

Сообщение vitaly_l » 02.10.2015 23:42:43

скалогрыз писал(а):ну хз-хз. вот смотри пример.

Я например недавно столкнулся с тем, что класс перестал работать как только я назвал функции класса Inc и Dec ... Потом переименовал в Incl и Decl - всё работает. Так что, там, есть какие-то "ограничения/сбои" в названиях. Но они не смертельны (если заранее знать что они возможны).
kazalex писал(а):никаких догонялок не требуется

По моему, это именно догонялки, т.к. в этих конструктах языка, взятых из других языков - особой надобности я не вижу. Просто не вижу такой задачи, в которой это было-бы удобнее или тем более необходимо. Более того, эти фиче-конструкты затормозят работу программы (хотя и не факт). Скалогрыз прав, завтра в Delphi придумают новую фичу и FPC - будет опять догонять. Но у них нет выхода, а Вам-то это зачем? Хотя... возможно это и удобно в некоторых случаях...


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: FPC, Lazarus зачем они Вам?

Сообщение скалогрыз » 02.10.2015 23:48:05

vitaly_l писал(а):Я например недавно столкнулся с тем, что класс перестал работать как только я назвал функции класса Inc и Dec ... Потом переименовал в Incl и Decl - всё работает. Так что, там, есть какие-то "ограничения/сбои" в названиях. Но они не смертельны (если заранее знать что они возможны).

Код: Выделить всё
program vitaly;
{$ifdef fpc}{$mode delphi}{$endif}
type
  TMyClass = class(TObject)
  public
    v: Integer;
    procedure Inc;
    procedure Dec;
  end;

procedure TMyClass.Inc;
begin
  system.inc(v);
end;

procedure TMyClass.Dec;
begin
  system.dec(v);
end;

var
  m: TMyClass;
begin
  m:=TMyClass.Create;
  m.Inc;
  writelN(m.v);
  m.Dec;
  writelN(m.v);
  m.Free;
end.


Код: Выделить всё
C:\projects\testDodge>fpc vitaly.pas
Free Pascal Compiler version 2.6.4 [2014/03/06] for i386
Copyright (c) 1993-2014 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling vitaly.pas
Linking vitaly.exe
28 lines compiled, 0.1 sec , 29008 bytes code, 1996 bytes data

что я делаю не так?
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: FPC, Lazarus зачем они Вам?

Сообщение kazalex » 02.10.2015 23:49:09

скалогрыз писал(а):рисково же! Вот допустим реализовали фичу до 100% делфи совместимости. А потом ещё и улучшили! Всё вроде бы отлично.
Но делфи в следующей версии сама доработает фичу, но доработка может оказаться несовместимой с FPC.

Собственный диалект FPC и так с дельфями не совместим, что мешает в нём всё делать хорошо и правильно, либо просто не уподобляться?
kazalex
постоялец
 
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

Re: FPC, Lazarus зачем они Вам?

Сообщение скалогрыз » 02.10.2015 23:53:44

kazalex писал(а):Собственный диалект FPC и так с дельфями не совместим,

именно по-этому, благодяря, typeswitch-ам, все сомнительно/недодуманные фичи, в OBJFPC выключенны по-умолчани.
и по-вкусу можно их включить!
например TypeHelp-еры могут быть ключены в OBJFPC когда будут доведены до ума. (будут реализованы для object-ов, interface-ов ну и несколько могут быть использованы, но не ранее)

kazalex писал(а):...либо просто не уподобляться?

не получается. Появилось достаточное количество проектов, которые компилируется на обоих компиляторах. И если в коде использовались новые фичи делфи (и не важно достаточно хорошо продуманные или нет), то вскорости появится кто-то либо с пачем, либо с настойчивым (слезами/деньгами) тербованием добавить фичу в FPC.
Все споры о "технической целесообразности фичи" заканичваются аргументом: "нужно совместимость с FPC". Да и контрибутера, обижать не хочется.

И естественно, для чистоты, фича может быть не включена в $mode objfpc по-умолчанию, но зато будет доступна в $mode delphi

FPC команда удивительно ловко умеет "и вашим, и нашим" (возможно потому что пишут на паскле... :mrgreen: :mrgreen: :mrgreen: )
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: FPC, Lazarus зачем они Вам?

Сообщение vitaly_l » 03.10.2015 00:02:18

скалогрыз писал(а):что я делаю не так?


Код: Выделить всё

type
TSomeClass = class // без объявления TObject
   function  Incl(cnt:word): dword;            // Inc
   function  Decl(cnt:word): dword;            // Dec   
end;


И вот эти штуки я тоже не указываю: {$ifdef fpc}{$mode delphi}{$endif} у меня там по умолчанию вот такие: {$mode objfpc}{$H+}
И программа у меня оконная. Всё остальное так же.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: FPC, Lazarus зачем они Вам?

Сообщение скалогрыз » 03.10.2015 00:05:05

vitaly_l писал(а):И вот эти штуки я тоже не указываю: {$ifdef fpc}{$mode delphi}{$endif} у меня там по умолчанию вот такие: {$mode objfpc}{$H+}
И программа у меня оконная. Всё остальное так же.

Код: Выделить всё
{$ifdef fpc}{$mode objfpc}{$h+}{$endif}
type
  TMyClass = class
  public
    v: Integer;
    procedure Inc;
    procedure Dec;
  end;

procedure TMyClass.Inc;
begin
  system.inc(v);
end;

procedure TMyClass.Dec;
begin
  system.dec(v);
end;

var
  m: TMyClass;
begin
  m:=TMyClass.Create;
  m.Inc;
  writelN(m.v);
  m.Dec;
  writelN(m.v);
  m.Free;
end.

Код: Выделить всё
C:\projects\testDodge>fpc vitaly.pas
Free Pascal Compiler version 2.6.4 [2014/03/06] for i386
Copyright (c) 1993-2014 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling vitaly.pas
Linking vitaly.exe
28 lines compiled, 0.1 sec , 29008 bytes code, 1996 bytes data

?

правильнее тебе будет переименовать Incl в inc и запостить текст ошибки.
Но скорей всего проблема не в Inc, а в cnt
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: FPC, Lazarus зачем они Вам?

Сообщение vitaly_l » 03.10.2015 00:18:03

На Ваш код не ругается, а на мой запускает приложение, и сразу появляется сообщение: Access violation.
При нажатии Ok программа работает. Переименовываю и сообщение перестаёт появляться.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: FPC, Lazarus зачем они Вам?

Сообщение скалогрыз » 03.10.2015 00:22:02

мне кажется FPC тут ни при чём. Ошибка между клавиатурой и креслом.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: FPC, Lazarus зачем они Вам?

Сообщение vitaly_l » 03.10.2015 00:24:55

скалогрыз писал(а):Ошибка между клавиатурой и креслом.

Ладно :cry: буду искать ошибку между клавиатурой и креслом. :cry: Наверняка она где-то там :evil:
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: FPC, Lazarus зачем они Вам?

Сообщение kazalex » 03.10.2015 00:25:46

скалогрыз писал(а):именно по-этому, благодяря, typeswitch-ам, все сомнительно/недодуманные фичи, в OBJFPC выключенны по-умолчани

Nested types работают в 3.1.1. по дефолту. Однако:
Код: Выделить всё
program Project1;
{$mode objfpc}
uses typinfo;
type
  tobj=class
    type
     tnestedobj = class
     end;
  end;
begin
writeln(tobj.tnestedobj.classname);
writeln(ptypeinfo(typeinfo(tobj.tnestedobj))^.Name);
readln;
end.

output:
tobj.tnestedobj
tnestedobj

Баг-репорту скоро год исполнится. Это я снова о качественности проработки.

скалогрыз писал(а):Все споры о "технической целесообразности фичи" заканичваются аргументом: "нужно совместимость с FPC". Да и контрибутера, обижать не хочется.

Это понятно, и совместимость с дельфями несомненно важная штука. Но почему-же перед включением фичи-"совместителя" не протестировать её основательно, что бы она работала хотя бы как в дельфях?

скалогрыз писал(а):FPC команда удивительно ловко умеет "и вашим, и нашим" (возможно потому что пишут на паскле... :mrgreen: :mrgreen: :mrgreen: )

При всём моём уважении к тиму, я до сих пор не могу нормально собрать дельфийский проект работающий даже в Delphi 2006. А там из фичей только advanced records, nested types (в сочетании дают гремучую смесь), strict visibility specifiers (а компилятор тень на плетень наводит) да unicode strings (тут тоже не всё гладко, но пока не задокументировано).
kazalex
постоялец
 
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

Re: FPC, Lazarus зачем они Вам?

Сообщение скалогрыз » 03.10.2015 00:31:01

kazalex писал(а):Это понятно, и совместимость с дельфями несомненно важная штука. Но почему-же перед включением фичи-"совместителя" не протестировать её основательно, что бы она работала хотя бы как в дельфях?

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

Добавлено спустя 2 минуты 47 секунд:
kazalex писал(а):output:
tobj.tnestedobj
tnestedobj

Баг-репорту скоро год исполнится. Это я снова о качественности проработки.


по мне так правильно выглядит. А какой ожидаемеый результат?
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: FPC, Lazarus зачем они Вам?

Сообщение vitaly_l » 03.10.2015 00:38:43

Попробовал подключить все модули что и в проекте. Тоже работает. В общем на тестовом проекте - повторить появление предупреждения не удалось :oops: Между креслом и клавиатурой ошибку не нашёл, потому что, вот так работает и ошибка не выскакивает :cry: .
Код: Выделить всё
unit Unit1;

{$ifdef fpc}{$mode objfpc}{$h+}{$endif}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type
  TMyClass = class
  public
    v: Integer;
    function Inc(cnt:word):dword;
    function Dec(cnt:word):dword;
  end;

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  m: TMyClass;
begin

  m:=TMyClass.Create;
  caption := IntToStr(m.Inc(5));
  // writelN(m.v);
  caption := caption  + ' ' + IntToStr(m.Dec(5));
  // writelN(m.v);
  m.Free;
end;

function TMyClass.Inc(cnt:word):dword;
begin
  v := random(111);
  result:=v*cnt;
end;

function TMyClass.Dec(cnt:word):dword;
begin
  v := random(111);
  result:=v*cnt;
end;
end.     
Последний раз редактировалось vitaly_l 03.10.2015 15:12:08, всего редактировалось 2 раз(а).
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: FPC, Lazarus зачем они Вам?

Сообщение kazalex » 03.10.2015 00:48:29

скалогрыз писал(а):А какой ожидаемеый результат?

По какому имени можно обратиться к этому идентификатору извне?
kazalex
постоялец
 
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

Re: FPC, Lazarus зачем они Вам?

Сообщение Дож » 03.10.2015 14:02:08

скалогрыз писал(а):
Дож писал(а):ли я хочу сделать много глобальных функций Max, Intersect, Sort, IfThen и т.д., и для разных типов, разнесённых по разным модулям, то у меня ничего не выйдет, потому что функция из одного модуля полностью закроет функцию другого модуля с таким же названием. А неймспейсы и конструкции вида UnitName.Max подрывают идею перегруженных функций, к тому же with UnitName do не работает.

ну хз-хз. вот смотри пример.

<...>
maxstr.pas
Код: Выделить всё
unit maxstr;

interface

{$ifdef fpc}{$mode delphi}{$h+}{$endif}

function Max(const a,b: string): string; overload;

implementation

function Max(const a,b: string): string; overload;
begin
  if a>b then Result:=a
  else Result:=b;
end;

end.

<...>
компилится и работает.


WOW! Опробовал у себя, похоже, что действительно работает. Я не использовал overload, когда в модуле была всего одна функция. Вот откуда можно было узнать, что overload действует для функций из разных модулей? :)
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Пред.След.

Вернуться в Потрепаться

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

Сейчас этот форум просматривают: Alex2013 и гости: 44

Рейтинг@Mail.ru