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

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


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

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() удаляем их из списка. Пример не очень эффективный (ленивых вичислений не получится) но зато понятный.

Ссылка на комментарий

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



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

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