Re[8]: Синтаксический оверхед
От: moudrick Россия http://community.moudrick.net/
Дата: 10.06.05 09:34
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, moudrick, Вы писали:


К>

S>>>>>Есть группа параметров, естественным образом связанных друг с другом. Замените их объектом.

S>>>>>А если объекты не связаны? Например, надо взять взаймы у одного из двух человек, у кого денег больше:
S>>>>>
S>>>>>Взять_взаймы (человек1.деньги > человек2.деньги? человек1: человек2);
К>

S>>>Какой тут можно сделать объект?

M>>Никакой. Здесь один параметр, который есть уже объект.


M>>Здесь напрашивается другой паттерн рефакторинга — Выделение переменной (Introduce Explaining Variable)

M>>здесь

M>>
M>>Человек уКогоЗанять  = человек1.деньги > человек2.деньги? человек1: человек2;
M>>Взять_взаймы (уКогоЗанять);
M>>


К>Не, тут нужно ещё выделить алгоритм:


Конечно нужно, если этого потребует (постановка задачи) и/или (её имплементация).

Но это вовсе не обязательно.
Даже излишне, если это не требуется.
keep it simpler, stupid.

Кроме того,
К>
К>взять_взаймы(
К>  максимум(                 -- у кого
К>    [человек1, человек2],   -- набор, из которого берётся максимальный элемент
// а кто будет оптимизировать здесь вызов подпрограммы? компилятор штоли?
//дюже вумный нужен компилятор. 
//Хотя в большинсттве задач рассматриваемой предметной области не сильно такая оптимизация нужна...
// но если нужна, то кранты.
К>    compose_f_gx_gy(        -- композитный предикат - комбинатор
К>      меньше(),             -- f - оператор сравнения
К>      атрибут(деньги)       -- g
//указатель на член - это только в плюсах есть из известных мне языков.
//в C#/Java, ноа которых щас пишу, даже не знаю как это заимплементить.
К>    )
К>  )
К>)
К>

К>Тем самым мы, во-первых, устраняем повторение имён (деньги) и ссылок (человек1, человек2), а во-вторых, делаем систему масштабируемой: можно обращаться к набору из более (да и менее) чем двух людей.
Re[3]: Синтаксический оверхед
От: Mamut Швеция http://dmitriid.com
Дата: 10.06.05 09:43
Оценка: 4 (2) +1 :))) :))
P>На самом деле академизмом, даже жалким, там и не пахнет. Это больше похоже вот на что:

P>

P>С точки зрения банальной эрудиции, каждый индивид способен абстрагироваться от идей материального индустриализма. Поскольку ратифицировать конвенцию о модернизации идентификационной изменчивости возможно при наличии ресурсообеспеченности, неизбежна ревальвация космогонической санации, а также консолидация психофизиологической формации.
P>Обращаясь к рационально-апоплексическому анализу дисгармонии фазисов современного апогея, мы эфемерно субъективизируемся в радикально – трансцендентном апофеозе и симбиозе. Антроподинамическая тенденция стабилизации мутогенеза находится на стадии нуклеосинтеза, порождая в свою очередь фальсификацию люминистенции реквизита. Электрофорез и диффектоскопия эпиграфики показали наличие плюрализма и плебисцита в хронологии дидактики.


А вот отсюда, если можно, поподробнее Не раскрыта тема социогенетической взаимоинтеграции индивидуумов


dmitriid.comGitHubLinkedIn
Re[12]: *
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 10.06.05 09:52
Оценка:
Здравствуйте, Кодт, Вы писали:

К>
К>IF
К>  condition_goes_here
К>THEN
К>  x;
К>  y;
К>  z; (* с обязательной ";" в конце каждой инструкции - требование системы контроля версий *)
К>ELSE
К>  t;
К>  u;
К>  v;
К>END; (* и здесь тоже ";" по той же самой причине *)
К>


А пусть даже и так.

Посчитаем синтаксический оверхед по сравнению с аналогичным показанному выше, но теперь уже Си-образным синтаксисом
if(condition_goes_here)
{
  x();
  y();
  z(); 
{
else
{
  t();
  u();
  v();
}


синтаксический оверхед = 26/11 = 2.36

(подсчитывал только служебные символы, пользовательские идентификаторы — нет).
Re[7]: Синтаксический оверхед
От: Socrat Россия  
Дата: 10.06.05 09:55
Оценка: +1
Здравствуйте, Пацак, Вы писали:

П>Здравствуйте, Cyberax, Вы писали:


C>>Еще можно Перл и Питон вспомнить — с ними

C>>по лаконичности рядом вообще ни один Паскаль не валялся.

П>Учитывая "любовь" автора к скобочкам — лучше лисп!


Можно FORTH
Re[13]: *
От: Курилка Россия http://kirya.narod.ru/
Дата: 10.06.05 09:57
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, Кодт, Вы писали:


К>>
К>>IF
К>>  condition_goes_here
К>>THEN
К>>  x;
К>>  y;
К>>  z; (* с обязательной ";" в конце каждой инструкции - требование системы контроля версий *)
К>>ELSE
К>>  t;
К>>  u;
К>>  v;
К>>END; (* и здесь тоже ";" по той же самой причине *)
К>>


СГ>А пусть даже и так.


СГ>Посчитаем синтаксический оверхед по сравнению с аналогичным показанному выше, но теперь уже Си-образным синтаксисом

СГ>
СГ>if(condition_goes_here)
СГ>{
СГ>  x();
СГ>  y();
СГ>  z(); 
СГ>{
СГ>else
СГ>{
СГ>  t();
СГ>  u();
СГ>  v();
СГ>}
СГ>


СГ>синтаксический оверхед = 26/11 = 2.36


СГ>(подсчитывал только служебные символы, пользовательские идентификаторы — нет).


Ты ещё и считать не умеешь???
Re[11]: Синтаксический оверхед: а смысл-то в чем?
От: Кодт Россия  
Дата: 10.06.05 10:00
Оценка: 3 (1) +1
Здравствуйте, garant, Вы писали:

G>Здравствуй, Кодт.


К>> Смысл заметки в том, что: СИ-ОБРАЗНЫЙ СИНТАКСИС ИСПОЛЬЗУЕТ

К>> БОЛЬШЕ ЛЕКСЕМ ЧЕМ ЭТО РЕАЛЬНО НЕОБХОДИМО. Я специально для Вас
К>> заглавными буквами написал смысл. Запомните его. А то,
К>> понимаете-ли, прочитали сообщение, а смысла так и не поняли.

Я этого не говорил.

G>Ха-ха-ха-ха! (вежливо)

G>А над чем смеемся-то?..

Я — над Сергеем Губановым, который утверждает, что Си-образный синтаксис избыточен, но почему-то в качестве примера для подражания приводит громоздкий синтаксис Оберона.

А как ещё можно назвать язык, в котором пишутся BEGIN END PROCEDURE MODULE и прочие здоровенные слова, но при этом соблюдается экономия на спичках:
— признак доступа к имени в модуле выражается плюсиком-минусиком в имени
— разделитель ветвей в свитче — палочкой (а в if — словами THEN, ELSE)



А над чем ты смеёшься — откуда я знаю?
Перекуём баги на фичи!
Re[8]: Oberon - Примеры кода
От: Mamut Швеция http://dmitriid.com
Дата: 10.06.05 10:02
Оценка: 10 (4) +3
Читал я, читал я эту ветку, но так и не видел кода на Обероне, которые не был бы высосан из пальца. Ладно, Гугль нам в помощь:

Linked list
MODULE FigureList; (* tlozza@student.ethz.ch *)
TYPE
    Figure = OBJECT
        name : System.String;
        next : Figure; (* Reference to the next figure. *)
    END Figure;

VAR
    FigureList, MyFigure, Iterator : Figure;

BEGIN
    NEW(MyFigure); (* Create new figure object/instance. *)
    MyFigure.name := "my favorite";
    FigureList := MyFigure; (* Attach figure to list. *)
    NEW(MyFigure); (* A new figure again. *)
    MyFigure.name := "another one";
    FigureList.next := MyFigure;
    
    (* Print the name of all figures in the list. *)
    Iterator := FigureList; 
    WHILE Iterator # NIL DO
    WRITELN(Iterator.name);
    Iterator := Iterator.next;
    END;
    
END FigureList.


Попрошу обратить внимание на следующее:
Figure = OBJECT
        name : System.String;
        next : Figure; (* Reference to the next figure. *)
END Figure;

Сравним с
struct Figure{
  System::String figure;
  Figure* next;
}


и

WHILE Iterator # NIL DO
    WRITELN(Iterator.name);
    Iterator := Iterator.next;
END;

сравним с
while(Iterator != NULL){
    printf(Iterator.name);
    Iterator = Iterator.next();
}


Кто-то еще будет говорить о разнице в разы? Не говоря о том, что С-образный синтаксис содержит намного меньше визуального шума, чем Паскале-образный.

Еще не убедились? Ладно, Ordered List with sentinel (at begin):
MODULE List;

TYPE
  List = POINTER TO ListDesc;
  ListDesc = RECORD
    key: ARRAY 64 OF CHAR;
    next: List;
END;

VAR root: List;

PROCEDURE Find (key: ARRAY OF CHAR): List;
  VAR p: List;
BEGIN
  p := root.next;
  WHILE (p # NIL) & (p.key < key) DO p := p.next END;
  IF (p = NIL) OR (p.key > key) THEN RETURN NIL
  ELSE RETURN p
  END
END Find;

PROCEDURE Insert (key: ARRAY OF CHAR; unique: BOOLEAN);
  VAR p, q: List;
BEGIN
  p := root;
  WHILE (p.next # NIL) & (p.next.key < key) DO p := p.next END;
  IF unique & (p.next # NIL) & (p.next.key = key) THEN HALT (99) END;
  NEW (q); COPY (key, q.key); q.next := p.next; p.next := q
END Insert;

PROCEDURE Delete (key: ARRAY OF CHAR);
  VAR p: List;
BEGIN
  p := root;
  WHILE (p.next # NIL) & (p.next.key < key) DO p := p.next END;
  IF (p.next # NIL) & (p.next.key = key) THEN
  p.next := p.next.next
  END
END Delete;

PROCEDURE InitList;
  BEGIN NEW (root); root.next := NIL
END InitList;

END List.


Во-первых, видим кучи begin-end'ов (так, только не надо мне сейчас говорить, что это не Оберон-5, а МодулаХ9-бета или Зоннон или... Это-Оберон). Во-вторых видим дикий синтаксис в одну строчку. Нечитаемый. Дебагить его тоже невозможно:
IF (p = NIL) OR (p.key > key) THEN RETURN NIL
ELSE RETURN p
END



Короче. На более-менее реальных примерах Оберон в десятки раз проигрывает в читаемости. Визуального мусора в нем — тонны. И лексем там не меньше, чем в С/С++


dmitriid.comGitHubLinkedIn
Re[3]: Синтаксический оверхед
От: DMitay Украина  
Дата: 10.06.05 10:04
Оценка: 1 (1)
Здравствуйте, Кодёнок, Вы писали:

А>>Ты это... убери что-ли "кфмн" из профайла.

А>>Даже неудобно как-то читать подобные сообщения от человека со степенью.

Кё>По-моему, среди кандидатов умных людей как раз меньшинство, а не большинство. Знаете же этот маразм, писать научные статьи, публиковаться, а главное читать чужие очень умные банальности, написанные научным языком. Откройте какой-нибудь специфический научный журнал — даже зная предмет читать это напрягает. Разве нормальный человек там останется? Отмазка от армии не в счёт


Полностью согласен! Пусть на меня не обижаються мои друзья учащиеся в аспирантуре, но то что там занимаються зачастую надуманными и не имеющими практического и прочего применения это точно. Зачастую все статьи, научные работы и прочее пишуться только ради самого факта публикации.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[4]: Автомат Калашникова
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 10.06.05 10:05
Оценка:
Здравствуйте, Yachtsman, Вы писали:

Y>А этот синтаксис не устарел?! Не смотря на то, что ему те же 25?


Нет не устарел.

1) Вот смотрите, заменим все служебные слова на символ "*"
REPEAT x UNTIL b                      = * x * b
WHILE a DO x END                      = * a * x *
IF a THEN x END                       = * a * x *
IF a THEN x ELSE y END                = * a * x * y *
IF a THEN x ELSIF b THEN y ELSE z END = * a * x * b * y * z *
CASE n OF a: x | b: y ELSE z END      = * n * a * x * b * y * z *

между каждым "пользовательским" идентификатором стоит не более одной звездочки. Меньше одной звездочки поставить нельзя (если конечно не перегружать пробельные символы дополнительным смыслом кроме того что у них и так уже натурально есть). Значит минимум достигнут. Больше одной звездочки — это уже оверхед. Если расписать аналогичные Си-образные конструкции, то там будет куча лишних звездочек.

2) В, принципе, вместо слов IF, END и т.д. можно изобрести совершенно другие слова. Можно изобрести какую угодно другую семантику, но сам, так сказать, синтаксический скелет:
* идентификатор * идентификатор * идентификатор * идентификатор * идентификатор ...

имеющий всего лишь один единственный служебный разделитель — универсальная вещь — она не устареет никогда.

3) По поводу оберонов даже говорят: Изобрести еще один "Оберон" так же невозможно, как невозможно изобрести еще один автомат Калашникова.
Re[5]: Синтаксический оверхед: а смысл-то в чем?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 10.06.05 10:09
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, eao197, Вы писали:


E>>Да и вообще, чего мы мелочимся?


СГ>Увы, 235 процентов — не мелочь.


СГ>Серьмяжный смысл моего сообщения был в том, что теперь я могу ссылаться
Автор: Сергей Губанов
Дата: 09.06.05
на это сообщение, а не голословно говорить, что Си-образный синтаксис использует больше лексем чем нужно.


СГ>Мне даже не важно какой именно перерасход лексем получился. Важно что их больше
Автор: Сергей Губанов
Дата: 09.06.05
чем реально необходимо.



Если честно, то я не понял, кто здесь над кем прикололся
... << RSDN@Home 1.1.4 beta 7 rev. 447>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[12]: Устаревший блок begin end
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 10.06.05 10:11
Оценка: +1
Здравствуйте, moudrick, Вы писали:

M>И что же используется в тех местах, где раньше был {begin, end}?


А таких мест больше нет, вот смотрите:

IF ... THEN ... END
IF ... THEN ... ELSE ... END
IF ... THEN ... ELSIF ... ELSE ... END
CASE ... OF ... : ... | ... : ... | (и т.д.) ELSE ... END
WITH ... : ... DO ... |... : ... DO ... | (и т.д.) ELSE ... END
WHILE ... DO ... END
LOOP ... END
REPEAT ... UNTIL ...

Сам по себе блок begin end утрачен за не надобностью — ведь все инструкции теперь явно содержат END.
Re: Синтаксический оверхед
От: DMitay Украина  
Дата: 10.06.05 10:11
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

Сергей, у меня к Вам вопрос! В каком учебном заведении вы защищали свою кандидатскую?
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[13]: *
От: Кодт Россия  
Дата: 10.06.05 10:16
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:

К>>IF
К>>  condition_goes_here
К>>THEN
К>>  x;
К>>  y;
К>>  z; (* с обязательной ";" в конце каждой инструкции - требование системы контроля версий *)
К>>ELSE
К>>  t;
К>>  u;
К>>  v;
К>>END; (* и здесь тоже ";" по той же самой причине *)


СГ>А пусть даже и так.


СГ>Посчитаем синтаксический оверхед по сравнению с аналогичным показанному выше, но теперь уже Си-образным синтаксисом

СГ>if(condition_goes_here)
СГ>{
СГ>  x();
СГ>  y();
СГ>  z(); 
СГ>{
СГ>else
СГ>{
СГ>  t();
СГ>  u();
СГ>  v();
СГ>}


СГ>синтаксический оверхед = 26/11 = 2.36


СГ>(подсчитывал только служебные символы, пользовательские идентификаторы — нет).


Странная арифметика. Давай посчитаем все служебные символы, включая пробелы (разделители лексем).
Без извращений в стилистике:
Без извращений в стилистике: ( | конец потока )

~~~         ~~~~~~ ~ ~ ~~~~~~ ~ ~ ~~~~~        24 служебных символа
IF condition THEN x;y;z ELSE t;u;v END |       разница 6 символов, 30:24 = 1.25
if(condition){x();y();z();}else{t();u();v();}|
~~~         ~~ ~~~ ~~~ ~~~~~~~~~ ~~~ ~~~ ~~~~  30 служебных символов

С извращениями: ( _ пробел, \ перевод каретки )

~~~~~         ~~~~~~~~ ~~~~ ~~~~ ~~~~~~~~~ ~~~~ ~~~~ ~~~~~~~           45
IF\__condition\THEN\__x;\__y;\__z;\ELSE\__t;\__u;\__v;\END;\|          разница 9 символов, 54:45 = 1.20
if(condition)\{\__x();\__y();\__z();\}\else\{\__t();\__u();\__v();\}\|
~~~         ~~~~~~ ~~~~~~ ~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~ ~~~~~~ ~~~~~~  54

Причём, если бы функции x...v были не нуль-арными — то Си выиграл бы.
Перекуём баги на фичи!
Re[13]: Устаревший блок begin end
От: Пацак Россия  
Дата: 10.06.05 10:17
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:


СГ>А таких мест больше нет, вот смотрите:

(скип)

PROCEDURE ... BEGIN ... END;


Ку...
Re[8]: Синтаксический оверхед
От: Socrat Россия  
Дата: 10.06.05 10:18
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Не, тут нужно ещё выделить алгоритм:


std::set рулит.
Re[8]: Синтаксический оверхед
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 10.06.05 10:18
Оценка:
Здравствуйте, Socrat, Вы писали:

S>Там мы дождемся перевода данного или похожего кода на Оберон?


Не понял, я что ли должен за Вас чего-то переводить? А самим слабо что-ли? Кому это нужно, мне или Вам? Переведите, подсчитайте служебные слова, возьмите калькулятор, разделите два полученных числа друг на друга. Ну?
Re: Синтаксический оверхед
От: Аноним  
Дата: 10.06.05 10:20
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

Вы ратуете за лаконичный синтаксис ?
Вот вам :http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%98%D1%84%D0%BA%D1%83%D0%B8%D0%BB%D1%8C
Re[3]: Синтаксический оверхед
От: moudrick Россия http://community.moudrick.net/
Дата: 10.06.05 10:26
Оценка:
Здравствуйте, GlebZ, Вы писали:

AF>>Сергей! Не в даваясь в детали дискуссии (всё что можно и что нельзя сказали без меня ), вы никогда не задумывались — почему Джордано Бруно кончил карьеру не так, как Галилей?

GZ>Оберон все таки вертится?

Поверьте мне, Оберон вертится вовсе не оттого, что у него, как говорит аффтар,
минимальное количество лексем, что весьма сомнительно, так как легко опровергается в соседних постах.

GZ>С уважением, Gleb.
Re[2]: Синтаксический оверхед
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 10.06.05 10:26
Оценка: :))) :)
Здравствуйте, AndreyFedotov, Вы писали:

AF>Сергей! Не в даваясь в детали дискуссии (всё что можно и что нельзя сказали без меня ), вы никогда не задумывались — почему Джордано Бруно кончил карьеру не так, как Галилей?


Тогда не было интернета. Вот если бы все ковбои отметившиеся в этой ветке были бы собраны в одной комнате, то я бы конечно не рискнул войти в эту комнату запереть ее изнутри и сообщить присутсвующим что Си-образный синтаксис оказывается устарел 25 лет назад. А с интернетом, глядишь, по голове не настучат
Re[14]: *
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 10.06.05 10:29
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Ты ещё и считать не умеешь???


— "Ну я же сказал четыреста капель валерьянки, а тут четыреста две?"
— "У нас всё точно."
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.