Сообщение Re[12]: Упоротость С++ от 27.08.2023 12:50
Изменено 27.08.2023 15:33 Serginio1
Re[12]: Упоротость С++
Здравствуйте, vdimas, Вы писали:
S>>О чем так упорно говорили немерлисты. Вот в C# эволюция ПМ достигла своего апогея.
V>Не факт.
V>Начиная с C# 7 в каждой версии добавляются новые возможности в PM.
V>С чего ты решил, что этот процесс уже завершён?
Ну насчет апогея я говорил, что уже достиг Немерля.
S>>Но по функциональности все равно проигрывает F#
V>Ты малость поднадоел сегодня нести ерунду...
V>PM в C# у выигрывает у F# с разгромным счётом, ес-но.
V>(сам же ссылки дал — не смотрел, разве?)
Ну вот мое мнение, что Шарп недотягивает до F#.
Но не суть. ПМ очень удобен как туплами, рекордами, объектами, списками.
V>В F# есть только одна конструкция, неизвестная в C# — это явное ветвление по discriminated union, бо такого встроенного в язык типа данных нет в C#, опять бгг.
Кстати
https://code-maze.com/csharp-discriminated-unions-with-oneof/
https://github.com/dotnet/csharplang/blob/main/proposals/discriminated-unions.md
V>Вместо этого C# предлагает ветвиться вообще по любому достижимому типу, где дискриминатором является, собсно... тип!
V>F# в этом месте — мальчик для битья.
S>>https://learn.microsoft.com/ru-ru/dotnet/fsharp/language-reference/pattern-matching
S>>https://learn.microsoft.com/ru-ru/dotnet/csharp/fundamentals/functional/pattern-matching
S>>https://learn.microsoft.com/ru-ru/dotnet/csharp/language-reference/operators/patterns#list-patterns
V>Ну вот и ознакомься тщательнее, с обязательным пониманием происходящего.
S>> Кстати про head :: tail в C#
S>>
V>Не забывай, что в ФП-языках список представлен линкованным списком CONS-ячеек, что в общем случае убого с т.з. эффективности, хотя позволяет единообразно ссылать на любой хвост в списке.
V>В C# для этого завезут ПМ над Span (конкретно для Span<char> уже завезли).
Это не суть. Просто есть ПМ для списков. Linq в этом случае громозг.
V>И опять получится мощнее, чем в ФП-языках, бо в ПМ можно будет ссылаться не только на хвост списка (как в ФП), а на произвольный подсписок в списке.
S>>Вот у меня и был вопрос про ПМ в С++.
V>Для ветвления по константам он делается в switch/case.
V>(забыл разве?)
Хорошо уговорил, что в C# ПМ мощный. Но ты ушел от самой сути. Что ПМ это мощнейшая штука в ПМ.
ПМ намного мощнее и читабельнее switch/case. О чем так много и упорно говорили немерлисты.
V>Для типов можно однократно накрутить хеплеры, типа такого:
V>https://habr.com/ru/articles/282630/
Интересно. Спасибо. Но уступает ПМ.
V>Более полно есть в Boost:
V>https://boostorg.github.io/hana/index.html#tutorial-quickstart
V>где константы времени компиляции надо оборачивать в типы народе integral_constant<int, 42>, или, используя using (продвинутую версию typedef), определить более короткие int_<42>, char_<'c'> и т.д.
V>Сахар для if-elseif-..-else в плюсах тоже накручивается достаточно просто, хотя и потребует некоего типа-тега, который послужит для привязки, допустим, оператора |.
V>По умолчанию в таких либах делается через простую запятую без дополнительных приседаний.
Интересно. Спасибо. Но это не ПМ. Это все перегрузки операторов и прочая кодогенерация. Чем кстати и плох С++.
Да навернуть можно, что угодно, только вот разбираться и отлаживать сложно.
S>>На что тут же вспомнили лисп (который тоже не чисто ФЯП), что в нем нет ПМ, но он функциональный. И просили дать определение ФП.
S>>На что я ответил, что степень функциональности надо сравнивать с Haskel
V>Не-а.
V>Хаскель ленивый язык и это принципиально, т.к. в нём строится "один большой функционал", который протаскивается по главной монаде main. ))
V>"Разложив" на составляющие происходящее в императивном рантайме, там происходит нечто вроде бесконечного вызова ф-ий, где аргументами являются результаты предыдущих вызовов (плюс новые аргументы, в т.ч. константы), что-то типа args => func1 => (result, args) => func2 => (result, args) => и т.д.
Ну в .Net пошли через yield и анонимные классы для хранения состояния (state mashine).
V>Без ленивости это принципиально не работает.
V>Поэтому, сравнивать с Хаскель бесполезно — это отдельная вселенная даже в мире ФП-языков. ))
S>>а лучше с F# где присутствуют все парадигмы ФП.
V>Дудки, F# — мультипарадигменный, просто его синтаксис заточен на ФП-конструкции, сугубо выразительности оных ради.
V>Собсно, это семейство ML, где не все языки из этого семейства являются чисто-функциональными, навроде Хаскеля.
V>Например, Caml-семейство (откуда F# родом) таковым не является.
V>===========================
V>В общем, утверждение "чем круче в языке ПМ, тем он более ФП-парадигменный" не выдерживает никакой критики, предлагаю тебе от этого утверждения отказаться. ))
Мы говорим не о мультипарадигменный, а о ФП.
ФП в F# мощнее чем в Наскеле?
ФП в С++ уступает C#?
S>>О чем так упорно говорили немерлисты. Вот в C# эволюция ПМ достигла своего апогея.
V>Не факт.
V>Начиная с C# 7 в каждой версии добавляются новые возможности в PM.
V>С чего ты решил, что этот процесс уже завершён?
Ну насчет апогея я говорил, что уже достиг Немерля.
S>>Но по функциональности все равно проигрывает F#
V>Ты малость поднадоел сегодня нести ерунду...
V>PM в C# у выигрывает у F# с разгромным счётом, ес-но.
V>(сам же ссылки дал — не смотрел, разве?)
Ну вот мое мнение, что Шарп недотягивает до F#.
Но не суть. ПМ очень удобен как туплами, рекордами, объектами, списками.
V>В F# есть только одна конструкция, неизвестная в C# — это явное ветвление по discriminated union, бо такого встроенного в язык типа данных нет в C#, опять бгг.
Кстати
https://code-maze.com/csharp-discriminated-unions-with-oneof/
https://github.com/dotnet/csharplang/blob/main/proposals/discriminated-unions.md
V>Вместо этого C# предлагает ветвиться вообще по любому достижимому типу, где дискриминатором является, собсно... тип!
V>F# в этом месте — мальчик для битья.
S>>https://learn.microsoft.com/ru-ru/dotnet/fsharp/language-reference/pattern-matching
S>>https://learn.microsoft.com/ru-ru/dotnet/csharp/fundamentals/functional/pattern-matching
S>>https://learn.microsoft.com/ru-ru/dotnet/csharp/language-reference/operators/patterns#list-patterns
V>Ну вот и ознакомься тщательнее, с обязательным пониманием происходящего.
S>> Кстати про head :: tail в C#
S>>
S>> [var head, .. var tail]
S>>
V>Не забывай, что в ФП-языках список представлен линкованным списком CONS-ячеек, что в общем случае убого с т.з. эффективности, хотя позволяет единообразно ссылать на любой хвост в списке.
V>В C# для этого завезут ПМ над Span (конкретно для Span<char> уже завезли).
Это не суть. Просто есть ПМ для списков. Linq в этом случае громозг.
V>И опять получится мощнее, чем в ФП-языках, бо в ПМ можно будет ссылаться не только на хвост списка (как в ФП), а на произвольный подсписок в списке.
S>>Вот у меня и был вопрос про ПМ в С++.
V>Для ветвления по константам он делается в switch/case.
V>(забыл разве?)
Хорошо уговорил, что в C# ПМ мощный. Но ты ушел от самой сути. Что ПМ это мощнейшая штука в ПМ.
ПМ намного мощнее и читабельнее switch/case. О чем так много и упорно говорили немерлисты.
V>Для типов можно однократно накрутить хеплеры, типа такого:
V>https://habr.com/ru/articles/282630/
Интересно. Спасибо. Но уступает ПМ.
V>Более полно есть в Boost:
V>https://boostorg.github.io/hana/index.html#tutorial-quickstart
V>где константы времени компиляции надо оборачивать в типы народе integral_constant<int, 42>, или, используя using (продвинутую версию typedef), определить более короткие int_<42>, char_<'c'> и т.д.
V>Сахар для if-elseif-..-else в плюсах тоже накручивается достаточно просто, хотя и потребует некоего типа-тега, который послужит для привязки, допустим, оператора |.
V>По умолчанию в таких либах делается через простую запятую без дополнительных приседаний.
Интересно. Спасибо. Но это не ПМ. Это все перегрузки операторов и прочая кодогенерация. Чем кстати и плох С++.
Да навернуть можно, что угодно, только вот разбираться и отлаживать сложно.
S>>На что тут же вспомнили лисп (который тоже не чисто ФЯП), что в нем нет ПМ, но он функциональный. И просили дать определение ФП.
S>>На что я ответил, что степень функциональности надо сравнивать с Haskel
V>Не-а.
V>Хаскель ленивый язык и это принципиально, т.к. в нём строится "один большой функционал", который протаскивается по главной монаде main. ))
V>"Разложив" на составляющие происходящее в императивном рантайме, там происходит нечто вроде бесконечного вызова ф-ий, где аргументами являются результаты предыдущих вызовов (плюс новые аргументы, в т.ч. константы), что-то типа args => func1 => (result, args) => func2 => (result, args) => и т.д.
Ну в .Net пошли через yield и анонимные классы для хранения состояния (state mashine).
V>Без ленивости это принципиально не работает.
V>Поэтому, сравнивать с Хаскель бесполезно — это отдельная вселенная даже в мире ФП-языков. ))
S>>а лучше с F# где присутствуют все парадигмы ФП.
V>Дудки, F# — мультипарадигменный, просто его синтаксис заточен на ФП-конструкции, сугубо выразительности оных ради.
V>Собсно, это семейство ML, где не все языки из этого семейства являются чисто-функциональными, навроде Хаскеля.
V>Например, Caml-семейство (откуда F# родом) таковым не является.
V>===========================
V>В общем, утверждение "чем круче в языке ПМ, тем он более ФП-парадигменный" не выдерживает никакой критики, предлагаю тебе от этого утверждения отказаться. ))
Мы говорим не о мультипарадигменный, а о ФП.
ФП в F# мощнее чем в Наскеле?
ФП в С++ уступает C#?
Re[12]: Упоротость С++
Здравствуйте, vdimas, Вы писали:
S>>О чем так упорно говорили немерлисты. Вот в C# эволюция ПМ достигла своего апогея.
V>Не факт.
V>Начиная с C# 7 в каждой версии добавляются новые возможности в PM.
V>С чего ты решил, что этот процесс уже завершён?
Ну насчет апогея я говорил, что уже достиг Немерля.
S>>Но по функциональности все равно проигрывает F#
V>Ты малость поднадоел сегодня нести ерунду...
V>PM в C# у выигрывает у F# с разгромным счётом, ес-но.
V>(сам же ссылки дал — не смотрел, разве?)
Ну вот мое мнение, что Шарп недотягивает до F#.
Но не суть. ПМ очень удобен как туплами, рекордами, объектами, списками.
V>В F# есть только одна конструкция, неизвестная в C# — это явное ветвление по discriminated union, бо такого встроенного в язык типа данных нет в C#, опять бгг.
Кстати
https://code-maze.com/csharp-discriminated-unions-with-oneof/
https://github.com/dotnet/csharplang/blob/main/proposals/discriminated-unions.md
V>Вместо этого C# предлагает ветвиться вообще по любому достижимому типу, где дискриминатором является, собсно... тип!
V>F# в этом месте — мальчик для битья.
S>>https://learn.microsoft.com/ru-ru/dotnet/fsharp/language-reference/pattern-matching
S>>https://learn.microsoft.com/ru-ru/dotnet/csharp/fundamentals/functional/pattern-matching
S>>https://learn.microsoft.com/ru-ru/dotnet/csharp/language-reference/operators/patterns#list-patterns
V>Ну вот и ознакомься тщательнее, с обязательным пониманием происходящего.
S>> Кстати про head :: tail в C#
S>>
V>Не забывай, что в ФП-языках список представлен линкованным списком CONS-ячеек, что в общем случае убого с т.з. эффективности, хотя позволяет единообразно ссылать на любой хвост в списке.
V>В C# для этого завезут ПМ над Span (конкретно для Span<char> уже завезли).
Это не суть. Просто есть ПМ для списков. Linq в этом случае громозг.
V>И опять получится мощнее, чем в ФП-языках, бо в ПМ можно будет ссылаться не только на хвост списка (как в ФП), а на произвольный подсписок в списке.
S>>Вот у меня и был вопрос про ПМ в С++.
V>Для ветвления по константам он делается в switch/case.
V>(забыл разве?)
Хорошо уговорил, что в C# ПМ мощный. Но ты ушел от самой сути. Что ПМ это мощнейшая штука в ПМ.
ПМ намного мощнее и читабельнее switch/case. О чем так много и упорно говорили немерлисты.
V>Для типов можно однократно накрутить хеплеры, типа такого:
V>https://habr.com/ru/articles/282630/
Интересно. Спасибо. Но уступает ПМ.
Это кстати я так понимаю из область дженериков
https://code-maze.com/csharp-discriminated-unions-with-oneof/
https://github.com/mcintyre321/OneOf/blob/master/OneOf/OneOfT3.generated.cs
V>Более полно есть в Boost:
V>https://boostorg.github.io/hana/index.html#tutorial-quickstart
V>где константы времени компиляции надо оборачивать в типы народе integral_constant<int, 42>, или, используя using (продвинутую версию typedef), определить более короткие int_<42>, char_<'c'> и т.д.
V>Сахар для if-elseif-..-else в плюсах тоже накручивается достаточно просто, хотя и потребует некоего типа-тега, который послужит для привязки, допустим, оператора |.
V>По умолчанию в таких либах делается через простую запятую без дополнительных приседаний.
Интересно. Спасибо. Но это не ПМ. Это все перегрузки операторов и прочая кодогенерация. Чем кстати и плох С++.
Да навернуть можно, что угодно, только вот разбираться и отлаживать сложно.
S>>На что тут же вспомнили лисп (который тоже не чисто ФЯП), что в нем нет ПМ, но он функциональный. И просили дать определение ФП.
S>>На что я ответил, что степень функциональности надо сравнивать с Haskel
V>Не-а.
V>Хаскель ленивый язык и это принципиально, т.к. в нём строится "один большой функционал", который протаскивается по главной монаде main. ))
V>"Разложив" на составляющие происходящее в императивном рантайме, там происходит нечто вроде бесконечного вызова ф-ий, где аргументами являются результаты предыдущих вызовов (плюс новые аргументы, в т.ч. константы), что-то типа args => func1 => (result, args) => func2 => (result, args) => и т.д.
Ну в .Net пошли через yield и анонимные классы для хранения состояния (state mashine).
V>Без ленивости это принципиально не работает.
V>Поэтому, сравнивать с Хаскель бесполезно — это отдельная вселенная даже в мире ФП-языков. ))
S>>а лучше с F# где присутствуют все парадигмы ФП.
V>Дудки, F# — мультипарадигменный, просто его синтаксис заточен на ФП-конструкции, сугубо выразительности оных ради.
V>Собсно, это семейство ML, где не все языки из этого семейства являются чисто-функциональными, навроде Хаскеля.
V>Например, Caml-семейство (откуда F# родом) таковым не является.
V>===========================
V>В общем, утверждение "чем круче в языке ПМ, тем он более ФП-парадигменный" не выдерживает никакой критики, предлагаю тебе от этого утверждения отказаться. ))
Мы говорим не о мультипарадигменный, а о ФП.
ФП в F# мощнее чем в Наскеле?
ФП в С++ уступает C#?
S>>О чем так упорно говорили немерлисты. Вот в C# эволюция ПМ достигла своего апогея.
V>Не факт.
V>Начиная с C# 7 в каждой версии добавляются новые возможности в PM.
V>С чего ты решил, что этот процесс уже завершён?
Ну насчет апогея я говорил, что уже достиг Немерля.
S>>Но по функциональности все равно проигрывает F#
V>Ты малость поднадоел сегодня нести ерунду...
V>PM в C# у выигрывает у F# с разгромным счётом, ес-но.
V>(сам же ссылки дал — не смотрел, разве?)
Ну вот мое мнение, что Шарп недотягивает до F#.
Но не суть. ПМ очень удобен как туплами, рекордами, объектами, списками.
V>В F# есть только одна конструкция, неизвестная в C# — это явное ветвление по discriminated union, бо такого встроенного в язык типа данных нет в C#, опять бгг.
Кстати
https://code-maze.com/csharp-discriminated-unions-with-oneof/
https://github.com/dotnet/csharplang/blob/main/proposals/discriminated-unions.md
V>Вместо этого C# предлагает ветвиться вообще по любому достижимому типу, где дискриминатором является, собсно... тип!
V>F# в этом месте — мальчик для битья.
S>>https://learn.microsoft.com/ru-ru/dotnet/fsharp/language-reference/pattern-matching
S>>https://learn.microsoft.com/ru-ru/dotnet/csharp/fundamentals/functional/pattern-matching
S>>https://learn.microsoft.com/ru-ru/dotnet/csharp/language-reference/operators/patterns#list-patterns
V>Ну вот и ознакомься тщательнее, с обязательным пониманием происходящего.
S>> Кстати про head :: tail в C#
S>>
S>> [var head, .. var tail]
S>>
V>Не забывай, что в ФП-языках список представлен линкованным списком CONS-ячеек, что в общем случае убого с т.з. эффективности, хотя позволяет единообразно ссылать на любой хвост в списке.
V>В C# для этого завезут ПМ над Span (конкретно для Span<char> уже завезли).
Это не суть. Просто есть ПМ для списков. Linq в этом случае громозг.
V>И опять получится мощнее, чем в ФП-языках, бо в ПМ можно будет ссылаться не только на хвост списка (как в ФП), а на произвольный подсписок в списке.
S>>Вот у меня и был вопрос про ПМ в С++.
V>Для ветвления по константам он делается в switch/case.
V>(забыл разве?)
Хорошо уговорил, что в C# ПМ мощный. Но ты ушел от самой сути. Что ПМ это мощнейшая штука в ПМ.
ПМ намного мощнее и читабельнее switch/case. О чем так много и упорно говорили немерлисты.
V>Для типов можно однократно накрутить хеплеры, типа такого:
V>https://habr.com/ru/articles/282630/
Интересно. Спасибо. Но уступает ПМ.
Это кстати я так понимаю из область дженериков
https://code-maze.com/csharp-discriminated-unions-with-oneof/
https://github.com/mcintyre321/OneOf/blob/master/OneOf/OneOfT3.generated.cs
V>Более полно есть в Boost:
V>https://boostorg.github.io/hana/index.html#tutorial-quickstart
V>где константы времени компиляции надо оборачивать в типы народе integral_constant<int, 42>, или, используя using (продвинутую версию typedef), определить более короткие int_<42>, char_<'c'> и т.д.
V>Сахар для if-elseif-..-else в плюсах тоже накручивается достаточно просто, хотя и потребует некоего типа-тега, который послужит для привязки, допустим, оператора |.
V>По умолчанию в таких либах делается через простую запятую без дополнительных приседаний.
Интересно. Спасибо. Но это не ПМ. Это все перегрузки операторов и прочая кодогенерация. Чем кстати и плох С++.
Да навернуть можно, что угодно, только вот разбираться и отлаживать сложно.
S>>На что тут же вспомнили лисп (который тоже не чисто ФЯП), что в нем нет ПМ, но он функциональный. И просили дать определение ФП.
S>>На что я ответил, что степень функциональности надо сравнивать с Haskel
V>Не-а.
V>Хаскель ленивый язык и это принципиально, т.к. в нём строится "один большой функционал", который протаскивается по главной монаде main. ))
V>"Разложив" на составляющие происходящее в императивном рантайме, там происходит нечто вроде бесконечного вызова ф-ий, где аргументами являются результаты предыдущих вызовов (плюс новые аргументы, в т.ч. константы), что-то типа args => func1 => (result, args) => func2 => (result, args) => и т.д.
Ну в .Net пошли через yield и анонимные классы для хранения состояния (state mashine).
V>Без ленивости это принципиально не работает.
V>Поэтому, сравнивать с Хаскель бесполезно — это отдельная вселенная даже в мире ФП-языков. ))
S>>а лучше с F# где присутствуют все парадигмы ФП.
V>Дудки, F# — мультипарадигменный, просто его синтаксис заточен на ФП-конструкции, сугубо выразительности оных ради.
V>Собсно, это семейство ML, где не все языки из этого семейства являются чисто-функциональными, навроде Хаскеля.
V>Например, Caml-семейство (откуда F# родом) таковым не является.
V>===========================
V>В общем, утверждение "чем круче в языке ПМ, тем он более ФП-парадигменный" не выдерживает никакой критики, предлагаю тебе от этого утверждения отказаться. ))
Мы говорим не о мультипарадигменный, а о ФП.
ФП в F# мощнее чем в Наскеле?
ФП в С++ уступает C#?