Оболочка разработки 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
- выбрать набор инструментов платформы, который является версией компилятора для использования.
Да... вид. Ruby испытывает недостаток в разумной конструкции для осуществления неизменности. (Object#freeze
не рассчитывает), Неизменность является действительно краеугольным камнем функциональных языков. Далее, оперативные библиотеки Ruby высоко ориентированы к обязательному дизайну. Array
и Hash
классы оба изменяемы по своей природе, даже String
имеет методы, которые делают ненеизменными (например. gsub!
). Как ни странно, Java более "функционален", чем Ruby в этом отношении.
После этих слов возможно сделать как будто функциональное программирование в Ruby. Любое время Вы используете block/proc/lambda, Вы используете функцию, которая прибывает из функционального программирования. Аналогично, методы сбора как map
и zip
также конструкции высшего порядка, которые находят их корни на языках как Lisp, ML и Haskell.
Если Вы действительно захотите сделать функциональное программирование, то Вы захотите использовать язык, который более приспособлен к тому жанру. Некоторые предложения:
Вы заметите, что три из этих четырех языков со статическим контролем типов. На самом деле, в случае Scala и Haskell, это очень статически типизированные языки (намного более сильные системы типов, чем, скажем, Java). Я не уверен, почему это - тенденция на функциональных языках, но там у Вас есть она.
Это имеет довольно исчерпывающий набор пониманий списка - см. статью Martin Fowler. Однако это - система типов, не так мощно как подобные Haskell. Кроме того, его фокус не находится на неизменности, как типично для функциональных языков.
Это зависит, что Вы подразумеваете под "Функциональным программированием". По моему мнению, самая важная вещь состоит в том, что функции являются значениями первого класса, и в этом отношении Ruby является функциональным языком.
Смотрите на Haskell. Это - функциональный язык, который синтаксически очень похож на Ruby.
Для большей части использования, да. Существует (хотя несколько ограничен) способность сделать приправление карри, функции первого класса и рекурсию. Но из-за высокой стоимости создания объекта и отправки метода, глубокая рекурсия может получить Вас в быструю проблему!
Ruby является большим количеством способного вписывания в разнообразие программирования "форм", но это, конечно, не оптимально в большинстве из них.
Вы также столкнетесь с проблемами справедливо быстро при использовании какого-либо вида рекурсивного алгоритма. 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
После нескольких тысяч повторений (в зависимости от Вашей системы)