Здравствуйте, nbaksalyar, Вы писали:
WH>>Тормозит? Да! N>Нет.
Голословные утверждения.
Если оно в некоторых случаях и сравнимо, то только тогда когда код фактически статически типизирован и компилятору удалось вывести типы.
WH>>Ошибки ловит? Нет! N>Да.
И где там написано что лисп ловит ошибки?
Нигде.
N>Тот же Erlang можно вполне назвать динамическим языком. Стоит ли напоминать о надежности правильно написанных на нем программ?
ЛОЛ.
Программы на ерланге не надежны, они просто падают и быстренько перезапускаются, делая вид, что ничего не произошло.
И динамическая типизация для этого не нужна.
Она вообще ни для чего не нужна.
Мне так никто и не показал ни одного примера нахрена оно вообще нужно.
WH>>Полноценную навигацию и рефакторинг сделать можно? Нет! N>Да.
Покажи хоть одну IDE которая не запутается в десятке строк кода.
Таких нет.
N>Рефакторинг и паттерны нужны преимущественно для статических языков.
Рефакторинг нужен всегда.
Просто по тому, что с первого раза никто не может написать все правильно.
Про паттерны я вообще ничего не говорил. Но и динамика от них нихрена не спасает.
От паттернов помогает только метапрограммирование. А оно и на статике прекрасно делается.
N>Навигация — без проблем.
Не видел.
N>Ну и что? Так я могу раз в десять больше способов отстрелить себе ногу в статически типизированном C++ найти.
С++ позволяет наплевать на типы.
Так что пример мимо тазика.
N>Но это будет говорить лишь о том, что отстреливать себе ногу не нужно, а нужно писать код с умом и осторожностью.
ЛОЛ. Так никто не делает.
Никто и никогда.
N>Обратите внимание на первый же абзац: "carelessly written or poorly documented monkey patches can lead to problems".
Это 100% кода.
Просто по тому, что люди не железные и постоянно ошибаются.
N>Нормальных, даже отличных IDE в достатке — JetBrains WebStorm/RubyMine/PyCharm, Eclipse, NetBeans.
Путаются в десятке строк кода.
N>Для меня же нормальная IDE это REPL + Vim или Emacs.
Те отсутсвие IDE.
WH>>Непонимание матчасти детектед. N>Не отрицаю.
А что же тогда в спор влез, если не знаешь, о чем говоришь?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Евгений Акиньшин, Вы писали:
ЕА>я для себя только один юз-кейс нашел — когда требуется ввод логики от конечного пользователя: ЕА>во-первых проще обработать все возможные ошибки, чем объяснить не-программистам что вместо (a + b) надо писать (a + (int)b) ЕА>во-вторых приходится делать всякие контекстно-зависмые подстановки: опять же например ЕА>sum(Order.Lines.Amount) ЕА>бизнес пользователю понятно, а Order.Lines.Sum(line => (double)line.Amount) уже не очень.
Это ДСЛ обыкновенный.
Причем тут динамическая типизация не ясно.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Евгений Акиньшин, Вы писали:
ЕА>>я для себя только один юз-кейс нашел — когда требуется ввод логики от конечного пользователя: ЕА>>во-первых проще обработать все возможные ошибки, чем объяснить не-программистам что вместо (a + b) надо писать (a + (int)b) ЕА>>во-вторых приходится делать всякие контекстно-зависмые подстановки: опять же например ЕА>>sum(Order.Lines.Amount) ЕА>>бизнес пользователю понятно, а Order.Lines.Sum(line => (double)line.Amount) уже не очень. WH>Это ДСЛ обыкновенный. WH>Причем тут динамическая типизация не ясно.
в dsl-х, предназначенных для редактирования енд-юзером приходится приводить типы автоматически за пользователей: если бизнес пользователю хочется складывать апельсины с яблоками, мы попытаемся использовать все возможные способы приведения, и ошибку выдадим, только если уж совсем ничего не получилось
Здравствуйте, Евгений Акиньшин, Вы писали:
ЕА>в dsl-х, предназначенных для редактирования енд-юзером приходится приводить типы автоматически за пользователей: если бизнес пользователю хочется складывать апельсины с яблоками, мы попытаемся использовать все возможные способы приведения, и ошибку выдадим, только если уж совсем ничего не получилось
А динамическая типизация то зачем?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Евгений Акиньшин, Вы писали:
ЕА>>в dsl-х, предназначенных для редактирования енд-юзером приходится приводить типы автоматически за пользователей: если бизнес пользователю хочется складывать апельсины с яблоками, мы попытаемся использовать все возможные способы приведения, и ошибку выдадим, только если уж совсем ничего не получилось WH>А динамическая типизация то зачем?
а как это сделать статически? например наша программа позволяет пользователю подключится к его данным и выполнить операции над его данными — например подсчитать sum(db.Oranges) + avеrage(db.Apples). Типы известны только в момент подключения к источнику, причем источники могут быть разные с разными тиипами. Т.е. на момент ввода выражений нам надо проверить синтаксис, но проверить совместимость типов мы не можем. Это не динамтическая типизация?
Здравствуйте, Евгений Акиньшин, Вы писали:
ЕА>а как это сделать статически? например наша программа позволяет пользователю подключится к его данным и выполнить операции над его данными — например подсчитать sum(db.Oranges) + avеrage(db.Apples).
И что должно быть в этом случае?
ИМХО нужно говорить, что так делать нельзя.
ЕА>Типы известны только в момент подключения к источнику, причем источники могут быть разные с разными тиипами.
Те одно выражение пользователь засовывает в разные источники?
В любом случае типы можно проверить в момент подключения к источнику, а не во время исполнения запроса.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Mamut, Вы писали:
M>Тебе сто раз сказали, что именно мы имеем в виду, а ты продолжал упираться рогом в регулярные выражения.
Я тебя предупреждал. Он и дальше так же делать будет — ему просто другого не остается. Потому что он давно понял, что не прав, а признаться в этом не может.
Здравствуйте, WolfHound, Вы писали:
WH>Да никто ничего не приписывает. WH>Тормозит? Да! WH>Ошибки ловит? Нет! WH>Полноценную навигацию и рефакторинг сделать можно? Нет! WH>Что дает? Ничего!
Плюс там ровно один — пологая learning curve. И именно это привлекает к динамике стада малообразованных программистов.
Здравствуйте, WolfHound, Вы писали:
ЕА>>а как это сделать статически? например наша программа позволяет пользователю подключится к его данным и выполнить операции над его данными — например подсчитать sum(db.Oranges) + avеrage(db.Apples). WH>И что должно быть в этом случае? WH>ИМХО нужно говорить, что так делать нельзя.
а пользователи говорят что очень хочется и денег платят
ЕА>>Типы известны только в момент подключения к источнику, причем источники могут быть разные с разными тиипами. WH>Те одно выражение пользователь засовывает в разные источники? WH>В любом случае типы можно проверить в момент подключения к источнику, а не во время исполнения запроса.
ага, особенно если на входе строки
к слову сказать, мы-то как раз в большинстве случаев си-шарп для скриптов использовали, так саппортерам иногда приходится объяснять тете Клаве, что вместо a+b надо писать double.Parse(data["a"]) + double.Parse(data["b"])
Здравствуйте, Евгений Акиньшин, Вы писали:
ЕА>а пользователи говорят что очень хочется и денег платят
Те им хочется считать бессмысленные данные?
Так это же GIGO.
WH>>Те одно выражение пользователь засовывает в разные источники? WH>>В любом случае типы можно проверить в момент подключения к источнику, а не во время исполнения запроса. ЕА>ага, особенно если на входе строки
Что за строки?
Что мешает типизировать источник данных?
ЕА>к слову сказать, мы-то как раз в большинстве случаев си-шарп для скриптов использовали, так саппортерам иногда приходится объяснять тете Клаве, что вместо a+b надо писать double.Parse(data["a"]) + double.Parse(data["b"])
То что вы используете непойми что ничего не говорит о том что статика плохая.
Ничто не мешает один раз типизировать источники и писать a+b.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Евгений Акиньшин, Вы писали:
ЕА>>а пользователи говорят что очень хочется и денег платят WH>Те им хочется считать бессмысленные данные? WH>Так это же GIGO.
Это теперь называется "робастность" — небольшое количество мусора на входе не сильно портит конечный результат
WH>>>Те одно выражение пользователь засовывает в разные источники? WH>>>В любом случае типы можно проверить в момент подключения к источнику, а не во время исполнения запроса. ЕА>>ага, особенно если на входе строки WH>Что за строки? WH>Что мешает типизировать источник данных?
ЕА>>к слову сказать, мы-то как раз в большинстве случаев си-шарп для скриптов использовали, так саппортерам иногда приходится объяснять тете Клаве, что вместо a+b надо писать double.Parse(data["a"]) + double.Parse(data["b"]) WH>То что вы используете непойми что ничего не говорит о том что статика плохая. WH>Ничто не мешает один раз типизировать источники и писать a+b.
вы ужасно далеки от народа как-нидь на досуге попытайтесь заставить непрограммиста типизировать данные. Особенно если они хранятся в эксельных и csv-х файлах, в разных форматах.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Плюс там ровно один — пологая learning curve. И именно это привлекает к динамике стада малообразованных программистов.
Аха, Perl или Lisp тому пример. (: Прямо сел и начал ваять проекты на тысячи строк.
Здравствуйте, anonymous, Вы писали:
НС>>Плюс там ровно один — пологая learning curve. И именно это привлекает к динамике стада малообразованных программистов.
A>Аха, Perl
Перл — безусловно. Меня посещает дежа вю.
A> или Lisp тому пример.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>>>Плюс там ровно один — пологая learning curve. И именно это привлекает к динамике стада малообразованных программистов. A>>Аха, Perl НС>Перл — безусловно. Меня посещает дежа вю.
Если тебе при изучении Perl так показалось, то ты не научился им пользоваться.
A>> или Lisp тому пример. НС>Лисп — отдельный разговор.
Здравствуйте, anonymous, Вы писали:
НС>>>>Плюс там ровно один — пологая learning curve. И именно это привлекает к динамике стада малообразованных программистов. A>>>Аха, Perl НС>>Перл — безусловно. Меня посещает дежа вю.
A>Если тебе при изучении Perl так показалось, то ты не научился им пользоваться.
Попробуй подумать о том, что означает термин "пологая learning curve"
НС>>Лисп — отдельный разговор.
A>Это ещё почему?
Потому что Лисп отличается от других языков не только динамикой, и его плюсы тоже вовсе не в динамике. Посмотри Qi — там и вся прелесть Лиспа сохранена, и статический контроль типов опционально доступен.
A> И сколько таких исключений?
Если не считать клоны Лиспа, то других исключений мне неизвестно.
Здравствуйте, Евгений Акиньшин, Вы писали:
ЕА>Угу, как будто мало других вещей, которые не могут быть разрулены кроме как административно, так мы еще и за компьютеры работу делать будем — для удобства
У тебя и в статически типизированном языке надо "разруливать" эту вещь административно. Точно также.
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, nbaksalyar, Вы писали:
N>>У вас устаревшие данные. JavaScript уже давно шагнул вперед за DOM — поглядите, например, Angry Birds или Linux в браузере — DOM-модель там упоминается разве только в ключе document.getElementById('canvas').
TK>В случае с canvas в первую очередь важна скорость рендеринга — это делается браузером.
А в случае с WebGL ты тоже считаешь, что "это делается браузером"?
Здравствуйте, WolfHound, Вы писали:
WH>Полноценную навигацию и рефакторинг сделать можно? Нет! WH>Что дает? Ничего!
Валяй, затипизируй в своем любимом Хиндли-Милнере от природы динамические DOM-деревья. Паржом. И покажи, чем pattern-matching будет в работе с ними удобнее, чем типичные для JS, насквозь динамические селекторы вида $('.node').
Здравствуйте, Gaperton, Вы писали:
TK>>В случае с canvas в первую очередь важна скорость рендеринга — это делается браузером. G>А в случае с WebGL ты тоже считаешь, что "это делается браузером"?
Ну, мы же не будем опускаться до того, что рендеринг делается видео-картой?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Такие системы типов называются soft type system. Для Эрланга статический тайпчекер входит в штатную поставку, и прекрасно ловит ошибки типов.
Для JS она, разумеется, тоже есть, и наличествует, например, в Google Closure Compiler. И никаких фундаментальных проблем делать это для динамических языков не существует.