LINUX.ORG.RU

Pascal, Object Pascal, Delphi


0

1

Подскажите пожалуйста:

1) Существенна ли разница между языками Object Pacal и Delphi? «Выучить Object Pascal» равно «Выучить Delphi»?

2) Синтаксис паскаля и объектного паскаля сильно отличаются?



Последнее исправление: ArtMenza (всего исправлений: 2)
Ответ на: комментарий от anonymous

У меня такое впечатление, будто я в заповеднике троллей. :)

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

А как вы относитесь к freebasic? Это вроде тоже компилируемый язык, довольно быстрый и простой.

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

На нём можно писать всё что душе угодно,

Ну да, как и на любом тьюринг-полном языке.

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

хахаха!

Button1Click-кода

я как раз сегодня гору такого кода от бородатых американских юникс-пистонщиков ковырял.

Кстати, почему большинство шелскриптов состоят из вышеуказанной «горы button37clicK кода»? Наследство Pacal, или последствие изучения в школах «ML-like»?

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

А как вы относитесь к freebasic? Это вроде тоже компилируемый язык, довольно быстрый и простой.

никак. я на нем не писал.

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

Я бы подальше бежал от такой работы. Как правило на дельфи пишут «программисты», развитие которых закончилось примерно в 8-ом классе школы.

malchik, Вам сколько сейчас лет? Вот доживешь до старческого маразма, будет тебе «развитие 8-го класса школы» сиять как вершины Гималаев. А с метл^Wпаскалем 2-ух шестикласников легко застебешь своею продвинотостюю и общестеннополезностюю.

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

В убогом синтаксисе. Так они оба низкоуровневые.

Про аргументы тебя в университете, очевидно, не учили, Только Си и паскалю...

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

Какие могут быть тут аргументы, Здесь, как мы уже поняли, работает только имхо.

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

i++
varargs

Не, ты неправ. Все это есть в паскале. Ну, может точки следования не так густо расставлены как в Си, да оно, имхо, для однопроходного компилятора и не особо важно. А так - Си, Паскаль суть ЯП с равными возможностями, практически одинаковой семантикой и чуть-чуть различной выразительностью. Выразительностью, конечно же, не в том плане, что недоучки ассоциируют с «{}» и «begin end» и рвут тут связки о ненужности.

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

i++
varargs

Не, ты неправ. Все это есть в паскале.

есть конечно. Но не в таком же наркоманском виде. И инкремент четко однозначный в нем.

dikiy ★★☆☆☆
()
Последнее исправление: dikiy (всего исправлений: 1)
Ответ на: комментарий от cab

говнокод - это визитная карточка программистов на Delphi.

Посмею на основании примеров ниже ответственно заявить что программисты Дельфи заполонили мир!

LibreOffice 4.0:

    // attributelist.cxx
    // no comments как говорится
    if( (pcEnd - rpcStr >= XSTRING_ENCCHAR_LEN) &&
        (rpcStr[ 0 ] == '_') &&
        (rpcStr[ 1 ] == 'x') &&
        (rpcStr[ 6 ] == '_') &&
        lclAddHexDigit( cChar, rpcStr[ 2 ], 12 ) &&
        lclAddHexDigit( cChar, rpcStr[ 3 ], 8 ) &&
        lclAddHexDigit( cChar, rpcStr[ 4 ], 4 ) &&
        lclAddHexDigit( cChar, rpcStr[ 5 ], 0 ) )
    {
        rpcStr += XSTRING_ENCCHAR_LEN;
        return cChar;
    }

Boost 1.53

// asio
struct is_write_buffered_big_type { char data[10]; }; // че за магия?

// binomial_heap
  if (this_degree < rhs_degree) {
     if (carry_node) {
         if (carry_node->child_count() < this_degree) {
             ...
         else if( ...
         ...
         goto try_again;
// Ну тут говнокод букетом просто!

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

Ага, прихожу я такой на работу, а мне говорят «Будешь писать на дельфи», а я им «Вы чё?!?! Я сам выберу оптимальный для задачи инструмент. Скорее всего это будет хаскель

С Хаскелем ты не угадал, но примерно так и есть. Исключение - поддержка легаси, но и тут есть варианты.

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

говнокод в моем понятии это нечто другое, чем алгоритмы внутри Button1Click.

Это тоже говнокод.

а во всем другому Делфи вполне гут в плане написания гуевин. Как гриться есть с чем сравнивать.

А ты сравни с Tk или SWING. А ведь была бы нормальная gui-библиотека будь там менеджеры геометрии.

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

Делфи это в первую очередь IDE.

Вообще-то Borland-ом Delphi позиционировалась, как RAD, коей она являлась лишь паршивой гуилабалкой и автокомплитом.

Делфи это в первую очередь IDE. Причем вполне неплохая.

На вкус и цвет как говорится. Emacs-а/NetBeans-a того времени она для меня не переплюнула.

cab ★★★★
()

Delphi довольно сильно изменился, начиная с Delphi 5, Object Pascal теперь - его лексическое подмножество.

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

Да уж проще буттон, вызывающий у тебя такие приступы переименовать

В таком случае рефакторинга мало:

IBQuery1.SQL.Text:='select field... from'+Edit1.Text+'order by ';
тут все переделывать нужно.

чем сидеть в отладчике втыкать чтоже блять возвращает эта функция?

Операции с указателями, в том числе их возврат, достаточно распространены в Delphi.

cab ★★★★
()
Последнее исправление: cab (всего исправлений: 1)
Ответ на: хахаха! от d_Artagnan

я как раз сегодня гору такого кода от бородатых американских юникс-пистонщиков ковырял.

Говнокод на чем угодно можно сообразить. В случае же Delphi сама среда на него провоцирует - слишком велико искушение 2 раза клацуть на кнопке, и смешать там гуи с бизнес-логикой или перемешать визуальные/не визуальные компоненты. Это не значит, что так писать обязательно, но Delphi-кода свободного от такого подхода я видел крайне мало. Python-пример можешь подкинуть?

Кстати, почему большинство шелскриптов состоят из вышеуказанной «горы button37clicK кода»?

Если ты имеешь в виду sh, то button37clicK там проблемно сделать.

struct is_write_buffered_big_type { char data[10]; }; // че за магия?

Кстати да. От такой фигни я себя долго отучал.

cab ★★★★
()
Последнее исправление: cab (всего исправлений: 1)
Ответ на: комментарий от unsigned

Внимательно читаем:

Description Self-paced Pascal course for students who already know how to program.


Всякие схемы с питонами там раньше идут.

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

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

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

Да я не говорю, что он первый. Он просто там есть, а раньше было больше (многие его заменили на мыло^W яву). Нельзя утверждать, что он не годится для обучения (особенно на фоне си).

А насчёт Button1click - это не следствие того, что язык испортил программиста. Это потому, что «программист» не учился (а паскаль осилить смог, что паскалю только плюс).

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

Ну и конечно же в приведённом тобой коде сложнее разобраться, чем в

void float_to_str(float flt, char *pchar, int &nsmb)
{
  int i, deg, ns_int, ns_frac;
  double frac_dbl;
  DWORD dw_f, mant, intg, fract;
  DW_FL f_flt;
  char szfl_int[16], szfl_frac[16];
  f_flt.fl = flt;
  dw_f = f_flt.dw;
  if (dw_f == 0) { pchar[0] = '0'; pchar[1] = '.'; pchar[2] = '0'; pchar[3] = 0; nsmb = 3; return; }
  if (dw_f & 0x80000000) { pchar[0] = '-'; } else { pchar[0] = '+'; }
  deg = int((dw_f & 0x7F800000) >> 23) - 127;
  mant = (dw_f & 0x007FFFFF) | 0x00800000;
  if (deg == 0) { intg = 1; fract = dw_f & 0x007FFFFF; goto lab_1; }
  if (deg > 0) { intg = mant >> (23 - deg); fract = ((dw_f & 0x007FFFFF) << deg) & 0x007FFFFF; goto lab_1; }
  if (deg < 0) { intg = 0; fract = ((dw_f & 0x007FFFFF) | 0x00800000) >> (-deg); }
lab_1:
  frac_dbl = double(fract)*1.1920928955078125;// 1.1920928955078125 = 10^n_fr2 / 2^23 = 10^7 / 2^23
  fract = (int)frac_dbl;

  dwflt_to_str(intg, szfl_int, ns_int);
  nsmb = 1; i = ns_int; while (i) { pchar[i + 1] = szfl_int[i]; i--; } pchar[1] = szfl_int[0];
  nsmb += ns_int; pchar[nsmb] = '.'; nsmb++;

  dwflt_to_str(fract, szfl_frac, ns_frac); szfl_frac[n_fr2] = 0;
  i = ns_frac; while (i) { szfl_frac[6 - ns_frac + i] = szfl_frac[i - 1]; i--; }
  i = n_fr2 - ns_frac; while (i) { szfl_frac[i - 1] = '0'; i--; }

  i = n_fr2 - 1; while (i) { pchar[nsmb + i] = szfl_frac[i]; i--; } pchar[nsmb] = szfl_frac[0];
  nsmb += n_fr2; pchar[nsmb] = 0;
}

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

Я не утверждал, что он не годится для обучения. Я говорил, что в указанных университетах в самом начале даются другие языки.

А насчёт Button1click - это не следствие того, что язык испортил программиста. Это потому, что «программист» не учился

Без автоматически сгенеренного Делфей кода ты замучаешься делать кучу вещей - это свойство именно языка. Плюс велико исушение сделать все не правильно. Плюс ты прав насчет осиливших один язык.

cab ★★★★
()
Последнее исправление: cab (всего исправлений: 1)
Ответ на: комментарий от anonymous

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

Сплошь и рядом такое. Да и потом, чем отличается

IBQuery1.SQL.Text:='select field... from'+Edit1.Text+'order by ';
от
IBQuery1.SQL.Text:='execute procedure ('+Edit1.Text+')';
Смешение бизнес-логики и гуя все равно остается.

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

в языке где даже x * y; - неоднозначность, вообще на паскаль коптиться грех.

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

Ну тем, что во втором случае будет уместнее:

 n:=val0.Text;
try
 with SQLWorker{IBQUERY1} do
  begin
    SQL.Clear; // очистить текст sql
    SQL.Add('EXECUTE PROCEDURE search_proc :n');
    Prepare;
    ParamByName('n').asString:=n; 
    Open; //или ExecSQL
 end;
except
  ***

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

учитывая что ресурсы(описание формы) - могло хранится в текстовом человекочитаемом виде вида деверо с именами узлов и именами листов(полей) и = и значение базового типа.

инструмент по перегенирации ресурса там пишится как консольная тулза.

если же речь про полностью динамический гуи(т.е код в сырцах ) - то да - были болезни роста - легче чем в С++(с mfc|owl) , но тяжелее чем в C#.

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

TP это посути быстрый REPL и компилируемый язык и пошаговый отладчик(к подкраской строки выполнения) - т.е

TP вчера = это Racket сегодня.

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

То, какая техника уместнее в данном конкретном случае вопрос второй или третий. Начать надо с того, что виджеты вообще не должны быть представлены в бизнес-логике. Последняя должна вообще быть вынесена куда подальше и потом дергаться хоть из библиотеки, хоть из cli.
В случае Delphi важно, что гуи перемешано с бизнес-логикой и это обычная практика, причем сплошь и рядом встречающаяся в литературе. Вот у тебя в n:=val0.Text; val0 скорее всего какой-то виджет. Что ему делать в бизнес-логике? В самом примитивном тяп-ляп варианте ему место в my_procedure(val0.Text);

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

у TP хоть он почти во всём был расширение стандартного паскаля , было и есть такое ограничение реализационого уровня которое очень как разтаки для обучения неприятна - невозможность в TurboPascal возвращать из функции запись - что технически понятно - однако делает забавным что в турбопаскале приходится раньше к указателям обращатся(если пытатся сохранить возврат значения из функции как результат - т.е синтаксис выражений - а не заменять на обращение к процедуре которая меняет var аргумент) ,чем в С знаметитом своими указателями.

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

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

уже в пути.

К XXII веку сделают?

уже сейчас работет. Просто в альфе еще, афаик.

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

В случае Delphi важно, что гуи перемешано с бизнес-логикой и это обычная практика, причем сплошь и рядом встречающаяся в литературе. Вот у тебя в n:=val0.Text

не страшно. А иногда даже удобно.

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

ээээ?

unit a;
interface
function A
implimentation
function A
type C
inicialization
Exit(-1);
end.

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

На этапе тяп-ляп сделать - да. На этапе сопровождения/расширения лютый пушной зверек переходящий в переписывание.

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

отличия есть. но конечно как доказывать NP полноту - по такой процедуре Паскаль и С полиномиально к одному классу и друг другу сводятся.

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

это Racket сегодня.

А разве в схемах REPL-а изначально не было? Вон когда видеокурс по SICP снимали там REPL был.

TP это посути быстрый REPL

а там что был REPL?

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

Там все просто было. Ну это мне уже сейчас так какжется. Поскольку я начал с программирования гуев мышкой, в школе у меня сложилось неправильное мнение.

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

был . я про удобство(не абсолютное) а относительное аналогам своего времени.

в том смысле что и быстрый cc+ed+bash есть отличный ReadEvalPrintLoop (unix is ide типо)

short-loop поправил запустил ( т.е там как бы пользователь и может поначалу и незнать что есть бинарник на выходе). т.е важна интерактивность.

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

Такой REPL практически для всего, не считается. Я имел в виду из коробки.

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