Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> С++ не нужен 
:(
    Опции темы
 
С++ не нужен?
да [ 44 ]  [44.44%]
нет [ 55 ]  [55.56%]
Всего проголосовавших: 99
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
kemiisto
  Дата 27.8.2009, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



Цитата(Void @  27.8.2009,  19:03 Найти цитируемый пост)
Приведи конкретный пример, как удалось реализовать преимущества ФП на конкретной задаче, адресно пни императивщиков

Да, да! Покормите, мну! smile 

Ого, вы тут настрочили! Пойду читать.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Nastya
Дата 27.8.2009, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: нет
Всего: 44



Нууу, как человек, зарабатывающий на жизнь, тем что пишет на С++. думаю нужен smile



--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
gcc
Дата 27.8.2009, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



Lazin, а что ты хочешь на нем писать, сайты визитки и окна какие-то...?  smile 

Это сообщение отредактировал(а) gcc - 27.8.2009, 20:20
PM WWW ICQ Skype GTalk Jabber   Вверх
Alexeis
Дата 27.8.2009, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Nastya @  27.8.2009,  18:14 Найти цитируемый пост)
Нууу, как человек, зарабатывающий на жизнь, тем что пишет на С++. думаю нужен

  Так если бы его не было, то было бы что-то другое по лучше  smile . Я тож 95% всего пишу на С++, но была бы замена перешел бы не задумываясь. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 27.8.2009, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(Nastya @  27.8.2009,  19:14 Найти цитируемый пост)
Нууу, как человек, зарабатывающий на жизнь, тем что пишет на С++. думаю нужен
я то-же на нем пишу, все меньше и меньше... smile 
Цитата(gcc @  27.8.2009,  20:14 Найти цитируемый пост)
а что ты хочешь на нем писать
на ком?
Цитата(Void @  27.8.2009,  18:03 Найти цитируемый пост)
Приведи конкретный пример, как удалось реализовать преимущества ФП на конкретной задаче, адресно пни императивщиков, и получи толпу, доказывающую, что это их задачи это не решает, и вовсе это не преимущества на самом деле, и вообще что за китайская грамота.
я сам еще только учусь smile 
но пнуть всегда рад smile 
вот, к примеру, презентация создателя F#, там кратко изложено то, почему я хочу использовать F# в работе
я пока толькко изучаю возможности языка, но уже крышу сносит, вот пример async workflow:

Код

let fetchAll(url:string) =
    async {  let req = WebRequest.Create(url)
             let! rsp = req.GetResponseAsync()
             do printfn "Get response from %A" url 
             use stream = rsp.GetResponseStream()
             use reader = newStreamReader(stream)
             let! html = reader.AsyncReadToEnd()
             do printfn "%d bytes received" html.Length
             }   
Async.Spawn( fetchAll("http://google.com") )

получение данных будет выполняться асинхронно, все синхронные операции будут выполняться в пуле потоков, на С# это далеко не так просто реализовать smile 

Это сообщение отредактировал(а) Lazin - 27.8.2009, 21:24
PM MAIL Skype GTalk   Вверх
GoldFinch
Дата 27.8.2009, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



С++ - единственный известный мне язык который поддерживает системное программирование, и при этом поддерживает множество удобных парадигм программирования - ООП, обобщенное программирование

Действительно, в других языках есть встроенные вещи которые в С++ делаются написанием сотни строк кода или невозможны вообще. Но этих высокоуровневых языках нет такой поддержки низкоуровневого программирования, которая есть в С++
Кроме того, они генерируют низкопроизводительный код.
PM MAIL ICQ   Вверх
Lazin
Дата 27.8.2009, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



GoldFinch, объясни, зачем нужна эта низкоуровневость и скорость выполнения кода большинству приложений, ты так говоришь, как будто это хорошо smile 

К тому-же скорость выполнения кода, это очень спорный момент. Взять к примеру простые синтетические тесты, например вот этот. Он ни о чем не говорит, я бы предпочел посмотреть на результаты сравнения идиоматичного кода, а не оптимизированного до уровня абсолютной не читаемости, так как большую часть времени мы пишем именно такой код, и используем библиотеки, которые состоят в основном их такого кода ну а про поддержку я вообще молчу. smile 
PM MAIL Skype GTalk   Вверх
GoldFinch
Дата 28.8.2009, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



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

К тому же неужели какой-нибудь F# так же богат возможностями что и C++ ?
Может там есть десяток удобных вещей, но всеравно нет и малой доли того что есть в С++?
Да, чтобы сделать boost::lambda понадобились тысячи строк кода, и можно сказать что "в более высокоуровневом языке X это встроено", но если бы в этом более высокоуровневом языке это не было встроено, разве это можно было бы там сделать?


Это сообщение отредактировал(а) GoldFinch - 28.8.2009, 00:26
PM MAIL ICQ   Вверх
Alexeis
Дата 28.8.2009, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



GoldFinch, ну смотри, идет разработка длительного корпоративного проекта, программист написал и через пару лет ушел, дальше нужно его развивать. Приходит новый программист и он должен изучать не только код написанный его предшественником, но и все библиотеки который тот использовал. В случае если библиотеки стандартные, то потребуется только изучение кода, который писал программист. При работе в команде, очень важно использовать стандартные решения, так чтобы твой код был максимально прозрачным и очевидным, поэтому использование решений "из коробки" предпочтительнее во многих случаях. Только одиночка может себе позволить писать все под себя.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 28.8.2009, 08:07 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(GoldFinch @  28.8.2009,  00:22 Найти цитируемый пост)
К тому же неужели какой-нибудь F# так же богат возможностями что и C++ ?

еще как, это более выразительный язык smile 
Цитата(GoldFinch @  28.8.2009,  00:22 Найти цитируемый пост)
Может там есть десяток удобных вещей, но всеравно нет и малой доли того что есть в С++?
неа
если говорить о F#, то там к примеру нет шаблонов, потому-что там они нафик не нужны, потому-что есть type inference, код автоматически обобщается на произвольные типы, иногда правда прихоится явно указывать некоторые типы, что-бы ограничить типы возможных аргументов
если написать что-то вроде
Код

let make_pair a b = (a, b)

то это будет эквивалентно плюсовому std::make_pair, целиком и полностью, код будет работать с любыми типами. Писать обобщенный код на порядок проще, это нормальная практика, а не Zen, доступный лишь немногим, как template metaprogramming в С++.
другой пример - в ocaml и F# есть оператор |> левый операнд которого передается на вход правого, используется для организации конвейерной обработки данных
Код

lst |> Seq.iter (fun x -> printfn "%A" x)
так вот, реализуется он крайне просто - 
Код

let (|>) x f = f x

и большинство средств языка, не реализованы на уровне языка, а строятся из более простых языковых конструкций
Цитата(GoldFinch @  28.8.2009,  00:22 Найти цитируемый пост)
Да, чтобы сделать boost::lambda понадобились тысячи строк кода, и можно сказать что "в более высокоуровневом языке X это встроено", но если бы в этом более высокоуровневом языке это не было встроено, разве это можно было бы там сделать?
boost.lambda - дурной пример, так как эта библиотека практически неюзабельна, ее можно использовать для реализации простых функторов, но не более. Вносить изменения в код, который построен на boost.lambda - весьма проблематично, одна ошибка и у тебя многостраничный листинг предупреждений и сообщений об ошибках smile 
Код на С++, интенсивно использующий template metaprogramming - писать очень сложно, как результат - падение производительности труда. На самом деле, оправданных применений у этой техники не так много. Например проверка размерностей на этапе компиляции, или создание всевозможных EDSL, в случае, если эти EDSL будут использоваться многими программистами, для написания большого количества кода, иначе игра не стоит свеч и это просто усложнение кода.

Неопытные программисты, часто заблуждаются, считая, что чем более сложный код они напишут, тем "круче". С++ очень подходящий язык, для того, что-бы писать очень сложный код, который на самом деле делает что-то очень простое. На самом деле, задача программиста - сделать наоборот, что-бы код делал что-то сложное, но выглядел и работал при этом очень просто. smile

Добавлено через 6 минут и 55 секунд
Цитата(Alexeis @  28.8.2009,  00:32 Найти цитируемый пост)
GoldFinch, ну смотри, идет разработка длительного корпоративного проекта, программист написал и через пару лет ушел, дальше нужно его развивать. Приходит новый программист и он должен изучать не только код написанный его предшественником, но и все библиотеки который тот использовал. В случае если библиотеки стандартные, то потребуется только изучение кода, который писал программист. При работе в команде, очень важно использовать стандартные решения, так чтобы твой код был максимально прозрачным и очевидным, поэтому использование решений "из коробки" предпочтительнее во многих случаях. Только одиночка может себе позволить писать все под себя. 

ты не прав, boost - это стандарт де-факто, так как разработчики многих библиотек - члены комитета стандартизации, и многие из бустовских библиотек - будут в новом стандарте
ты так-же путаешь язык и технологии, которые с его помощью используют, к примеру, если я пишу на delphi приложение для работы с БД Oracle, то на мое место будут искать не любого дельфиста, а именно специалиста по Oracle, delphi тут уже вторичен
PM MAIL Skype GTalk   Вверх
Lazin
Дата 28.8.2009, 08:28 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



вот еще один пример, например нам надо написать ф-ю, которая ищет в списке N самых маленьких чисел, для этого нужно отсортировать список по возрастанию и взять N первых элементов, но этот алгоритм не оптимален, так как сортируется весь массив, а нужно остановить сортировку тогда, когда будут известны первые N элементов
в STL ест алгоритм partial_sort, который частично сортирует данные, реализован как отдельная ф-я, с ним можно это реализовать оптимальным образом
ну а вот решение на Haskell:
Код

getMin s n = take n (sort s)
делающее ровным счетом то-же самое, но никаких специальных ф-й тут не применяется, sort будет сортировать список не полностью, а ровно на столько, насколько нужно, благодаря ленивости языка smile 
как сделать такое на последовательностях F# я не нашел, поэтому пример на haskell
PM MAIL Skype GTalk   Вверх
GoldFinch
Дата 28.8.2009, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Lazin, но фактически, если на С++ чего-то нет, скорей всего это можно в нем реализовать, завернув это в библиотеку, так чтобы пользователю было удобно
у меня все равно подозрение, что в F# или haskell или еще где чего-то не окажется, и там нельзя будет это реализовать так же просто.

вот например, есть сервер с хитрым бинарным протоколом, надо написать к нему клиентский код, и чтоб работал и в винде и в никсах.
на С++ я беру boost.asio для приема\отправки пакетов, 
добавляю код который шифрует пакеты и считает их контрольные суммы,
беру библиотеку сериализации чтоб извлекать\записывать данные в пакеты,
библиотеку RPC чтоб при приходе пакета вызывался callback, а отправка выглядела как вызов метода сервера

как такое же выглядит на F#?

Добавлено через 3 минуты и 44 секунды
Lazin, но фактически, если на С++ чего-то нет, скорей всего это можно в нем реализовать, завернув это в библиотеку, так чтобы пользователю было удобно
у меня все равно подозрение, что в F# или haskell или еще где чего-то не окажется, и там нельзя будет это реализовать так же просто.

вот например, есть сервер с хитрым бинарным протоколом, надо написать к нему клиентский код, и чтоб работал и в винде и в никсах.
на С++ я беру boost.asio для приема\отправки пакетов, 
добавляю код который шифрует пакеты и считает их контрольные суммы,
беру библиотеку сериализации чтоб извлекать\записывать данные в пакеты,
библиотеку RPC чтоб при приходе пакета вызывался callback, а отправка выглядела как вызов метода сервера

как такое же выглядит на F#?

Добавлено через 3 минуты и 57 секунд
Lazin, но фактически, если на С++ чего-то нет, скорей всего это можно в нем реализовать, завернув это в библиотеку, так чтобы пользователю было удобно
у меня все равно подозрение, что в F# или haskell или еще где чего-то не окажется, и там нельзя будет это реализовать так же просто.

вот например, есть сервер с хитрым бинарным протоколом, надо написать к нему клиентский код, и чтоб работал и в винде и в никсах.
на С++ я беру boost.asio для приема\отправки пакетов, 
добавляю код который шифрует пакеты и считает их контрольные суммы,
беру библиотеку сериализации чтоб извлекать\записывать данные в пакеты,
библиотеку RPC чтоб при приходе пакета вызывался callback, а отправка выглядела как вызов метода сервера

как такое же выглядит на F#?
PM MAIL ICQ   Вверх
Любитель
Дата 28.8.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Как язык для прикладного ПО - конечно, нафиг, не нужен. Но в области системного ПО (правда, большинство используют его как "продвинутый С", а не как С++ - но эт другой вопрос) конкуретнов нет.

Добавлено через 13 минут и 59 секунд
Цитата(Lazin @  28.8.2009,  08:28 Найти цитируемый пост)
как сделать такое на последовательностях F# я не нашел, поэтому пример на haskell 

Последовательности F# - это обычные объекты, реализующие IEnumerable. ТАк что проблема не в F#, а в стандартных либах .Net FX. В текущей реализации LINQ-а OrderedEnumerable делает сортировку при запросе первого элемента, но сортировку всех элементов. Т. е. true-way - сделать LazyOrderedEnumerable smile


--------------------
PM MAIL ICQ Skype   Вверх
GoldFinch
Дата 4.9.2009, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



в области системного ПО есть еще D

Это сообщение отредактировал(а) GoldFinch - 4.9.2009, 18:09
PM MAIL ICQ   Вверх
nerezus
Дата 5.9.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



Представьте, что Java/C# бы работали нативно, а не через JIT-компиляцию.
Много бы осталось народа на C++?

Сам юзаю его, но лишь потому, что нечем заменить.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.0683 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.