Hello, Andrey Solomatov! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Tue, 25 Oct 2005 08:37:13
+0000 (UTC):
DO>> Операция плюс в языке программирования и в математике - DO>> существенно разные вещи. В математике 127+1 - всегда 128, а в DO>> языках программирования может быть и -1 и много чего еще.
AS> Ну, насколько мне известно результат -1 полученный от 127 +1 AS> всегда интерпретируется как ошибка. И ЯВУ придумывались не для
Где и когда это интерпретируется как ошибка?
AS> того, что-бы множить число новых операций.
Ты о чем?
AS> А то были любители вводить новые конструкции типа "выход из AS> второго вложенного цикла" и т.д. Тоже вроде выразительности добавляет...
А это о чем?
AS>>> Стандартная адресная арифметика всегда является хакерством.
DO>> В паскале - в большей степени. В С учитывается автоматически DO>> размер того, на что указывает адрес, а в паскале это надо DO>> вручную указывать.
AS> int i; AS> int *p = &i;
AS> p++; /* скажешь не хак? */
Нет конечно.
AS>>> С учётом того, что в Си эллипсис - это тоже полухак...
DO>> Вовсе нет, почему?
AS> Отказ от проверки типизации. Полный.
Я тебе уже показывал полный отказ от типизации в паскале.
DO>> Не более хакерская, чем передавать в функцию указатель, а уж DO>> это в паскале на право и на лево делается.
AS> В паскале все указатели типизированы.
Нет. Есть просто pointer.
AS> Плюс "направо-налево" можно передавать "по ссылке" - тот-же указатель, только AS> записывается удобнее - чей расширенный аналог - ссылки C++.
Ага, написал var v и передавай что хочешь.
DO>> Да и stdout можно было переназнчить, что в частности стартап DO>> модуля CRT и делал, только все равно не гибко все это очень.
AS> В смысле "негибко"?
А прямом. Ты не можешь формат вывода сделать изменяемым.
DO>> И сгородили, звалась drivers.formatstr. Посмотри на сколько DO>> коряво в сравнении с sprintf все это выглядит.
AS> А у меня просто вкусы другие.
Причем тут вкусы? Какой надо иметь вкус, чтобы такое вот понтравилось? Или это не хакерство? Или не паскаль?
procedure PrntMsg(Pref: String; var Text: String); var S: String; L: array[0..3] of Longint; begin L[0] := Longint(@Pref); L[1] := Longint(@HelpStrm^.FileName); L[2] := Count; L[3] := Longint(@Text); if Count > 0 then FormatStr(S, '%s: %s(%d): %s'#13#10, L) else FormatStr(S, '%s: %s %#3%s', L); PrintStr(S); end;
Собственно да, это не паскаль, это записанный символами паскаля сишный код. И не от хорошей жизни, а от того, что встроенные в паскаль механизмы оказались не удобны, а нормальных средств делать свои язык не предоставляет. Только, что очевидно, говорить о какой-то переносимости всего этого явно не приходится.
AS> Мне всегда было влом разбираться с этими закорючками в командной строке.
В командной строке чего?
AS>>> Ну, собственно, за пределы вывода строк/символов/числе AS>>> способности printf не распространяются -
DO>> Это уже не мало. В паскале и для этого городить приходится.
AS> ? AS> var i: integer; c: char; s: string; AS> f: file; AS> ... AS> write(f, i, c, s);
А теперь поинтересуйся как в паскале управлять форматом и шириной вывода (write(d:3:2)). И попробуй задать этот формат не в тексте программы, а как параметр.
DO>> Хочешь удивлю? Попробуй найти где-нибудь турбо-паскаль и DO>> скормить ему такой текст:
DO>> {$A+,B+,D+,E+,F-,G-,I+,L+,N+,O-,P-,Q-,R-,S+,T-,V-,X+,Y+} DO>> {$M 16384,0,655360}
AS> [кусь]
DO>> и скомпилировать. Сожрет за милую душу. И после этого мне DO>> кто-то будет втирать, что паскаль (в его борланодовской DO>> инкарнации) строгий язык? DO>> Подозреваю, что вы его просто плохо знаете...
AS> А что делают псевдокомментарии вверху?
А в хелпе посмотри. Тоже кстати милая для "продуманного языка" штука - ключик B+ - управляет полностью вычислять логическое выражение или нет. И кому такое в голову пришло?
AS>>> действительно слегка затруднительно - именно в силу построения языка.
DO>> Ась? Какого типа "v" в вышеприведенном примере?
AS> Так мы обсуждаем язык или конкретную реализацию?
Учитывая, что в паскале конкретный язык, соответствующий ISO не помню какому обсуждать бессмысленно ввиду отсутствия вменяемых реализаций, приходится обсуждать языки реализаций, так как они существенно различаются. Сейчас обсуждались преимущества и недостатки борландовской (и отчасти совместимых) реализации со стандартным ANSI C.
AS> А то я щазз начну ругацца "а вот См не умеет работать с битовыми полями. AS> С битами - может, в т.ч. и как с элементами слова, а вот с полями, скажем в три бита - нет"
А как он должен с ними работать?
AS>>> В отстальном - не вижу особой разницы.
DO>> Посмотри на то как "изящно" вызывается drivers.formatstr по DO>> сравнению с sprintf и может быть увидишь разницу.
AS> Таки sprintf - это часть языка или как?
Нет, но язык позволяет написать такую функцию, в отличие от паскаля.
dima
formatting link