>>Изначальное заявление: Нам нужна статика. K>Верно.
>>В процессе допытывания выясняется, последовательно: >>— Нет, нам нужна статика с хорошей системой типов.
K>Не так. "Даже статика с посредственной системой типов — уже лучше чем динамика, но нам нужна статика с хорошей системой типов"
>>— Нет, нам нужна статика с системой типов, поддерживающей все, что угодно — constraints, dependent types, контракты и т.п.
K>Это было бы еще лучше, но почему "нет"? — с какой стати отказываться от предыдущих пунктов? Все логично — чем лучше система типов — тем лучше. Совершеннейший трюизм.
Я просто сократил текст. Читать как «нет, нам не просто А, но и с Б».
>>— Нет, нам нужна статика с системой типов, поддерживающей все, что угодно — constraints, dependent types, контракты и т.п., и желательно чтобы это был или >Haskell или Nemerle.
K>Зависимых типов нет ни в Haskell, ни в Nemerle.
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, gandjustas, Вы писали:
G>>Вообще никак не влияет, это вопрос системы типов (компилятора, а не рантайма), компилятор может просто не предусматривать null значений. Или не допускать присваивания null для notnullable типов.
H>А вопрос получения подобного типа извне? Очевидное решение с автоматической проверкой на null кажется мне несколько непроизводительным.
А в чем проблема? Отсутствие значение реализуется типом option.
Re[34]: почему в вебе распространены именно динамические язы
Здравствуйте, Mamut, Вы писали:
K>>Отличный подход к дискуссии, спасибо. M>Рекомендую
Боюсь испортить свою репутацию.
M>Я просто сократил текст. Читать как «нет, нам не просто А, но и с Б».
Ну а что такого-то? Если статику можно неограниченно улучшать — это повод обратиться к динамике, которая заведомо хуже? Это какая-то логика абсолютников из НИИЧАВО, которые отказывались что-либо делать, потому что процесс познания бесконечен.
M>Я просто показал общий вид дискуссии. И, повторюсь, на это уже ответил netch80 тут: http://rsdn.ru/forum/philosophy/4006147.1.aspx
Здравствуйте, gandjustas, Вы писали:
H>>А вопрос получения подобного типа извне? Очевидное решение с автоматической проверкой на null кажется мне несколько непроизводительным.
G>А в чем проблема? Отсутствие значение реализуется типом option.
Пусть в некотором языке мы имеем некую публичную функцию:
public F(x : X) : Y
{
...
}
Где X — non-nullable тип. Как мы можем гарантировать тот факт, что при вызове этой функции из языка, не умеющего обращаться с non-nullable типами, в параметр x не будет передан null?
Я вижу только автоматическое добавление проверок на null в таких публичных интерфейсах.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[35]: почему в вебе распространены именно динамические язы
M>>Я просто сократил текст. Читать как «нет, нам не просто А, но и с Б».
K>Ну а что такого-то? Если статику можно неограниченно улучшать — это повод обратиться к динамике, которая заведомо хуже?
Снова эта сферовакуумная заведомость
K>Это какая-то логика абсолютников из НИИЧАВО, которые отказывались что-либо делать, потому что процесс познания бесконечен.
(начиная со слов «Во-первых, о существующих средствах и текущих задачах...»).
K>Он ответил, что не знает, какие есть стат. типизированные языки и не хочет ими пользоваться. Этому, конечно, трудно что-то противопоставить.
Вообще-то, он ответил ровно следующее:
Мне нужно средство, которое:
* в основе императивное, или если функционально-декларативное, то самое распространённое и понятное из. потому что мне надо учить людей не языку, а предметной области — она слишком сложна, чтобы войти с ходу.
* хорошо параллелится, без GIL и тому подобных ограничений
* работает на Unix системах, причём максимально родным методом (без ретрансляции подложки, которая не даёт прямого доступа к принципиальным аспектам функционирования)
* вышло из стадии альф и бет, имеет как минимум один релиз с известными граблями
* допускает хотя бы на уровне отдельных совместимых блоков замену кода на ходу (причём не "выгрузкой домена приложения", а она должна быть полностью прозрачна для работающего кода (например, звонок не должен рваться)
это минимальный набор, может, ещё что-то пропустил. В этих пределах мне совершенно пофиг, как оно зовётся — Python, Nemerle или C++--xx, всё равно встречать будем не по одёжке.
В итоге оказывается, что не в 1958-м году, а всего лишь в 2010-м таких языков и нет почти. Те, что реализуют чудеса и сказки, здесь описанные, обычно разрабатываются кучкой энтузиастов (и Nemerle и рекламируемый тут Ur). Те, что не реализуют... В общем, не реализуют они, вызывая естественное недоумение «а где все те бенефиты, что вы тут расписываете?».
В итоге на практике выбираешь не по «а вот в статике теоретически возможно то-то и то-то», а то, что позволяет решать твою задачу в поставленных перед тобой рамках.
K>Какие-то комментарии по моему сообщению
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, gandjustas, Вы писали:
H>>>А вопрос получения подобного типа извне? Очевидное решение с автоматической проверкой на null кажется мне несколько непроизводительным.
G>>А в чем проблема? Отсутствие значение реализуется типом option.
H>Пусть в некотором языке мы имеем некую публичную функцию: H>
H>public F(x : X) : Y
H>{
H>...
H>}
H>
H>Где X — non-nullable тип. Как мы можем гарантировать тот факт, что при вызове этой функции из языка, не умеющего обращаться с non-nullable типами, в параметр x не будет передан null?
Можно не экспортировать эту функцию из библиотеке на языке, который умеет обращаться с non-nullable.
Re[31]: почему в вебе распространены именно динамические язы
K>>>При том, что компилятор не даст вызвать метод объекта, находящегося в Maybe, а если динамически типизированный язык не позволяет написать Nothing().FooBar(), то какой же он динамический?
M>>Ага. Это в теории.
K>Это если сделать допущение, что сейчас 1958-ой год, но сейчас 2010.
И? Пример языка из 2010-го года я привел
M>>Стоп. А откуда компилятор внезапно узнает, что там Maybe? Можно пример кода? Желательно, конечно не на Хаскеле, а на чем-то более приземленном, например на Java.
K>Пример на C# (Maybe придется написать самому (8 строчек) или скачать готовую) K>
K>from profile in GetProfile()
K>from result in ProcessRequest(profile)
K>select result;
K>
K>Значение этого выражения Just(результат реквеста), если все прошло нормально или Nothing() K>
K>ProcessRequest(GetProfile());
K>
K>Не скомпилируется. K>Чудес бывает.
Можно с этого места поподробнее? Что Maybe и где оно тут и как используется?
M>>Точно так же как в статике Потому что даже в статике компилятор (анализатор? неонка?) не уверен, будет там null или нет.
K>Если у нас в языке есть null, то это означает, что то, имеем мы тип T или тип Maybe<T> определяется динамически. К статической типизации null никакого отношения не имеет.
Всю жизнь считал Java и C# статичеси-типизированными. Видимо, увы. Придется заужать область поиска до... Хаскеля, анверное. Я прав? В общем, все согласно тут
K>>>В каком смысле побоку? M>>В прямом. Компилятор не отловит этой ошибки. Или так — теоретически быть может в каком-то языке он ее отловит. K>На практике отловит в целом ряде языков.
Ну да. ML-семейство. Haskell. Nemerle. Я прав? Только вот проблема. В течение всего этого топика постоянно говорится, что «статика то, статика сё». Тольо опять же ВНЕЗАПНО оказывается, что статика то и сё только в некоторых языках
. Статический язык должен быть правильным, что бы это ни значило И только тогда он будет, как минимум, не хуже динамики
Признаю, что Haskell и Nemerle ничем не хуже динамически типизированых языков (и все еще жду рвущий yaws или хотя бы mochiweb веб-сервер на nemerle)
K>>>Во втором примере статическая типизация не используется. M>>С чего это вдруг? Все типы указаны, компилятор молчит
K>Компилятор молчит, потому что программиcт заткнул ему рот явной декларацией отключения статической типизации. В коде она выделенна жирным шрифтом: K>
Здравствуйте, Mamut, Вы писали:
M>И? Пример языка из 2010-го года я привел
Это Яву чтоли? Ну так это не спортивно, если от стат.типизированных выступает Ява, то в противоположном углу ринга, за динамику, может быть только PHP.
M>Можно с этого места поподробнее? Что Maybe и где оно тут и как используется?
Вот вы Maybe не видите, а она есть. GetProfile() возвращает Maybe<Profile>, а ProcessRequest принимет Profile и возвращает Maybe<FooBar>. Используется для того, чтобы недопустить написания второго варианта кода, который может упасть в рантайме.
M>Всю жизнь считал Java и C# статичеси-типизированными.
Они статически типизированны по-умолчанию, но проверки можно перенести в рантайм, сделать динамическими, как вы и сделали в своем коде на Яве. Если не пытаться всеми средствами избавить компилятор от контроля типов, а наоборот, перекладывать на него проверку всего, чего можно — ситуация сразу улучшится.
M>Ну да. ML-семейство. Haskell. Nemerle. Я прав?
Да. И почти во всех остальных стат типизированных языках. Единственное требование — в языке должен быть параметрический полиморфизм. Или и это слишком строгое требование?
M>Только вот проблема. В течение всего этого топика постоянно говорится, что «статика то, статика сё». Тольо опять же ВНЕЗАПНО оказывается, что статика то и сё только в некоторых языках
Замените "языки" на любой %класс_объектов%, а "некоторый язык" на %объект_соотв_класса% и ваша чудесная фраза останется верной!
Например: В течении всего топика шла речь о преимуществах самолетов перед дирижаблями и ВДРУГ выясняется, что не все самолеты одинаково полезны, тот же паровой самолет "Эол" никуда не годится. Ergo дирижабли лучше!
M>Ах, нет. Все верно
. Статический язык должен быть правильным, что бы это ни значило И только тогда он будет, как минимум, не хуже динамики
Более того, стат.типизацией нужно еще уметь пользоваться, а не прилагать все усилия для избавления компилятора от ненужного бремени. Вот ужас-то!
K>>Компилятор молчит, потому что программиcт заткнул ему рот явной декларацией отключения статической типизации. В коде она выделенна жирным шрифтом: M>Ах, вот оно что
Ну попробуйте убрать (GremlinScriptEngine). Что написал компилятор?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[46]: почему в вебе распространены именно динамические язы
Здравствуйте, vdimas, Вы писали:
V>А чем вирус принципиально отличается, скажем, от драйвера?
Тем что драйвер не устанавливается через дыру в парсере JPEG.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[46]: почему в вебе распространены именно динамические язы
Здравствуйте, Mamut, Вы писали:
M>Интересно, ты намеренно тупым притворяешься? M>http://www.joeandmotorboat.com/2009/01/03/nginx-vs-yaws-vs-mochiweb-web-server-performance-deathmatch-part-2/ M>Все в порядке там с производительностью.
А я думал ты умнее.
Измерять производительность языков программирования задачей чуть меньше чем на 100% состоящей из IO это сильно.
Кстати посмотри свою же ссылку. Там написано что nginx съел меньше процессора.
Так что если в твоем коде на ерланге заведется логика то...
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[46]: почему в вебе распространены именно динамические язы
Здравствуйте, netch80, Вы писали:
N>Да, можно. И что, это основание всё обложить мьютексами? Или ты кроме них механизмов синхронизации (или даже сериализации) не знаешь, по принципу "если это не написано в Коране, это ложно"?
Ты сейчас пытаешься обвинить меня в том чего я не говорил и на основе этого высосать из пальца обоснование моей не компетентности.
Все что я сказал что утверждение о том что Go безопасный ложно.
Больше ничего.
N>Нет, ты их постоянно творчески игнорируешь. Такая устойчивость заслуживает медали.
Ну так приведи простой список.
Каждое преимущество опиша несколькими словами.
Для статики я это делал не однократно. В ответ получал кучу философии в которой черт ногу сломит.
N>Твой — да, почти с самого начала ни одной новой мысли, всё долбление в одну точку.
Разумеется.
Ведь никто так и не смог опровергнуть мои изначальные мысли.
Более того ты в конце концов согласился с моим списком преимуществ статики.
Но так и не назвал преимуществ динамики.
N>Не поверю — потому что знаю парсеры, которые работают иначе, и знаю причины делать иначе.
Ссылку в студию.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[32]: почему в вебе распространены именно динамические язы
(со слов «Во-первых, о существующих средствах и текущих задачах»). И то как раз то, из-за чего тут разведено столько флейма. Нам обещают чудеса статики, но на практике этих чудес или не видно или видно только с кучей ограничений (типа «системы типов JVM и CLR не поддерживают not-nullable ссылочных типов»)
Так это ты же тут у нас агитируешь сравнивать всю статику с всей динамикой...
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[33]: почему в вебе распространены именно динамические язы
M>>И? Пример языка из 2010-го года я привел K>Это Яву чтоли? Ну так это не спортивно, если от стат.типизированных выступает Ява, то в противоположном углу ринга, за динамику, может быть только PHP.
Ну то же самое можно и в C# сделать Особо других мейнстримных и не осталось
M>>Можно с этого места поподробнее? Что Maybe и где оно тут и как используется?
K>Вот вы Maybe не видите, а она есть. GetProfile() возвращает Maybe<Profile>, а ProcessRequest принимет Profile и возвращает Maybe<FooBar>. Используется для того, чтобы недопустить написания второго варианта кода, который может упасть в рантайме.
Ага. То есть в случае с C# все ранво перекладывается на плечи программиста. Чтобы не забыл реализовать Maybe, чтобы не забыл его вернуть и т.п. То есть чуда по любому нет
M>>Всю жизнь считал Java и C# статичеси-типизированными.
K>Они статически типизированны по-умолчанию, но проверки можно перенести в рантайм, сделать динамическими, как вы и сделали в своем коде на Яве. Если не пытаться всеми средствами избавить компилятор от контроля типов, а наоборот, перекладывать на него проверку всего, чего можно — ситуация сразу улучшится.
Зачем же всеми средствами
M>>Ну да. ML-семейство. Haskell. Nemerle. Я прав?
K>Да. И почти во всех остальных стат типизированных языках.
Почти во всех — это каких? Потому что я как бы эта, практик Меня интересуют не Ur'ы/Nemerle, а sprb? которые хоть можно применить в проекте, не боясь гнева начальства
K>Единственное требование — в языке должен быть параметрический полиморфизм. Или и это слишком строгое требование?
Да нет, нормальное
M>>Только вот проблема. В течение всего этого топика постоянно говорится, что «статика то, статика сё». Тольо опять же ВНЕЗАПНО оказывается, что статика то и сё только в некоторых языках
K>Замените "языки" на любой %класс_объектов%, а "некоторый язык" на %объект_соотв_класса% и ваша чудесная фраза останется верной! K>Например: В течении всего топика шла речь о преимуществах самолетов перед дирижаблями и ВДРУГ выясняется, что не все самолеты одинаково полезны, тот же паровой самолет "Эол" никуда не годится. Ergo дирижабли лучше!
Ну мы то прекрасно знаем, что аналогии всегда неверны
. Статический язык должен быть правильным, что бы это ни значило И только тогда он будет, как минимум, не хуже динамики
K>Более того, стат.типизацией нужно еще уметь пользоваться, а не прилагать все усилия для избавления компилятора от ненужного бремени. Вот ужас-то!
Да ладно, все усилия. Что предлагает язык, то и использую Никакими «всеми усилиями» тут и не пахнет
K>>>Компилятор молчит, потому что программиcт заткнул ему рот явной декларацией отключения статической типизации. В коде она выделенна жирным шрифтом: M>>Ах, вот оно что
K>Ну попробуйте убрать (GremlinScriptEngine). Что написал компилятор?
M>>Интересно, ты намеренно тупым притворяешься? M>>http://www.joeandmotorboat.com/2009/01/03/nginx-vs-yaws-vs-mochiweb-web-server-performance-deathmatch-part-2/ M>>Все в порядке там с производительностью. WH>А я думал ты умнее. WH>Измерять производительность языков программирования задачей чуть меньше чем на 100% состоящей из IO это сильно. WH>Кстати посмотри свою же ссылку. Там написано что nginx съел меньше процессора. WH>Так что если в твоем коде на ерланге заведется логика то...
Ну, и заводится. Можно не yaws/mochiweb взять, а какой-нибудь вообще ejabberd. netch80 тебе про коммуникационные протоколы рассказал
Нет. Пофиг. Главное завести шарманку «оно медленнее!»
Здравствуйте, Mamut, Вы писали:
M>Ну, и заводится. Можно не yaws/mochiweb взять, а какой-нибудь вообще ejabberd. netch80 тебе про коммуникационные протоколы рассказал
Ну так там тоже IO чуть меньше чем 100%
M>Нет. Пофиг. Главное завести шарманку «оно медленнее!»
Ну так оно медленней.
Если не веришь реши любую задачу которая ест процессор и не требует IO.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[33]: почему в вебе распространены именно динамические язы
(со слов «Во-первых, о существующих средствах и текущих задачах»). И то как раз то, из-за чего тут разведено столько флейма. Нам обещают чудеса статики, но на практике этих чудес или не видно или видно только с кучей ограничений (типа «системы типов JVM и CLR не поддерживают not-nullable ссылочных типов») WH>Так это ты же тут у нас агитируешь сравнивать всю статику с всей динамикой...
Статика:
1)Проверка структуры декларативна.
2)Автокомплит, рефакторинг, навигация,...
3)Компилятор находит все опечатки и несоответствия типов. Хрен что забудешь.
4)Скорость работы высокая.
Динамика:
1)Проверки структуры императивны и размазаны по всей программе.
2)Поддержки IDE нет. Ибо структура объекта не извесна. И взять ее негде.
3)Компилятор молчит.
4)Тормоза.
M>>Ну, и заводится. Можно не yaws/mochiweb взять, а какой-нибудь вообще ejabberd. netch80 тебе про коммуникационные протоколы рассказал WH>Ну так там тоже IO чуть меньше чем 100%
M>>Нет. Пофиг. Главное завести шарманку «оно медленнее!» WH>Ну так оно медленней. WH>Если не веришь реши любую задачу которая ест процессор и не требует IO.
Ага. То есь ВНЕЗАПНО исчезла сферовакуумность тезиса «оно медленнее». ВНЕЗАПНО надо находить и подбирать задачи
Здравствуйте, Mamut, Вы писали:
M>Ага. То есь ВНЕЗАПНО исчезла сферовакуумность тезиса «оно медленнее». ВНЕЗАПНО надо находить и подбирать задачи
Нет. Измерять скорость языка скоростью IO просто глупо.
Ибо будет измерена не скорость языка, а скорость IO.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[34]: почему в вебе распространены именно динамические язы
Здравствуйте, Mamut, Вы писали:
M>Ага. То есть в случае с C# все ранво перекладывается на плечи программиста. Чтобы не забыл реализовать Maybe, чтобы не забыл его вернуть и т.п. То есть чуда по любому нет
Ага, и программу в добавок нужно самому писать. Где же чудо то?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[47]: почему в вебе распространены именно динамические язы
Здравствуйте, WolfHound, Вы писали:
N>>Да, можно. И что, это основание всё обложить мьютексами? Или ты кроме них механизмов синхронизации (или даже сериализации) не знаешь, по принципу "если это не написано в Коране, это ложно"? WH>Ты сейчас пытаешься обвинить меня в том чего я не говорил и на основе этого высосать из пальца обоснование моей не компетентности. WH>Все что я сказал что утверждение о том что Go безопасный ложно. WH>Больше ничего.
Я утверждаю, что это твоё утверждение "что Go безопасный ложно" некорректно без указания, как именно мы определяем безопасность. И если тебе так хочется — да, я нахожу основание твоей... мнэээ... недоработки — в том, что ты не понимаешь, что такое безопасность, но хаешь чужое.
N>>Нет, ты их постоянно творчески игнорируешь. Такая устойчивость заслуживает медали. WH>Ну так приведи простой список.
Я не могу упростить реально сложные вещи до "простого списка".
WH>Ведь никто так и не смог опровергнуть мои изначальные мысли. WH>Более того ты в конце концов согласился с моим списком преимуществ статики.
Да, согласился.
WH>Но так и не назвал преимуществ динамики.
Я назвал, ты не услышал. На чём и предлагаю закрыть этот спор.