Здравствуйте, anonymous, Вы писали:
A>Да, регулярные выражения не являются аналогом сопоставления с образцом, потому что это сопоставление с образцом и есть, одна из его разновидностей. Вы же почему-то считаете сопоставлением с образцом исключительно другую его разновидность, искусственно сужая определение термина. Так вот, в JavaScript есть сопоставление с образцом.
Все таки строки это очень узкая разновидность PM и приравнивать их к PM из ML подобных (включая и Хаскель) ФЯ или PM пролога будет неправильно.
Даже если смотреть исторически SNOBOL в котором появился впервые текстовый PM вполне ровесник Рефалу — ФЯ в котором одна из самых
мощных разновидностей PM.
Здравствуйте, FR, Вы писали:
A>>Да, регулярные выражения не являются аналогом сопоставления с образцом, потому что это сопоставление с образцом и есть, одна из его разновидностей. Вы же почему-то считаете сопоставлением с образцом исключительно другую его разновидность, искусственно сужая определение термина. Так вот, в JavaScript есть сопоставление с образцом. FR>Все таки строки это очень узкая разновидность PM и приравнивать их к PM из ML подобных (включая и Хаскель) ФЯ или PM пролога будет неправильно.
Если заглянуть в начало дискуссии, то вопрос стоял такой: есть ли сопоставление с образцом в JavaScript? Ври всей своей «узости» регулярные выражения, на мой взгляд, позволяют ответить на этот вопрос положительно. Однако почему-то у некоторых участников эта мысль вызывает идиосинкразию.
Далее, я ни в коем случае не оспариваю мощности и удобства сопоставления деревьев в отдельных языках. Это однако не исключает того, что подобные вещи можно реализовать путём сравнения последовательностей, хоть и при более громоздкой записи.
Здравствуйте, anonymous, Вы писали:
A>Если заглянуть в начало дискуссии, то вопрос стоял такой: есть ли сопоставление с образцом в JavaScript? Ври всей своей «узости» регулярные выражения, на мой взгляд, позволяют ответить на этот вопрос положительно. Однако почему-то у некоторых участников эта мысль вызывает идиосинкразию.
Тут все просто разные вещи обозначены одним термином. Вообще даже ПМ из ФЯ ПМ из пролога и ПМ из рефала тоже весьма разные вещи.
Чтобы не было спора просто надо назвать все своими именами. Тогда вполне справедливо что ПМ из ФЯ в JavaScript нет.
A>Далее, я ни в коем случае не оспариваю мощности и удобства сопоставления деревьев в отдельных языках. Это однако не исключает того, что подобные вещи можно реализовать путём сравнения последовательностей, хоть и при более громоздкой записи.
Реализовать конечно можно, но без слез на это смотреть невозможно, ладно еще в питоне на декораторах получается хоть что-то похожее, а тут совсем уж слабое подобие.
Здравствуйте, FR, Вы писали:
FR>Чтобы не было спора просто надо назвать все своими именами. Тогда вполне справедливо что ПМ из ФЯ в JavaScript нет.
С этим не спорю. Однако подобный pattern matching достаточно легко реализуется имеющимися средствами языка. Например, библиотека match.js позволяет делать так:
Здравствуйте, Евгений Акиньшин, Вы писали:
KV>>Я не знаю, для кого это ад, но писать UI на http://knockoutjs.com/ — одно удовольствие, флеш там и рядом не стоял. А ведь это даже и не html5... ЕА>а есть real-life примеры использования этого чуда? все что у них на сайте на уровне HelloWorld
Често говоря, real-life примерами я как-то не озадачивался. Мне вполне хватило того, что есть у них на сайте + содержимого пары статей отсюда: http://www.knockmeout.net/
M>>>>Может восстановим контекст подветки, не? Повторю в пятый раз: patern matching в том виде, в котором его понимает Wolfhound и о котором он говорит, в JS ОТСУТСВУЕТ. Это так сложно понять? A>>>Я это отрицал? Кажется ты спорил сам с собой. M>>Регулярные выражения не являются полноценным аналогом сопоставления с образцом. В лучшем случае они являются весьма малой частью этого понятия.
A>Да, регулярные выражения не являются аналогом сопоставления с образцом, потому что это сопоставление с образцом и есть, одна из его разновидностей. Вы же почему-то считаете сопоставлением с образцом исключительно другую его разновидность, искусственно сужая определение термина. Так вот, в JavaScript есть сопоставление с образцом.
Мы не сужаем понятие, а расширяем его. По ссылке в википедию ты так и не удосужился пойти.
M>>>>>>Даже близко не эквивалентны A>>>>>Это почему же? M>>>>Скажем так, если ты хочешь упаковывать структуру данных в строку, и бегать по ней регулярками? Пожалуйста. Я для того возьму внятные средства для разбора структур данных в виде полноценного сопоставления с образцом. A>>>Как это опровергает эквивалентность? M>>Ну давай ты напишешь аналог этого регулярными выражениями и мы поговорим об эквивалентности, ок?
A>Давай, я не буду выполнять твои задания? Если у тебя есть опровержение моих слов, представь его. Только учти, что громоздкость и неудобство сопоставления деревьев через строки не является опровержением.
Тогда могу ответить только словами
В таком разрезе все полные по Тьюрингу языки эквивалентны.
A>>Если заглянуть в начало дискуссии, то вопрос стоял такой: есть ли сопоставление с образцом в JavaScript? Ври всей своей «узости» регулярные выражения, на мой взгляд, позволяют ответить на этот вопрос положительно. Однако почему-то у некоторых участников эта мысль вызывает идиосинкразию.
FR>Тут все просто разные вещи обозначены одним термином. Вообще даже ПМ из ФЯ ПМ из пролога и ПМ из рефала тоже весьма разные вещи. FR>Чтобы не было спора просто надо назвать все своими именами. Тогда вполне справедливо что ПМ из ФЯ в JavaScript нет.
Это я говорил 5 или 6 раз. anonymous, что называется, уперся рогом.
Здравствуйте, Mamut, Вы писали:
A>>Да, регулярные выражения не являются аналогом сопоставления с образцом, потому что это сопоставление с образцом и есть, одна из его разновидностей. Вы же почему-то считаете сопоставлением с образцом исключительно другую его разновидность, искусственно сужая определение термина. Так вот, в JavaScript есть сопоставление с образцом. M>Мы не сужаем понятие, а расширяем его.
Расширяете, выкидывая из понятия разновидность сопоставления — сопоставление с последовательностями?
M>>>>>>>Даже близко не эквивалентны A>>>>>>Это почему же? M>Тогда могу ответить только словами
В таком разрезе все полные по Тьюрингу языки эквивалентны.
A>>>Да, регулярные выражения не являются аналогом сопоставления с образцом, потому что это сопоставление с образцом и есть, одна из его разновидностей. Вы же почему-то считаете сопоставлением с образцом исключительно другую его разновидность, искусственно сужая определение термина. Так вот, в JavaScript есть сопоставление с образцом. M>>Мы не сужаем понятие, а расширяем его.
A>Расширяете, выкидывая из понятия разновидность сопоставления — сопоставление с последовательностями?
Никто. Ничего. Не. Выкидывает.
По ссылке в википедии, ты видимо, так и не удосужился пройти. Увы.
В пятидесятый раз. Сопоставления с образцом, о котором говорит Wolfhound, в JS нет. RegExp'ы являются неизмеримо малой частью сопоставления с образцом. Если ты не
И нет, мы не говорим про «то, что реализовано в Nemerle», как ты выразился. Мы говорим хотя бы про то, что написано по (одной!) ссылке, по которой ты так и не удосужился сходить.
Здравствуйте, Mamut, Вы писали:
A>>>>Да, регулярные выражения не являются аналогом сопоставления с образцом, потому что это сопоставление с образцом и есть, одна из его разновидностей. Вы же почему-то считаете сопоставлением с образцом исключительно другую его разновидность, искусственно сужая определение термина. Так вот, в JavaScript есть сопоставление с образцом. M>>>Мы не сужаем понятие, а расширяем его. A>>Расширяете, выкидывая из понятия разновидность сопоставления — сопоставление с последовательностями? M>Никто. Ничего. Не. Выкидывает.
Но ты же утверждаешь, что в JavaScript нет сопоставления с образцом.
M>По ссылке в википедии, ты видимо, так и не удосужился пройти. Увы.
Почему я должен читать какие-то ссылки, если ты не читаешь мои сообщения?
M>В пятидесятый раз. Сопоставления с образцом, о котором говорит Wolfhound, в JS нет. RegExp'ы являются неизмеримо малой частью сопоставления с образцом. Если ты не
A>>>>>Да, регулярные выражения не являются аналогом сопоставления с образцом, потому что это сопоставление с образцом и есть, одна из его разновидностей. Вы же почему-то считаете сопоставлением с образцом исключительно другую его разновидность, искусственно сужая определение термина. Так вот, в JavaScript есть сопоставление с образцом. M>>>>Мы не сужаем понятие, а расширяем его. A>>>Расширяете, выкидывая из понятия разновидность сопоставления — сопоставление с последовательностями? M>>Никто. Ничего. Не. Выкидывает.
A>Но ты же утверждаешь, что в JavaScript нет сопоставления с образцом.
Где? Ссылку и точную цитату.
M>>По ссылке в википедии, ты видимо, так и не удосужился пройти. Увы.
A>Почему я должен читать какие-то ссылки, если ты не читаешь мои сообщения?
M>>В пятидесятый раз. Сопоставления с образцом, о котором говорит Wolfhound, в JS нет. RegExp'ы являются неизмеримо малой частью сопоставления с образцом. Если ты не
A>— Есть ли в JavaScript patterm matching? Мой ответ: да. Ваш: нет?
A>— Нет.
Теперь возбмем другую цитату:
- В Немерле, Хаскеле, Скале, Эрланге есть и решулярные выражения и сопоставление с образцом. То сопоставление, о котором говорим с Wolfhound'ом в JS отсутсвует напрочь
— Ещё раз, регулярные выражения и есть сопоставление с образцом, а не что-то в дополнение к нему. Таким образом pattern matching в JavaScript есть, о чём бы вы там не говорили.
Это ли не звиздец?
Тебе сто раз сказали, что именно мы имеем в виду, а ты продолжал упираться рогом в регулярные выражения. Хотя уже тут
WolfHound даже бдизко не упоминал их. Ты прикопался к термину, будучи уверенным, что раз в языке есть часть чего-то общего (регулярки), то в языке есть и общее (сопоставление с образцом в целом)?
Тебя спросили (и потом пятьдесят раз уточняли): есть ли в JS сопоставление с образцом в таком же виде, в каком оно есть в Nemerle/Erlang'е/Scala/Haskell'е. «Дададададада там есть регулярные выражения!!!!одинодинодин»
при этом намеренно заменяя общее понятие «сопоставление с образцом» узкой, малой его частью — регулярными выражениями.
A>Ничего подобного. Похоже, ты спорил сам с собой. Бывает.
Ой да ну. Из цитаты выше:
Ещё раз, регулярные выражения и есть сопоставление с образцом, а не что-то в дополнение к нему.
Регулярные выражения есть всего лишь часть общего понятия «сопоставление с образцом». То есть {regexp < pattern matching, regexp ⊆ pattern matching }, а ты упорно настаиваешь на том, что regexp === pattern matching.
В JS есть регулярные выражения, но в JS нет сопоставления с образцом:
— в его общем понятии (есть только часть)
— в том виде, в котором его подразумевал WolfHound
Здравствуйте, Mamut, Вы писали:
M>Это ли не звиздец?
То есть всё таки нет в JavaScript сопоставления с образцом? (:
M>Тебе сто раз сказали, что именно мы имеем в виду, а ты продолжал упираться рогом в регулярные выражения. Хотя уже тут
WolfHound даже бдизко не упоминал их. Ты прикопался к термину, будучи уверенным, что раз в языке есть часть чего-то общего (регулярки), то в языке есть и общее (сопоставление с образцом в целом)?
Я этого не утверждал.
M>Тебя спросили (и потом пятьдесят раз уточняли): есть ли в JS сопоставление с образцом в таком же виде, в каком оно есть в Nemerle/Erlang'е/Scala/Haskell'е. «Дададададада там есть регулярные выражения!!!!одинодинодин»
Я этого не говорил.
A>>Ничего подобного. Похоже, ты спорил сам с собой. Бывает. M>Ой да ну. Из цитаты выше: M>
M>Ещё раз, регулярные выражения и есть сопоставление с образцом, а не что-то в дополнение к нему.
Регулярные выражения — не сопоставление с образцом?
M>Регулярные выражения есть всего лишь часть общего понятия «сопоставление с образцом». То есть {regexp < pattern matching, regexp ⊆ pattern matching }, а ты упорно настаиваешь на том, что regexp === pattern matching.
Я на этом не настаивал.
M>В JS есть регулярные выражения, но в JS нет сопоставления с образцом: M>- в его общем понятии (есть только часть) M>- в том виде, в котором его подразумевал WolfHound
Продолжаешь спорить сам с собой? Пытаешься показать, что лучше меня знаешь, что я утверждал?
Здравствуйте, WolfHound, Вы писали:
N>>Не вижу причин присобачивать к динамическому языку костыли в виде системы проверки типов. Тут всего лишь другой подход — у него есть свои плюсы и минусы — так же как и у статически типизированных языков. Если смотреть с точки зрения C#/Java-программиста — то да, без проверки типов жить невозможно. WH>Назови хоть один минус статической типизации.
Да нет у нее минусов — не о том речь. Это всего лишь другой подход — тут вопрос типа "что лучше — автомобиль или мотоцикл?".
И у того, и у другого есть свои плюсы и свои минусы. Разные инструменты, разные задачи.
Про то я и хочу сказать — не понимаю, зачем приписывать некие "минусы" динамически типизированным языкам.
N>>А вот мне с точки зрения любителя функциональных и динамических языков непонятно, как можно жить без возможности pattern matching'а и добавления методов в рантайме.
WH>Зачем добавлять метода в рантайм?
Monkey patch.
WH>Где ты видел pattern matching в жибаскрипте?
В данном случае это был просто пример — видел и применял в функциональном Erlang'е.
Я не использую Java/C#/C++/etc. — и не понимаю, для чего мне статическая типизация, когда есть динамическая.
Вы не используете JavaScript/Python/Ruby — и не понимаете, для чего вам динамическая типизация, когда есть статическая.
N>>Каюсь, про приближение к gcc, конечно, преувеличил. И я не уточнил — приближается к gcc производительность в определенных задачах, за счет JIT компиляции. WH>Она приближается _только_ там где код фактически статически типизированный.
По-моему, в этом случае типизация совсем не причем. Lisp — один из наиболее динамичных языков, однако его реализация SBCL по скорости идет на равне с Java, а местами ее даже уделывает.
Здравствуйте, nbaksalyar, Вы писали:
N>Про то я и хочу сказать — не понимаю, зачем приписывать некие "минусы" динамически типизированным языкам.
Да никто ничего не приписывает.
Тормозит? Да!
Ошибки ловит? Нет!
Полноценную навигацию и рефакторинг сделать можно? Нет!
Что дает? Ничего!
N>Monkey patch. http://en.wikipedia.org/wiki/Monkey_patch#Pitfalls
N>Я не использую Java/C#/C++/etc. — и не понимаю, для чего мне статическая типизация, когда есть динамическая.
Для скорости, надежности, нормальной IDE,...
N>Вы не используете JavaScript/Python/Ruby — и не понимаете, для чего вам динамическая типизация, когда есть статическая.
Я давно проанализировал все эти языки и понял что от динамики одна головная боль и никакого толка.
N>По-моему, в этом случае типизация совсем не причем. Lisp — один из наиболее динамичных языков, однако его реализация SBCL по скорости идет на равне с Java, а местами ее даже уделывает.
Непонимание матчасти детектед.
Послушай, как мужики сделали V8 быстрым. http://www.youtube.com/watch?v=FrufJFBSoQY
Первое что они сделали, это начали строить классы, чтобы к полям объекта можно было обращаться по индексу.
А сделать это можно только в тех случаях, когда код фактически статически типизирован.
Ибо если типы будут постоянно меняться эта магия только тормозов добавит.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, nbaksalyar, Вы писали:
N>>Про то я и хочу сказать — не понимаю, зачем приписывать некие "минусы" динамически типизированным языкам. WH>Да никто ничего не приписывает. WH>Тормозит? Да! WH>Ошибки ловит? Нет! WH>Полноценную навигацию и рефакторинг сделать можно? Нет! WH>Что дает? Ничего!
+100
я для себя только один юз-кейс нашел — когда требуется ввод логики от конечного пользователя:
во-первых проще обработать все возможные ошибки, чем объяснить не-программистам что вместо (a + b) надо писать (a + (int)b)
во-вторых приходится делать всякие контекстно-зависмые подстановки: опять же например
sum(Order.Lines.Amount)
бизнес пользователю понятно, а Order.Lines.Sum(line => (double)line.Amount) уже не очень.
Здравствуйте, WolfHound, Вы писали:
N>>Про то я и хочу сказать — не понимаю, зачем приписывать некие "минусы" динамически типизированным языкам.
WH>Да никто ничего не приписывает.
По-моему, спор "динамические VS статические языки" изначально обречен.
И те, и другие хороши — нет смысла доказывать, что молоток лучше топора.
Но все же попробую ответить на ваши аргументы:
WH>Тормозит? Да!
Да.
Тот же Erlang можно вполне назвать динамическим языком. Стоит ли напоминать о надежности правильно написанных на нем программ?
WH>Полноценную навигацию и рефакторинг сделать можно? Нет!
Ну и что? Так я могу раз в десять больше способов отстрелить себе ногу в статически типизированном C++ найти.
Но это будет говорить лишь о том, что отстреливать себе ногу не нужно, а нужно писать код с умом и осторожностью.
Обратите внимание на первый же абзац: "carelessly written or poorly documented monkey patches can lead to problems".
N>>Я не использую Java/C#/C++/etc. — и не понимаю, для чего мне статическая типизация, когда есть динамическая. WH>Для скорости, надежности, нормальной IDE,...
Нормальных, даже отличных IDE в достатке — JetBrains WebStorm/RubyMine/PyCharm, Eclipse, NetBeans.
Для меня же нормальная IDE это REPL + Vim или Emacs.
Про скорость и надежность выше.
N>>Вы не используете JavaScript/Python/Ruby — и не понимаете, для чего вам динамическая типизация, когда есть статическая. WH>Я давно проанализировал все эти языки и понял что от динамики одна головная боль и никакого толка.
"Я давно проанализировал все эти языки и понял что от статики одна головная боль и никакого толка".
Так мы еще долго сможем спорить.
N>>По-моему, в этом случае типизация совсем не причем. Lisp — один из наиболее динамичных языков, однако его реализация SBCL по скорости идет на равне с Java, а местами ее даже уделывает.
WH>Непонимание матчасти детектед.