문제

나는 많이 알고 있는 자바의 사람들이 바라보기 시작했고,스칼라 이후에 실행 JVM,그리고 많은 사람들에 Microsoft 세계에서 찾고 있 F#지만,무엇 루비 있으로 자연의 기능 후속?

에서는 순수한 FP 감 Ruby 아무것도 부족하지 않는 대신,그것은 너무 많은 일부는 말할 수 있습니다.기능 언어 힘을 프로그래머지 전역 변수를 사용하고 기타 숙어 많은(가능하지만 사용하는 전역에서 기능한 언어)

도움이 되었습니까?

해결책

두 개의 다른 정의는 무엇인"프로그래밍 기능"이라는 단어의 뜻입니다.할 수 있는 종류의 하나에서의 루비,하지만 당신은 할 수 없습니다.

그 두 개의 정의는:

  • 프로그래밍과 함께 첫 번째 클래스의 기능과
  • 프로그래밍과 함께 수학적 기능

할 수 있는 종류의 프로그램과 함께 첫 번째 클래스에서 기능니다.그것은 지원을 위한 첫 번째 클래스 기능이 있다.사실,그것은 너무 많 에 대한 지원:가 Proc.new, proc, lambda, Method, UnboundMethod, 록 #to_proc->() (아마 일부 나 다른 사람을 잊).

이러한 모든 약간 다르게 동작, 가 약간 다른 구문,약간 다른 행동과 약간 다른 제한이 있습니다.예를 들어:하나만 이는 구문적으로 경량 충분히 당신이 실제로 사용할 수있는 그것은 인구 밀도가입니다.하지만 블록은 일부는 오히려 심한 제한 사항:만 전달할 수 있습니다 하나의 블록 방법,블록되지 않체(는 객체-지향적 언어에서 어떤"모든 것은 개체는 것은" 심각한 제한)및에서 적어도 루비 1.8 거기에 또한 일부 제한 사항이 있습니다.r.t 매개 변수입니다.

참조하는 방법이 다른 것은 매우 어색하다.에 PythonECMAScript 예를 들어,내가 할 수 있습 말 baz = foo.bar 를 참조 bar 방법 foo 체입니다.루비, foo.bar 방법 전화, 면 나는 원하는 참조 bar 방법 foo, 을 말 baz = foo.method(:bar).면 내가 지금 전화 는 방법을 내가 말할 수 없 baz(), 을 말 baz.callbaz[] 나(루비에서 1.9) baz.().

그래서 첫 번째 클래스에서 기능 루비 없 첫 번째 클래스입니다.그들은 그보다 훨씬 더 두 번째 클래스,그리고 그들은 충분히 좋정지만,그들은 완전한 첫 번째 클래스입니다.

그러나 일반적으로,Rubyists 을 떠나지 않는 루비만을 위한 첫 번째 클래스 기능이 있다.루비스 지원은 좋은 충분히 그 어떤 이점을 얻을 수 있습니다 더 나은 지원이 다른 언어에서 일반적으로 먹여 훈련에 노력에 대한 새로운 언어 또는 무언가에 의해 다른 사람 에 익숙한 당신은 지금 해야 합니다.다음과 같,말 RubyGems 또는 단단한 유닉스 통합 또는 Ruby on Rails 또는 구문 또는...

그러나, 두 번째 의 정의 FP 은 품질을 평가하면서 얼굴입니다.당신이 원하는 경우 프로그래밍과 함께 수학적 기능에 루비,당신의 세계에 대한 고통입니다.사용할 수 없습니다 절대 다수의 라이브러리 루비기 때문에,그들의 대부분은 상태 저장,effectful,격려 돌연변이 또는 그렇지 않으면 불순.당신이 사용할 수 없는 표준 라이브러리는 같은 이유입니다.당신이 사용할 수 없는 핵심 라이브러리입니다.당신이 사용할 수 없습의 핵심 데이터 형식이기 때문에,그 모든 변경할 수 있습니다.할 수 있습니다 그냥 말하는"나는 걱정하지 않는 그들은 변하기 쉬운,나는 단순히 그들을 돌연변이와 항상 사본을"그들에게,하지만 문제는:다른 누군가가 여전히 변경할 수 있습니다.또한,때문에 그들은 변하기 쉬운,루비 최적화하지 못할 복사 및 쓰레기 수집가지 위해 조정된 종류의 작업이 있습니다.

그것은 단지 작동하지 않습니다.

거기에는 또한 몇 가지 기능이 있는 정말 아무것도와 함께 할 기능적 프로그래밍 하지만 대부분의 기능적인 언어를 하는 경향이,루비가 없습니다.패턴 매칭에 대한 예입니다.게으름도하기가 쉽지 않았다 달성하기 전에 Enumerators 었다는 더 적극적으로 사용되는 루비에서 1.9.고 있는 여전히 몇 가지 물건과 함께 작동하는 엄격한 Enumerables Arrays 지만 게으른 Enumerators 있지만,실제로 아무 이유 없이 그들을 엄격.

의 정의 FP,그것은 확실히 의미를 떠나 루비 뒤에 있습니다.

두 가지 주요 언어는 Rubyists 몰려있는 얼랑Clojure.이들은 모두 상대적으로 좋은 일치에 대한 루비기 때문에,그들은 모두를 동적으로 입력한 유사한 복제의 문화로 루비,(이것은 더 레일 것 루비보다는 것)또한 매우 좋은 웹에 있습니다.그들은 여전히 예쁜 작은 및 환 지역,원래의 언어로 제작자는 여전히 활발한 활동에 참여하며 지역 사회,거기에 강한 초점을 맞추고,새로운 흥미 진진하고 날카로운 것들,모두의 특성을 Ruby 커뮤니티도 있습니다.

에 대한 관심이 얼랑을 시작했을 때,사람이 보여 원 1993 소개 video"얼랑:영화"에 RubyConf2006.의 커플이 프로파일 레일을 프로젝트 시작을 사용하여 얼랑,예를 들어 PowerSetGitHub.얼랑도 쉽게 다 Rubyists 기 때문에,그렇지 않을 순도 확로 청정.이 의 배우가 예쁘 순수한,하지만 행위의 메시지를 보내 자신의 부작용 효과가 있다.다른 것은 얼랑을 이해하기 쉽게는 배우와 개체가 실제로 같은 일을 할 때,당신은 따르 Alan Kay 의 정의는 객체-지향 프로그래밍.

Clojure 최근 외 Rubyist 의 toolbelt.그 인기는 나는 대부분에 의해 구동된다는 사실 루비 사회가 마지막으로 따뜻하게하는 아이디어 JVM≠자바고 받아들였 JRuby 고 그들을 찾기 시작하 주변에 무엇 기타 흥미로운 것들이 있었에서 JVM.그리고 다시,Clojure 는 보다 훨씬 더 실용적이 모두 다른 기능적인 언어는 다음과 같켈 및 기타 Lisps 아 그리고 훨씬 더 간단하고 현대적인 것보다 CommonLisp,그래서 그것은 자연에 맞 Rubyists.

다른 멋진 일에 대해 Clojure 기 때문에 모두 Clojure 와 루비에서 실행 JVM,당신 결합 니다.

"의 저자프로그래밍 Clojure"(스튜어트란 halloway)은(전?) Rubyist,예를 들어, 필 Hagelberg, 의 저자 파문을 형성 빌드 도구에 대한 Clojure.

그러나,Rubyists 또한 보고에서 모두 Scala (의 하나로서 더 많은 실용적인 정적으로 입력 FP 언어)와켈(중 하나로 더한 것들).다음과 같은 프로젝트 Scuby오만 는 교량을 통합하는 루비와 스칼라와 특성을 나타내는 각각합니다.트위터의 결정에 이동하는 부분을 그들의 낮은 수준의 메시지 인프라를 먼저에서 MySQL 루비,다음에서 서비스를 제공하도록 널리 알려지고 있습니다.

F# 보이지 않는 어떤 역할을 모두에서,아마도 때문에 불합리한 두려움으로 모든 것을 Microsoft 루비 사회가있다.(는,BTW,보 주로 근거 없는 주어진,F#팀 만든 버전을 사용할 수 있는 모노.)

다른 팁

Java 사람들은 JVM에서 언어를 사용하고 있으며 런타임과 호환되는 더 기능적인 언어를 원하므로 Scala로갑니다.

C# 사람들은 CLR에서 언어를 사용하고 있으며 런타임과 호환되는 기능을 원하므로 F#로 이동합니다.

루비 사람들은 이미 꽤 기능적인 언어를 사용하고 있으며 여러 기본 런타임 (Jruby, Ironruby, MRI, MacRuby, Rubinius 등)에서 사용하고 있습니다. 나는 그것이 자연적인 기능적 후계자를 가지고 있다고 생각하지 않거나 심지어 하나가 필요하다고 생각하지 않습니다.

LISP의 모든 버전은 괜찮습니다.

Ruby It Self는 일종의 기능적 프로그래밍 언어이므로 Ruby를 사용하여 FP를위한 특별한 방언이 보이지 않습니다.

과대 광고 수준에서 Haskell.

루비 사람들이 JVM 자체에 가지 않는다고 가정하면, 나는 대부분의 동적으로 입력 된 언어 인 Erlang을 채택 할 것이라고 생각합니다.

Ruby는 LISP처럼 기능적이지는 않지만 재미있는 방식으로 기능적 프로그래밍을 수행 할 수있을 정도로 기능적입니다. (C#과 같은 기능 프로그래밍을 시도하는 것과 달리)

또한 실제로 블록 및 수율의 많은 사용과 같은 일부 구문에서 기능적 패러다임을 강요합니다. (루비를 배우고 난 후에 사랑에 빠졌습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top