Перейти к содержанию

Посоветуйте язык программирования?


Рекомендуемые сообщения

Опубликовано

X-tender

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

Опубликовано

X-tender

Странные люди, да. Может тогда посвятишь нас, рабов заблуждений, чем же лучше не-плюсы?

На счет фанатизма: мое мнение таково, что тот кто не знает шаблонов в известной степени, пишет на паскале, с использованием языка С++. А незнание ведь тьма?

Опубликовано

Все языки хороши, главное применять их с умом и по месту.

Мое видение, вкратце, какие языки и платформы больше всего подходят в областях:

Формоклепание - дельфи, .NET

Системные утилиты, работа на "низком" уровне, игры - C++, критичные места asm

сайты - пехапе, питон и т.п.

серьезные сайты - JavaEE, ASP .NET

платформонезависимые - Java (однозначно), C/C++ (если с умом)

мобильные платформы, телефоны - Java, C#, C/C++

Опубликовано

X-tender

Странные люди, да. Может тогда посвятишь нас, рабов заблуждений, чем же лучше не-плюсы?

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

На счет фанатизма: мое мнение таково, что тот кто не знает шаблонов в известной степени, пишет на паскале, с использованием языка С++. А незнание ведь тьма?

Какая суровая категоричность: если пишешь не на плюсах - следовательно, не знаешь шаблонов... Не особо, конечно, интересно, но все-таки побольше бы определенности, что имелось ввиду - templates или design patterns? и каким боком они влияют на выбор плюсов? :)

И оченно широкий выбор, прямо море альтернатив... :) Что случилось с другими языками кроме поскакаля и плюсов?

Опубликовано

X-tender

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

Какая суровая категоричность: если пишешь не на плюсах - следовательно, не знаешь шаблонов... Не особо, конечно, интересно, но все-таки побольше бы определенности, что имелось ввиду - templates или design patterns? и каким боком они влияют на выбор плюсов?

И оченно широкий выбор, прямо море альтернатив... Что случилось с другими языками кроме поскакаля и плюсов?

Сурова как сама жизнь: человек, утверждающий что в С++ нет ФП (имеется ввиду шаблонное метопрограммирование), процентов на 90 не знает шаблонов (templates), с чего собственно началось, и как следствие языка такового. А по сему с его утверждениями о том, что он хуже какого то другого мне, как верному послушнику его храма, можно и нужно. Влияют, и во многом, поглядеть хотя бы на Boost - именно то, что и называется С++, а не в общепринятом понимании цикл/процедура/класс.

Опубликовано

0xDEADBEEF, да чего тут аргументировать-то? это же смешно... Может и сайты будешь писать на cgi-шках? Взять хотя бы из новых - ruby, вот сравни и подумай, чем он лучше плюсов. Или зачем нужны application server'a, или фреймворки. Или подумай над историей возникновения языков.

Если получилось оскорбить - то хочу извинится, впредь буду аккуратнее выбирать выражения.

Да не надо извиняться, кого ты оскорбил-то этим - только самого себя... Думаешь создателей джавы, шарпа, питона, шарпа, перла? Или миллионы программистов? Караван-то идет...

Сурова как сама жизнь: человек, утверждающий что в С++ нет ФП (имеется ввиду шаблонное метопрограммирование), процентов на 90 не знает шаблонов (templates), с чего собственно началось, и как следствие языка такового. А по сему с его утверждениями о том, что он хуже какого то другого мне, как верному послушнику его храма, можно и нужно. Влияют, и во многом, поглядеть хотя бы на Boost - именно то, что и называется С++, а не в общепринятом понимании цикл/процедура/класс.

Вот это и называется фанатизм. Никто не заявлял, что плюсы по всем параметрам хуже. Ну да Бог с ним, пойдем дальше. Ты всерьез считаешь, что наличие templates и boost'a позволяет назвать язык функциональным? Сам же говоришь о метапрограммировании, а как же динамическое метапрограммирование?

Кстати насчет boost и прочего, именно это я и считаю костылями. Да сам Страуструп думает о том, что изменить и что стоит заимстовать из java и шарпа в будущих версиях, да избавиться от текущих костылей. Или ты и Страуструпа считаешь "не осилившим фишки плюсов"?

Опубликовано

X-tender

Смешно, может быть где-то да, но 1. Тему завел человек, который хочет научится программировать, для таких как раз и нужны аргументы 2. Утверждать что-то глобальное не аргументируя - все равно что воздух сотрясать. Однако ни как не получается конструктивного холивара.

Во первых никто не заявлял, что С++ функциональный

...В том то и дело, что в С++ есть тьюринг-полный функциональный язык...
есть ведь разница? Динамическое МП, на сколько я себе его представляю в контексте С++ не будет полезен, и с ним получится какой нибудь монстроидальный гибрид.

Старауструп может и считает (к стати, можно глазами убедится где именно он так считал), но я больше верю тех. репортам комитета, все таки не мнение одного двигает язык. Boost - не костыли, а скорее показатель того, куда должен двигаться язык. Да, там есть местами костыли, и они как раз и показываю что в языке плохо, что хорошо, и что должно быть убрано/введено. Это и называется эволюция, то что сделало С самым широкоиспольземым языком когда-то, то что делает одним из таковых сейчас С++. Не то что, как говорится "сделаю свой язык с фремворком и кроссплатформенностью", позвать дельфиста и сделать С#, который кроссплатформеный только на разных версиях винды и "привет, мир" на котором грузится по несколько минут.

Но мы не туда ушли. Началось то все с того, что "лучше учить java и С#" потому как в "плюсах много костылей, и вообще лучше трогать в крайнем случае". Можно по подробнее, каких именно костылей, и если это действительно костыли чем они плохи при обучении? И куда девались минусы java и С# именно в процессе обучения?

Опубликовано
Знаешь его досканально - считай знаешь любой язык, в том числе и функциональный

0xDEADBEEF всё таки получается заявлял.

ФП (имеется ввиду шаблонное метопрограммирование)

Приехали. Причём тут шаблонное метапрограммирование ? Это про то, что например MAP/REDUCE и т.п. можно в С++ реализовать шаблонами или о другом ?

Уж прости 0xDEADBEEF у меня складывается впечатление что ты оперируешь каким то набором слов. Не особенно вдаваясь в то что они означают.

- В функциональном программировании внимание акцентируется на том, что должно быть вычислено, а не как.

- Основной рабочий инструмент - функции "высокого порядка" (функции, оперирующие функциями, оперирующими функциями).

- Все, что можно делать с "данными", можно делать и с функциями (вроде передачи функции другой функции в качестве параметра).

- Использование рекурсии в качестве основной структуры контроля потока управления. Не существует иной конструкции цикла, кроме рекурсии.

- Акцент на обработке списков (отсюда название языка Lisp - LISt Processing). Списки с рекурсивным обходом подсписков используются в качестве замены циклов.

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

Элементы функционального программирования это очень мощные средства, подчас делающие программы компактнее, понятнее и быстрее. Но только если они поддерживаются синтаксисом языка. Иначе все превратится в костыль.

Незнаю как можно программировать на С++ в стиле функционального программирования. Поэтому предлагаю разрешить ситуацию примерами кода:

Найти факториал 1000. Код на Python.

Структурное программирование:


def fac(n):
if n == 0:
return 1
return fac(n-1) * n

print fac(1000)

Функциональное программирование:


print reduce(lambda x, y: x*y, range(1, n), 1L)
n=1000

Получить список простых чисел, меньших 1000. Код на Python.

Структурное программирование:


for number in xrange(3, 1001, 2):
for divisor in xrange(3, math.sqrt(number)+1, 2):
if number % divisor == 0:
break
else:
print number,
import math

Функциональное программирование:


print filter(None,map(lambda y:y*reduce(lambda x,y:x*y!=0,map(lambda x,y=y:y%x,range(2,pow(y,0.5)+1)),1),range(2,1000)))
import math

А на С++ как будет :P ?

Опубликовано
Знаешь его досканально - считай знаешь любой язык, в том числе и функциональный

Заявлял что? Что С++ функциональный - нет, читайте внимательно мои посты.

Дел в том, что оно так и называется template metaprogramming. Смотрим boost::MPL или boost::fusion и видим все желаемое и еще больше. Из нас двоих пока факты с неба берет только один, и это не я.

Приведенные признаки ФП, относящиеся к функциям высших порядков появились в С++ почти 20 лет назад с появлением STL. Который, к стати говоря, многие из плюсофобов не любят. Остальные также присутствуют, что мы сейчас и увидим.

Принимаю, и первый же пример написан в функциональном стиле.

Предположим, что пример №1 выглядит так:


int ret = 1;
for (int i = 1; i<=n; ++i)
ret*=i;
return ret;
}
int fact(int n){


struct Fact{
enum{value = Fact::value*n};
};

template <>
struct Fact<1>{
enum{value = 1};
};
template 

Ответ на пример 2 напишу вечером. К стати, 2 - тоже простое число.

Опубликовано

С неба ничего не беру. Раз нет в спецификации, в синтаксисе языка функционального функционала (boost вроде как частью языка не является) значит и научится функционально фунциклировать :D программировать на С++ нельзя.

З.Ы. Признаю с помощью boost.MPL оказывается можно. Но однозначно это путь Джедая.

Оказывается шаблоны придуманы в помощь программистам, а не для самоистязаний садомазохистам.

Опубликовано

чето не вижу в питоне фунционального программирования. Вижу много предопределенных функций. Ну определю я функции map, reduce, range, xrange и будет почти также выглядеть на С++

Опубликовано
Boost включен полностью в стандарт C++0x.

Посыпаю голову пеплом, С++ не так прост как мне казалось. Думаю на этом тему стоит закрыть.

чето не вижу в питоне фунционального программирования.

Конечно это не Lisp и Haskell, но тем неменее поддержка в Python функционального программирования вполне серьёзная. Функций map(), reduce(), filter() и оператора lambda достаточно для написания практически любой программы на Python. Все управляющие конструкции (if, elif, else, assert, try, except, finally, for, break, continue, while, def) можно воспроизвести, используя исключительно функции и операторы функционального программирования.

Ну определю я функции map, reduce, range, xrange и будет почти также выглядеть на С++

Не всё так просто. Во первых для таких фокусов будет нужна очень эффективная динамическая типизация. Во вторых необходимо будет реализовать ленивые вычисления иначе функциональный код будет опять таки не эффективен. А потом добиться чтоб всё это работало без глюков.

И на самом деле всё просто, lambda это вариант записи простой функции.


def g(x):
return x*3

Лямбда функция
g = lambda x: x*3
print g(120)

или так
print (lambda x: x*3)(120)

>>> 360
Обычная функция:

map() - это цикл (своеобразный аналог foreach), т.е. обработка всех элементов списка с помощью переданной функции.


lst=[1,2,3,4,5]
print (map(lambda x: x*3, lst))

>>>[3,6,9,12,15]
Каждый элемент умножается на 3

reduce() - применяет переданную функцию к каждому значению в списке и ко внутреннему накопителю результата;



>>3628800

Так находится факториал 10 - умножить каждый элемент на результат предыдущего умножения
reduce(lambda n,m:n*m, range(1,11))

filter() - применяет переданную функцию к каждому элементу списка и возвращает список тех элементов исходного списка, для которых переданная функция вернула true.


lst = range(2, 101)
for i in range(2, 8):
lst = filter(lambda x: x == i or x % i, lst)
print(lst)

>>> [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

Так можно найти простые числа меньше 100. Сначала мы генерируем список чисел от 2 до 100. Затем цикл “for” обходит возможные делители - от 2 до 7. Числа кратные этим делителям не могут быть простыми числами, поэтому используя функцию filter() удаляем их из списка. Пример не очень эффективный (ленивых вичислений не получится) но зато понятный.

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...