Здравствуйте, DemAS, Вы писали:
DAS> Ну, вообще, тема называлась "почему в вебе распространены именно динамические языки программирования?". На тот момент, когда занималась ниша разработки под web — Ruby и Python действительно имели более низкий порог вхождения и больше возможностей, чем тот же ASP. Все — это всего лишь мое мнение, которое я и написал. DAS> Теперь же обсуждение скатилось на тему — что круче ASP или Rails. Да разве про это шла речь?
Ну тема в идеале предполагает обсуждение возможных причин распространения именно динамических языков. В числе таких причин вы привели то, что порог вхождения, скажем, у РОР ниже, чем порог вхождения, скажем, у АСП.НЕТ. Вот конкретно эта причина мне кажется сомнительной. Все. О "крутизне" этих технологий тут вроде бы и слова не было, разве нет?
Re[17]: почему в вебе распространены именно динамические язы
Здравствуйте, Воронков Василий, Вы писали:
N>>Конечно, нету. А надо? Это всё-таки другое направление. Вообще, непонятно смещение темы. Начали всего-то про first class functions. ВВ>В смысле смещение темы? Вы сами спросили "что есть функциональный код", т.е. почему тот же Питон не подходит для программирования в функциональном стиле.
Это был риторический вопрос для предварения утверждения. Отсутствие полного набора функциональных возможностей в обсуждаемых языках достаточно, чтобы не хотеть от них большего.
The God is real, unless declared integer.
Re[17]: почему в вебе распространены именно динамические язы
M>>Возможно, он ниже психологически В том плане, что когда говорят Ruby+Web, подразумевают RoR. 15 минут туториала и вперед. Когда говорят ASP.NET... То MVC далеко не первое, что приходит в голову.
ВВ>А что первое? Веб-формы разве сложнее? ВВ>Я лично видел, как люди с АСП (читай — ВБскрипт) переходили на Веб-формс и программировали, не особенно вдаваясь в детали ООП там или не ООП.
Здравствуйте, Mamut, Вы писали:
M>В 2005-м RoR и Django были прорывом. Тогда не было ни единого фреймворка, которые были бы настолько же легки в использовании. Это сейчас можно говорить, что мол, в других языках дела обстоят не хуже. Но это только сейчас
Так и надо рассматривать что сейчас, а не десять-пять-год назад.
Re[8]: почему в вебе распространены именно динамические язык
Здравствуйте, DemAS, Вы писали: >print "Hello, world"
Странно что еще матрица не всплыла. Порог они там снизели до минимума.
@foreach(var row in db.Query("SELECT * FROM Product ORDER BY Name")){
<tr>
<td>@row.Id</td>
<td>@row.Name</td>
<td>@row.Description</td>
<td>@row.Price</td>
</tr>
}
. Прикинь, тормоза у меня не в расчетах, а в сохранении этих расчетов.
У тебя тормоза в решении задачи.
Я тебе показал как ее решить быстро.
Если решение тормозит нужно просто подходить с другой стороны.
M>Зачем? Но при желании, думаю можно приблизиться к этим цифрам. Другой вопрос — насколько часто это требуется.
Языком.
WH>>http://www.impredicative.com/ur/ WH>>Вот попробуй тестами гарантировать отсутствие перечисленных проблем.
хъ M>что ты хотел сказать-то?
Чукча не читатель?
Там статически типизируемый язык который это гарантирует.
M>это самый распространенный на данный момент случай.
Только я его ни разу не видел.
Все что я видел всегда имело структуру.
Исключение это полнотекстовый поиск который ище что попало по чему угодно.
Но это очень редкая задача и динамикой при ее решении не пахнет.
M>
M>вау. действительно. я же тупой. я же не знаю, что за данные мне приходят.
Об этом я и говорю.
Этот мусор не нужен.
M>если надо, проверим. если не надо, не проверим. в чем проблема-то?
Практика показывает что всегда надо.
M>ага, некий гипотетический абстрактный язык, где это возмжоно. странно,
Язык вполне конкретный. Немерле называется.
M>то же самое можно сделать в некотором гипотетическом абстрактном динамически-типизированом языке.
С тормозами, без помощи компилятора и IDE...
WH>>Статика: WH>>1)Проверка структуры декларативна. M>что бы это ни значило
Дурку не включай.
WH>>2)Автокомплит, рефакторинг, навигация,... M>и как это еу же JetBrains ухитряются то же для Питона делать, просто поражаюсь
Я не поленился и скачал.
Возможности PyCharm соответствуют моим ожиданиям.
Ибо чудес не бывает.
class Test1:
def asd(self, a):
return a.asd(a)
class Test2:
def asd(self, a):
return a.asd(a)
def qew(self, a):
return a.asd(a)
При попытки переименовать любой из методов asd она переименовавает все три вызова при этом не переименовывает второй метод.
Это блин ломающий рефакторинг...
При попытке нажать ctrl+spase после a.q нет вариантов.
Если гдето написать a.qweqwrwevcsreg то начинает подсказывать qweqwrwevcsreg но qwe всеравно нету.
Кстати qweqwrwevcsreg нигде не объявлено но "IDE" молчит.
И это коммерческая IDE которую люди пишут полный рабочий день.
Страни с IDE для немерле.
Рефакторанг там просто не реализован. Ибо не очень надо и как следствие никто этим не занимался.
За то автокомплит, навигация и подсветка ошибок работают как часы.
И это при том что ее делают в свободное от работы время.
Так что IDE для динамики больше не вспоминай. Это блокноты с раскраской синтаксиса.
WH>>3)Компилятор находит все опечатки и несоответствия типов. Хрен что забудешь. M>Очень малая часть ошибок.
Лично у меня почти все ошибки сводятся к этому...
WH>>4)Скорость работы высокая. M>Опять эта мифическая никому не нужная сферовакуумная скорость в отрыве от задачи.
Я еще не видел задач в которых не нужна скорость.
WH>>Динамика: WH>>1)Проверки структуры императивны и размазаны по всей программе. M>Фиг его знает, что ты тут имеешь в виду.
Ту грязь что ты понаписал выше.
WH>>2)Поддержки IDE нет. Ибо структура объекта не извесна. И взять ее негде. M>и как это еу же JetBrains ухитряются то же для Питона делать, просто поражаюсь
См выше.
WH>>3)Компилятор молчит. M>Да ты что. Неужели.
Конечно молчит. Информации то у него нет.
WH>>4)Тормоза. M>Опять эта мифическая никому не нужная сферовакуумная скорость в отрыве от задачи.
Томоза самые реальные.
Ну а то что ты тупо отрицаешь недостатки своих игрушек чести тебе не делает.
M>Профит у людей, которые не думают о языках в терминах сферовакуумности того или иного языка.
В воображении.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[36]: почему в вебе распространены именно динамические язы
Здравствуйте, Mamut, Вы писали:
M>Что такое естественные ограничения? Для меня естественные — это именно придуманные человеком. Естественнее не бывает.
1) естественные ограничения (например, законы сохранения)
(С)netch80
M>А как тут поможет статика? Ты тут апологет того, что «статика — труъ и помогает всегда». Я показал пример задачи, которая должна решаться на веб-сайте, и где от того, какая типизация будет в языке, ни холодно ни жарко.
В данном случае как минимум скоростью.
M>Ну и при чем тут статика? Или автоматы нельзя на динамике делать?
Можно. Только производительность будет меньше на порядок другой.
M>Опять начинается сферовакуум. В моем случае мне даром не надо что-либо обгонять, потому что узкое место в данном случае — попытка загнать результаты в базу данных или вообще любое хранилище. Вот и нахрена мне там непревзойденная скорость статики? Только чтобы потом пенисометрией на РСДН заниматься?
Ты уперся рогом в базу данных.
И зря.
Базы данных на такой сценарий не расчитаны.
Как следствие нужно альтернативное решение.
Но ты даже не попытался понять о чем я написал.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[34]: почему в вебе распространены именно динамические язы
Здравствуйте, netch80, Вы писали:
N>Это свойство "корневой" модели области, независимой от конкретной реализации.
Тем не менее это все придумано человеком.
N>Я не говорил "из природы", ты это сам додумал и раз додумал — с собой и спорь. Я говорил "естественные".
1) естественные ограничения (например, законы сохранения)
N>Говоря твоими же словами, переход на личности — признак того, что аргументы кончились. А теперь объясни, зачем ты столько слов развёл на один далеко не основной аспект? Думаешь через эту сторону опровергуть проще?
Начнем с того что равел ты...
N>Спасибо за внятное объяснение (вместо кода на маргинальном языке) Да, пример показательный. Но и против него есть как внутренние, так и внешние возражения. N>Во-первых, анализ такого рода возможен и для динамических языков (буду пока называть так), для наиболее прямого варианта использования. Грубо и на Питоне говоря, если ты пишешь a.b, он сработает, если getattr(a,'b') — нет (хотя pychecker в этом случае говорит, а почему написать не просто a.b?)
То-то PyCharm в 10 строках запутался.
N>Во-вторых, если у тебя кроме собственно выбора значения ещё логика по его использованию, тебе придётся делать тест. А в этом случае ты отловишь ситуацию и в динамике. (Да, я повторяюсь.)
1)У меня один здоровый функциональный тесть на все.
2)Это преобразование я провол до того как появился код который может привести к тому что там не будет значения.
3)Код ради которого все затевалось еще даже не написан.
N>В-третьих, ты на самом деле сделал больше, чем тебе нужно.
Ну да... тебе конечно виднее
N>Тебе пришлось, кроме случаев, когда явно надо проверять значение, вставить проверки и в те места, где она не нужна по логике.
Например?
N>Я догадываюсь, ты взял намеренно "чистый" пример, где такая проверка не нужна. Я прав?
Я взял первый попавшейся пример.
Хватит искать заговоры.
N>Если бы у тебя была более сложная задача и какая-то ветка выполнения имела бы это значение всегда присутствующим — тебе бы пришлось "на ровном месте" вводить дополнительную переменную, не имеющую признака optional.
Да у меня полно таких веток.
Проверка осуществляется до того как в них попадает управление.
N>Профит озвучивался раньше: например, ускорение разработки, сокращение цикла изменения. Были и другие выгоды. Перечитай.
По сравнению с С++.
Но по сравнению с немерле их нет!
N>Никто никогда не держит всю программу в голове, ты зря загинаешь лишнего. Полемические приёмы такого рода действуют только на тех, кто "заводится". Всегда рассматривается какая-то "проекция" задачи, и вопрос зависит от качества её выделения и рассмотрения.
А как без этого делать то что я показал?
N>И именно вопрос, что должно войти в проекцию, является наиболее сложным в определении рамок рассмотрения для изменения (анализа, etc.) Например, моя разработка — SIP softswitch — не имеет практически никаких проблем от собственно динамической среды: это даёт наиболее грубые виды ошибок, которые ловятся элементарными тестами. Существенные ошибки начинаются там, где возникают проблемы логики функционирования. Например, акаунтинг должен быть привязан к рауту, контроллеру или UA? И в какой момент — к кому из них? Что будет при перемещении UA между контроллерами (например, при зрячем трансфере), какие параметры должны перейти к новому контроллеру, потому что логически привязаны к UA, а какие — остаться у старого? Как организовать формирование биллинговых атрибутов в случае не pickup-on-call, а pickup-on-IwR, учитывая, что часть данных вообще недоступна (поскольку INVITE-with-Replaces не авторизуется), а часть должна быть получена от ещё не существующей ноги? И тэ дэ, и тэ пэ...
Маладца. Убил тонной подробностей из своей предметной области о которых я даже не слышал.
Так держать. Авось чтонибудь да докажешь.
N>И как ты думаешь, волнует меня здесь то, что я формально не знаю, число или строка в конкретной переменной?
А ты вообще статикой то пользоваться умеешь?
Я это к тому что статика и близко не сволдится к различию между целыми и строками.
N>Ну если у тебя выбор только между компилятором и головой программиста и нет даже банального grep (я не говорю про более серьёзные анализаторы кода)... да, здесь надо было проехаться по Windows, которая не даёт средств разработки, но это для другого треда.
У меня есть самый серьезнай из возможных анализаторов кода.
Компилятор.
N>Ты куда-то постоянно спешишь? Уровень проблем с орфографией такой, что невозможно игнорировать.
Нечего ответиь. Цепляешься к опечаткам. Слив засчитан.
WH>>Можешь привести пример? N>Так я и привёл, тебе недостаточно? Или ты считаешь, что
Что?
N>Я тебе про openat, а ты мне про "кучу специализированных функций", хотя её функциональность не покрывается CreateFile() ни в каком виде. Значит, ты ничего про неё не прочитал, но проигнорировать или прочитать не захотел.
Я прочтиал. Но не понял нахрены ты этот оффтопик вообще приплел?
Причем тут динамика?
N>Это уже показатель уровня твоей полемики.
Нет. Твоей. Ибо ты что-то пытаешься доказать оффтопиком.
N>Тогда зачем споришь о том, что за гранью твоего понимания?
И зачем нужна эта функция?
Приведи пример?
N>>>Ну конечно, привёл пример фиксированной структуры и успокоился... Представь себе, что завтра выходит новая версия стандарта, где у этой sequence ещё три возможных компонента. И тут твой конвертер представлений резко сломался... WH>>Какой конвертер? WH>>Каких представлений? N>Внутренних во внешние и обратно.
Что и почему должно сломаться?
Ничего не понял.
N>Сначала докажи, что дебилы.
Если человек намеренно обходит защиту... то других вариантов я просто не вижу.
N>Встречный вопрос: какой дебил и зачем придумал конвертировать все из себя объектные твои построения в какой-то ужасный октетный поток и отдавать через совершенно нетипизированный TCP? Да ещё и в каком-то жутком transfer encoding, которое ломает всё представление?
Это то тут причем?
N>Это тема отдельного обсуждения, но как минимум половина твоих доводов не по адресу или опровергается с ходу.
Они все кроме одного по адресу и там не полный список.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: почему в вебе распространены именно динамические язык
M>>Что такое естественные ограничения? Для меня естественные — это именно придуманные человеком. Естественнее не бывает. WH>
WH>1) естественные ограничения (например, законы сохранения)
WH>(С)netch80
M>>А как тут поможет статика? Ты тут апологет того, что «статика — труъ и помогает всегда». Я показал пример задачи, которая должна решаться на веб-сайте, и где от того, какая типизация будет в языке, ни холодно ни жарко. WH>В данном случае как минимум скоростью.
Опять та скорость. Нахрена мне нужна скорость, если все упрется
M>>Ну и при чем тут статика? Или автоматы нельзя на динамике делать? WH>Можно. Только производительность будет меньше на порядок другой.
На порядок максимум. Что для 99.9999999% случаев более, чем достаточно.
M>>Опять начинается сферовакуум. В моем случае мне даром не надо что-либо обгонять, потому что узкое место в данном случае — попытка загнать результаты в базу данных или вообще любое хранилище. Вот и нахрена мне там непревзойденная скорость статики? Только чтобы потом пенисометрией на РСДН заниматься? WH>Ты уперся рогом в базу данных. WH>И зря. WH>Базы данных на такой сценарий не расчитаны. WH>Как следствие нужно альтернативное решение.
Выделенное выше.
WH>Но ты даже не попытался понять о чем я написал.
По выделенному выше видно как ты читал, ага.
Повторю в пятидесятый раз. Сферовакуумная скорость никому не интересна. Всегда есть задача — сделать столько-то и столько0то в таких-то пределах. Скорость ради скорости нужна, судя по всему, только тебе.
Здравствуйте, WolfHound, Вы писали:
N>>Это свойство "корневой" модели области, независимой от конкретной реализации. WH>Тем не менее это все придумано человеком.
N>>Я не говорил "из природы", ты это сам додумал и раз додумал — с собой и спорь. Я говорил "естественные". WH>
WH>1) естественные ограничения (например, законы сохранения)
У тебя явные проблемы с логикой, если ты один частный пример воспринимаешь как правило и ограничение.
N>>Говоря твоими же словами, переход на личности — признак того, что аргументы кончились. А теперь объясни, зачем ты столько слов развёл на один далеко не основной аспект? Думаешь через эту сторону опровергуть проще? WH>Начнем с того что равел ты...
И что? Расскажи подробнее. Ах да, я с тобой спорю и осмеливаюсь с тобой не соглашаться...
N>>Спасибо за внятное объяснение (вместо кода на маргинальном языке) Да, пример показательный. Но и против него есть как внутренние, так и внешние возражения. N>>Во-первых, анализ такого рода возможен и для динамических языков (буду пока называть так), для наиболее прямого варианта использования. Грубо и на Питоне говоря, если ты пишешь a.b, он сработает, если getattr(a,'b') — нет (хотя pychecker в этом случае говорит, а почему написать не просто a.b?) WH> То-то PyCharm в 10 строках запутался.
Я не видел PyCharm и не хочу про него говорить, пока не поработал с ним. У тебя другой аргумент есть? Или ты уже второй раз пытаешься частный случай возвести во всеобщий закон?
N>>Во-вторых, если у тебя кроме собственно выбора значения ещё логика по его использованию, тебе придётся делать тест. А в этом случае ты отловишь ситуацию и в динамике. (Да, я повторяюсь.) WH>1)У меня один здоровый функциональный тесть на все. WH>2)Это преобразование я провол до того как появился код который может привести к тому что там не будет значения. WH>3)Код ради которого все затевалось еще даже не написан.
Я не смог понять этот абзац — даже после исправления описок он не приобретает смысла. Объясни другими словами, plz.
N>>В-третьих, ты на самом деле сделал больше, чем тебе нужно. WH>Ну да... тебе конечно виднее
Тут надо было добавить, что в общем случае сделал бы. В частном — да, возможно, не больше.
N>>Я догадываюсь, ты взял намеренно "чистый" пример, где такая проверка не нужна. Я прав? WH>Я взял первый попавшейся пример. WH>Хватит искать заговоры.
Я не ищу заговоры, но тенденция использовать наиболее показательные примеры настолько очевидна, что предполагать обратное бессмысленно. У тебя есть более жизненный пример? Или у тебя все задачи такие? Если да, тогда они мне просто неинтересны — у тебя другой мир, в котором, возможно, статическая типизация и способна сыграть настолько важную роль.
N>>Если бы у тебя была более сложная задача и какая-то ветка выполнения имела бы это значение всегда присутствующим — тебе бы пришлось "на ровном месте" вводить дополнительную переменную, не имеющую признака optional. WH>Да у меня полно таких веток. WH>Проверка осуществляется до того как в них попадает управление.
Тогда зачем проверять ещё раз в ветке? А ведь по сказанному тобой у тебя нет выбора — иначе компилятор не пустит код скомпилироваться. Или ты (опять) что-то недоговариваешь?
N>>Профит озвучивался раньше: например, ускорение разработки, сокращение цикла изменения. Были и другие выгоды. Перечитай. WH>По сравнению с С++. WH>Но по сравнению с немерле их нет!
Существует вариант Nemerle в виде чистого интерпретатора, без компиляции? Если нет — твоё утверждение уже неверно.
И почему ты так уверен в недостатках C++?
N>>Никто никогда не держит всю программу в голове, ты зря загинаешь лишнего. Полемические приёмы такого рода действуют только на тех, кто "заводится". Всегда рассматривается какая-то "проекция" задачи, и вопрос зависит от качества её выделения и рассмотрения. WH>А как без этого делать то что я показал?
Что именно ты показал? Не понимаю вопроса.
N>>И именно вопрос, что должно войти в проекцию, является наиболее сложным в определении рамок рассмотрения для изменения (анализа, etc.) Например, моя разработка — SIP softswitch — не имеет практически никаких проблем от собственно динамической среды: это даёт наиболее грубые виды ошибок, которые ловятся элементарными тестами. Существенные ошибки начинаются там, где возникают проблемы логики функционирования. Например, акаунтинг должен быть привязан к рауту, контроллеру или UA? И в какой момент — к кому из них? Что будет при перемещении UA между контроллерами (например, при зрячем трансфере), какие параметры должны перейти к новому контроллеру, потому что логически привязаны к UA, а какие — остаться у старого? Как организовать формирование биллинговых атрибутов в случае не pickup-on-call, а pickup-on-IwR, учитывая, что часть данных вообще недоступна (поскольку INVITE-with-Replaces не авторизуется), а часть должна быть получена от ещё не существующей ноги? И тэ дэ, и тэ пэ... WH>Маладца. Убил тонной подробностей из своей предметной области о которых я даже не слышал.
Зато это полностью живой, настоящий пример, из которого ничего не упрощено. И да, он приведен для того, чтобы показать, насколько сложности ТЗ и спецификации преобладают над проблемами кодирования. Вот относительно свежий пример — исправление одного долго тянущегося бага свелось к перестановке одной команды (отцепить UA от контроллера) на строку выше, чтобы UA успел получить штатный сигнал дисконнекта. Никакие _типы_ этому не помогут, если в функционирование типа не вложишь полную FSM работы UA. И зачем это делать через тип, если проще напрямую?
WH>Так держать. Авось чтонибудь да докажешь.
Ещё один переход на личности. Сливаешь?
N>>И как ты думаешь, волнует меня здесь то, что я формально не знаю, число или строка в конкретной переменной? WH>А ты вообще статикой то пользоваться умеешь? WH>Я это к тому что статика и близко не сволдится к различию между целыми и строками.
Так попытайся хотя бы навскидку предложить мне такое различие, которое бы помогло отловить все эти вещи на компиляции. А что ты думал — покажешь пару школьных примеров и этим кого-то убедишь?
N>>Ну если у тебя выбор только между компилятором и головой программиста и нет даже банального grep (я не говорю про более серьёзные анализаторы кода)... да, здесь надо было проехаться по Windows, которая не даёт средств разработки, но это для другого треда. WH>У меня есть самый серьезнай из возможных анализаторов кода. WH>Компилятор.
Бессмысленное утверждение, пропускаешь.
N>>Ты куда-то постоянно спешишь? Уровень проблем с орфографией такой, что невозможно игнорировать. WH>Нечего ответиь. Цепляешься к опечаткам. Слив засчитан.
Это у тебя систематический слив уже пятое письмо.
N>>Я тебе про openat, а ты мне про "кучу специализированных функций", хотя её функциональность не покрывается CreateFile() ни в каком виде. Значит, ты ничего про неё не прочитал, но проигнорировать или прочитать не захотел. WH>Я прочтиал. Но не понял нахрены ты этот оффтопик вообще приплел? WH>Причем тут динамика?
При том, что если функция промежуточного уровня имеет возможность добавлять аргументы, то я могу не ломать существующее API для получения новой функциональности. Но добавлять их придётся чисто динамическими методами.
N>>Это уже показатель уровня твоей полемики. WH>Нет. Твоей. Ибо ты что-то пытаешься доказать оффтопиком.
Это ты даже секунду не пытаешься потратить на то, чтобы понять собеседника.
N>>>>Ну конечно, привёл пример фиксированной структуры и успокоился... Представь себе, что завтра выходит новая версия стандарта, где у этой sequence ещё три возможных компонента. И тут твой конвертер представлений резко сломался... WH>>>Какой конвертер? WH>>>Каких представлений? N>>Внутренних во внешние и обратно. WH>Что и почему должно сломаться? WH>Ничего не понял.
Как ты во внутреннем представлении передашь новое поле пришедшей записи?
N>>Встречный вопрос: какой дебил и зачем придумал конвертировать все из себя объектные твои построения в какой-то ужасный октетный поток и отдавать через совершенно нетипизированный TCP? Да ещё и в каком-то жутком transfer encoding, которое ломает всё представление? WH>Это то тут причем?
При том, что с твоим текстом, сделанным в лучших побуждениях "Don't ever generate invalid HTML", начинают обращаться внешние ресурсы, которые могут с ним сделать что угодно. Кстати, если ты решишь, что это проблемы уже внешних средств и граница чётко обозначена — подумай о некоторых других вопросах: например, ограничениях на вложение тегов по их типам, или отображение твоего кода в чужом фрейме.
N>>Это тема отдельного обсуждения, но как минимум половина твоих доводов не по адресу или опровергается с ходу. WH>Они все кроме одного по адресу и там не полный список.
Что неполный — верю. Остальное — сомнительно. Например, пункт 5 — сознательные ограничения и если тебя они не устраивают, это только вопрос вкусовщины. Пункт 2 — я бы согласился, но авторы регулярно прорабатывают тему исключений и, возможно, введут их. Пункт 1 — проблемы твоего восприятия, ты бы такое же рассказывал про Erlang. Tutorial просто не успели выправить. Так можно долго продолжать, истинно здесь только одно: ты настолько односторонне хочешь видеть мир, что отказываешься принимать запросы других.
The God is real, unless declared integer.
Re[28]: почему в вебе распространены именно динамические язы
. Прикинь, тормоза у меня не в расчетах, а в сохранении этих расчетов. WH>У тебя тормоза в решении задачи. WH>Я тебе показал как ее решить быстро.
Нет, ты мне не показал, как ее решить быстро. Ты решил, что ты — единственный, который знает такие умные термины, как ДКА, НДКА и т.п.
WH>Если решение тормозит нужно просто подходить с другой стороны.
Подходи. Мы уперлись в то, что нам даром не нужна сферовакуумная скорость какого-то там языка. Потому что скорость генерации данных и так высока — доли секунды. Все упирается в запись этих данных. Но нет. ТАМ ЖИ СКОРАСТЬ!!!!!адынадынадын
M>>Зачем? Но при желании, думаю можно приблизиться к этим цифрам. Другой вопрос — насколько часто это требуется. WH>Языком.
Мде. На что был этот ответ неизвестно никому.
WH>>>http://www.impredicative.com/ur/ WH>>>Вот попробуй тестами гарантировать отсутствие перечисленных проблем. WH>хъ M>>что ты хотел сказать-то? WH>Чукча не читатель? WH>Там статически типизируемый язык который это гарантирует.
Ах. Да, действительно. Вах. некий эксперимаентальный язык, который действительно, в случае системы типов, более строгой, чем в Хаскелле, позволяет это сделать.
Только строгая типизация != статическая типизация.
Итак. Что ты хотел сказать-то?
M>>это самый распространенный на данный момент случай. WH>Только я его ни разу не видел. WH>Все что я видел всегда имело структуру.
И твой опыт, видимо, является единственным и всеобъемлющим. Ага. Так мы и поверили.
Веб сам по себе — это сплошная слабоструктурированная информация. Из недавнего. http://www.janrain.com/ позволяет унифицировать логин на сайте через всякие твиттеры, фейсбуки и т.п. В возвращаемых значениях из 16 полей они могут гарантировать наличие аж 2-х.
WH>Исключение это полнотекстовый поиск который ище что попало по чему угодно. WH>Но это очень редкая задача и динамикой при ее решении не пахнет.
M>>
M>>вау. действительно. я же тупой. я же не знаю, что за данные мне приходят. WH>Об этом я и говорю. WH>Этот мусор не нужен.
Если не нужен, мы его не пишем. Делов-то ЖчяЖ
M>>если надо, проверим. если не надо, не проверим. в чем проблема-то? WH>Практика показывает что всегда надо.
Практика показывает, что программист пишет то, что ему надо согласно той логике, что у него есть для решения той или иной задачи.
M>>ага, некий гипотетический абстрактный язык, где это возмжоно. странно, WH>Язык вполне конкретный. Немерле называется.
M>>то же самое можно сделать в некотором гипотетическом абстрактном динамически-типизированом языке. WH>С тормозами, без помощи компилятора и IDE...
Опять начинаются какие-то сферовакуумные кони.
Ты можешь написать генератор кода для получения данных на макросах на Немерле.
Ты можешь написать генератор кода для получения данных на макросах на Лиспе.
Хотя выше ты утверждаешь, что динамика обязывает тебя распыляться в проеврках, писать кучу ненужных проверок и т.п.
WH>>>Статика: WH>>>1)Проверка структуры декларативна. M>>что бы это ни значило WH>Дурку не включай.
Не включаю. Вообще не понимаю, что ты имеешь под декларативной проверкой структуры.
WH>>>2)Автокомплит, рефакторинг, навигация,... M>>и как это еу же JetBrains ухитряются то же для Питона делать, просто поражаюсь WH>Я не поленился и скачал. WH>Возможности PyCharm соответствуют моим ожиданиям. WH>Ибо чудес не бывает. WH>
WH>При попытки переименовать любой из методов asd она переименовавает все три вызова при этом не переименовывает второй метод. WH>Это блин ломающий рефакторинг...
Скачал IDEA для Java. В пяти попытках рефакторинга она мне предложила такой же ломающий рефакторинг. И это — на статистически типизированом языке, в котором это должно быть раз плюнуть, не?
WH>При попытке нажать ctrl+spase после a.q нет вариантов. WH>Если гдето написать a.qweqwrwevcsreg то начинает подсказывать qweqwrwevcsreg но qwe всеравно нету. WH>Кстати qweqwrwevcsreg нигде не объявлено но "IDE" молчит.
WH>И это коммерческая IDE которую люди пишут полный рабочий день.
И не парятся. Потому что
WH>Страни с IDE для немерле. WH>Рефакторанг там просто не реализован. Ибо не очень надо и как следствие никто этим не занимался.
Ты или эта — одинаковые стандарты используй или вообще никакие. Для Немерле, значит, рефакторинг не нужен, а для любого сравниваемого с ним языка — ВНЕЗАПНО нужен?
WH>За то автокомплит, навигация и подсветка ошибок работают как часы. WH>И это при том что ее делают в свободное от работы время.
WH>Так что IDE для динамики больше не вспоминай. Это блокноты с раскраской синтаксиса.
WH>>>3)Компилятор находит все опечатки и несоответствия типов. Хрен что забудешь. M>>Очень малая часть ошибок. WH>Лично у меня почти все ошибки сводятся к этому...
У меня ошибки сводятся к алгоритмическим. Может, потому что часть мозга, которая у тебя занята поисками нужных типов для задачи, выделяется для собственно решения задачи?
WH>>>4)Скорость работы высокая. M>>Опять эта мифическая никому не нужная сферовакуумная скорость в отрыве от задачи. WH>Я еще не видел задач в которых не нужна скорость.
Никому не нужна просто скорость. Нужна скорость в рамках поставленной задачи.
Есть у меня сайтец один. На HYH/ Два раза были проблемы с производительностью. Первый раз — с Апачем, замена на nginx помогла. Второй раз — с MySQL, тюнинг MySQL'я помог. Ни разу проблема с производительностью не упиралась в HYH/
Скорость у него.
Завязвай с наркотиками. Сферовакуумных коней и сферовакуумных скоростей не существует.
Я не зря ссылку на widefinder приводил. Можешь вдумчиво покурить результаты. Хотя ты там все равно ни хрена не увидишь. У тебя же СКОРАСТЬ!!!!!!одинодинодинодинодин
А умные люди увидят, что:
— mainstream динамика (Python) дает результаты, приемлемые в подавляющем большинстве случаев (22 секунды) по сравнению с meinstream статикой (java, 13 секунд) и является гораздо более приемлемым решением, чем вырвишлазный звиздец в 2000 LoC на C++ (но там же аж на один порядок быстрее!!!!!!одинодинодинодинодинодин).
WH>>>Динамика: WH>>>1)Проверки структуры императивны и размазаны по всей программе. M>>Фиг его знает, что ты тут имеешь в виду. WH>Ту грязь что ты понаписал выше.
можно и без грязи. для этого нужен мозг. могу тебе привести пример проверки в одно месте, но, думаю, ты сможешь сам догадаться, как это сделать.
WH>>>4)Тормоза. M>>Опять эта мифическая никому не нужная сферовакуумная скорость в отрыве от задачи. WH>Томоза самые реальные. WH>Ну а то что ты тупо отрицаешь недостатки своих игрушек чести тебе не делает.
Я их не отрицаю. Я тебе тупо твержу одну вещь: никого не интересует сферовакуумная скорость
M>>Профит у людей, которые не думают о языках в терминах сферовакуумности того или иного языка. WH>В воображении.
WH>>>http://www.impredicative.com/ur/ WH>>>Вот попробуй тестами гарантировать отсутствие перечисленных проблем. WH>хъ M>>что ты хотел сказать-то? WH>Чукча не читатель? WH>Там статически типизируемый язык который это гарантирует.
Про Ur
Гарантирует не язык, а описаные ручками типы из стандартной библиотеки. То есть, они гаранируют до тех пор, пока нет ошибок в реализации этих типов.
Что так он «гарантирует»...
- Attempt invalid SQL queries
— Use improper marshaling or unmarshaling in communication with SQL databases or between browsers and web servers
M>>Помимо это, а где хваленая гарантия валидности генерируемого HTML'я? D>А почему ее там может не быть? <a></b> наверное не скомпилируется.
Наверное или не скомпилируется? В указаном примере виден только вручную написаный xml, в который еще и вставляются какие-то данные из базы данных, которые на этапе выполнения программы могут быть вообще чем угодно, даже невалидным xml-ем.
Здравствуйте, dotneter, Вы писали:
D>А что я там должен увидеть? По сути тоже самое
Ну да. Кода столькоже но все статически типизированно и с проверкой компилятора.
И кому после этого нужна динамика?
D>Нужно румами обяъявлять тип.
А в динамике типа этот код не нужен?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[36]: почему в вебе распространены именно динамические язы
Здравствуйте, netch80, Вы писали:
N>У тебя явные проблемы с логикой, если ты один частный пример воспринимаешь как правило и ограничение.
Если уж вводишь термины то делай их как следует.
N>И что? Расскажи подробнее. Ах да, я с тобой спорю и осмеливаюсь с тобой не соглашаться...\
Про естественность/искуственность ограничений начал ты Re[27]: почему в вебе распространены именно динамические язы
Я говорил просто о ограничениях.
N>Я не видел PyCharm и не хочу про него говорить, пока не поработал с ним. У тебя другой аргумент есть? Или ты уже второй раз пытаешься частный случай возвести во всеобщий закон?
Это к мамуту. Он тут пытался меня в этот PyCharm тыкать. Типа там все работает.
Да нихрена там не работает.
N>Я не смог понять этот абзац — даже после исправления описок он не приобретает смысла. Объясни другими словами, plz.
Да все просто. Нет теста. И еще не скоро будет. Но я и так знаю что все впорядке.
N>>>В-третьих, ты на самом деле сделал больше, чем тебе нужно. WH>>Ну да... тебе конечно виднее N>Тут надо было добавить, что в общем случае сделал бы. В частном — да, возможно, не больше.
Ты хоть один пример найди.
N>Я не ищу заговоры, но тенденция использовать наиболее показательные примеры настолько очевидна, что предполагать обратное бессмысленно.
Ну так я и показал первый попавшейся пример где статика помогла мне отвефакторить кучу кода.
Могу еще комиты с подобным действом найти но смысл?
N>У тебя есть более жизненный пример?
Сто значит более жизненны?
N>Или у тебя все задачи такие?
Какие такие?
N>Если да, тогда они мне просто неинтересны — у тебя другой мир, в котором, возможно, статическая типизация и способна сыграть настолько важную роль.
А может я просто использую правильные языки и грамотно подхожу к тому чтобы уложить задачу в типы?
N>Тогда зачем проверять ещё раз в ветке? А ведь по сказанному тобой у тебя нет выбора — иначе компилятор не пустит код скомпилироваться. Или ты (опять) что-то недоговариваешь?
А где я сказал что проверяю еще раз?
Я получил option[Rule]. Проверил. Если пусто пошол по одному пути. Если что-то есть получил тип Rule и болше ничего не проверяю.
N>Существует вариант Nemerle в виде чистого интерпретатора, без компиляции? Если нет — твоё утверждение уже неверно.
А нахрена мне интерпритатор?
Он не имеет смысла.
N>И почему ты так уверен в недостатках C++?
Я его как бы очень хорошо знаю.
N>>>Никто никогда не держит всю программу в голове, ты зря загинаешь лишнего. Полемические приёмы такого рода действуют только на тех, кто "заводится". Всегда рассматривается какая-то "проекция" задачи, и вопрос зависит от качества её выделения и рассмотрения. WH>>А как без этого делать то что я показал? N>Что именно ты показал? Не понимаю вопроса.
Я все про тот рефакторинг.
Заменил в одном месле Rule на option[Rule] и нужно поменять все части программы где есть обращение.
N>Зато это полностью живой, настоящий пример, из которого ничего не упрощено. И да, он приведен для того, чтобы показать, насколько сложности ТЗ и спецификации преобладают над проблемами кодирования.
Я не могу на этот твой пример ничего ответить просто по тому что я не понял половину слов.
Сленг который ты использовал для меня ничего не значит.
N>Вот относительно свежий пример — исправление одного долго тянущегося бага свелось к перестановке одной команды (отцепить UA от контроллера) на строку выше, чтобы UA успел получить штатный сигнал дисконнекта. Никакие _типы_ этому не помогут, если в функционирование типа не вложишь полную FSM работы UA.
Вот! Сам же знаешь ответ.
И заложить в тип FSM это очень просто. Для этого даже зависимые типы не нужны.
Можно даже LL(1) закатать не особо напрягаясь.
N>И зачем это делать через тип, если проще напрямую?
Ну это смотря как делать.
WH>>Так держать. Авось чтонибудь да докажешь. N>Ещё один переход на личности. Сливаешь?
Где?
Я просто говорю про ущербность подобной аргументации.
N>Так попытайся хотя бы навскидку предложить мне такое различие, которое бы помогло отловить все эти вещи на компиляции. А что ты думал — покажешь пару школьных примеров и этим кого-то убедишь?
Что значит выделенное?
И чем тот пример с изменением кучи кода школьный?
N>>>Ну если у тебя выбор только между компилятором и головой программиста и нет даже банального grep (я не говорю про более серьёзные анализаторы кода)... да, здесь надо было проехаться по Windows, которая не даёт средств разработки, но это для другого треда. WH>>У меня есть самый серьезнай из возможных анализаторов кода. WH>>Компилятор. N>Бессмысленное утверждение, пропускаешь.
Что я пропускаю?
Выражайся яснее.
N>При том, что если функция промежуточного уровня имеет возможность добавлять аргументы, то я могу не ломать существующее API для получения новой функциональности. Но добавлять их придётся чисто динамическими методами.
Ты вообще о чем? http://linux.die.net/man/2/openat
N>Как ты во внутреннем представлении передашь новое поле пришедшей записи?
В каком представлении?
Какое поле?
Кокой заяц?
Какой орел?
Если ты о том что нужно в протокол добавить поддержку расширения это ни разу не проблема.
N>При том, что с твоим текстом, сделанным в лучших побуждениях "Don't ever generate invalid HTML", начинают обращаться внешние ресурсы, которые могут с ним сделать что угодно. Кстати, если ты решишь, что это проблемы уже внешних средств и граница чётко обозначена —
Именно так я и решу.
Я не могу ничего контролировать после того как HTML покинул мою программу.
И что характерно в подавляющем большенстве случаев этот HTML без единого изменения достигнет браузера пользователя.
N>подумай о некоторых других вопросах: например, ограничениях на вложение тегов по их типам,
И в чем проблема?
N>или отображение твоего кода в чужом фрейме.
Почему это должно меня волновать?
N>Что неполный — верю. Остальное — сомнительно. Например, пункт 5 — сознательные ограничения и если тебя они не устраивают, это только вопрос вкусовщины.
Исли мне каждый раз явно придется писать привидения от потомка к базе то я прокляну все на свете.
Перегрузка функций механизм крайне полезный.
Экономит кучу букв.
А что касается перегрузки операторов то мне и этого мало.
Я сейчас работаю над парсером для немерле2 там можно будет вообще как угодно над синтаксисом издеваться.
Что позволит сделать произвольный ДСЛ.
N>Пункт 2 — я бы согласился, но авторы регулярно прорабатывают тему исключений и, возможно, введут их.
И поломают весь существующий код.
Или нужно объяснять что код либо сразу нужно писать так чтобы он был безопасен к исключениям или потом его будет проще по новой переписать.
N>Пункт 1 — проблемы твоего восприятия, ты бы такое же рассказывал про Erlang.
А что в эрланге у нас уже можно шарить изменяемые данные?
N>Tutorial просто не успели выправить. Так можно долго продолжать, истинно здесь только одно: ты настолько односторонне хочешь видеть мир, что отказываешься принимать запросы других.
Ну да. Использование глобальных переменных это конечно правильно.
А я один кому это категорически не нравится.
Вот как это надо делать:
[CommandLineParser]
class Options
{
[HelpMessage("don't print final newline")]
[Name("n")]
public OmitNewline : bool = false;
}
Может чуть больше слов за то понятно даже не зная как это все работает.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[12]: почему в вебе распространены именно динамические язы
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, dotneter, Вы писали:
D>>А что я там должен увидеть? По сути тоже самое WH>Ну да. Кода столькоже но все статически типизированно и с проверкой компилятора. WH>И кому после этого нужна динамика?
Тем людям у которых очень редко возникают ошибки компиляции?
D>>Нужно румами обяъявлять тип. WH>А в динамике типа этот код не нужен?
Я же привер пример кода. Для его работы больше ничего не нужно.