Форум: "Прочее";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
ВнизКакой должен быть язык Найти похожие ветки
← →
REA (2007-03-16 14:13) [0]Вот всем кажется меня Object Pascal устраивает, но некоторые вещи понять не могу.
1) Для чего слово Interface, которое перед Implementation? Ясное дело, что все что перед Implementation и есть интерфейс.
2) Почему перед Else нельзя ставить ";". Т.е. мне это не сильно мешает, но кажется нет особой разницы.
3) Для чего нужны слова Do кроме крастоты?
4) Почему константы c типом объявляются как Const, а не как Var с инициализацией?
5) Для чего в вариантных частях записей идентификатор?
Какие по вашему можно было бы внести изменения в семантику языка (record helpers в другой ветке :) )?
← →
Игорь Шевченко © (2007-03-16 14:15) [1]
> но некоторые вещи понять не могу.
Считай, что это вещи, данные свыше
← →
REA (2007-03-16 14:21) [2]Да я так и считаю, но хочется выслушать и "начальника транспортного цеха".
Мне например один раз понадобилось дополнить компонент TControl без изменения исходного кода оного. Пришлось перегружать нужных потомков с общим интерфейсом. А можно было бы например написать Class Extension, если бы язык позволял. Хотя это спорно конечно...
Garbage Collection тоже вероятно не помешал бы или хотя бы предупреждения о том что память не освободилась (не выделилась). Это есть в FastMem, но как то не так...
← →
ArtemESC © (2007-03-16 14:21) [3]Переходи на С, там должно все устраивать (кроме 4, правда) ...
← →
jack128 © (2007-03-16 14:22) [4]REA (16.03.07 14:13)
2) Почему перед Else нельзя ставить ";". Т.е. мне это не сильно мешает, но кажется нет особой разницы
потому что ";" - разделитель операторов.
REA (16.03.07 14:13)
4) Почему константы c типом объявляются как Const, а не как Var с инициализацией?
из-за обратной совместимости.
REA (16.03.07 14:13)
5) Для чего в вариантных частях записей идентификатор?
Для большей наглядности.
Помоему так
Trec = record
case RecType: Integer of
0: ...;
1: ...;
2: ...;
end
гараздо нагляднее, чем так:
Trec = record
RecType: Integer;
case Integer of
0: ...;
1: ...;
2: ...;
end
← →
Сергей М. © (2007-03-16 14:22) [5]1) ну раз ясно, то какие сомнения могут быть ?)
2) Потому что Паскаль. А уж объектный он там или не объектный - по барабану. Правила Паскаля они и в африке правила Паскаля.
3) Оно тебе сильно мешает ?
4) Сам-то понял, что сказал ?)
5) Идентификатор чего ?
← →
REA (2007-03-16 14:32) [6]>1) ну раз ясно, то какие сомнения могут быть ?)
Ну и ликвидировать это слово :)
2) напрягает только ставить-удалять эту ; когда можифицируешь код. Но это действительно не так важно.
>3) Оно тебе сильно мешает ?
уже нет :) а так набивать лишние буквы приходится. вопрос не в том мешает или нет, а в том как было бы лучше и удобнее. Так же можно опустить и некоторые Of.
>4) Сам-то понял, что сказал ?)
Поясню I: Integer = 10; это переменная.
5) А еще лучше так:
Record
Case
Rectangle: (Height, Width: Real);
Triangle: (Side1, Side2, Angle: Real);
End;
End; Причем тоже Rectangle можно и опустить.
← →
Сергей М. © (2007-03-16 14:46) [7]
> Ну и ликвидировать это слово :)
Ну а Object Pascal причем тут ?)
Ты уж сразу в Паскале как таковом ликвидируй его)
> 2) напрягает
Для особо "напряженных" существуют эксперты)
> набивать лишние буквы приходится
Матчасть среды нужно знать.
см. Code Completion
> I: Integer = 10; это переменная.
Да что ты ?!
А я-то думал, что переменная - это некая декларация в контексте текущей var-секции)
← →
REA (2007-03-16 14:56) [8]Еще раз скажу - я не пытаюсь изувечить сам язык Pascal. Я пытаюсь конструктивно обсудить что в языке необходимо, а что нет.
В С например без Do обходятся. Сейчас все скажут - "ну и переходи на C".
По ряду причин не собираюсь и речь не об этом.
>Для особо "напряженных" существуют эксперты)
В том гипотетическом языке пока никаких экспертов нет :)
> I: Integer = 10; это переменная.
> Да что ты ?!
Ну уж точно не константа раз ее можно поменять. А в var секции такое не пройдет.
Хочется кроме критики услышать и предложения. Только не говорите, что не надо ничего добавлять - убавлять. Сам Борланд продолжает это делать.
← →
Alex Konshin © (2007-03-16 14:59) [9]Кстати, (3) - неправда.
Кто первый приведет случай, когда перед else не только можно, но и нужно ставить точку с запятой?
Все на самом деле объясняется отсутствием завершителей у конструкции if then else.
← →
Сергей М. © (2007-03-16 15:10) [10]
> В С например без Do обходятся
Зато там выражение, определяющее начальные параметры и граничные условия цикла, заключается в скобки. Меня, например, это "напрягает" больше чем паскалевый "do", а тебя ?
> В том гипотетическом языке пока никаких экспертов нет
Его ни в каком языке нет)
> уж точно не константа раз ее можно поменять. А в var секции
> такое не пройдет
Константные типизированные данные тоже можно менять.
На то у компилятора есть соотв.опция.
Опять же - учи матчасть.
> в var секции такое не пройдет
ЧТО не пройдет ? Статическая инициализация что ли ?
Это с какого перепугу ?)
← →
McSimm_ (2007-03-16 15:11) [11]
> когда перед else не только можно, но и нужно ставить точку
> с запятой?
case else
> объясняется отсутствием завершителей у конструкции if then
> else
в PHP тоже нет endif, однако:
if (cond)
statement;
else
statement;
← →
REA (2007-03-16 15:14) [12]>Кстати, (3) - неправда.
For i := 0 To 10 Do X := X + 1;
For i := 0 To 10 X := X + 1; - чем такая конструкция не валидна?
ну или такая
For (i := 0..10)
>Кто первый приведет случай, когда перед else не только можно, но и нужно ставить точку с запятой?
А кто приведет, что нельзя?
>Все на самом деле объясняется отсутствием завершителей у конструкции if then else.
В смысле? Не очень понятно.
В С например проходит такое:
if(begin==NULL)
begin=rex;
else
end->next=rex;
к слову сказать и слово Then тоже не очень нужно.
← →
jack128 © (2007-03-16 15:15) [13]McSimm_ (16.03.07 15:11) [11]
case else
в этом случае можно, но не нужно ставить ";"
← →
Kolan © (2007-03-16 15:17) [14]> к слову сказать и слово Then тоже не очень нужно.
Зато нужны скобочки, так чт шило на мыло...
← →
McSimm_ (2007-03-16 15:23) [15]
> в этом случае можно, но не нужно ставить ";"
case ... if then ; else ;
← →
REA (2007-03-16 15:32) [16]- Не помешало бы слово Return или Exit(Result)
Вот к примеру C#, чтобы уже не акцентировать внимание на самом Pascal:
- Частичные типы (разделение реализации класса более чем на один файл). - хорошо ли это?
- слово yield - мне показалось больше путаницы от этого
В C# 3.0 появились следующие радикальные добавления к языку:
ключевые слова select, from, where, позволяющие делать запросы из SQL, XML, коллекций и т. п. (запрос, интегрированный в язык, LINQ) - это странно
Инициализация объекта вместе с его свойствами
Customer c = new Customer(); c.Name="James"; - неплохо, но синтаксис не очень...
Методы-расширения — добавление метода в существующий класс с помощью ключевого слова this при первом параметре статической функции. - тоже непривычно...
← →
Сергей М. © (2007-03-16 15:51) [17]
> REA
Ты замахнулдся на "святое" - на Паскаль.
А Паскаль изначально позиционировался как учебный язык, в котором обучающемуся было (и должно было быть, по задумке разработчика) все предельно понятно:While
Логическое_выражениеDo
Нечто
даже ИНТУИТИВНО переводилось на "человеческий" язык какПока истинно условие, заданное логическим выражением
Логическое_выражениеДелать
Нечто
← →
Игорь Шевченко © (2007-03-16 15:56) [18]Вообще ничего не нужно. Нужен один оператор DWIM
← →
McSimm_ (2007-03-16 16:00) [19]"Do what I mean" ?
:)
← →
REA (2007-03-16 16:04) [20]Сам паскаль никто не трогал. Речь о языке "вообще" - т.е. каким он мог бы быть (см. выше). Согласен, что Do, Then и Of украшают язык, но в принципе можно было бы и без них обойтись.
← →
Сергей М. © (2007-03-16 16:05) [21]
> 5) Для чего в вариантных частях записей идентификатор?
Хотя бы для того чтобы ты изучил ВСЕ возможности компилятора в части применения этого самого идентификатора.
← →
Игорь Шевченко © (2007-03-16 16:07) [22]McSimm_ (16.03.07 16:00) [19]
Конечно :)
← →
Сергей М. © (2007-03-16 16:10) [23]
> REA (16.03.07 16:04) [20]
Любой язык программирования обладает своими "прелестями" и несуразностями/недостатками.
Ибо заточен под конкретную программистскую аудиторию и конкретные задачи.
Паскаль - не исключение.
Желаешь анонсировать свой собственный язык с оригинальной спецификацией ?
Дерзай !
← →
clickmaker © (2007-03-16 16:13) [24]
> Согласен, что Do, Then и Of украшают язык, но в принципе
> можно было бы и без них обойтись
да ладно. Работа сидячая, так пусть хоть пальцы лишний раз разомнутся
← →
REA (2007-03-16 16:21) [25]>Хотя бы для того чтобы ты изучил ВСЕ возможности компилятора в части применения этого самого идентификатора.
В С обходятся без этих возможностей да и пользы от них не так уж много.
Например как использовать в этом примере Rectange?
case TShapeList of
Rectangle: (Height, Width: Real);
Triangle: (Side1, Side2, Angle: Real);
Circle: (Radius: Real);
Ellipse, Other: ();
← →
REA (2007-03-16 16:24) [26]В общем следствие зашло в тупик - как я и предполагал дело ограничится критикой, экзорцизмом и остракизмом...
← →
Alkid © (2007-03-16 16:28) [27]Ну лично я бы в язык внёс следующие возможности:
1. Шаблоны или generic`s. Первое предпочтительне. Как там, кстати, с дженериками в .NET-версиях дельфи?
2. Нормальный Reflection (ну в .NET он и так есть, а в native-версии пригодился бы).
3. Стандартную библиотеку с возможностями типа STL (только не в таком стиле, плз :-) )
← →
clickmaker © (2007-03-16 16:33) [28]
> 3. Стандартную библиотеку с возможностями типа STL
а зачем?
чего в VCL нет, для чего может понадобиться эта stl?
← →
Плохиш © (2007-03-16 16:38) [29]Всегда прикольно читать до какого маразма доходят индивидумы, когда заняться нечем :-)
← →
Alkid © (2007-03-16 16:43) [30]
> чего в VCL нет, для чего может понадобиться эта stl?
Да вот VCL беден по части контейнерных классов. Например, нужен мне
map. Или set (не тот, который в паскале, а, например, set сторк. Или определённых мною объектов). Или двусвязаный список. Причём без тайпкастов и лишей писанины.
← →
clickmaker © (2007-03-16 16:48) [31]
> Например, нужен мне
> map.
TStringList не потянет? с его names - values
шаблон - тоже ведь палка о двух концах. Удобство за счет размера сгенеренного кода.
← →
alien1769 © (2007-03-16 16:51) [32]
> 5) Для чего в вариантных частях записей идентификатор?
Судя по вопросу, автор их не использовал.
Далее сам подтвердил :
> Например как использовать в этом примере Rectange?
>
> case TShapeList of
> Rectangle: (Height, Width: Real);
> Triangle: (Side1, Side2, Angle: Real);
> Circle: (Radius: Real);
> Ellipse, Other: ();
← →
Сергей М. © (2007-03-16 16:51) [33]
> REA (16.03.07 16:21) [25]
> как использовать в этом примере Rectange?
Как это "как" ?!
Прямо вот так:
ShapeList.Rectangle.Height
Понимаешь ли, еще раз повторяю, Паскаль позиционируется как строго типизированный язык (и в этом есть ощутимые прелести !), он изначально не планировался для поблажек "особо одаренным", понимающим что ShapeList.Height не может иметь отношения ни к чему более, нежели к ShapeList.Rectangle.Height
← →
Alkid © (2007-03-16 16:54) [34]
> TStringList не потянет? с его names - values
> шаблон - тоже ведь палка о двух концах. Удобство за счет
> размера сгенеренного кода.
Нет, не потянет. А если ключами у меня должны быть числа (GUID`ы, и т.п.), а
значениями - весьма крупные и сложные объекты. Что же - кастовать всё в стинги? Да и подумай о производительности. В map сложность поиска логарифмическая, а в StringList - линейная.
Что же до размеров кода, то это действительно так, но сейчас это не так страшно. В конце концов, на С++ это сейчас не является дикой проблемой, а время и удобство разработчка важнее. (Как правило).
При этом я не напираю на стиль STL - он местами ужасен. :)
← →
Alkid © (2007-03-16 16:55) [35]Да, ещё забыл важную фишку - First-class functions или хотя бы function objects
← →
REA (2007-03-16 17:01) [36]>ShapeList.Rectangle.Height
Ты сам то пробовал, одаренный ты наш?
← →
REA (2007-03-16 17:04) [37]Расскажите темному - что такое Reflection и First-class functions?
Нужны ли static переменные в языке?
← →
REA (2007-03-16 17:06) [38]Map и Hash там какие то есть...
Меня все же интересует больше не стандартные компоненты и классы, а сам язык.
← →
alien1769 © (2007-03-16 17:09) [39]Автору по вопросу о записях:
Remarks:
Each field list is a comma-separated list of identifiers, followed by a
colon and a type.
Example:
{ Record Type Definitions }
type
Class = (Num, Dat, Str);
Date = record
D, M, Y: Integer;
end;
Facts = record
Name: string[10];
case Kind: Class of
Num: (N: real);
Dat: (D: Date);
Str: (S: string);
end;
← →
Alkid © (2007-03-16 17:12) [40]Reflection - это возможность получать информацию о структуре типов в run-time.
Т.е. списки методов, пропертей, полей и т.п. классов.
First-class functions - это функции, которыми можно оперировать, как другими значениями, т.е. передавать как параметры в другие функции и возвращать как результат выполнения. В принципе, наличие указателей на функции в паскале делает это возможным, но не без извратов.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.037 c