Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.26;
Скачать: CL | DM;

Вниз

Кто что думает?   Найти похожие ветки 

 
Real ©   (2007-06-04 23:24) [280]

Мне кажется что сторонники Паскаля это те, кто привык к хорошей документации во всем. Рискну предположить что исходники Паскаля содержат больше комментариев :) Лично мне приятно видеть "begin" вместо "{", потому что для второго нужно помнить что это означает, а для первого - достаточно прочитать обычное английское слово. Мне как и многим приходится работать на нескольких языках, иногда за один день. Из-за этого неизбежны ошибки синтаксиса (типа написание "=" вместо ":="). Я вот уже несколько раз попался на один и тот же прикол: в ПХП, после нескольких часов Делфи пишу - if (a=1) ... И конечно же получаю логическую ошибку, потому как ПХП как и Си допускает присвоение в условном операторе... В дельфи по-моему нереально попасть в такую ситуацию, потому как язык достаточно строг к своему синтаксису. Си мне иногда напоминает "бои без правил", тогда как паскаль - хорошо организованный боксерский поединок :) Конечно, иногда раздражает что для объявления переменной нужно поднятся в секцию VAR - но при этом я всегда вспоминаю что сам виноват, больше надо было уделить времени проектированию. Строгая типизация - тоже часто дает негативные последствия, но сколько благодаря этому было выявленно ошибок за все время!


 
Kostafey ©   (2007-06-04 23:26) [281]

> [280] Real ©   (04.06.07 23:24)

+1
Ни дать - ни взять


 
Loginov Dmitry ©   (2007-06-04 23:26) [282]

А мне вот нравится в Паскале представление операторных скобок в виде begin...end. В случае их использования по правилу "begin и end всегда должны располагаться на одном уровне", скорость анализа кода ощутимо увеличивается Многие begin располагают сразу за предыдущим оператором, например,

if (Условие) then begin
  что-то там...
end


но это хуже вариант, усваиваемость кода ухудшается.

Во многих современных языках (Си, PHP, C# и т.п.) используются невзрачные фигурные скобки. Ну как их не располагай, усваимость все-равно ниже, чем при использовании правильно расположенных begin...end. Опять получается, что краткость в ущерб усваимости.

Не нравятся "извращенные" конструкции типа a = (b>c)?(b):(c). Такая конструкция неестественна :) Однако ее замена оператором IF естественности ничуть не прибавляет, а объем кода увеличивает. В Паскале IF более "естественен" благодаря наличию "лишнего" слова THEN.

Отдельного разговора заслуживает навороченный оператор цикла for(;;). (какая форма цикла FOR более естественна, та, что здесь, или та, что в Паскале?)


 
Kostafey ©   (2007-06-04 23:40) [283]

> А мне вот нравится в Паскале представление операторных скобок
> в виде begin...end

Так а > [280] Real ©   (04.06.07 23:24) о чем говорил ?


> Не нравятся "извращенные" конструкции типа a = (b>c)?(b)
> :(c).

Ну да, вместо них я пишу что-то вроде:

function cppq(strq: string; str1: string; str2: string):string;
begin
 if strq=str1 then
   Result:=str1
 else
   Result:=str2;
end;

Полезня в СPP эта конструкция !


> Отдельного разговора заслуживает навороченный оператор цикла
> for(;;). (какая форма цикла FOR более естественна, та, что
> здесь, или та, что в Паскале?)

Обе хороши.


 
Real ©   (2007-06-04 23:49) [284]


> +1
> Ни дать - ни взять

Благодарю :)


> Многие begin располагают сразу за предыдущим оператором,
>  например,
>
> if (Условие) then begin
>   что-то там...
> end


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

if (условие) {
...
}


на

if (условие)
{
...
}


 
Eraser ©   (2007-06-04 23:51) [285]

> [280] Real ©   (04.06.07 23:24)

> Строгая типизация - тоже часто дает негативные последствия,
> но сколько благодаря этому было выявленно ошибок за все
> время!

эт точно, а php по-хорошему нужно все входные параметры функции приводить в нужному типу, иначе проблемы могут быть, так что отсутствие типизации, как это не пародоксально, приводит только к увеличению кода.
> [282] Loginov Dmitry ©   (04.06.07 23:26)

насчет скобок - не согласен, нормальная усваиваемость, особенно если писать в виде
if (a == b)
{
 c = a;
}

т.е. не далеть строку для скобки, а не
if (a == b) {
 c = a;
}

или
if (a == b) {c = a;}

> Не нравятся "извращенные" конструкции типа a = (b>c)?(b)
> :(c). Такая конструкция неестественна :)

не естесственна, согласен, но часто не хватает её в паскале.. ) есть конечно IfThen, но это немного не то.

но это все конечно дело вкуса.


 
Vendict ©   (2007-06-05 00:14) [286]

Defunct ©   (03.06.07 22:23) [113]
В некоторых процессорах имеется аппратный автоикремент индексного регистра, поэтому запись:

 A[ i++ ] = x;

выглядит куда более понятной, читаемой и компактной чем

A[ i ] := x;
i := i + 1;


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


 
Kostafey ©   (2007-06-05 00:18) [287]

> ничего себе понятной ! не зная языка, не скажешь, что первым
> делается, увеличивается i или меняется значение элемента
> массива.

Ну для CPP/Pascal знание - незниние языка не столь актуально...

Вот однажды мне подсунули пронраммульку на Fortran...;)
Куда деваться-разобрался, перенес в Delphi.


 
euru ©   (2007-06-05 00:47) [288]


> default ©   (04.06.07 18:57) [278]
> мне вот интересно, этот язык был экспериментальный или как?
> ...для диссера может лишь...видна же сразу утопичность практического
> применения таких языков из-за чрезвычайной их перегруженности



> Kostafey ©   (04.06.07 22:56) [279]
> А этот АВАР - вообще имхо сумасшедший.Структура кода на
> нем, наверно будет, не читаема, короче не язык - бредполный
> (уж простите за грубость), ну не воспринимается он визуально,
> просто никак вообще не воспринимается.

Вы хотя бы для прикола в Яндексе слово "ABAP" набрали и оценили его экспериментальность.


> McSimm_ ©   (04.06.07 18:43) [277]
> Я тут прикинул...
> MOVE (SUBTRACT (MULTIPLY (MULTIPLY x BY x) BY 5) BY C) TO y.
> Правильная запись ?
Разве такая запись похожа на человеческую? На АВАР это записывается так:
MOVE 5 TO y.
MULTIPLY y BY x.
MULTIPLY y BY x.
SUBTRACT c FROM y.


Но можно использовать и упрощённый синтаксис:
y = 5 * x * x - c.
:)


> default ©   (04.06.07 18:25) [274]
> покажи программку на АВАР?!
Да пожалуйста.
* Вариация на тему "Hello, world"
report z_hello_world.

start-of-selection.
  write / "Hello, world!".


 
Real ©   (2007-06-05 00:53) [289]


> > default ©   (04.06.07 18:25) [274]
> > покажи программку на АВАР?!
> Да пожалуйста.
> * Вариация на тему "Hello, world"
> report z_hello_world.
>
> start-of-selection.
>   write / "Hello, world!".

Ужас какой-то... :)


 
Kostafey ©   (2007-06-05 01:06) [290]

> Вы хотя бы для прикола в Яндексе слово "ABAP" набрали и
> оценили его экспериментальность.

А он оказывается даже на практике применяется.

Ничего не понимаю (С)


 
Defunct ©   (2007-06-05 01:41) [291]

Мне в паскале нравится только одно - базовый тип String. Против этого не попрешь. В С string"а нет, в C++ string реализован через прогнившую абстракцию. Которая рушится при первой же попытке сделать
S = "hello " + "world";
Как ни странно почему-то никто этого не отметил.

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


 
Однокамушкин   (2007-06-05 08:38) [292]


> Kostafey ©   (04.06.07 23:40) [283]
> > Не нравятся "извращенные" конструкции типа a = (b>c)?(b)
> > :(c).
>
> Ну да, вместо них я пишу что-то вроде:
>
> function cppq(strq: string; str1: string; str2: string):
> string;
> begin
>  if strq=str1 then
>    Result:=str1
>  else
>    Result:=str2;
> end;
>
> Полезня в СPP эта конструкция !

Неэквивалентная замена... сравните:
a = b == 0 ? 0 : c/b;
и
function cppq(Cond: Boolean; const x, y: Real): Real;
begin
 if Cond then
   Result := x
 else
   Result := y;
end;

a := cppq(b = 0, 0, c/b);


так что эту конструкцию не всегда можно заменить функцией, иногда надо if прямо по месту вставлять...


> Defunct ©   (05.06.07 01:41) [291]
> Все остальные так называемые преимущетсва Паскаля - якобы
> более лучшая читаемость кода, строгая типизация позволяющая
> выявлять ошибки - надуманы.

Вы забыли ещё несколько вполне реальных преимуществ Паскаля... например, отсутствие мерзости под названием препроцессор... или нормальная раздельная компиляция модулей, а не объединение исходников на уровне текста... да и строгая типизация лично мне не раз помогала, так что надуманным это преимущество я назвать никак не могу...


 
Однокамушкин   (2007-06-05 08:56) [293]


> Игорь Шевченко ©   (04.06.07 17:48) [270]
> Для того, кто хорошо знает язык, запутанностью это не выглядит.
>  Точно также, как для привыкших к паскалю не выглядят запутанными
> конструкции с множествами (+, *)

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

Правда, для тех, кто много раз использовал while (*d++ = *s++); эта конструкция уже воспринимается как единое целое, а не комбинация шести конструкций, и вы этом смысле читается легко... но множество комбинаций, которые человек может запомнить как единое целое, очень мало по сравнению со всем множеством комбинаций...

А какое-нибудь сложное арифметическое выражение, содержащее, скажем, только +,-,*,/ (на Паскале и на Си оно запишется, кстати, одинаково) будет восприниматься тяжело, несмотря на то, что каждое действие само по себе просто и понятно... Так что не в сложности отдельной операции дело, а в том, как они комбинируются...


 
db2admin ©   (2007-06-05 09:06) [294]

Loginov Dmitry ©   (04.06.07 23:26) [282]
#define begin {
#define end }

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


 
Alkid ©   (2007-06-05 09:09) [295]

Господа, внесу свежую мысль:
Синтаксис - это вопрос вкуса.
Он ортогонател семантике.
Нету по определению более лучшего синтаксиса или более худшего. Это вопрос првычки. Я привык к С-подобному синтаксису и дельфёвый мне кажется очень неуклюжим. Кто-то привык в паскалевсокму, и сишный синтаксис кажется ему убогим и нечитаемым.
Истины тут нет.


 
Однокамушкин   (2007-06-05 09:46) [296]


> Alkid ©   (05.06.07 09:09) [295]

Неправильная мысль... существуют формальные правила описания синтаксиса (например, форма Бэкуса-Наура) и связанные с ними правила синтаксического разбора... соответственно, грамматики языка могут иметь разные классы - LR(1), LL(1) и т.д... и при таком формальном описании количество и сложность синтаксических конструкций становится измеряемой объективной величиной...

Чтобы было понятнее, поясню... например, писать "{" или "begin" или там "%" или "mod" - это дело вкуса, потому что структура формальных правил при этом не меняются, просто одна лексема заменяется другой... а вот появление оператора ++ грамматику меняет сильно, потому что синтаксис выражения a+++b не описывается контекстно-свободной грамматикой, только контекстно-зависимой, а это объективно сложнее... кстати, если бы вместо ++ и -- использовались бы, например, @+ и @-, проблем бы не было, выражения a@++b и a+@+b не перепутаешь... проблема синтаксиса си в данном случае в том, что плохо проработан алфавит языка, т.е. "++" является одновременно и отдельным символом языка, и допустимой комбинацией двух символов...


 
palva ©   (2007-06-05 09:52) [297]

> Alkid ©   (05.06.07 09:09) [295]
Это точно. А то я все в недоумении читаю наезды на if (a=1) {;} или *a++=*b++;
Что здесь может быть заумного?  Для меня, как для сишника гораздо заумнее выглядит a := b


 
Alkid ©   (2007-06-05 09:53) [298]


> Однокамушкин   (05.06.07 09:46) [296]

Я это всё прекрасно понимаю, да. Но это всё теория. На практике синтаксис является именно делом вкуса. Случаи, где возникает неоднозначность с теми же операторами "++" и "--" редки. Скажу прямо - я на С/С++ программирую уже  лет 7-8 и у меня НИ РАЗУ подобные неоднозначности не возникали. Я что-то делаю не так?


 
Anatoly Podgoretsky ©   (2007-06-05 09:54) [299]

> Однокамушкин  (05.06.2007 09:46:56)  [296]

> проблема синтаксиса си в данном случае в том, что плохо проработан алфавит языка

Да кто же его прорабатывал


 
db2admin ©   (2007-06-05 09:56) [300]

Alkid ©   (05.06.07 09:53) [298]
ну не знаю попробуй книжки почитать Фленова например ))


 
SPeller_work   (2007-06-05 09:56) [301]

А я вот уже 2 года пишу на пхп, Дельфи не трогаю. Сишный синтаксис поначалу непривычен после паскалевского, но привыкаешь. Но читаемость сишных кодов всеравно хуже паскалевских из-за большого количества мелких, но значимых синтаксических деталей вроде {/(:? . Гибкость языка приятна, очень удобно писать $array[] = "new value"; когда хочешь добавить новый элемент к массиву, но поначалу попадался на конструкциях вроде $f = "a" . (true) ? "b" : "c"; (скажите без проверки, чему будет равна переменная f), когда гонялся за "вкусностями" языка.

Пришлось мне пописать и на визуал бейсике, 2005-м. Смесь си и бейсика оставила впечатление хуже паскаля, си и даже старого (визуал)бейсика.

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


 
palva ©   (2007-06-05 10:01) [302]

> чему будет равна переменная f
b это без проверки. Угадал?


 
Loginov Dmitry ©   (2007-06-05 10:05) [303]

ab


 
Reindeer Moss Eater ©   (2007-06-05 10:07) [304]

Лучше всего синтаксис у C#. Лучше даже, чем у Object Pascal.


 
palva ©   (2007-06-05 10:07) [305]

Фигасе! А я привык на c ставить операцию ? чуть ли не на последнее место. Я бы конечно скобками проложился, если бы сам писал.


 
Однокамушкин   (2007-06-05 10:28) [306]


> Reindeer Moss Eater ©   (05.06.07 10:07) [304]
> Лучше всего синтаксис у C#. Лучше даже, чем у Object Pascal.

Это что ж за синтаксис такой замечательный, что он не даёт мне объявить нормальную процедуру там, где требуется именно процедура? Я должен объявлять новый класс, в нём - статический метод, и при вызове этого метода указывать имя класса... класс - это нечто такое, экземпляры чего должны создаваться (или он должен служить предком для других классов), а тут получается, что язык вынуждает меня создавать класс, от которого ни наследования нет, ни экземпляры его не создаются... класс играет роль пространства имён... Какая от этого польза в народном хозяйстве?!!!

А уж что там они со сборками и пространствами имён накрутили, на этом вообще диссертацию по психиатрии писать можно... есть хорошо известная ещё со времён модулы-2 концепция модулей, которые являются и единицам компиляции, и единицами инкапсуляции, и единицами компоновки, и пространствами имён... все дельфисты должны знать эту концепцию, в Delphi её реализовали практически без изменений... А в C#? Простанство имён может быть размазано на несколько сборок, сборка - содержать несколько пространств имён, что является единицей компиляции, вообще понять невозможно... Очень надеюсь, что пессимистичные прогнозы насчёт висты исполнятся, мелкомягкие рухнут, и мы будем избавлены от этого кошмара...

Кстати, эта перепутанность сборок и пространств имён может приводить к совершенно неожиданным ошибкам - пример есть в книге http://www.piter-press.ru/book.phtml?978546900378


 
Reindeer Moss Eater ©   (2007-06-05 10:33) [307]

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

Это не синтаксис, это объектная модель такая.
Кстати я у нее плюсы нашел (после того, как поматерился минут 10)
Если любая "запятая" - это непременно член класса, то до нее лекго добраться через хинты  и подсказки иде.
В частности это касается разных констант - параметров процедур.
Ну удобно же.


 
Однокамушкин   (2007-06-05 10:55) [308]


> Reindeer Moss Eater ©   (05.06.07 10:33) [307]
> Это не синтаксис, это объектная модель такая.

Это имхо не объектная модель, а имитация объектной модели для рекламных целей... ООП сейчас в моде, вот они, вслед за джавой, и сделали такой синтаксис, чтобы можно было заявлять, что язык получился чисто объектно-ориентированным... Только ерунда всё это... есть три основных конструкции, каждая из которых однозначно выдаёт принадлежность языка к классу императивных: while, if и goto - в шарпе есть все три... так что это не ОО-язык, это императивный язык с элементами ООП, поэтому насильственное запихивание любой функции в класс смотрится в нём, как седло на корове... настоящий ОО-язык - это, например, Smalltalk... ради интереса попробуйте найти его описание и посмотреть, как в нём организуются циклы и ветвления... вот в таком языке действительно функция вне объекта - нонсенс...

И ещё - я вовсе не против императивных языков с элементами ООП, как раз такие мне больше всего и нравятся, а Smalltalk считаю не очень удобным... просто мне не нравится, когда такой язык пытаются преподнести как чистый ОО-язык исключительно из маркетинговых соображений...


 
Игорь Шевченко ©   (2007-06-05 11:00) [309]

Real ©   (04.06.07 23:24) [280]


> Лично мне приятно видеть "begin" вместо "{", потому что
> для второго нужно помнить что это означает, а для первого
> - достаточно прочитать обычное английское слово.


Для китайца или для русского что begin, что { - ни то, не другое не является родным. Скобку быстрее набить. Так что не надо говорить про "простое английское слово". Особенно про слово implementation - уж роднее некуда.


> Конечно, иногда раздражает что для объявления переменной
> нужно поднятся в секцию VAR - но при этом я всегда вспоминаю
> что сам виноват, больше надо было уделить времени проектированию


Лично меня раздражает, что все переменные надо объявлять в этой секции, даже те, которые нужны сугубо локально, внутри блоков begin..end. Код запутывается донельзя.

Defunct ©   (05.06.07 01:41) [291]


> Читаемость кода зависит от опыта и от привычки, а это дело
> наживное


Целиком и полностью поддерживаю.


 
Reindeer Moss Eater ©   (2007-06-05 11:03) [310]

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

А я вообще не обращаю внимания на то, как его пробуют преподнести.
Мне нравится он сам по себе и все.
:)


 
Юрий Зотов ©   (2007-06-05 11:42) [311]

Возвращаясь к синтаксису Си, предлагаю улыбнуться свежеживому примеру:

palva ©   (05.06.07 09:52) [297]
"...я все в недоумении читаю наезды на if (a=1) {;} или *a++=*b++;
Что здесь может быть заумного?  Для меня, как для сишника гораздо заумнее выглядит a := b"

SPeller_work   (05.06.07 09:56) [301]
"скажите без проверки, чему будет равна переменная f"

palva ©   (05.06.07 10:01) [302]
"b это без проверки. Угадал?"

Loginov Dmitry ©   (05.06.07 10:05) [303]
"ab"

palva ©   (05.06.07 10:07) [305]
"Фигасе!"

=====================================

Что видим? То, что даже сишник с опытом, человек, хорошо знающий язык - и то  "с лету" не понял написанного. Даже ему - и то потребовалось время на осмысливание.

Что тут скажешь? Простой, понятный, прозрачный синтаксис. Однозначно.
:о)


 
etc   (2007-06-05 11:47) [312]


> Юрий Зотов ©   (05.06.07 11:42) [311]

не путайте PHP и С, PHP хоть и С подобный, но всеже не С, так что это нормально.


 
palva ©   (2007-06-05 11:53) [313]

> хорошо знающий язык - и то  "с лету" не понял написанного
Xорошо знающий язык C и то  "с лету" не понял написанного на PHP. Бывает и такое. Но обычно сишник "понимает" также кучу других языков именно потому, что сишные конструкции для него прозрачны. А операция . в C просто отсутствует.


 
Игорь Шевченко ©   (2007-06-05 11:53) [314]


> Что видим? То, что даже сишник с опытом, человек, хорошо
> знающий язык - и то  "с лету" не понял написанного.


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


 
ocean ©   (2007-06-05 12:15) [315]

Глупо защищать С в Дельфовой конференции, но невозможно же слушать эти наезды. "Неоднозначный синтаксис, а вдруг я совершу ошибку"? Понятно, что при работе в команде "молодых дарований" и в условиях вечной нехватки времени это становится существенным. Но, извините, это все же слова ремесленника. "У простых людей и болезни должны быть прямые: переломы конечностей, грыжа..." "Дайте мне begin...end"
С и Паскаль - разные вещи. С прекрасен своей буйной адресной арифметикой, и оператор ++ - его изюминка.


 
DesWind ©   (2007-06-05 12:30) [316]

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


 
Плохиш ©   (2007-06-05 12:34) [317]


> ocean ©   (05.06.07 12:15) [315]
> Глупо защищать С в Дельфовой конференции, но невозможно
> же слушать эти наезды.

ИМХО, вдвойне глупо приходить в делфийную конференцию и вопить какой делфи - плохой, а си - крютой и после плякать, что тебя послали...


 
Alkid ©   (2007-06-05 13:10) [318]

Ну здесь особо никто, вроде, и не вопил, что дельфи плохой :-)
Или я что-то пропустил?


 
IMHO ©   (2007-06-05 13:15) [319]


> Игорь Шевченко ©   (05.06.07 11:53) [314]
>
>
> > Что видим? То, что даже сишник с опытом, человек, хорошо
> > знающий язык - и то  "с лету" не понял написанного.
>
>
> Ты забыл добавить, что написанного на другом языке.


Чукча не читатель, чукча исключительно писатель?


 
Игорь Шевченко ©   (2007-06-05 13:17) [320]

IMHO ©   (05.06.07 13:15) [319]

В зеркало, дружок



Страницы: 1 2 3 4 5 6 7 8 9 
10 11 12 13 14 15 вся ветка

Текущий архив: 2007.08.26;
Скачать: CL | DM;

Наверх




Память: 1.12 MB
Время: 0.124 c
15-1185522868
Alkid
2007-07-27 11:54
2007.08.26
Зараза vs. Virtual Machine


15-1185890008
Synset
2007-07-31 17:53
2007.08.26
Fast Net


8-1163478013
Tab
2006-11-14 07:20
2007.08.26
квадрат с вращением в OpenGL


2-1185793171
savyhinst
2007-07-30 14:59
2007.08.26
TOleContainer CopyToClipboard


8-1164108426
Igor_thief
2006-11-21 14:27
2007.08.26
GIF через OLE