Re[5]: Синтаксический оверхед
От: Cyberax Марс  
Дата: 10.06.05 08:02
Оценка: +2
Сергей Губанов wrote:

>

>
>П>while (x = a() ? b(k[i++]) : c(l[j--]) ) d(x);
>П>
>
> А по ушам схлопотать за такой код, можно?

Сам же хотел — без оверхеда. Еще можно Перл и Питон вспомнить — с ними
по лаконичности рядом вообще ни один Паскаль не валялся.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re: Синтаксический оверхед
От: Hobot Bobot США  
Дата: 10.06.05 08:07
Оценка: 1 (1) +2
Здравствуйте, Сергей Губанов, Вы писали:

СГ>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

СГ>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).

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


Собственно, непонятно только одно — чем все это плохо?
What a piece of work is a man! how noble in reason! how infinite in faculty! in form and moving how express and admirable! in action how like an angel! in apprehension how like a god! the beauty of the world! the paragon of animals!
Re[8]: Синтаксический оверхед
От: moudrick Россия http://community.moudrick.net/
Дата: 10.06.05 08:07
Оценка:
Здравствуйте, Socrat, Вы писали:

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


S>>>>>А если объекты не связаны? Например, надо взять взаймы у одного из двух человек, у кого денег больше:

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

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

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


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

M>>здесь

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


S>А чем твой код отличается от моего? Только ввел дополнительную переменную и разделил на два оператора. В обероне будет еще хуже — там нет условных выражений.

Примененным вышеуказанным паттерном рефакторинга.
Мотивация (отвечает на вопрос зачем)
в данном случай — человек, мельком проглядывающий этот код в окружении огромного количества другого кода
(т.н. code review) сразу, не присматриваясь к знакам препинания, видит, что метод "Взять_Взаймы" вызывается с одним параметром.
Кроме того, это же значение может использоваться ниже по коду, выделение переменной избавляет от необходимости вычислять его снова.

П>>>>А где здесь группа параметров? ИМХО один, но выбираемый в зависимости от условия.


S>>>Ну, можно еще добавить парочку... Например, сколько взять, когда отдать и т.д.


M>>Вот они то как раз и связаны естественным образом.

M>>Естественность образа хотя бы в том, что ты их передаешь параметром в один и тот же метод.
M>>Или ты пишешь НЕЕСТЕСТВЕННЫЕ методы?

M>>заменить на


M>>
M>>class ЗаймИнфо
M>>{
M>>    Человек УКогоЗанять;
M>>    деньги СколькоВзять;  
M>>    дата КогдаОтдать;
M>>}
M>>


S>Для вызова одной-единственной функции создавать дополнительный объект? Как говорится, все хорошо в меру.

Все зависит от постановки и реализации задачи, а также человека, пишущего код.
Например,

M>>А можно и оставить как есть. 3 параметра у метода — не очень страшно.

M>>4 — со скрипом терпимо. А вот 5 и более — это п-ц.
M>>За такой код можно и, как принято выражаться в этом бредовот треде, "по ушам схлопотать"

S>Согласен. Но я приводил тексты в качестве примера. Всегда можно придумать условия тестирования, когда то, что похуже выиграет у того, что получше. Этим автор топика и занимается.



M>>Кроме того, иницыатор треда и тут наедет по перерасходу лексических средств языка...

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

S>Согласен. Все средства хороши на маленьких программах.

Re[5]: Синтаксический оверхед
От: Пацак Россия  
Дата: 10.06.05 08:08
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

П>>
П>>while (x = a() ? b(k[i++]) : c(l[j--]) ) d(x);
П>>


СГ>А по ушам схлопотать за такой код, можно?


Теоретически — можно, хотя я лично и за IF a THEN b ELSE c END по мозгам бы давал .
Но мы ж не об этом, а о синтаксисе. Итак, обероновский вариант?
Ку...
Re[7]: Синтаксический оверхед: а смысл-то в чем?
От: Demiurg  
Дата: 10.06.05 08:10
Оценка: 3 (1)
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Скажете что Си-образный синтаксис использует минимально возможное количество лексем? Тогда не правы будете Вы. Си-образный синтаксис использует вовсе не минимально возможное количество лексем, а гораздо больше — известны примеры трехкратного перерасхода. Не верите? А вот здесь
Автор: Сергей Губанов
Дата: 09.06.05
ссылочка. Гляньте, там куча примеров перерасхода от двух до трех раз каждый.


Так ведь ясно, что примеры абсурдны, здесь уже тебе это много раз объяснили.
... << RSDN@Home 1.1.4 beta 7 rev. 463>>
Re[7]: Синтаксический оверхед: а смысл-то в чем?
От: Demiurg  
Дата: 10.06.05 08:10
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

D>> Но ведь ты не прав

D>> Ссылаться на бредовое сообщение? Ой, тогда извини... Ты так и не понял, что не прав?

СГ>Да, не понял.


СГ>Текст оформлен в согласии с общепринятым coding style. Служебные слова, скобочки, точки-запятые, посчитаны, надеюсь, без арифметических ошибок. Числа делил правда на калькуляторе, но наверное калькулятор всё-таки не ошибся. Так что всё вроде сделал правильно. Так что не так?


Больше вопросов не имею!
... << RSDN@Home 1.1.4 beta 7 rev. 463>>
Re[6]: Синтаксический оверхед
От: Пацак Россия  
Дата: 10.06.05 08:11
Оценка:
Здравствуйте, Socrat, Вы писали:

S>По ушам схлопотать можно и без повода... А такой код тоже недопустим?


S>
S>while (*str1++ = *str2++);
S>


Зря ты это сказал. Щас опять флейм насчет указателей поднимется.
Ку...
Re[7]: Синтаксический оверхед
От: moudrick Россия http://community.moudrick.net/
Дата: 10.06.05 08:14
Оценка: :)
Здравствуйте, Пацак, Вы писали:

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


S>>По ушам схлопотать можно и без повода... А такой код тоже недопустим?


S>>
S>>while (*str1++ = *str2++);
S>>


П>Зря ты это сказал. Щас опять флейм насчет указателей поднимется.


(n-m)-я заповедь флеймера — никогда не создавай сам провокационные топики. используй чужие.
Re[2]: Синтаксический оверхед
От: Кодёнок  
Дата: 10.06.05 08:16
Оценка: 14 (8) +3 -1
А>Ты это... убери что-ли "кфмн" из профайла.
А>Даже неудобно как-то читать подобные сообщения от человека со степенью.

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

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

Глядя на всех этих доцентов (каждый препод — кандидат), ИМХО делом в науке занимается меньшинство, остальные либо тихо и беспомощно существуют за зарплату преподавателя, либо создают шум из ничего, вроде автора. Причем опасный шум, т.к. маскируется он под "важную научную деательность". А другим потом это читать...

Ну серьёзно, неужели количество лексем — одна из важных проблем в разработке ПО? "Во время боя командир автоматически переходит на мат, и результативность возрастает втрое?" Какие выгоды автор надеется получить, уменьшив число лексем на оператор? На сколько % ускорить разработку? Или что?
Re[7]: Синтаксический оверхед
От: Пацак Россия  
Дата: 10.06.05 08:17
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:


СГ>Оберон — есть "safe" язык со сборщиком мусора. Адресной арифметики там нет.



Как скажешь:

S>>
S>>while (str1[i++] = str2[j++]);
S>>
Ку...
Re[6]: Синтаксический оверхед
От: Пацак Россия  
Дата: 10.06.05 08:30
Оценка:
Здравствуйте, Cyberax, Вы писали:

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

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

Учитывая "любовь" автора к скобочкам — лучше лисп!
Ку...
Re[7]: Синтаксический оверхед
От: Курилка Россия http://kirya.narod.ru/
Дата: 10.06.05 08:34
Оценка: :))
Здравствуйте, Пацак, Вы писали:

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


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

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

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


Вот только не надо лисп на поругание обероновцам отдавать
Re[3]: Синтаксический оверхед
От: Аноним  
Дата: 10.06.05 08:48
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>Ну серьёзно, неужели количество лексем — одна из важных проблем в разработке ПО? "Во время боя командир автоматически переходит на мат, и результативность возрастает втрое?" Какие выгоды автор надеется получить, уменьшив число лексем на оператор? На сколько % ускорить разработку? Или что?


Согласен со всем.
Автор похоже не совсем в курсе проблем программирования
Re[11]: *
От: Кодт Россия  
Дата: 10.06.05 08:50
Оценка: +2
Здравствуйте, Сергей Губанов, Вы писали:

M>>if (a) x(); else y();

M>>не устраивает?

СГ>Меня — вполне, а вот пацанов из соседней комнаты сопровождающих международный проект заставляют писать {} в любом случае и на новой строке, ссылаясь на общепринятый coding style.


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

То будешь на синтаксис Оберона наезжать, или всё-таки на менеджмент?

СГ>P. S.

СГ>
СГ>if ( a ) x ( ) ; else y ( ) ;
СГ>*  * a * x * * *  *   y * * *
СГ>

СГ>6 лишних звездочек

Только не говори, что THEN короче, чем {}
Перекуём баги на фичи!
Re[9]: Синтаксический оверхед: а смысл-то в чем?
От: Кодт Россия  
Дата: 10.06.05 08:53
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

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


M>>Единственный разумный вывод из твоей "работы" — ты против использования coding-style в обероне, а так же недолюбливаешь с-подобный синтаксис.


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


Переходи на J. Или на APL — если разживёшься подходящей клавиатурой Вот где количество лексем стремится к Шенноновскому пределу.
Перекуём баги на фичи!
Re[3]: Ошибка 2
От: Yachtsman Россия  
Дата: 10.06.05 09:01
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Приведенный мной синтаксис есть синтаксис языков Modula/Oberon (используется с середины 1970-тых годов).

А этот синтаксис не устарел?! Не смотря на то, что ему те же 25?
... << RSDN@Home 1.1.4 beta 7 rev. 461>>
Все, что ни делается — делается к лучшему!
Re[7]: Синтаксический оверхед
От: Кодт Россия  
Дата: 10.06.05 09:05
Оценка:
Здравствуйте, moudrick, Вы писали:

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

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

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

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


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

M>здесь

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


Не, тут нужно ещё выделить алгоритм:
взять_взаймы(
  максимум(                 -- у кого
    [человек1, человек2],   -- набор, из которого берётся максимальный элемент
    compose_f_gx_gy(        -- композитный предикат - комбинатор
      меньше(),             -- f - оператор сравнения
      атрибут(деньги)       -- g
    )
  )
)

Тем самым мы, во-первых, устраняем повторение имён (деньги) и ссылок (человек1, человек2), а во-вторых, делаем систему масштабируемой: можно обращаться к набору из более (да и менее) чем двух людей.
Перекуём баги на фичи!
Re[10]: Синтаксический оверхед: а смысл-то в чем?
От: garant  
Дата: 10.06.05 09:21
Оценка:
Здравствуй, Кодт.

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

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

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

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

--
Тон
Posted via RSDN NNTP Server 1.9
Re: Синтаксический оверхед
От: AndreyFedotov Россия  
Дата: 10.06.05 09:22
Оценка:
Сергей! Не в даваясь в детали дискуссии (всё что можно и что нельзя сказали без меня ), вы никогда не задумывались — почему Джордано Бруно кончил карьеру не так, как Галилей?
Re[2]: Синтаксический оверхед
От: GlebZ Россия  
Дата: 10.06.05 09:31
Оценка: :))) :)
AF>Сергей! Не в даваясь в детали дискуссии (всё что можно и что нельзя сказали без меня ), вы никогда не задумывались — почему Джордано Бруно кончил карьеру не так, как Галилей?
Оберон все таки вертится?

С уважением, Gleb.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.