![]() |
|
Модераторы: LSD |
![]()
|
|
||
|
|
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 3 Всего: 160 |
Да, да! Покормите, мну! Ого, вы тут настрочили! Пойду читать. -------------------- |
|||
|
||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: нет Всего: 44 |
Нууу, как человек, зарабатывающий на жизнь, тем что пишет на С++. думаю нужен
-------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: нет Всего: 17 |
Lazin, а что ты хочешь на нем писать, сайты визитки и окна какие-то...?
Это сообщение отредактировал(а) gcc - 27.8.2009, 20:20 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Так если бы его не было, то было бы что-то другое по лучше -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 4 Всего: 154 |
на ком? я сам еще только учусь но пнуть всегда рад вот, к примеру, презентация создателя F#, там кратко изложено то, почему я хочу использовать F# в работе я пока толькко изучаю возможности языка, но уже крышу сносит, вот пример async workflow:
получение данных будет выполняться асинхронно, все синхронные операции будут выполняться в пуле потоков, на С# это далеко не так просто реализовать Это сообщение отредактировал(а) Lazin - 27.8.2009, 21:24 |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: нет Всего: 26 |
С++ - единственный известный мне язык который поддерживает системное программирование, и при этом поддерживает множество удобных парадигм программирования - ООП, обобщенное программирование
Действительно, в других языках есть встроенные вещи которые в С++ делаются написанием сотни строк кода или невозможны вообще. Но этих высокоуровневых языках нет такой поддержки низкоуровневого программирования, которая есть в С++ Кроме того, они генерируют низкопроизводительный код. |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 4 Всего: 154 |
GoldFinch, объясни, зачем нужна эта низкоуровневость и скорость выполнения кода большинству приложений, ты так говоришь, как будто это хорошо
К тому-же скорость выполнения кода, это очень спорный момент. Взять к примеру простые синтетические тесты, например вот этот. Он ни о чем не говорит, я бы предпочел посмотреть на результаты сравнения идиоматичного кода, а не оптимизированного до уровня абсолютной не читаемости, так как большую часть времени мы пишем именно такой код, и используем библиотеки, которые состоят в основном их такого кода ну а про поддержку я вообще молчу. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: нет Всего: 26 |
Lazin, большинству приложений - не надо.
мне - надо. при этом я знаю, что обобщенный код, который я пишу, используя хитрые библиотеки типа boost, скомпилируется в такой же код, как если бы я писал его на С. К тому же неужели какой-нибудь F# так же богат возможностями что и C++ ? Может там есть десяток удобных вещей, но всеравно нет и малой доли того что есть в С++? Да, чтобы сделать boost::lambda понадобились тысячи строк кода, и можно сказать что "в более высокоуровневом языке X это встроено", но если бы в этом более высокоуровневом языке это не было встроено, разве это можно было бы там сделать? Это сообщение отредактировал(а) GoldFinch - 28.8.2009, 00:26 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
GoldFinch, ну смотри, идет разработка длительного корпоративного проекта, программист написал и через пару лет ушел, дальше нужно его развивать. Приходит новый программист и он должен изучать не только код написанный его предшественником, но и все библиотеки который тот использовал. В случае если библиотеки стандартные, то потребуется только изучение кода, который писал программист. При работе в команде, очень важно использовать стандартные решения, так чтобы твой код был максимально прозрачным и очевидным, поэтому использование решений "из коробки" предпочтительнее во многих случаях. Только одиночка может себе позволить писать все под себя.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Lazin |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 4 Всего: 154 |
еще как, это более выразительный язык
если говорить о F#, то там к примеру нет шаблонов, потому-что там они нафик не нужны, потому-что есть type inference, код автоматически обобщается на произвольные типы, иногда правда прихоится явно указывать некоторые типы, что-бы ограничить типы возможных аргументов если написать что-то вроде
то это будет эквивалентно плюсовому std::make_pair, целиком и полностью, код будет работать с любыми типами. Писать обобщенный код на порядок проще, это нормальная практика, а не Zen, доступный лишь немногим, как template metaprogramming в С++. другой пример - в ocaml и F# есть оператор |> левый операнд которого передается на вход правого, используется для организации конвейерной обработки данных
и большинство средств языка, не реализованы на уровне языка, а строятся из более простых языковых конструкций boost.lambda - дурной пример, так как эта библиотека практически неюзабельна, ее можно использовать для реализации простых функторов, но не более. Вносить изменения в код, который построен на boost.lambda - весьма проблематично, одна ошибка и у тебя многостраничный листинг предупреждений и сообщений об ошибках Код на С++, интенсивно использующий template metaprogramming - писать очень сложно, как результат - падение производительности труда. На самом деле, оправданных применений у этой техники не так много. Например проверка размерностей на этапе компиляции, или создание всевозможных EDSL, в случае, если эти EDSL будут использоваться многими программистами, для написания большого количества кода, иначе игра не стоит свеч и это просто усложнение кода. Неопытные программисты, часто заблуждаются, считая, что чем более сложный код они напишут, тем "круче". С++ очень подходящий язык, для того, что-бы писать очень сложный код, который на самом деле делает что-то очень простое. На самом деле, задача программиста - сделать наоборот, что-бы код делал что-то сложное, но выглядел и работал при этом очень просто. Добавлено через 6 минут и 55 секунд ты не прав, boost - это стандарт де-факто, так как разработчики многих библиотек - члены комитета стандартизации, и многие из бустовских библиотек - будут в новом стандарте ты так-же путаешь язык и технологии, которые с его помощью используют, к примеру, если я пишу на delphi приложение для работы с БД Oracle, то на мое место будут искать не любого дельфиста, а именно специалиста по Oracle, delphi тут уже вторичен |
||||||||||
|
|||||||||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 4 Всего: 154 |
вот еще один пример, например нам надо написать ф-ю, которая ищет в списке N самых маленьких чисел, для этого нужно отсортировать список по возрастанию и взять N первых элементов, но этот алгоритм не оптимален, так как сортируется весь массив, а нужно остановить сортировку тогда, когда будут известны первые N элементов
в STL ест алгоритм partial_sort, который частично сортирует данные, реализован как отдельная ф-я, с ним можно это реализовать оптимальным образом ну а вот решение на Haskell:
как сделать такое на последовательностях F# я не нашел, поэтому пример на haskell |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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#? |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 5 Всего: 92 |
Как язык для прикладного ПО - конечно, нафиг, не нужен. Но в области системного ПО (правда, большинство используют его как "продвинутый С", а не как С++ - но эт другой вопрос) конкуретнов нет.
Добавлено через 13 минут и 59 секунд
Последовательности F# - это обычные объекты, реализующие IEnumerable. ТАк что проблема не в F#, а в стандартных либах .Net FX. В текущей реализации LINQ-а OrderedEnumerable делает сортировку при запросе первого элемента, но сортировку всех элементов. Т. е. true-way - сделать LazyOrderedEnumerable |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: нет Всего: 26 |
в области системного ПО есть еще D
Это сообщение отредактировал(а) GoldFinch - 4.9.2009, 18:09 |
|||
|
||||
| nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 13 Всего: 43 |
Представьте, что Java/C# бы работали нативно, а не через JIT-компиляцию.
Много бы осталось народа на C++? Сам юзаю его, но лишь потому, что нечем заменить. |
|||
|
||||
![]()
|
| Правила ведения Религиозных войн | |
|
|
1. Уважайте собеседника 2. Собеседник != враг 3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez" С уважением, Smartov. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Религиозные войны | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |