Здравствуйте, Воронков Василий, Вы писали:
ВВ>Теперь — с точностью до наоборот. Предкомпиляция по-прежнему доступна. Но вот рекламируется теперь именно динамическая компиляция как тот же самый "тру" путь. И именно она является "моделью по умолчанию", которую поддерживает студия. Если она вообще еще поддерживает старый коде бехаинд с предкомпиляцией — в чем я сомневаюсь, если честно.
Во-первых, доступен по-прежнему. Во-вторых, логика теперь уходит со "скриптов" страниц в предкомпиленные либы. А оставшееся и компилить смысла особого не имеет, ибо компиляция — это был способ защиты кода. Защитить разметку-то не получится по-любому.
Re[24]: почему в вебе распространены именно динамические язы
Здравствуйте, WolfHound, Вы писали:
FR>>Тотальная полиморфность. WH>Зачем?
Например когда старый код должен работать с новыми данными.
В том же прототипировании.
FR>>Упрощение и ускорение прототипирования за счет отказа от фиксированных типов данных. WH>В языках с выводом типов такой проблемы нет.
Есть, я сейчас одновременно пишу на динамике и очень жесткой статике, прототипирование в динамике заметно быстрее и удобней.
Притом питон менее выразительный язык чем OCaml.
WH>А учитывая что статическая типизация помогает рефакторить то кто кого уделает далеко не так однозначено как тебе кажется.
При прототипировании основной вид рефакторинга выкидывание неудачного кода.
FR>>Возможность горячей перезагрузки даже небольших кусков кода. WH>Ну это я и статику так скомпилировать могу. WH>Накладных расходов один jmp на вызов функции.
Наверно ты можешь и левой пяткой правое ухо чесать, но пока никто так в распространенных статических языках не делает можем
считать что этого нет.
FR>>Гораздо большая гибкость в кодогенерации, возможность делать ее сразу в целевом языке или высокоуровневом AST WH>Немерле.
Не совсем, метапрограммирование не равно кодогенерации.
Хотя тут да Немерли вполне годен.
FR>>Более гибкое метапрограммирование (lisp) позволяющее писать код который пишет код который ... WH>Ты блин не поверишь...
Немерле этого не позволяет, я же специально повторил несколько раз.
FR>>Доступность блоков компилятора и интерпретатора в рантайме позволяющее делать управляемую кастомную интерпретацию. WH>И снова немерле.
Здравствуйте, vdimas, Вы писали:
ВВ>>Теперь — с точностью до наоборот. Предкомпиляция по-прежнему доступна. Но вот рекламируется теперь именно динамическая компиляция как тот же самый "тру" путь. И именно она является "моделью по умолчанию", которую поддерживает студия. Если она вообще еще поддерживает старый коде бехаинд с предкомпиляцией — в чем я сомневаюсь, если честно. V>Во-первых, доступен по-прежнему. Во-вторых, логика теперь уходит со "скриптов" страниц в предкомпиленные либы. А оставшееся и компилить смысла особого не имеет, ибо компиляция — это был способ защиты кода. Защитить разметку-то не получится по-любому.
Защиты от кого? Все ж на сервере лежит. К тому же компиляция в шитый код — это какая-то странная защита. Достал рефлектор, посмотрел.
Re[25]: почему в вебе распространены именно динамические язы
Здравствуйте, FR, Вы писали:
FR>>>Более гибкое метапрограммирование (lisp) позволяющее писать код который пишет код который ... WH>>Ты блин не поверишь...
FR>Немерле этого не позволяет, я же специально повторил несколько раз.
Покажи плз задачу где нужно писать код который пишет код (макрос высшего порядка)?
FR>>>Доступность блоков компилятора и интерпретатора в рантайме позволяющее делать управляемую кастомную интерпретацию. WH>>И снова немерле.
FR>Тоже нет, Немерли не умеет интерпретировать байт код и даже не умеет его инструментировать как некторые тулзы для явы, FR>это на нем конечно можно сделать, но фактически вручную написав полноценный интерпретатор.
ВВ>Защиты от кого? Все ж на сервере лежит. К тому же компиляция в шитый код — это какая-то странная защита. Достал рефлектор, посмотрел.
Дык, от самого себя не защищают. Защищают коробочные или заказные продукты. И после хорошего обфускатора дешевле будет с 0-ля самому написать, чем пытаться восстанавливать.
Re[12]: почему в вебе распространены именно динамические язы
Здравствуйте, VladD2, Вы писали:
L>>Да не, не стоит, ты уже достаточно продемонстрировал степень владения предметом.
VD>С удовольствием выслушаю развенчание моих слов.
Просто имелось ввиду, что для средних расчетов на Матлабе, время проца, затрачиваемое на собственно интерпретацию скрипта, обычно ничтожно мало. Все базовые операции с матрицами и куча прикладных, включая АПИ LAPACK, реализованы рантаймом в максимально оптимизированном виде, и скрипт тут является эдаким высокоуровневым клеем.
Даже способ задания циклов прямо провоцирует на использование векторных (то бишь пакетных, в сравнении с пошаговой итерацией) вычислений.
Банальный пример подсчет суммы ряда:
задается вектор индексов 1:N, затем применяется некая формула к этому вектору, получая за один вызов другой вектор, где каждый член — это i-тый элемент последовательности. А затем вызов sum() для элементов вектора. Итого, даже для N=мильон, в скрипте у нас всего 3 операции (если встроенные ф-ии вызывались).
Ну и, самое главное, конкурентов на сегодня матлабу нет и близко, учитывая все плагины к нему, как расчетные, так и моделирующие (Symulink), плагины для переноса вычислений на GPU (без какого-либо изменения уже работающего кода). В общем, ближайшие конкуренты отстают даже не на 10 и не на 20 лет, а навсегда. Поэтому ирония насчет калькулятора неуместна.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, vdimas, Вы писали:
V>>Более плавный переход из процедурного стиля, наверно? V>>Можно вообще начать писать в процедурном стиле на любом ФЯ, осваивая лямбды постепенно.
ВВ>Я не понимаю, что мешает писать в процедурном стиле на дотнете.
Объявление и вызов "свободной" процедуры переусложнены. Это нужен некий класс-контейнер, в нем не забыть написать public static. Затем вызвать процедуру через упоминание контейнера.. бр-р. Откуда программист "процедурного стиля" должен знать, что означает static? Крайне неудачный keyword.
ВВ>А VB.NET, кстати, умеет и динамическую типизацию.
Этот язык вообще недооценен. Покрывая по возможностям C#, имеет еще кучу сверху: аргументы по-молчанию, именованные аргументы, динамику в "человеческом" синтаксисе, мега-конструкцию with, совместимость делегатов с одинаковой сигнатурой (и даже совместимость делегатов с "похожей", т.е. приводимой сигнатурой), более удобная и естественная конверсия типов в строку и обратно, и т.д. и т.п. Все это впихивают и в C# в последних версиях, но в VB оно было всегда.
От самого истинного Basic там только название осталось. В остальном это мощный современный ЯП, который постоянно умудряется быть значительно впереди С#. А название этого языка портит ему карму.
Re[14]: почему в вебе распространены именно динамические язы
Здравствуйте, vdimas, Вы писали:
V>Объявление и вызов "свободной" процедуры переусложнены. Это нужен некий класс-контейнер, в нем не забыть написать public static. Затем вызвать процедуру через упоминание контейнера.. бр-р. Откуда программист "процедурного стиля" должен знать, что означает static? Крайне неудачный keyword.
ASP.NET поддерживает программирование в ASP-стиле. Никаких классов можно вообще не писать. Даже методы можно не писать.
Re[25]: почему в вебе распространены именно динамические язы
Здравствуйте, FR, Вы писали:
FR>Например когда старый код должен работать с новыми данными. FR>В том же прототипировании.
Если код должен работать с разными типами то есть генерики.
Если просто с другим типом то вывод типов наше все.
В чем проблема то?
FR>Есть, я сейчас одновременно пишу на динамике и очень жесткой статике, прототипирование в динамике заметно быстрее и удобней. FR>Притом питон менее выразительный язык чем OCaml.
Уж не знаю что ты там такое прототипируешь но я сейчас сам пишу то что никто раньше не писал. http://code.google.com/p/nemerle/source/browse/#svn/nemerle/trunk/snippets/peg-parser
Одно сплошное прототипирование.
WH>>А учитывая что статическая типизация помогает рефакторить то кто кого уделает далеко не так однозначено как тебе кажется. FR>При прототипировании основной вид рефакторинга выкидывание неудачного кода.
У тебя.
FR>Наверно ты можешь и левой пяткой правое ухо чесать, но пока никто так в распространенных статических языках не делает можем считать что этого нет.
VC++ умеет edit&continue
Так что есть.
FR>Не совсем, метапрограммирование не равно кодогенерации.
Угу. Метапрограммирование гораздо лучше чем возьня с текстом.
FR>Немерле этого не позволяет, я же специально повторил несколько раз.
Я могу при разработке макроса использовать макросы.
Я могу в генерируемом коде использовать макросы.
Я могу макросом сгенерировать макрос. Хотя не понятно зачем это может быть нужно.
FR>Тоже нет, Немерли не умеет интерпретировать байт код и даже не умеет его инструментировать как некторые тулзы для явы, это на нем конечно можно сделать, но фактически вручную написав полноценный интерпретатор.
Инструментирование байткода это для лузеров которые не могут трансформировать АСТ.
FR>Тот же питон из коробки позволяет инструментировать как байт код так и AST и делать, как такие примитивные вещи FR>http://code.activestate.com/recipes/286134-safe-expression-evaluation/
Не проблема ни разу.
FR>http://codespeak.net/pypy/dist/pypy/doc/theory.html#abstract-interpretation
В статически типизированном языке это не нужно.
FR>>>Ну и конечно самомодифицирующийся код WH>>Зачем?
FR>Языки не позволяющие писать самомодифицирующийся код ущербны
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[13]: почему в вебе распространены именно динамические язы
Здравствуйте, vdimas, Вы писали:
L>>>Да не, не стоит, ты уже достаточно продемонстрировал степень владения предметом.
VD>>С удовольствием выслушаю развенчание моих слов.
V>Просто имелось ввиду, что для средних расчетов на Матлабе, время проца, затрачиваемое на собственно интерпретацию скрипта, обычно ничтожно мало. Все базовые операции с матрицами и куча прикладных, включая АПИ LAPACK, реализованы рантаймом в максимально оптимизированном виде, и скрипт тут является эдаким высокоуровневым клеем.
V>Даже способ задания циклов прямо провоцирует на использование векторных (то бишь пакетных, в сравнении с пошаговой итерацией) вычислений.
V>Банальный пример подсчет суммы ряда: V>задается вектор индексов 1:N, затем применяется некая формула к этому вектору.... Поэтому ирония насчет калькулятора неуместна.
Да более чем уместна. Во-первых не всегда обойтись встроенными функциями, а не встроенные будут вызываться для каждой ячейки. Во-вторых, не все вычисления связанны с огромными массивами. В третьих, использование оптимизированных библиотек (в том числе перекладывающих вычисление на GPU) никто не запрещает в любом языке. Дон Реба, как раз и писал о том, что он так и поступает.
V>Обязательно прочти хотя бы первые несколько строк описания одного из скромных пакетов: http://www.mathworks.com/help/toolbox/polyspace/c_ug/brzsbhd-1.html#bsoy0ma-1
И что я тут могу увидеть что как-то влияло бы на мои слова?
Вот Москаль (один из создателей Немерла) сейчас работает над VCC (верифицируемым компилятором С) который пишется в основном на F# (т.е. управляемом коде) и занимается проверкой корректности многопоточных С-программ. VCC использовался при разработке виртуализации в винде, например, то есть реально используется на практике.
И что мы этим доказали? Разве что то, что одни и те же задачи можно решать разными средствами.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: почему в вебе распространены именно динамические язы
Здравствуйте, VladD2, Вы писали:
VD>Да более чем уместна. Во-первых не всегда обойтись встроенными функциями, а не встроенные будут вызываться для каждой ячейки.
Что характерно, если своя ф-ия представляет из себя просто арифметическое выражение (формулу), работает ну очень быстро.
VD>Во-вторых, не все вычисления связанны с огромными массивами.
А где данных немного, там эффективность и обсуждать незачем.
Re[26]: почему в вебе распространены именно динамические язы
Здравствуйте, hardcase, Вы писали:
FR>>Немерле этого не позволяет, я же специально повторил несколько раз.
H>Покажи плз задачу где нужно писать код который пишет код (макрос высшего порядка)?
Я вообще с трудом могу показать задачу где вообще необходимы макросы (исключая языки с примитивным синтаксисом типа лиспа и форта),
даже более того считаю что синтаксического препроцессора типа Camlp4
для статических языков и метаклассов для динамических более чем достаточно для метапрограммирования в высокоуровневых
языках.
FR>>Тоже нет, Немерли не умеет интерпретировать байт код и даже не умеет его инструментировать как некторые тулзы для явы, FR>>это на нем конечно можно сделать, но фактически вручную написав полноценный интерпретатор.
H>Опять же, какие задачи решаются столь изощренным способом?
Здравствуйте, WolfHound, Вы писали:
FR>>Например когда старый код должен работать с новыми данными. FR>>В том же прототипировании. WH>Если код должен работать с разными типами то есть генерики. WH>Если просто с другим типом то вывод типов наше все. WH>В чем проблема то?
У меня сомнения в том что ты придумал PEG парсер.
FR>>При прототипировании основной вид рефакторинга выкидывание неудачного кода. WH>У тебя.
Не только.
FR>>Наверно ты можешь и левой пяткой правое ухо чесать, но пока никто так в распространенных статических языках не делает можем считать что этого нет. WH>VC++ умеет edit&continue WH>Так что есть.
Не используется в продакшане.
FR>>Немерле этого не позволяет, я же специально повторил несколько раз. WH>Я могу при разработке макроса использовать макросы. WH>Я могу в генерируемом коде использовать макросы. WH>Я могу макросом сгенерировать макрос. Хотя не понятно зачем это может быть нужно.
Фигня ваш немерли
FR>>Тоже нет, Немерли не умеет интерпретировать байт код и даже не умеет его инструментировать как некторые тулзы для явы, это на нем конечно можно сделать, но фактически вручную написав полноценный интерпретатор. WH>Инструментирование байткода это для лузеров которые не могут трансформировать АСТ.
Здравствуйте, VladD2, Вы писали:
VD>Да более чем уместна. Во-первых не всегда обойтись встроенными функциями, а не встроенные будут вызываться для каждой ячейки.
Не будут. Вся прелесть Матлаба заключена в его названии — "Матричная лаборатория". В 99% случаев все операции над матрицами делаются в одну строку без циклов.
VD>Во-вторых, не все вычисления связанны с огромными массивами.
Практически все. Сейчас такой период развития вычислительной техники, который позволяет строить громоздкие математические модели реальных процессов. Скажем, классификация пикселя изображения в видеопотоке: он относится к переднему плану или часть фона. Раньше использовалась простая статистическая модель — нормальное распределение яркости пикселя. Сейчас же создают смесь нормальных распределений для каждого цветового канала пикселя. Или скрытые марковские модели используют. Итого даже для маленьких разрешений 352х288 объёмы данных возрастают с 200 тысяч элементов до 2 миллионов. То есть модели сложность практически не изменилась, а объёмы данных — эти самые матрицы растут или в размерах, или в количествах.
И так во многих областях. У меня есть знакомые занимающиеся речью, статистикой смертности и другими математическими проблемами. Переходят на Матлаб и радуются ускорению.
VD>В третьих, использование оптимизированных библиотек (в том числе перекладывающих вычисление на GPU) никто не запрещает в любом языке. Дон Реба, как раз и писал о том, что он так и поступает.
На Матлабе можно автоматически распараллелить как на кластер, так и на GPU без трудозатрат пользователя пакета. Вообще говоря, только монстры типа адобовского фотошопа или 3D Max могут сравниться по качеству обеспечения пользователя таким халявным быстродействием.
Можно так сделать в других языках? Не во всех. Где-нибудь так сделано? Покажите!
Re[27]: почему в вебе распространены именно динамические язы
Здравствуйте, FR, Вы писали:
FR>Проблема в перекомпиляции.
Перекомпиляция это не проблема.
FR>У меня сомнения в том что ты придумал PEG парсер.
Дьявол как всегда в деталях.
Я делаю не просто PEG парсер, а парсер который может менять грамматику во время разбора.
При этом нужно не забывать о таких мелочах как сообщения об ошибках, востановление после ошибки с генерацией хоть какогото AST (нужно для интелисенса) и такой мелочи как скорость достаточная для того чтобы перепарсить весь фаил после каждого нажатия на кнопку.
И еще много разных мелочей.
WH>>VC++ умеет edit&continue WH>>Так что есть. FR>Не используется в продакшане.
Тем не менее доказывает тот факт что для статики жто возможно.
WH>>Инструментирование байткода это для лузеров которые не могут трансформировать АСТ. FR>Мягкое с теплым не надо сравнивать.
Да я и не сравниваю.
Нахрена вообще нужно байткод инструментировать?
WH>>Не проблема ни разу. FR>Не было бы у вас готового было бы проблемой.
Если бы да кабы...
FR>Жаль в ms об этом не знают http://www.google.ru/search?hl=ru&newwindow=1&client=opera&rls=ru&q=abstract+interpretation+site%3Amicrosoft.com&aq=f&aqi=&aql=&oq=&gs_rfai= и всунули эту гадость даже в реализацию своих Code Contracts
Ну да.
Code Contracts это костыль для тех кто не в состоянии сделать нормальную систему типов.
Они намного слабее чем type refinements и при этом не дают никаких гарантий.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: почему в вебе распространены именно динамические языки?
Только что Джо Армстронг подкинул дровишек в erlang-questions:
Date: Mon, 8 Nov 2010 11:16:40 +0100
From: Joe Armstrong <erlang@gmail.com>
Subject: Re: [erlang-questions] Re: Conceptual questions on key-value databases for RDBMs users
I agree — I'd go further. For most of what I want to do the weaker the type the better — even dynamic types are too structured. A lot of what I want can be done with unstructured text and full-text indexing (which has even less structure that a weak type)
I find that in all the applications I've programmed so far I want the following (In priority order)
0) Easy of setup
I'm lazy — but I don't want to struggle through hour long sessions of Googling for bug-fixes to get stuff working.
1) Key — Value lookup/retrieval
What I put in I can get out — the key is simple the Value can be very complex
2) Full text searches
I want to search strings for free text
3) Encapsulation
I like all the database in a single file — so I can send it in a message move it around etc.
4) Replication
I want stuff to be stored forever
5) Scalability
I want it to scale
[чисто эрланговые заморочки поскипаны]
Кто не заметил ключевых слов — even dynamic types are too structured.
The God is real, unless declared integer.
Re[31]: почему в вебе распространены именно динамические язы
Здравствуйте, Mamut, Вы писали:
M>>>Скачал IDEA для Java. В пяти попытках рефакторинга она мне предложила такой же ломающий рефакторинг. И это — на статистически типизированом языке, в котором это должно быть раз плюнуть, не? WH>>Сколько пользовался ReSharper'ом ни разу такого небыло.
M>Ага. Так оказывается не весь рефакторинг и не везде работает. А только некий определенный и только на некотором определенном языке. Ну сказочник ты, честное слово.
Оффоп.
Приведи описание одной или двух из этих пяти попыток. Наличие исходника-примера очень приветствуется.
Re[32]: почему в вебе распространены именно динамические язы
M>>>>Скачал IDEA для Java. В пяти попытках рефакторинга она мне предложила такой же ломающий рефакторинг. И это — на статистически типизированом языке, в котором это должно быть раз плюнуть, не? WH>>>Сколько пользовался ReSharper'ом ни разу такого небыло.
M>>Ага. Так оказывается не весь рефакторинг и не везде работает. А только некий определенный и только на некотором определенном языке. Ну сказочник ты, честное слово.
NGG>Оффоп.
NGG>Приведи описание одной или двух из этих пяти попыток. Наличие исходника-примера очень приветствуется.
Увы, к моменту описания попыток рефакторинг уже был две недели как совершен. Но как только вернусь на Java, постараюсь еще раз воспроизвести.
Здравствуйте, Mamut, Вы писали:
M>Увы, к моменту описания попыток рефакторинг уже был две недели как совершен. Но как только вернусь на Java, постараюсь еще раз воспроизвести.
Буду признателен
Re[36]: почему в вебе распространены именно динамические язы
Здравствуйте, FR, Вы писали:
K>>А что, в мейнстриме есть динамические языки кроме PHP? Ну, разве что, можно, с некоторой натяжкой, Питон посчитать.
FR>С некоторой натяжкой и руби можно посчитать.
С такой натяжкой можно посчитать любой. Я еще понимаю — перл.
FR>Раньше были кучи бейсиков, потом VB
Ничего не знаю о существовании динамических бейсиков. Будучи школьником, писал на ZX, Корвет(то же, что и GW) и Quick, точно знаю, что в Turbo была система типов идентичная паскалеской — так специально было сделано. Студентом что-то там автоматизировал в офисе на VBA, все это было просто смертельно статическим, ну если комовский вариант в Visual считать динамикой — так и C++ с Delphi тогда динамические. Для того, чтоб добавить в статический язык динамические фичи одного варианта мало — нужен какой-то аналог ExpandoObject с соотвествующей порцией сахара, как в четвертом шарпе.
FR>Smalltalk.
К сожалению, единственный динамический язык промышленного качества (ну, кроме Эрланга) так в мейнстрим и не попал. Хотя, может, и к счастью.
FR>Интерфейсы ничем динамике ни противоречат,
Проверка интерфейсов в компайл-тайм противоречит кардинально. Потому, что это по определению статика. А если проверка в рантайме — то такой интерфейс просто синтаксический сахар для ассерта и описаных мной выше чудес не обеспечивает.
FR>другой стороны в статике вполне живет безинтерфейсная структурная типизация
В статике и структурная типизация все вышеописаные чудеса обеспечит. Дело то не в интерфейсе, как частном случае контракта, а в проверке контрактов в компайл-тайм.
... << 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