Ruby может действительно использоваться в качестве функционального языка?

Оболочка разработки VS скрыта в меню «Пуск» (Visual Studio 2017->Visual studio Tools->VC), и есть несколько вариантов на выбор.

Затем вы можете использовать командную строку для запуска cmake -G "Visual Studio 14 2015 Win64".

Если это сработает или нет, я не совсем уверен, потому что генератор будет искать ключи реестра для «Visual Studio 14 2015», чтобы определить правильный путь msbuild. Но он не установлен, потому что вы используете visual studio community 2017, который работает совершенно по-другому.

Поэтому, когда cmake не удается найти msbuild для VS14, по умолчанию будет указано то, что находится на пути, и это будет msbuild для VS 2017.

Именно тогда вы узнаете, совместимо ли дополнение с cmake VS14 проектами и наборами инструментов.

Может быть, надстройка - это просто VS14 наборы инструментов. Если это так, вы хотите сгенерировать проект VS17 и использовать опцию -T, чтобы использовать набор инструментов VS14.

Также Visual Studio и CMake называют msbuild инструментом для сборки. Опция -T - выбрать набор инструментов платформы, который является версией компилятора для использования.

10
задан fooledbyprimes 17 October 2008 в 19:45
поделиться

6 ответов

Да... вид. Ruby испытывает недостаток в разумной конструкции для осуществления неизменности. (Object#freeze не рассчитывает), Неизменность является действительно краеугольным камнем функциональных языков. Далее, оперативные библиотеки Ruby высоко ориентированы к обязательному дизайну. Array и Hash классы оба изменяемы по своей природе, даже String имеет методы, которые делают ненеизменными (например. gsub!). Как ни странно, Java более "функционален", чем Ruby в этом отношении.

После этих слов возможно сделать как будто функциональное программирование в Ruby. Любое время Вы используете block/proc/lambda, Вы используете функцию, которая прибывает из функционального программирования. Аналогично, методы сбора как map и zip также конструкции высшего порядка, которые находят их корни на языках как Lisp, ML и Haskell.

Если Вы действительно захотите сделать функциональное программирование, то Вы захотите использовать язык, который более приспособлен к тому жанру. Некоторые предложения:

  • Clojure - Так как Вы формулировали вопрос с помощью Ruby, я предполагаю, что Вы имеете убеждение с динамическим контролем типов. Clojure похож на строго функциональный Lisp, который работает на JVM.
  • F# - В основном OCaml на CLR. Очень хороший, очень чистый
  • Scala - Не строго функциональный язык, но намного лучше для него, чем Ruby
  • Haskell - Общий фаворит!

Вы заметите, что три из этих четырех языков со статическим контролем типов. На самом деле, в случае Scala и Haskell, это очень статически типизированные языки (намного более сильные системы типов, чем, скажем, Java). Я не уверен, почему это - тенденция на функциональных языках, но там у Вас есть она.

12
ответ дан 3 December 2019 в 23:15
поделиться

Это имеет довольно исчерпывающий набор пониманий списка - см. статью Martin Fowler. Однако это - система типов, не так мощно как подобные Haskell. Кроме того, его фокус не находится на неизменности, как типично для функциональных языков.

2
ответ дан 3 December 2019 в 23:15
поделиться

Это зависит, что Вы подразумеваете под "Функциональным программированием". По моему мнению, самая важная вещь состоит в том, что функции являются значениями первого класса, и в этом отношении Ruby является функциональным языком.

4
ответ дан 3 December 2019 в 23:15
поделиться

Смотрите на Haskell. Это - функциональный язык, который синтаксически очень похож на Ruby.

-4
ответ дан 3 December 2019 в 23:15
поделиться

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

Ruby является большим количеством способного вписывания в разнообразие программирования "форм", но это, конечно, не оптимально в большинстве из них.

0
ответ дан 3 December 2019 в 23:15
поделиться

Вы также столкнетесь с проблемами справедливо быстро при использовании какого-либо вида рекурсивного алгоритма. Ruby не поддерживает хвостовую рекурсию, поэтому если Вы не можете надежно использовать рекурсию в качестве итеративного метода как Вы, был бы как естественный способ сделать вещи на более функциональном языке. Что-то как:

def foo(n)
  puts n
  foo(n + 1)
end

foo(1)

Даст Вам

SystemStackError: stack level too deep
    from (irb):2:in `puts'
    from (irb):2:in `foo'
    from (irb):3:in `foo'
    from (irb):5

После нескольких тысяч повторений (в зависимости от Вашей системы)

0
ответ дан 3 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: