Re[9]: Являются ли функции в erlang pure?
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.01.09 13:03
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>Здравствуйте, Курилка, Вы писали:


К>>Ну скажи как твоя только одна монада будет (цитирую изначальную проблему, которую я высказал) "контролировать чистоту для языка"?


BZ>я гнева вашего никак не растолкую...


BZ>самое простое — запрет на вызов процедур (имеющих побочные эффекты) из функций. и всё. даже никаких спец. синт. конструкций не понадобится


Дак собственно к этому я и вёл, задавал-то я вопрос по поводу контроля, а не по поводу синтаксиса.
Ну логично, что если поделить функции на чистые/грязные, то проконтролировать несложно.
Re[8]: Являются ли функции в erlang pure?
От: palm mute  
Дата: 23.01.09 13:05
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Чувствую полноценного ответа ожидать не приходится...

К>Ну скажи как твоя только одна монада будет (цитирую изначальную проблему, которую я высказал) "контролировать чистоту для языка"?

Можно ввести новый тип значений — действия.
При выполнении блока "do { x <- expr1; expr2(x) }" интерпретатор проверяет (в рантайме) что expr1 и expr2(x) возвращают действия, точно так же как при вычислении выражения "e1 + e2" он проверяет, что e1 и e2 возвращают числа, вполне в духе динамических языков. Этот вариант реализован в интерпретаторе в сообщении выше.

Можно было пойти чуть дальше и сделать так, что грязная программа будет просто синтаксически некорректной, в моем интерпретаторе для этого нужно ввести понятие процедуры с аргументами.
Re[8]: proof of concept (очередной игрушечный интерпретатор)
От: palm mute  
Дата: 23.01.09 13:12
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Клёва, только контроля нету

Ну почему же нету — есть, но он в рантайме. Есть важное различие между отсутствием контроля и контролем в рантайме — в первом случае ты можешь написать программу, которая будет использовать функции с побочными эффектами и делать что-то полезное, во втором случае программа будет падать, и программист буде вынужден ее переписать в чистом стиле.

К>Хотя прикрутить, конечно можно

Ну если к текущему варианту прикрутить контроль, это получится некая вырожденная система типов, и язык будет уже не совсем динамическим. Но, как я говорил, осталось сделать полшага, чтобы грязные программы обнаруживались парсером как синтаксические ошибки.
Re[9]: Являются ли функции в erlang pure?
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.01.09 13:15
Оценка:
Здравствуйте, palm mute, Вы писали:

PM>Здравствуйте, Курилка, Вы писали:


К>>Чувствую полноценного ответа ожидать не приходится...

К>>Ну скажи как твоя только одна монада будет (цитирую изначальную проблему, которую я высказал) "контролировать чистоту для языка"?

PM>Можно ввести новый тип значений — действия.

PM>При выполнении блока "do { x <- expr1; expr2(x) }" интерпретатор проверяет (в рантайме) что expr1 и expr2(x) возвращают действия, точно так же как при вычислении выражения "e1 + e2" он проверяет, что e1 и e2 возвращают числа, вполне в духе динамических языков. Этот вариант реализован в интерпретаторе в сообщении выше.

PM>Можно было пойти чуть дальше и сделать так, что грязная программа будет просто синтаксически некорректной, в моем интерпретаторе для этого нужно ввести понятие процедуры с аргументами.


А в реальности не знаешь, кто-нибудь таким извратом занимался?
Я вот только недоделанный (вроде) fun вспомнил.
Re[9]: proof of concept (очередной игрушечный интерпретатор)
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.01.09 13:18
Оценка:
Здравствуйте, palm mute, Вы писали:

PM>Здравствуйте, Курилка, Вы писали:


К>>Клёва, только контроля нету

PM>Ну почему же нету — есть, но он в рантайме. Есть важное различие между отсутствием контроля и контролем в рантайме — в первом случае ты можешь написать программу, которая будет использовать функции с побочными эффектами и делать что-то полезное, во втором случае программа будет падать, и программист буде вынужден ее переписать в чистом стиле.

Наверное я слепой, покажи где именно твой контроль?
Плюс процедуры (они же грязные функции) определять разве можно?

К>>Хотя прикрутить, конечно можно

PM>Ну если к текущему варианту прикрутить контроль, это получится некая вырожденная система типов, и язык будет уже не совсем динамическим. Но, как я говорил, осталось сделать полшага, чтобы грязные программы обнаруживались парсером как синтаксические ошибки.
Я про контроль в рантайме имел в виду, конечно же.
Re[9]: proof of concept (очередной игрушечный интерпретатор)
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.01.09 13:20
Оценка:
Здравствуйте, palm mute, Вы писали:

PM>Здравствуйте, Курилка, Вы писали:


К>>Клёва, только контроля нету

PM>Ну почему же нету — есть, но он в рантайме. Есть важное различие между отсутствием контроля и контролем в рантайме — в первом случае ты можешь написать программу, которая будет использовать функции с побочными эффектами и делать что-то полезное, во втором случае программа будет падать, и программист буде вынужден ее переписать в чистом стиле.

посылаю седеющую голову пеплом — просмотрел
Re[10]: proof of concept (очередной игрушечный интерпретатор
От: palm mute  
Дата: 23.01.09 13:20
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Наверное я слепой, покажи где именно твой контроль?

К>Плюс процедуры (они же грязные функции) определять разве можно?
Ты "тесты" в конце видел? Там выражение print(action(42) + 5) падает с ошибкой.
Re[11]: proof of concept (очередной игрушечный интерпретатор
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.01.09 13:21
Оценка:
Здравствуйте, palm mute, Вы писали:

PM>Здравствуйте, Курилка, Вы писали:


К>>Наверное я слепой, покажи где именно твой контроль?

К>>Плюс процедуры (они же грязные функции) определять разве можно?
PM>Ты "тесты" в конце видел? Там выражение print(action(42) + 5) падает с ошибкой.

Да уже нашёл, сссорри
Re[10]: Являются ли функции в erlang pure?
От: palm mute  
Дата: 23.01.09 13:27
Оценка:
Здравствуйте, Курилка, Вы писали:

К>А в реальности не знаешь, кто-нибудь таким извратом занимался?

Не знаю, не думаю, что это кому-нибудь нужно. Как я понимаю, "динамики" не признают статического контроля вообще (не считая проверки синтаксиса), потому зачем им такая вырожденная форма контроля — ума не приложу. С другой стороны, есть же динамически типизированные DSL вообще без ввода/вывода, там и контролировать ничего не надо.
Re[6]: Являются ли функции в erlang pure?
От: thesz Россия http://thesz.livejournal.com
Дата: 23.01.09 14:30
Оценка: +1
PM>>>>Теоретически можно, если для операций с побочными эффектами ввести специальные синтаксические конструкции.
К>>>Т.е. есть какие-то примеры подобного?
T>>Haskell, do notation.
К>Это ответ на "как-то контролировать чистоту для языка с динамической типизацией"?

Да.

К>Или я что-то не понял или одно из двух...


Да.

Отложи проверку типов в Хаскеле до выполнения программы, получишь то, что нужно. "Ввод-вывод может производиться только в аргументах функции >>=, или в рамках do-выражения."
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[9]: Являются ли функции в erlang pure?
От: thesz Россия http://thesz.livejournal.com
Дата: 23.01.09 14:33
Оценка: +1
К>>Ну скажи как твоя только одна монада будет (цитирую изначальную проблему, которую я высказал) "контролировать чистоту для языка"?
BZ>самое простое — запрет на вызов процедур (имеющих побочные эффекты) из функций. и всё. даже никаких спец. синт. конструкций не понадобится

Да! Д-да! Р-рок! (С) B&B

Запретить! Вызов! Процедур!

Синтаксиса! Не НАДО!!!

Если серьёзно, то твоё запрещение и реализуется через синтаксическое ограничение.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[10]: Являются ли функции в erlang pure?
От: thesz Россия http://thesz.livejournal.com
Дата: 23.01.09 14:35
Оценка:
К>А в реальности не знаешь, кто-нибудь таким извратом занимался?
К>Я вот только недоделанный (вроде) fun вспомнил.

Этот?

Только им мало, кто пользуется.

Адептам динамики он не нравится, слишком ограничивающий.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[9]: proof of concept (очередной игрушечный интерпретатор)
От: thesz Россия http://thesz.livejournal.com
Дата: 23.01.09 14:40
Оценка: 7 (1)
К>>Хотя прикрутить, конечно можно
PM>Ну если к текущему варианту прикрутить контроль, это получится некая вырожденная система типов, и язык будет уже не совсем динамическим. Но, как я говорил, осталось сделать полшага, чтобы грязные программы обнаруживались парсером как синтаксические ошибки.

Проверку типов можно реализовать в виде двухуровневых грамматик (они же грамматики ван Вийнгаардена). И встроить в разборщик.

Вроде, всего лишь разбор по синтаксису, а типы тоже проверяются.

Товарищи из динамического сообщества не скоро поймут, в чём их обманули.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[11]: Являются ли функции в erlang pure?
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.01.09 14:42
Оценка:
Здравствуйте, thesz, Вы писали:

К>>А в реальности не знаешь, кто-нибудь таким извратом занимался?

К>>Я вот только недоделанный (вроде) fun вспомнил.

T>Этот?


Т. е. изобрели какой-то ключик, отключающий проверку типов в хаскеле до рантайма?
Если нет, то к чему твоя реплика, ибо речь шла о динамической типизации?
Re[10]: proof of concept (очередной игрушечный интерпретатор
От: BulatZiganshin  
Дата: 23.01.09 16:33
Оценка:
Здравствуйте, thesz, Вы писали:

T>Проверку типов можно реализовать в виде двухуровневых грамматик (они же грамматики ван Вийнгаардена). И встроить в разборщик.


вывод типов примерно так и выглядит. тот же q-lang — скриптовый язык, но основанный на inference вместо динамики. да и сам haskell хорош в качестве скриптового языка
Люди, я люблю вас! Будьте бдительны!!!
Re[10]: Являются ли функции в erlang pure?
От: BulatZiganshin  
Дата: 23.01.09 16:34
Оценка:
Здравствуйте, thesz, Вы писали:

BZ>>самое простое — запрет на вызов процедур (имеющих побочные эффекты) из функций. и всё. даже никаких спец. синт. конструкций не понадобится


T>Если серьёзно, то твоё запрещение и реализуется через синтаксическое ограничение.


в конечном счёте ты прав, но как бы никакого нового синтаксиса не нужно
Люди, я люблю вас! Будьте бдительны!!!
Re[7]: Являются ли функции в erlang pure?
От: BulatZiganshin  
Дата: 23.01.09 16:35
Оценка:
Здравствуйте, thesz, Вы писали:

T>Отложи проверку типов в Хаскеле до выполнения программы, получишь то, что нужно. "Ввод-вывод может производиться только в аргументах функции >>=, или в рамках do-выражения."


в хаскеле не проверка, а вывод типов. и тип результата, к примеру, может определять тип аргументов функции
Люди, я люблю вас! Будьте бдительны!!!
Re[8]: Являются ли функции в erlang pure?
От: palm mute  
Дата: 23.01.09 16:38
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>в хаскеле не проверка

<буквоед mode>
не всегда, расширения GHC сплошь и рядом требуют аннотаций
</буквоед mode>
Re[7]: Являются ли функции в erlang pure?
От: Аноним  
Дата: 23.01.09 18:12
Оценка: 7 (1)
К>> Do нотация требует монаду
PM>Это в Хаскеле она требует монаду, т.к. рассахаривается в вызовы перегруженных функций (>>=) и return. Вполне можно представить себе язык, поддерживающий только одну монаду — IO — и транслирующий do-нотацию соответствующим образом.

В Helium — такой хаскеллоподобный язык — именно так и есть.
Re[8]: Являются ли функции в erlang pure?
От: thesz Россия http://thesz.livejournal.com
Дата: 23.01.09 22:56
Оценка: 1 (1)
T>>Отложи проверку типов в Хаскеле до выполнения программы, получишь то, что нужно. "Ввод-вывод может производиться только в аргументах функции >>=, или в рамках do-выражения."
BZ>в хаскеле не проверка, а вывод типов. и тип результата, к примеру, может определять тип аргументов функции

Это то, что происходит в compile time.

Скажи, неужели ты не можешь вообразить алгоритм, что работает в run-time и производит проверку типов?
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.