Re[21]: Интерфейс vs. протокол.
От: adontz Грузия http://adontz.wordpress.com/
Дата: 17.04.11 13:13
Оценка:
Здравствуйте, VladD2, Вы писали:

http://www.rsdn.ru/article/singularity/singularity.xml
Автор(ы): Galen Hunt, James Larus, Martin Abadi, Mark Aiken, Paul Barham, Manuel Fahndrich, Chris Hawblitzel, Orion Hodson, Steven Levi, Nick Murphy, Bjarne Steensgaard, David Tarditi, Ted Wobber, Brian Zill
Дата: 02.03.2006
Singularity – исследовательский проект Microsoft Research, который начался с вопроса: на что была бы похожа программная платформа, если спроектировать ее на пустом месте, и во главу угла поставить не производительность, а надежность?


Singularity выдала 91 операцию в секунду при взвешенной средней пропускной способности в 362 Kбит/с. Web-сервер IIS, выполняемый под управлением Windows 2003 на идентичной аппаратуре, выдает 761 операцию в секунду при взвешенной средней пропускной способности в 336 Kбит/с.


Сетевой стек Singularity, наоборот, не является узким местом, и может поддерживать пропускную способность в 48Mбит/сек.


Статья старая, но даже по тогдашним меркам производительность просто нелепая. В обсуждении (не очень большом) это обсосано.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[22]: Интерфейс vs. протокол.
От: jazzer Россия Skype: enerjazzer
Дата: 17.04.11 13:25
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

(поскипал то, в чем мы оба согласны)

PD>Ха! В том-то и дело. И это описание в сложном случае будет эквивалентно рантаймовскому исполнению.

Ирония в том, что в чрезмерно простых случаях они тоже будут эквивалентны.

PD>Вот возьми мой пример с итерацией. Описать прравило вызова DoX или DoY ? Пожалуйста. Если результат итерации > 0 — DoX, иначе DoY. И получаем перенос итерации в компиле-тайм. Да еще зависимость от всех возможных f .


Нет, тут же у тебя один и тот же код, так что достаточно того, что скомпилируется мой if_positive из предыдущего письма. А вот если у тебя правило "функция всегда должна находить правильный корень" — тогда да, придется все вынести в компиляцию.

PD>При достаточно сложной логике, при логике, зависящей от исходных данных — в общем случае тоже нельзя.


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

J>>Ты веришь в Пролог? Или любой другой решатель логических систем?


PD>Я верю (как я могу не верить!) в его существование, но я помню при этом, что т.н. вызов Японии миру (проект ЭВМ 5 поколения 80-х годов), напрочь провалившийся, намертво связан с Прологом. Не очень у него хорошая репутация.


Слушай, при твоем опыте программирования, и обвинять в неудаче проекта (причем уровня "вызов миру") язык?

>>А теперь возьми язык, у которого подобный решатель встроен непосредственно в компилятор и есть средства задавать систему ограничений/отношений — и никакого хаоса не будет, как его нет в Прологе, хоть ты там сто интервалов сделай.


PD>Боюсь, что применение этого решателя в компиляторе будет эквивалентно выполнению этой программы в рантайме.

Это всецело зависит от того, сколько ты хочешь отдать компилятору на контроль. Если всю программу — тогда да, будет вся программа.
Как и везде, нужен баланс.

ЗЫ. Мой учитель по вычматам любил говорить, что для большинства интересных численных моделей строгое обоснование модели эквивалентно аналитическому решению самой исходной задачи.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[20]: Интерфейс vs. протокол.
От: dotneter  
Дата: 17.04.11 13:34
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD> а, скажем, на 10-20 интервалов- и сразу вся эта затея превратится в необозримое чудовище. А если таких чудовищ будет с десяток (а это пустяки), то в этом хаосе уже никто не разберется. Я никак не могу поверить в серьезность подобной затеи.

Если на каждый чих делать по типу, то наверное да, а если можно будет создавать анонимные типы с ограничениями?
float[<0] Minus(float[>0] f)
Получили что то похожее на компилятора френдли контракты. Или вы в пользу DbC тоже не верите?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re[23]: Интерфейс vs. протокол.
От: Pavel Dvorkin Россия  
Дата: 17.04.11 13:44
Оценка:
Здравствуйте, jazzer, Вы писали:


PD>>Ха! В том-то и дело. И это описание в сложном случае будет эквивалентно рантаймовскому исполнению.

J>Ирония в том, что в чрезмерно простых случаях они тоже будут эквивалентны.

+1

J>>>Ты веришь в Пролог? Или любой другой решатель логических систем?


PD>>Я верю (как я могу не верить!) в его существование, но я помню при этом, что т.н. вызов Японии миру (проект ЭВМ 5 поколения 80-х годов), напрочь провалившийся, намертво связан с Прологом. Не очень у него хорошая репутация.


J>Слушай, при твоем опыте программирования, и обвинять в неудаче проекта (причем уровня "вызов миру") язык?


А я и не обвинял. Просто уж так получилось, что он намертво связан с этим провалившимся проектом. То ли он украл, то ли у него украли...


>>>А теперь возьми язык, у которого подобный решатель встроен непосредственно в компилятор и есть средства задавать систему ограничений/отношений — и никакого хаоса не будет, как его нет в Прологе, хоть ты там сто интервалов сделай.


PD>>Боюсь, что применение этого решателя в компиляторе будет эквивалентно выполнению этой программы в рантайме.

J>Это всецело зависит от того, сколько ты хочешь отдать компилятору на контроль. Если всю программу — тогда да, будет вся программа.
J>Как и везде, нужен баланс.

J>ЗЫ. Мой учитель по вычматам любил говорить, что для большинства интересных численных моделей строгое обоснование модели эквивалентно аналитическому решению самой исходной задачи.


Именно. Можно и другие примеры предложить.
With best regards
Pavel Dvorkin
Re[21]: Интерфейс vs. протокол.
От: Pavel Dvorkin Россия  
Дата: 17.04.11 13:48
Оценка:
Здравствуйте, dotneter, Вы писали:

D>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>> а, скажем, на 10-20 интервалов- и сразу вся эта затея превратится в необозримое чудовище. А если таких чудовищ будет с десяток (а это пустяки), то в этом хаосе уже никто не разберется. Я никак не могу поверить в серьезность подобной затеи.

D>Если на каждый чих делать по типу, то наверное да, а если можно будет создавать анонимные типы с ограничениями?
D>float[<0] Minus(float[>0] f)

А давай типы с ограничениями. Паскаль беру потому, что они у него есть


type t_0_100 = 1..100;
type t_101_200 = 101..200;
type t_201_300 = 201..300;
type t_301_400 = 301..400;
// etc.


Выглядит симпатично. Например, температура воды должна быть в типе t_0_100, а некоего другого вещества- скажем, t_101_200. И т.д. Пока эти вещества сами по себе — все замечательно. Но однажды понадобится их раствор, а у него, скажем 25..180. И горело все это синим пламенем.
With best regards
Pavel Dvorkin
Re[22]: Интерфейс vs. протокол.
От: dotneter  
Дата: 17.04.11 13:51
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

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


D>>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>> а, скажем, на 10-20 интервалов- и сразу вся эта затея превратится в необозримое чудовище. А если таких чудовищ будет с десяток (а это пустяки), то в этом хаосе уже никто не разберется. Я никак не могу поверить в серьезность подобной затеи.

D>>Если на каждый чих делать по типу, то наверное да, а если можно будет создавать анонимные типы с ограничениями?
D>>float[<0] Minus(float[>0] f)

PD>А давай типы с ограничениями. Паскаль беру потому, что они у него есть



PD>
PD>type t_0_100 = 1..100;
PD>type t_101_200 = 101..200;
PD>type t_201_300 = 201..300;
PD>type t_301_400 = 301..400;
PD>// etc.
PD>


PD>Выглядит симпатично. Например, температура воды должна быть в типе t_0_100, а некоего другого вещества- скажем, t_101_200. И т.д. Пока эти вещества сами по себе — все замечательно. Но однажды понадобится их раствор, а у него, скажем 25..180. И горело все это синим пламенем.

Не совсем ясно в чем проблема, можно конкретную задачу с кодом?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re[24]: Интерфейс vs. протокол.
От: WolfHound  
Дата: 17.04.11 13:55
Оценка: :)
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Точнее , для того, чтобы высказывать свою точку зрения, даже если она не совпадает с чьей-то иной или даже лбщепринятой.

О чем я и говорю.
Ты пропагандируешь свою веру.
При этом игнорируя сотни статей в рецинзируемых журналах.

PD>Добродетель, которая нуждается в защите, едва ли стоит того, чтобы ее защищать. (С) не помню чей.

Это бред полнейший.

PD>Какая трогательная забота о посетителях! Ну тогда продолжай ее и дальше.

Обязательно.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[23]: Интерфейс vs. протокол.
От: WolfHound  
Дата: 17.04.11 14:01
Оценка:
Здравствуйте, dotneter, Вы писали:

PD>>Выглядит симпатично. Например, температура воды должна быть в типе t_0_100, а некоего другого вещества- скажем, t_101_200. И т.д. Пока эти вещества сами по себе — все замечательно. Но однажды понадобится их раствор, а у него, скажем 25..180. И горело все это синим пламенем.

D>Не совсем ясно в чем проблема, можно конкретную задачу с кодом?
Ты попался на то о чем я написал тут
Автор: WolfHound
Дата: 17.04.11
.
В паскале нет зависимых типов. Как следствие все что сказал Павел идет в топку.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[12]: Интерфейс vs. протокол.
От: 0x7be СССР  
Дата: 17.04.11 14:19
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Хорошо. Тогда так

PD>if(bool)
PD> {
PD> Open;
PD> Read;
PD> Close;
PD>}
PD>else
PD>{
PD> Read;
PD> Close;
PD> Open;
PD>}
PD>Можно оценить правильность в общем случае ?

Да, только я не понимаю, в чем тут смысл ветвления.
Выглядеть это будет примерно так:
var service = GetService();
if(bool)
{
  service
   .Open()
   .Read()
   .Close();
}
else
{
  service
   .Read() // Ошибка компиляции, тип ссылки service не содержит метода Read.
   .Close()
   .Open();
}
Re[24]: Интерфейс vs. протокол.
От: jazzer Россия Skype: enerjazzer
Дата: 17.04.11 14:30
Оценка: 22 (1)
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А я и не обвинял. Просто уж так получилось, что он намертво связан с этим провалившимся проектом. То ли он украл, то ли у него украли...




J>>ЗЫ. Мой учитель по вычматам любил говорить, что для большинства интересных численных моделей строгое обоснование модели эквивалентно аналитическому решению самой исходной задачи.


PD>Именно. Можно и другие примеры предложить.


Ну вот. Но это же не значит, что численные методы плохи или что им нет полезных применений
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[23]: Интерфейс vs. протокол.
От: Pavel Dvorkin Россия  
Дата: 17.04.11 14:50
Оценка:
Здравствуйте, dotneter, Вы писали:

D>Здравствуйте, Pavel Dvorkin, Вы писали:


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


D>>>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>>> а, скажем, на 10-20 интервалов- и сразу вся эта затея превратится в необозримое чудовище. А если таких чудовищ будет с десяток (а это пустяки), то в этом хаосе уже никто не разберется. Я никак не могу поверить в серьезность подобной затеи.

D>>>Если на каждый чих делать по типу, то наверное да, а если можно будет создавать анонимные типы с ограничениями?
D>>>float[<0] Minus(float[>0] f)

PD>>А давай типы с ограничениями. Паскаль беру потому, что они у него есть



PD>>
PD>>type t_0_100 = 1..100;
PD>>type t_101_200 = 101..200;
PD>>type t_201_300 = 201..300;
PD>>type t_301_400 = 301..400;
PD>>// etc.
PD>>


PD>>Выглядит симпатично. Например, температура воды должна быть в типе t_0_100, а некоего другого вещества- скажем, t_101_200. И т.д. Пока эти вещества сами по себе — все замечательно. Но однажды понадобится их раствор, а у него, скажем 25..180. И горело все это синим пламенем.

D>Не совсем ясно в чем проблема, можно конкретную задачу с кодом?

Типы , описанные выше, будем считать существующими

procedure GetMixtureBoilingPoint(water percent, other_percent) : T
{
  // код, вычисляющий температуру кипения этой смеси. В зависимости от процентов будет от 25 до 180)
}


Определи T
With best regards
Pavel Dvorkin
Re[25]: Интерфейс vs. протокол.
От: Pavel Dvorkin Россия  
Дата: 17.04.11 14:56
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Точнее , для того, чтобы высказывать свою точку зрения, даже если она не совпадает с чьей-то иной или даже лбщепринятой.

WH>О чем я и говорю.
WH>Ты пропагандируешь свою веру.
WH>При этом игнорируя сотни статей в рецинзируемых журналах.

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

PD>>Добродетель, которая нуждается в защите, едва ли стоит того, чтобы ее защищать. (С) не помню чей.

WH>Это бред полнейший.

Ну-ну... Аргументация, вполне достойная тебя.

PD>>Какая трогательная забота о посетителях! Ну тогда продолжай ее и дальше.

WH>Обязательно.

Давай. Мое воспитание не позволяет мне не отвечать, когда ко мне обращаются, так что у тебя есть полная возможность использовать этот мой недостаток. Но оно вполне позволяет отвечать сколь угодно резко, разумееется, в рамках общепринятой морали и правил RSDN.
With best regards
Pavel Dvorkin
Re[13]: Интерфейс vs. протокол.
От: Pavel Dvorkin Россия  
Дата: 17.04.11 14:59
Оценка:
Здравствуйте, 0x7be, Вы писали:

0>Да, только я не понимаю, в чем тут смысл ветвления.

0>Выглядеть это будет примерно так:
0>
0>var service = GetService();
0>if(bool)
0>{
0>  service
0>   .Open()
0>   .Read()
0>   .Close();
0>}
0>else
0>{
0>  service
0>   .Read() // Ошибка компиляции, тип ссылки service не содержит метода Read.

Ну и зря он мне сообщает об ошибке. Дело в том, что при bool==false файл уже открыт, так как раньше (в совсем другом месте) пришлось выполнить предварительное чтение, а поэтому я решил, что не стоит файл закрывать, ибо знаю, что основное чтение делать вскоре придется - незачем тратить время на его закрытие и открытие заново.

0>   .Close()
0>   .Open();
0>}
0>
With best regards
Pavel Dvorkin
Re[25]: Интерфейс vs. протокол.
От: Pavel Dvorkin Россия  
Дата: 17.04.11 15:00
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>А я и не обвинял. Просто уж так получилось, что он намертво связан с этим провалившимся проектом. То ли он украл, то ли у него украли...


J>


J>>>ЗЫ. Мой учитель по вычматам любил говорить, что для большинства интересных численных моделей строгое обоснование модели эквивалентно аналитическому решению самой исходной задачи.


PD>>Именно. Можно и другие примеры предложить.


J>Ну вот. Но это же не значит, что численные методы плохи или что им нет полезных применений


Эк тебя

За дискуссию спасибо. В общем, это примерно то, чего я и хотел от своих оппонентов. Внятно, четко и без демагогии и обвинений.
With best regards
Pavel Dvorkin
Re[24]: Интерфейс vs. протокол.
От: dotneter  
Дата: 17.04.11 15:11
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Определи T

type T = 25..180 ?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re[26]: Интерфейс vs. протокол.
От: WolfHound  
Дата: 17.04.11 15:15
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Я много чего игнорирую. И факт рецензирования где бы то ни было для меня небольшой аргумент. Я все же научный сотрудник по образованию, а если бы научные сотрудники принимали в качестве вргумента то, что это где-то опубликовано и прорецензировано, наука превратилась бы в коллекцию мусора.

Это как минимум повод прочитать.
Ты не сделал даже этого.

PD>Ну-ну... Аргументация, вполне достойная тебя.

Я называю вещи своими именами.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[25]: Интерфейс vs. протокол.
От: Pavel Dvorkin Россия  
Дата: 17.04.11 15:17
Оценка:
Здравствуйте, dotneter, Вы писали:

D>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Определи T

D>type T = 25..180 ?

Именно. Немного усложнив ситуацию (я ведь и без того там еще 2 типа определил) и занявшись тройными системами, мы дойдем до полного хаоса.
With best regards
Pavel Dvorkin
Re[27]: Интерфейс vs. протокол.
От: Pavel Dvorkin Россия  
Дата: 17.04.11 15:24
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Я много чего игнорирую. И факт рецензирования где бы то ни было для меня небольшой аргумент. Я все же научный сотрудник по образованию, а если бы научные сотрудники принимали в качестве вргумента то, что это где-то опубликовано и прорецензировано, наука превратилась бы в коллекцию мусора.

WH>Это как минимум повод прочитать.
WH>Ты не сделал даже этого.

Я же объяснил почему. Кстати, из дискуссии с jazzer все вполне выяснилось. Мое мнение осталось примерно тем же, что и было — применимо в некоторых простых случаях, для более сложных — неприменимо или столь усложнено, что попытка применить эквивалентна переносу рантайма в компиле-тайм. Так что для случаев, когда заведомо известно, что все будет не просто, а очень просто (вроде open-read-close, и ни шагу влево или вправо!) это может быть применимо, ну а если шаги вправо-влево хотя бы в принципе допустимы, то в итоге потратишь времени больше, чем если бы этим не заниматься.


PD>>Ну-ну... Аргументация, вполне достойная тебя.

WH>Я называю вещи своими именами.

Только вот , еще раз, эта фраза не моя. Кажется, Маркса. Она довольно-таки хорошо известна. И твое отнесение ее к бреду выглядит, право слово, довольно комично, тем более без всякой аргументации.
With best regards
Pavel Dvorkin
Re[14]: Интерфейс vs. протокол.
От: 0x7be СССР  
Дата: 17.04.11 15:25
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Ну и зря он мне сообщает об ошибке. Дело в том, что при bool==false файл уже открыт, так как раньше (в совсем другом месте) пришлось выполнить предварительное чтение, а поэтому я решил, что не стоит файл закрывать, ибо знаю, что основное чтение делать вскоре придется — незачем тратить время на его закрытие и открытие заново.

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

Касаемо новых условий примера, вот решение:
var service = GetSerive();

Optional<IMyFileRead> readService;

// Первая возможность открыть файл.
if(условие предварительного чтения)
{
  readService = service.Open();     // Открываем файл.
  readService = readService.Read(); // Читаем предварительно.
}

...

// Вторая возможность открыть файл.
if(!readService.HasValue) // Определяем, что файл раньше не открывался.
{
  readService = service.Open();  // Открываем файл, если раньше не открывался.
}

// Основная работа с сервисом.
readService = readService.Read(); // Читаем.
readService.Close();              // Закрываем.
Re[26]: Интерфейс vs. протокол.
От: dotneter  
Дата: 17.04.11 15:32
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

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


D>>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>>Определи T

D>>type T = 25..180 ?

PD>Именно. Немного усложнив ситуацию (я ведь и без того там еще 2 типа определил) и занявшись тройными системами, мы дойдем до полного хаоса.

Таr я же и написал что можно типы не определять

procedure GetMixtureBoilingPoint(float[0..1] percent, float[0..1] other_percent) : float[25..180]
{

}
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.