Re[17]: Мнение: объектно-ориентированное программирование — катастрофа на трилли
От: B0FEE664  
Дата: 12.09.19 16:37
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>Параметры функций — это никакие не "инструкции". Или что, у функций не может быть параметров?


параметры у инструкций — это не переменные, а результаты работы других функций.

ARK>Функционального программирования не существует?

Сказать по вашему, так это императивного программирования не существует: память компьютера — это эмуляция ленты Машины Тьюринга, инструкция процессора — это программа на функциональном языке, поэтому, согласно вашим словам:

Новое состояние ленты передается в каждый последующий шаг алгоритма входным параметром. Тот, в свою очередь, конструирует очередное состояние и передает дальше.

все программы написаны на функциональном языке.
Ой, нет! Я же забыл про регистры процессора! Это в корне всё меняет!

ARK>Так вот, смоделировать машину Тьюринга в ФП можно передачей ленты через параметры. Это не императивное программирование, а значения параметров — не состояние программы.


Если данные записанные на ленте Машины Тьюринга не состояние программы, то что же тогда состояние программы?
И каждый день — без права на ошибку...
Re[17]: Мнение: объектно-ориентированное программирование — катастрофа на трилли
От: B0FEE664  
Дата: 12.09.19 16:46
Оценка:
Здравствуйте, samius, Вы писали:

BFE>>Представим, что у нас есть вот такая задача:

BFE>>написать программу, которая читает байты из канала для чтения и записывает их на устройство для записи. Условия следующие:
BFE>>- устройство для записи записывает 1 байт за секунду;
BFE>>- канал для чтения позволяет считать один байт за одну миллисекунду;
BFE>>- в канале для чтения есть буфер хранящий не более 5 байт;
BFE>>- данные в канал для чтения поступают неравномерно, но известно, что:
BFE>>-- в канал для чтения в секунду поступает не более 10 байт;
BFE>>-- в канал для чтения за час поступает не более 3600 байт.
S>Здесь нет слова "хранить". Внезапно, ничего хранить не надо.

BFE>>Можно эту задачу реализовать на функциональном языке программирования так, чтобы никакая часть реализации не содержала реализацию на императивном языке?

S>Не вопрос. Уж что-что, а байты перепихнуть из одного в другое через очередь... Одна оговорка. Уровень взаимодействия с устройством и каналом, видимо, останется за скобками.

Ну да, при функциональном подходе у вас есть функция read, функция write, допустим ещё функцию time, если она вам нужна, а вот очереди у вас нет.


ЗЫ (Я так подозреваю, что даже если допустить имплементацию стека вызовов функций на императивном языке, то всё равно решить задачу не получится)
И каждый день — без права на ошибку...
Re[13]: Мнение: объектно-ориентированное программирование — катастрофа на трилли
От: Sharov Россия  
Дата: 12.09.19 16:51
Оценка:
Здравствуйте, samius, Вы писали:

S>>Форматирование строки может быть разным, поэтому не одиноково.

S>Тогда это будет toString(int value, string format). Но причем тут полиморфизм?

С чего это будет так? Это будет toString(int value) и каждый тип будет по своему печать соотв. инф-ию, отсюда и полиморфизм. Интерфейс один, реализации разные.
Кодом людям нужно помогать!
Re[10]: Мнение: объектно-ориентированное программирование — катастрофа на трилли
От: Poopy Joe Бельгия  
Дата: 12.09.19 17:36
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Здравствуйте, Poopy Joe, Вы писали:


I>>>Мы можем моделировать разные вещи при помощи Integer. При этом тип будет HouseNumber, Identifier, Key, Index и тд. Соответсвенно типы разные, а какая унутре неонка — дело десятое.


PJ>>Все это никакого отношения к полиморфизму не имеет. samius правильно тебе говорит — полоиморфизм он про типы, по определению. А у тебя есть некая интерпретация данных.


I>Все это тривиальная прикладная задача на полиморфизм, а именно — надо написать функцию, которая обрабатывает данные разных типов. Вот это и есть определение полиморфизма.


Определение полиморфизма можешь прочитать в любом словаре, хоть на википедии. Нафига выдумывать какой-то новояз непонятно совершенно. У тебя задача не обработки разных типов, поскольку у тебя нет никаких типов, разработчик интерпретирует данные по своему желанию. Если ты это выдаешь за силу oop, то это вообще
Re[6]: Мнение: объектно-ориентированное программирование — катастрофа на триллио
От: Poopy Joe Бельгия  
Дата: 12.09.19 17:44
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>>>Я не большой эксперт чтобы говорить о type driven, потому что не щупал ручками. Поэтому говорить не могу хоть и подозреваю на аналогичные инструменты.

PJ>>Ты же сказал, что занимался ФП?!
GZ>А type driven — не свойство ФП насколько я его понял.
Нет, формально ничего не мешает его использовать на любом языке со строго типизацией. В реальности это настолько многословно и убого, что не имеет практического смысла. И наоборот, если используется ФЯ со строгой типизацией, то TDD просто идеально ложиться на язык. Все решение сводится к


PJ>>Это не круче, это те же яйца вид в профиль. Именованость не дает ничего от слова совсем.

GZ>Она дает читабельность. Особенно в условиях IDE.
Ничего оно не дает. Читабельность дают типы, потому что им можно верить. А что там за забором лежит непонятно, не проверив реализацию. Как, в принципе, и с любой функцией, если она не чистая.
Re[18]: Мнение: объектно-ориентированное программирование — катастрофа на трилли
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.09.19 17:48
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, samius, Вы писали:


S>>Не вопрос. Уж что-что, а байты перепихнуть из одного в другое через очередь... Одна оговорка. Уровень взаимодействия с устройством и каналом, видимо, останется за скобками.


BFE>Ну да, при функциональном подходе у вас есть функция read, функция write, допустим ещё функцию time, если она вам нужна, а вот очереди у вас нет.

С каких пор в фп нет очереди? Не, ну список есть, а очереди — нет?! Как так?


BFE>ЗЫ (Я так подозреваю, что даже если допустить имплементацию стека вызовов функций на императивном языке, то всё равно решить задачу не получится)

Есть веские причины подозревать? Кроме отрицания наличия очереди в фп, разумеется...
Re[18]: Мнение: объектно-ориентированное программирование — катастрофа на трилли
От: AlexRK  
Дата: 12.09.19 17:51
Оценка:
Здравствуйте, B0FEE664, Вы писали:

ARK>>Параметры функций — это никакие не "инструкции". Или что, у функций не может быть параметров?

BFE>параметры у инструкций — это не переменные, а результаты работы других функций.

Хорошо. Так можно ли вызвать одну функцию из другой и передать ей какие-нибудь данные? Это не противоречит основам функционального программирования?

BFE>Сказать по вашему, так это императивного программирования не существует: память компьютера — это эмуляция ленты Машины Тьюринга, инструкция процессора — это программа на функциональном языке, поэтому, согласно вашим словам:

BFE>

BFE>Новое состояние ленты передается в каждый последующий шаг алгоритма входным параметром. Тот, в свою очередь, конструирует очередное состояние и передает дальше.

BFE>все программы написаны на функциональном языке.

Почему же, в императивной программе состояние может храниться и извне функций.

ARK>>Так вот, смоделировать машину Тьюринга в ФП можно передачей ленты через параметры. Это не императивное программирование, а значения параметров — не состояние программы.

BFE>Если данные записанные на ленте Машины Тьюринга не состояние программы, то что же тогда состояние программы?

Смотря в каком смысле понимать этот термин. Это может быть срез памяти компьютера в некоторый момент времени. Или набор переменных, гарантированно существующих во время жизни программы. Или еще что-то.

Однако, ИМХО, абслютно очевидно, что ФП немыслимо без параметров функций. А, значит, через них можно передавать состояние.
Re[14]: Мнение: объектно-ориентированное программирование — катастрофа на трилли
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.09.19 17:53
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте, samius, Вы писали:


S>>>Форматирование строки может быть разным, поэтому не одиноково.

S>>Тогда это будет toString(int value, string format). Но причем тут полиморфизм?

S>С чего это будет так? Это будет toString(int value) и каждый тип будет по своему печать соотв. инф-ию, отсюда и полиморфизм. Интерфейс один, реализации разные.

Для других типов (не int) все понятно. Но тут речь-то как раз о "типах", всунутых в тот же самый int, таких как HouseNumber. Вот для них отдельный toString(HouseNumber) определить не получится на уровне языка, который, как правило не допускает определять несколько перегрузок функции для типа int с оговоркой про модули, видимость и/или пространства имен. Это справедливо как для ПП, так и для ООП.
Re[15]: Мнение: объектно-ориентированное программирование — катастрофа на трилли
От: Sharov Россия  
Дата: 12.09.19 18:24
Оценка:
Здравствуйте, samius, Вы писали:

S>>С чего это будет так? Это будет toString(int value) и каждый тип будет по своему печать соотв. инф-ию, отсюда и полиморфизм. Интерфейс один, реализации разные.

S>Для других типов (не int) все понятно. Но тут речь-то как раз о "типах", всунутых в тот же самый int, таких как HouseNumber. Вот для них отдельный toString(HouseNumber) определить не получится на уровне языка, который, как правило не допускает определять несколько перегрузок функции для типа int с оговоркой про модули, видимость и/или пространства имен. Это справедливо как для ПП, так и для ООП.

Оне все будут к int'у приводится перед печатью, почему нет? Ну т.е. енто не будет ToString(HouseNumber hn), а будет ToString(int hn) для типа HouseNumber. Енто, конечно, нарушает типизацию и инкапсуляцию, поскольку детали лезут наружу...
Кодом людям нужно помогать!
Re[16]: Мнение: объектно-ориентированное программирование — катастрофа на трилли
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.09.19 18:32
Оценка: -1
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте, samius, Вы писали:


S>>Для других типов (не int) все понятно. Но тут речь-то как раз о "типах", всунутых в тот же самый int, таких как HouseNumber. Вот для них отдельный toString(HouseNumber) определить не получится на уровне языка, который, как правило не допускает определять несколько перегрузок функции для типа int с оговоркой про модули, видимость и/или пространства имен. Это справедливо как для ПП, так и для ООП.


S>Оне все будут к int'у приводится перед печатью, почему нет? Ну т.е. енто не будет ToString(HouseNumber hn), а будет ToString(int hn) для типа HouseNumber. Енто, конечно, нарушает типизацию и инкапсуляцию, поскольку детали лезут наружу...

Тип HouseNumber в точности есть int. Это расположенные в int значения номеров домов. И только лишь.
Re[2]: Мнение: объектно-ориентированное программирование — катастрофа на триллио
От: Mr.Delphist  
Дата: 12.09.19 18:59
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>Правильный функциональный язык — на поверхностном уровне — ДОЛЖЕН мимикрировать под C/Pascal!!! Без этого базового требования рыночная доля функциональщины никогда не выйдет за маргинальные пределы, в которых она и находится последние 60 с хреном лет, начиная с изобретения лиспа.


Prolog вроде бы достаточно близок синтаксически, однако популярности это не снискало
Re[3]: Мнение: объектно-ориентированное программирование — катастрофа на триллио
От: AlexRK  
Дата: 12.09.19 19:03
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

ARK>>Правильный функциональный язык — на поверхностном уровне — ДОЛЖЕН мимикрировать под C/Pascal!!! Без этого базового требования рыночная доля функциональщины никогда не выйдет за маргинальные пределы, в которых она и находится последние 60 с хреном лет, начиная с изобретения лиспа.


MD>Prolog вроде бы достаточно близок синтаксически, однако популярности это не снискало


Да нет, совсем нет. Пролог такой же марсианский. Ну и да, одна лишь синтаксическая близость в любом случае популярности не гарантирует. Зато ее отсутствие гарантирует или забвение, или популярность у горстки фанатиков.
Re[2]: Мнение: объектно-ориентированное программирование — ката
От: Mr.Delphist  
Дата: 12.09.19 19:04
Оценка:
Здравствуйте, Hardballer, Вы писали:

H>Надоели фанатики. Инструмент надо брать под задачу, а не молотком сверлить стены.


Молоток замечательно сверлит стену, надо лишь правильно автоматизировать процесс. Ведь перфоратор — по своей сути это именно молоток, а не дрель со сверлом по бетону, как может показаться.
Re[16]: Мнение: объектно-ориентированное программирование — катастрофа на трилли
От: Sinclair Россия https://github.com/evilguest/
Дата: 13.09.19 05:18
Оценка:
Здравствуйте, B0FEE664, Вы писали:
S>>Буфер можно организовать в самой программе на фя. Не нужно никакое постороннее устройство ей.
BFE>Как это сделать?
В параметрах.
BFE>Проблема не с хранением, проблема с реализацией. По сути есть противоречие: нам надо временно сохранить данные, но мы не имеем права хранить что либо. Разрешить это противоречие можно, если только в сам алгоритм записать все возможные комбинации входных данных в виде констант. Другого способа я не вижу.
Вам стоит хоть чуть-чуть почитать про функциональное программирование. В нём функции являются первоклассными объектами, т.е. допускают произвольные манипуляции.
Порождать функции можно динамически, в процессе вычислений.
Т.е. можно вернуть из функции число 42, а можно вернуть функцию, которая вернёт число 42.
Так и делаются вещи типа буферов и хранения состояния — конструируется функция, возвращающая функцию, возвращающую функцию и т.п.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Мнение: объектно-ориентированное программирование — катастрофа на триллион д
От: varenikAA  
Дата: 13.09.19 06:51
Оценка:
Полностью согласен с основными тезисами.
Синтаксис ФП-языка важен, но не думаю, что С/паскаль идеальны.
Для примера возьмем 3-ти ФП языка:
1 Nemerle
def calc() { 42 }
//or 
def calc = fun () { 42 }


2 F#
let calc () 
    42
// or
let calc = fun () -> 42


3 Iron Scheme

;(define (calc) 42)
;or
(define calc (lambda () 42))
(calc); print 42


Как менее противоричивый, а значит менее подверженный ошибкам следовало бы выбрать язык S-выражений.
В качестве доказательства позвольте еще кусочек кода на F#
(calc ()) //val it : int = 42
2 + 2 // val it : int = 4
((+) 2 2) //val it : int = 4

Обратите внимание, что в F# заложена изначально идея вызова любого выражения слева направо, (+) применяется к своим аргументам, точно также как и calc применяется к () как к пустому множеству аргументов.
Исчезает двойственность и противоречивость си-подобных языков в которых нужно следить за порядком следования операторов.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Мнение: объектно-ориентированное программирование — катастрофа на триллио
От: AlexRK  
Дата: 13.09.19 07:04
Оценка:
Здравствуйте, varenikAA, Вы писали:

AA>Как менее противоричивый, а значит менее подверженный ошибкам следовало бы выбрать язык S-выражений.

AA>В качестве доказательства позвольте еще кусочек кода на F#
AA>Обратите внимание, что в F# заложена изначально идея вызова любого выражения слева направо, (+) применяется к своим аргументам, точно также как и calc применяется к () как к пустому множеству аргументов.
AA>Исчезает двойственность и противоречивость си-подобных языков в которых нужно следить за порядком следования операторов.

Честно говоря, не уловил, в чем именно двойственность и противоречивость. И что значит "следить за порядком операторов". Нельзя ли немного раскрыть вопрос?
Re[2]: Мнение: объектно-ориентированное программирование — катастрофа на триллио
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 13.09.19 07:20
Оценка: +1
Здравствуйте, varenikAA, Вы писали:

AA>Полностью согласен с основными тезисами.

AA>Синтаксис ФП-языка важен, но не думаю, что С/паскаль идеальны.
AA>Для примера возьмем 3-ти ФП языка:

На таком микропримере можно показать что угодно, тем более что есть процедурные языки, в которых можно тоже писать в духе fn calc() { 42 } (Rust, Swift, много их).
Что-то более существенное будет?

AA>Обратите внимание, что в F# заложена изначально идея вызова любого выражения слева направо, (+) применяется к своим аргументам, точно также как и calc применяется к () как к пустому множеству аргументов.

AA>Исчезает двойственность и противоречивость си-подобных языков в которых нужно следить за порядком следования операторов.

В чём это "надо следить"?
Если "следить" это понимать, что в f(g(x)) сначала вычисляется g, а потом f, то это очевидно и неинтересно.
Если же то, что f(a,b) будет вычислять сначала a, потом b (или наоборот), то это намеренная недооптимизация и, наоборот, внесение процедурности там, где оно не нужно и даже в ИП не всегда используется.
/dev/telepathy сломался, расшифровывайте, если хотите быть понятыми.
The God is real, unless declared integer.
Re[11]: Мнение: объектно-ориентированное программирование — катастрофа на трилли
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 13.09.19 09:55
Оценка:
Здравствуйте, Poopy Joe, Вы писали:

PJ>>>Все это никакого отношения к полиморфизму не имеет. samius правильно тебе говорит — полоиморфизм он про типы, по определению. А у тебя есть некая интерпретация данных.


I>>Все это тривиальная прикладная задача на полиморфизм, а именно — надо написать функцию, которая обрабатывает данные разных типов. Вот это и есть определение полиморфизма.


PJ>Определение полиморфизма можешь прочитать в любом словаре, хоть на википедии. Нафига выдумывать какой-то новояз непонятно совершенно. У тебя задача не обработки разных типов, поскольку у тебя нет никаких типов, разработчик интерпретирует данные по своему желанию. Если ты это выдаешь за силу oop, то это вообще


Не возражаешь, если тогда википедию процитирую ? "Полиморфизм в языках программирования и теории типов — способность функции обрабатывать данные разных типов"

Теперь возвращаемся к задаче — нужно написать именно такую функцию, которая способна обрабатывать данные разных типов. Всё как ты просил
Re[17]: Мнение: объектно-ориентированное программирование — катастрофа на трилли
От: · Великобритания  
Дата: 13.09.19 10:47
Оценка:
Здравствуйте, samius, Вы писали:

s> S>>Только так и получится. Изменяемых структур данных в чистом ФП нет.

s> BFE>Оцените, пожалуйста, размер такой структуры для буфера длиной в 1024 байт.
s> От 1024 байт, зависит от размера чанков.
Размер чанков в общем случае будет минимальный, т.е. 1 байт. И такой буфер станет бессмысленным.

Мне кажется, что он имеет в виду немного другое. Полнота по Тьюрингу ещё не означает практической применимости. Один и тот же алгоритм, реализованный на МТ и на Алгорифме Маркова может решать ту же задачу, но иметь совершенно разную алгоритмическую сложность. Так и ФП vs ПП (или ООП) может для одной и той же задачи подразумевать разную алг-сложность. Какой смысл заводить буфер, если он потребует дохрена памяти и времени. А т.к. наши физические железки работают очень похоже на МТ (точнее РАМ), то и программирование в таком стиле практически оказывается более эффективно по ресурсам, т.к. приближено к реальному железу. Другое дело, ресурсы иногда дёшевы, не всегда являются ограничением и ФП может понадобится для уменьшения сложности для восприятия человеком.
avalon/2.0.6
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[12]: Мнение: объектно-ориентированное программирование — катастрофа на трилли
От: Poopy Joe Бельгия  
Дата: 13.09.19 10:56
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Не возражаешь, если тогда википедию процитирую ? "Полиморфизм в языках программирования и теории типов — способность функции обрабатывать данные разных типов"


Да ради бога, может хоть сам прочитаешь.

I>Теперь возвращаемся к задаче — нужно написать именно такую функцию, которая способна обрабатывать данные разных типов. Всё как ты просил


Не, у тебя задача, в во всяком случае как ты ее описал, это десереализация, в лучшем случае. Так как никаких типов у данных нет. Соответственно полиморфизм там вообще не причем. Зачем ты настаиваешь на своих доморощенных определениях?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.