toxin писал(а):-они сильно пахожи ?
Delphi - усовершенствованный вариант Паскаля. Условно говоря, Паскаль предоставляет Вам кирпичи, раствор, деревянные брусья, шифер, стекло, чтобы Вы из этого можгли сами себе построить дом какой хотите. В Дельфи дополнительно введены некие унифицированные блоки ускоряющие строительство - панели с окнами и дверями, клозеты, набранная крыша с рамами и уложенным шифером. Т.е. набор готовых блоков из тех же строительных материалов. Lazarus Вам предоставляет такие-же унифицированные блоки, что и Дельфи, только поскромнее ассортиментом.
Вот Вам пример создания окна с кнопкой на чистом Паскале:
- Код: Выделить всё
- program my_prog;
 uses windows;
 
 const
 { names of window classes. }
 WND_CLASS_NAME0 = 'my_wnd_class_name_0';
 { identifiers. }
 IDC_BUTTON0 = 2000;
 
 { function prototypes }
 function wnd_proc0(window: HWND; message: UINT; w_param: WPARAM; l_param: LPARAM): LRESULT; stdcall; forward; export;
 function create_wnd0: HWND; forward;
 procedure create_wnd_content0(parent: HWND); forward;
 
 { global data }
 var instance: longint;  { HINSTANCE }
 h_font: HFONT;
 
 { window procedure #0 [window] }
 function wnd_proc0(window: HWND; message: UINT; w_param: WPARAM; l_param: LPARAM): LRESULT; stdcall; export;
 begin
 case message of
 WM_COMMAND:
 begin
 case LOWORD(w_param) of
 IDC_BUTTON0:    { button 'button' }
 begin
 MessageBox(window, 'the button IDC_BUTTON0 is clicked.', 'Event', MB_OK or MB_ICONINFORMATION);
 end;
 end;
 end;
 WM_CREATE:
 begin
 create_wnd_content0(window);
 end;
 
 WM_CLOSE:
 begin
 if IDYES = MessageBox(window, 'Quit?', 'Event', MB_YESNO or MB_ICONQUESTION) then DestroyWindow(window);
 end;
 
 WM_DESTROY:
 begin
 PostQuitMessage(0);   { PostQuitMessage(return_code) quits the message loop }
 end;
 else
 begin
 wnd_proc0 := DefWindowProc(window, message, w_param, l_param);
 exit;
 end;
 end;
 wnd_proc0 := 0;
 end;
 
 { create window #0 [window]. }
 function create_wnd0: HWND;
 var
 wnd: HWND;
 begin
 wnd := CreateWindowEx($00000100, WND_CLASS_NAME0, 'window', $14CF0000, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, 0, 0, instance, nil);
 ShowWindow(wnd, SW_SHOWNORMAL);
 UpdateWindow(wnd);
 create_wnd0 := wnd;
 end;
 
 { create window content #0 [window]. }
 procedure create_wnd_content0(parent: HWND);
 var
 wnd: HWND;
 begin
 wnd := CreateWindowEx($00000000, 'Button', 'button', $50012F00, 136, 184, 96, 32, parent, HMENU(IDC_BUTTON0), instance, nil);
 SendMessage(wnd, WM_SETFONT, WPARAM(h_font), 1);
 end;
 
 procedure register_classes;
 var wc: WNDCLASS;
 begin
 wc.cbClsExtra    := 0;
 wc.cbWndExtra    := 0;
 wc.hbrBackground := HBRUSH(COLOR_3DFACE + 1);
 wc.hCursor       := LoadCursor(0, IDC_ARROW);
 wc.hIcon         := LoadIcon(0, IDI_APPLICATION);
 wc.hInstance     := instance;
 wc.lpszMenuName  := nil;
 wc.style         := CS_PARENTDC or CS_DBLCLKS;
 
 wc.lpfnWndProc   := @wnd_proc0;
 wc.lpszClassName := WND_CLASS_NAME0;
 
 RegisterClass(@wc);
 end;
 
 { message loop }
 function message_loop: integer;
 var message: MSG;
 begin
 while GetMessage(@message, 0, 0, 0) do
 begin
 TranslateMessage(@message);
 DispatchMessage(@message);
 end;
 message_loop := message.wParam;
 end;
 
 BEGIN
 instance := GetModuleHandle(nil);
 register_classes;
 h_font := CreateFont(-13, 0, 0, 0, FW_NORMAL, 0,
 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
 DEFAULT_QUALITY, DEFAULT_PITCH or FF_DONTCARE, 'Times New Roman');
 create_wnd0;
 message_loop();
 END.
 
Программа ничего толкового не делает, только выдаёт сообщение на нажатие кнопки.
А вот тоже самое с помощью Lazarus:
Главный файл:
- Код: Выделить всё
- program project1;
 
 {$mode objfpc}{$H+}
 
 uses
 {$IFDEF UNIX}{$IFDEF UseCThreads}
 cthreads,
 {$ENDIF}{$ENDIF}
 Interfaces, // this includes the LCL widgetset
 Forms
 { you can add units after this }, Unit1;
 
 begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
 end.
Файл описания окошка:
- Код: Выделить всё
- object Form1: TForm1
 Left = 290
 Height = 300
 Top = 175
 Width = 400
 Caption = 'Form1'
 ClientHeight = 300
 ClientWidth = 400
 LCLVersion = '0.9.25'
 object Button1: TButton
 Left = 160
 Height = 25
 Top = 201
 Width = 75
 Caption = 'Button1'
 OnClick = Button1Click
 TabOrder = 0
 end
 end
Файл ресурсов окошка:
- Код: Выделить всё
- { Это - файл ресурсов, автоматически созданный lazarus }
 
 LazarusResources.Add('TForm1','FORMDATA',[
 'TPF0'#6'TForm1'#5'Form1'#4'Left'#3'"'#1#6'Height'#3','#1#3'Top'#3#175#0#5'Wi'
 +'dth'#3#144#1#7'Caption'#6#5'Form1'#12'ClientHeight'#3','#1#11'ClientWidth'#3
 +#144#1#10'LCLVersion'#6#6'0.9.25'#0#7'TButton'#7'Button1'#4'Left'#3#160#0#6
 +'Height'#2#25#3'Top'#3#201#0#5'Width'#2'K'#7'Caption'#6#7'Button1'#7'OnClick'
 +#7#12'Button1Click'#8'TabOrder'#2#0#0#0#0
 ]);
И самый нужный для программиста файл, в котором он пишет собственный код:
- Код: Выделить всё
- unit Unit1; 
 
 {$mode objfpc}{$H+}
 
 interface
 
 uses
 Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
 StdCtrls;
 
 type
 
 { TForm1 }
 
 TForm1 = class(TForm)
 Button1: TButton;
 procedure Button1Click(Sender: TObject);
 private
 { private declarations }
 public
 { public declarations }
 end;
 
 var
 Form1: TForm1;
 
 implementation
 
 { TForm1 }
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
 ShowMessage('Ага! Попался!!!');
 end;
 
 initialization
 {$I unit1.lrs}
 
 end.
Первые три файла создаются автоматически Lazarus'ом, последний создаётся полуавтоматом, т.е. туда Lazarus'ом вставляются шаблоны функций, например на нажатие кнопки:
- Код: Выделить всё
- procedure TForm1.Button1Click(Sender: TObject);
 begin
 
 end;
а вот то, что должно быть в функции пишет сам программист. 
Итак, главное отличие - в Паскале всё, от первого до последнего символа, пишет сам программист вручную, а вот Lazarus (Delphi) добрую половину работы (например по созданию окошек с кнопками) делает автоматически.
toxin писал(а):Но поверхностное изучение обоих языков дало впечатление что pascal слабее чем C/C++
Это так ? 
Нет, не так. Просто некоторые вещи в Си и Паскале делаются несколько по разному. Но в подавляющем большинстве случаев прикладного программирования эти языки полностью взаимозаменяемые.