Tại sao sự nhiệt tình hiện tại cho lập trình chức năng? [đóng cửa]


50

Gần đây tôi đã nghe rất nhiều nhiệt tình về các ngôn ngữ lập trình chức năng, liên quan đến Scala, Clojure và F #. Gần đây tôi đã bắt đầu nghiên cứu Haskell, để tìm hiểu mô hình FP.

Tôi thích nó, nó thực sự thú vị, và phù hợp với nền toán học của tôi.

Nhưng nó sẽ thực sự quan trọng? Rõ ràng, đó không phải là một ý tưởng mới.

Đây là câu hỏi của tôi:

  1. Điều gì đã đóng góp cho sự nhiệt tình gần đây của FP? Có phải chỉ đơn thuần là sự nhàm chán với OO, hoặc có điều gì đó đã thay đổi để làm cho FP trở nên cần thiết hơn trước?
  2. Đây có phải là dấu hiệu của một tương lai FP? Hay đây là một mốt nhất thời, giống như cơ sở dữ liệu hướng đối tượng?

Nói cách khác, bất cứ ai có thể giúp tôi hiểu nơi này đến từ đâu và nó có thể đi đâu?



13
Không phải là một bản sao - đây là câu hỏi tại sao mọi người đột nhiên làm ầm lên, vì đó không phải là một ý tưởng mới, (trong khi câu hỏi đó đang hỏi nhiều hơn về sự khác biệt khách quan).
Peter Boughton

2
Gần đây mọi người đang làm ầm ĩ lên FP? Tin tức cho tôi, tôi nghĩ rằng đây luôn là trường hợp mà một số nhóm đang làm ầm ĩ về việc FP sẽ tiếp quản thế giới lập trình cấp bách như thế nào.
Chris

1
Tôi nghĩ rằng tôi đã trả lời câu hỏi này trên StackOverflow trước đây.
Ken Bloom

1
Vâng - FP đã cũ Tôi nghĩ rằng khi tôi sử dụng Scheme như một sinh viên chưa tốt nghiệp tại Columbia vào năm 1989. Đó là điều mới mẻ sáng chói mà tôi đoán.
Tim

Câu trả lời:


33

Một trong những đổi mới lớn trong FP đã dẫn đến "sự bùng nổ" của sự quan tâm là các đơn nguyên.

Vào tháng 1 năm 1992, Philip Wadler đã viết một bài báo có tên là Bản chất của lập trình chức năng giới thiệu các đơn vị vào lập trình chức năng như một cách để đối phó với IO.

Vấn đề chính với các ngôn ngữ lập trình chức năng, lười biếng, thuần túy là tiện ích trong việc xử lý IO. Đó là một trong những thành viên của "Biệt đội vụng về" trong lập trình, bởi vì "sự lười biếng và tác dụng phụ, theo quan điểm thực tế, không tương thích. Nếu bạn muốn sử dụng một ngôn ngữ lười biếng, nó gần như phải là một ngôn ngữ chức năng thuần túy; nếu bạn muốn sử dụng các tác dụng phụ, tốt hơn hết bạn nên sử dụng một ngôn ngữ nghiêm ngặt. " Tài liệu tham khảo

Vấn đề với IO trước các đơn vị là việc duy trì độ tinh khiết là không thể đối với các chương trình thực sự hữu ích cho mọi thứ. Theo IO, chúng tôi có nghĩa là bất cứ điều gì liên quan đến việc thay đổi trạng thái, bao gồm nhận đầu vào và đầu ra từ người dùng hoặc môi trường. Trong lập trình chức năng thuần túy, mọi thứ đều bất biến, để cho phép sự lười biếng và tinh khiết (không có tác dụng phụ).

Làm thế nào để các đơn vị giải quyết vấn đề của IO? Chà, không thảo luận về các đơn vị quá nhiều, về cơ bản, họ lấy "Thế giới" (môi trường thời gian chạy) làm đầu vào cho đơn nguyên và tạo ra một "Thế giới" mới làm đầu ra và kết quả: nhập IO a = World -> (a, Thế giới).

Do đó, FP đã tham gia ngày càng nhiều vào dòng chính, bởi vì vấn đề lớn nhất, IO (và những người khác) đã được giải quyết. Việc tích hợp vào các ngôn ngữ OO hiện tại cũng đã xảy ra, như bạn đã biết. LINQ là đơn nguyên, ví dụ, thông qua và thông qua.

Để biết thêm thông tin, tôi khuyên bạn nên đọc về các đơn nguyên và các bài viết được tham khảo trong câu trả lời của tôi.


Vô cùng nhiều thông tin, cảm ơn. Tôi chấp nhận câu trả lời này, không phải vì nó đúng và những người khác đã sai (tôi đã nâng cấp một số) mà vì tôi nghĩ rằng nó xứng đáng với khả năng hiển thị kết quả.
Eric Wilson

Một ví dụ phù hợp hơn sẽ là type IO a = UI -> (a, UI)một câu trả lời tuyệt vời mặc dù.
ChaosPandion

@Richard: "gõ IO a = World -> (a, World)" nghe có vẻ quá tốt là đúng (tôi nghĩ tôi sẽ không bao giờ có được đơn nguyên). Tôi đoán bạn ví LINQ với các đơn nguyên vì khi bạn chuyển lambda vào toán tử LINQ, lambda "nhìn thấy" toàn bộ môi trường của nó, điều đó có đúng không?
Stefan Monov

@Stefan: Nghe có vẻ chính xác khi nói lambda nhìn thấy môi trường của nó, nhưng tôi không rõ ràng 100% về điều đó, vì vậy tôi ngần ngại trả lời cho đến khi tôi tự tìm hiểu thêm. Tuy nhiên, tôi có thể nói với sự chắc chắn 100%, rằng LINQ là đơn nguyên, bởi vì những người sáng tạo đã nói như vậy trong nhiều dịp. SelectMany hoàn toàn tương đương với Bind trong Haskell. Nếu bạn chưa đọc "The Marvels of Monads" ( blog.msdn.com/b/wesdyer/archive/2008/01/11/ ám ) Tôi rất khuyến khích điều đó ... nó sẽ tiết lộ cách LINQ thực sự là đơn nguyên. Chúc mừng.
Richard Anthony Hein

1
@Job, Xem blogs.msdn.com/b/wesdyer/archive/2008/01/11/... như tham chiếu trong những nhận xét trên.
Richard Anthony Hein

30

Một trong những vấn đề lớn khi lập trình các ngôn ngữ truyền thống như C, Java, C #, trình biên dịch, v.v. là bạn có một chuỗi các bước khó xử bạn phải thực hiện để hoàn thành một nhiệm vụ nhất định vì trước tiên bạn cần phải chuẩn bị tất cả các phụ thuộc và Phụ thuộc của họ sớm hơn

Một ví dụ: Để làm A, bạn phải có B và C và B phụ thuộc vào D và E, dẫn đến kết quả như

  • CƯỜI MỞ MIỆNG
  • E
  • C
  • B
  • Một

bởi vì bạn phải chuẩn bị các nguyên liệu trước khi bạn có thể sử dụng chúng.

Các ngôn ngữ chức năng, đặc biệt là những ngôn ngữ lười biếng, lật ngược ngôn ngữ này. Bằng cách để A nói rằng nó cần B và C, và để cho thời gian chạy ngôn ngữ tìm ra khi nào cần B và C (lần lượt yêu cầu D và E) tất cả đều được đánh giá khi cần để đánh giá A, bạn có thể tạo ra rất nhỏ và súc tích khối xây dựng, dẫn đến các chương trình nhỏ và súc tích. Các ngôn ngữ lười biếng cũng cho phép sử dụng danh sách vô hạn vì chỉ các yếu tố thực sự được sử dụng được tính toán và không cần lưu trữ toàn bộ cơ sở hạ tầng trong bộ nhớ trước khi có thể sử dụng nó.

Thủ thuật rất hay, đó là cơ chế "ồ, tôi cần B và C" tự động này có thể mở rộng được vì không có hạn chế - như trong chương trình tuần tự - về việc đánh giá này có thể xảy ra ở đâu và khi nào cùng thời gian và thậm chí trên các bộ xử lý hoặc máy tính khác nhau.

Đó là lý do tại sao các ngôn ngữ chức năng rất thú vị - bởi vì cơ chế "phải làm gì khi" được hệ thống thời gian chạy tiếp quản trái ngược với việc lập trình viên phải thực hiện thủ công. Đây là một sự khác biệt quan trọng như bộ sưu tập rác tự động dành cho Java đến C và một trong những lý do chính khiến việc viết phần mềm đa luồng mạnh mẽ, có thể mở rộng trong Java dễ dàng hơn so với C. Nó thậm chí còn dễ viết hơn, phần mềm đa luồng có thể mở rộng trong các ngôn ngữ chức năng ...


3
Điều này đúng trong năm 1950, tất nhiên.
Eric Wilson

1
@FarmBoy, không thực sự, nhưng nó là ngày hôm nay.

5
Điều này khác với Dependency Injection như thế nào?
Bill K

2
@Bill K, quan sát tuyệt vời - Tôi đã không tự mình thực hiện kết nối đó. Sự khác biệt là các đối tượng được chèn - ít nhất là trong Java - được đánh giá một cách háo hức và không được đánh giá một cách lười biếng. Bạn không thể tiêm một danh sách vô hạn.

1
@ Thorbjørn Ravn Andersen Tôi không chắc lắm Tôi hiểu tại sao một danh sách vô hạn sẽ hữu ích, bạn thực sự có thể thực hiện tổng các hoạt động loại (danh sách vô hạn) không? Có vẻ rất khó xảy ra. Mặt khác, nó nghe có vẻ giống như cách Java sử dụng các trình vòng lặp, bạn chỉ cần mã hóa trình lặp theo cách nó chỉ khởi tạo các đối tượng khi bạn yêu cầu chúng - không hoàn toàn vô hạn, nhưng không bao giờ kết thúc (có sự khác biệt LỚN, eh? )
Bill K

21

Vào cuối thập niên 80 / đầu thập niên 90, máy tính đã trở nên đủ mạnh cho OOP kiểu Smalltalk. Ngày nay máy tính đủ mạnh cho FP. FP đang lập trình ở cấp độ cao hơn thường xuyên - trong khi dễ lập trình hơn - không phải là cách hiệu quả nhất để giải quyết một vấn đề nhất định. Nhưng máy tính nhanh đến mức bạn không quan tâm.

Prorgamming đa lõi có thể dễ dàng hơn với các ngôn ngữ lập trình chức năng thuần túy vì bạn buộc phải cách ly mã thay đổi trạng thái.

Ngoài ra biên giới ngôn ngữ lập trình được làm mờ ngày hôm nay. Bạn không cần phải từ bỏ một mô hình nếu bạn muốn sử dụng một mô hình khác. Bạn có thể làm FP ở hầu hết các ngôn ngữ phổ biến để rào cản nhập cảnh thấp.


6
Sẽ thêm một câu trả lời, nhưng bạn nhấn quan điểm của tôi trong câu cuối cùng của bạn; Lập trình chức năng sẽ ngày càng trở nên phổ biến khi số lượng lõi trong một máy tăng lên. Việc thiếu trạng thái vốn có giúp phân chia cơ học các chương trình chức năng giữa các bộ xử lý dễ dàng hơn (có nghĩa là nếu bạn có một chương trình chức năng thuần túy, về mặt lý thuyết, trình biên dịch có thể xử lý song song cho bạn với nỗ lực tối thiểu về phía bạn xem youtube.com/watch không? v = NWSZ4c9yqW8 để thảo luận về song song dữ liệu).
Inaimathi

1
@Inaimathi Ditto. Lập trình chức năng là rất có thể mở rộng, vì vậy nó có ý nghĩa trên các kiến ​​trúc đa lõi.
EricBoersma

Lưu ý rằng nhận xét đầu tiên của tôi đã được viết trước khi câu trả lời được chỉnh sửa để chứa một tuyên bố bổ sung.
Inaimathi

Xin lỗi vì điều đó. Tôi chỉ quên điểm này.
LennyProgrammer

Có thực sự thường chấp nhận rằng các trình biên dịch chức năng không thể tạo mã máy được tối ưu hóa như một OOPS không? Tôi không thể nghĩ ra bất kỳ lý do lý thuyết nào tại sao điều đó phải đúng; và tôi có thể nghĩ ra những cách tối ưu hóa nâng cao hơn có thể có trong OOPS.
Jeremy

7

Ngày nay cần cho máy tính phân tán.

FP sử dụng các hàm như các khối xây dựng, không có trạng thái, do đó, việc gọi chúng n lần với cùng tham số sẽ luôn trả về cùng một giá trị, chúng không có tác dụng phụ.

Do đó, bạn có thể gửi cùng chức năng cho một loạt các máy để thực hiện và thực hiện công việc song song.

Trong mô hình OO, điều này khó hơn một chút, bởi vì các khối xây dựng là các đối tượng, gần như theo định nghĩa trạng thái. Nếu bạn gọi nhiều lần cùng một phương thức, bạn phải cẩn thận trong việc đồng bộ hóa dữ liệu nội bộ, để tránh hỏng dữ liệu. Mặc dù vẫn có thể, mô hình FP hoạt động tốt hơn OO trong một số tình huống trong đó tính toán phải được phân phối.

Sự ra đời của FP (và NoQuery ở một mức độ nào đó) xuất hiện sau những câu chuyện về kết quả điện toán tuyệt vời trong hàng trăm ngàn máy tính hoạt động song song, và nó dễ dàng như thế nào.

Nhưng có lẽ đây chỉ là một loại ứng dụng cần loại thiết lập này. Đối với nhiều người, nhiều ứng dụng / hệ thống khác, thủ tục và OO hoạt động tốt.

Vậy là tất cả sắp sửa mở rộng tầm nhìn lập trình của chúng ta và lấy lại những khái niệm mà chúng ta từng nghĩ sẽ không vượt ra ngoài giới học thuật.

Tôi đã học lập trình ở Lisp nhiều năm trước, và hồi đó tôi không biết đó là FP. Đến bây giờ tôi đã quên gần như mọi thứ về nó, nhưng chắc chắn giúp tôi hiểu các khái niệm như đệ quy rất dễ dàng.


2
Câu hỏi là hỏi về lợi thế của các ngôn ngữ giống như FP . Những gì bạn mô tả có thể được thực hiện bằng cách sử dụng các ngôn ngữ truyền thống là tốt.
Pacerier

6

Chúng ta đang chuyển sang thời đại mà việc xử lý đa lõi không chỉ là việc được thực hiện trong các phòng sau của phòng thí nghiệm khoa học hoặc trên phần cứng đặc biệt. Bây giờ nó đang được thực hiện với các bộ xử lý hàng hóa. Lập trình chức năng, ít nhất là hầu hết các biến thể mà tôi đã tiếp xúc, thường cố gắng đưa ra một quan điểm về các đơn vị tính toán không trạng thái, không có hiệu lực. Đây là mô hình tinh túy cho công việc đa lõi vì không cần phải giữ trạng thái giao thoa giữa các bộ xử lý.

Đây chỉ là một trong những lý do nhưng một lý do chính đáng để xem chương trình chức năng đang nắm giữ.


5

Tôi nghĩ rằng câu trả lời chính cho câu hỏi đó là 'tiếp xúc'.

Lập trình chức năng không có gì mới, tôi đã được dạy Haskell tại trường đại học khoảng 12 năm trước và yêu thích nó. Nhưng hiếm khi phải sử dụng ngôn ngữ trong công việc chuyên môn của tôi.

Gần đây, đã có một số ngôn ngữ đạt được lực kéo trong luồng chính sử dụng phương pháp tiếp cận đa mô hình; F # , JavaScript là ví dụ điển hình.

Đặc biệt, JavaScript, đặc biệt là khi được sử dụng với ngôn ngữ khung kiểu chức năng như jQuery hoặc Prototype , đang trở thành ngôn ngữ hàng ngày đối với nhiều người do tất cả các công việc trên các trang web hiện đại năng động. Sự tiếp xúc với phong cách chức năng này khiến mọi người nhận ra sức mạnh mà nó mang lại, đặc biệt là khi người ta có thể quay trở lại một phong cách bắt buộc theo ý muốn.

Khi mọi người được tiếp xúc, họ thử các biến thể ngôn ngữ chức năng đầy đủ hơn và bắt đầu sử dụng chúng cho các công việc hàng ngày.

Với việc F # trở thành ngôn ngữ hạng nhất trong Visual Studio 2010 và jQuery (et al) trở nên rất quan trọng, việc sử dụng các ngôn ngữ này trở nên thực tế, thay vì chỉ là thứ gì đó tối nghĩa để chơi với hoặc tạo các chương trình bị cô lập.

Hãy nhớ rằng mã phải được duy trì - một khối lượng lớn các nhà phát triển phải sử dụng và hỗ trợ các ngôn ngữ để các công ty cảm thấy an toàn khi sử dụng chúng.


3

Trong buổi nói chuyện này, Anders Hejlsberg giải thích quan điểm của mình về chủ đề này.

[BIÊN TẬP]

Xin lỗi, liên kết đã sai. Bây giờ nó chỉ đến đúng nơi.

Tóm tắt cực ngắn về một số điểm của cuộc nói chuyện kéo dài một giờ:

Các ngôn ngữ chức năng cho phép một phong cách lập trình khai báo nhiều hơn các ngôn ngữ thủ tục, vì vậy các chương trình được viết bằng FL thường tập trung nhiều hơn vào những gì thay vì làm thế nào . Do cấu trúc toán học thanh lịch của chúng, FL cũng dễ dàng tối ưu hóa và biến đổi hơn bởi các trình biên dịch, điều này cũng cho phép lập trình meta dễ dàng và xây dựng DSL nhúng. Tất cả điều này cùng nhau làm cho các chương trình tự do ngắn gọn và tự ghi lại hơn các chương trình thủ tục.

Ngoài ra, trong thời đại nhiều tương lai gần, các ngôn ngữ lập trình cần có khả năng sử dụng đa luồng / xử lý theo nhiều cách khác nhau. Đa luồng trên các máy lõi đơn có hiệu lực là một cơ chế chia sẻ thời gian và kiến ​​trúc của các hệ thống đã phản ánh điều này. Đa luồng trên nhiều máy sẽ rất khác nhau. Các ngôn ngữ funcional đặc biệt phù hợp để song song hóa, vì chúng chủ yếu tránh trạng thái, do đó, người ta không cần lo lắng nhiều về tính toàn vẹn của dữ liệu có thể thay đổi được chia sẻ (vì có xu hướng không có dữ liệu có thể thay đổi được chia sẻ).


1
Bạn có thể tóm tắt?

1
@Thorbjorn Điều đó làm tôi nhớ đến người đàn ông không thể tóm tắt . (Không chỉ đạo điều đó với bạn, trả lời tác giả.)
Đánh dấu C

1
Liên kết thậm chí không liên kết đến đúng nơi.
Ken Bloom

2

Tôi nghĩ rằng đó là để làm với sự tương quan chặt chẽ giữa mô hình lập trình chức năng và lập trình cho web.

Ruby on Rails đưa toàn bộ cách tiếp cận lập trình chức năng trở nên nhẹ nhõm vì nó cung cấp một đường dẫn rất nhanh đến một ứng dụng web chức năng (heh heh). Có một cuộc thảo luận thú vị về SO về điều này, và một câu trả lời cụ thể nổi bật:

Lập trình chức năng phù hợp với các ứng dụng web rất tốt. Ứng dụng web nhận được yêu cầu HTTP và tạo kết quả HTML. Đây có thể được coi là một chức năng từ yêu cầu đến các trang.

So sánh với các ứng dụng máy tính để bàn, nơi chúng ta thường có một quá trình chạy dài, giao diện người dùng trạng thái và dataflow theo nhiều hướng. Điều này phù hợp hơn với OO, quan tâm đến các đối tượng có trạng thái và thông điệp truyền qua.

Cho rằng lập trình chức năng đã có từ rất lâu đời, tôi tự hỏi tại sao tôi không thấy nhiều quảng cáo việc làm đang tìm kiếm nhà phát triển Lisp cho các dự án web của Greenfield.


Tôi nghĩ rằng sự tương tự về chức năng chỉ áp dụng cho web, vì giao thức cơ bản là không trạng thái. Các ứng dụng web không thực sự không trạng thái, thực tế đó là một lý do mà chúng ta luôn phải làm việc xung quanh HTTP bằng cách nào đó.
Mladen Jablanović

@Mladen Hmmm, có thể là bạn đang kết hợp trạng thái giao tiếp giữa máy khách và máy chủ (HTTP) với trạng thái ứng dụng (DAOs, v.v.) không? Trích dẫn Stefan Tilkov từ đây ( codemonkeyism.com/statless-appluggest-illusion ) "Trong một ứng dụng web, mỗi yêu cầu riêng lẻ phải chứa đủ thông tin để có thể xử lý độc lập cho dù yêu cầu trước đó có xảy ra hay không xảy ra. trạng thái vẫn ổn, trạng thái phía máy khách vẫn ổn, trạng thái giao tiếp (phiên) thoáng qua không phải vì nó sẽ phá hỏng khả năng mở rộng và đánh dấu trang. " Đây là cơ sở của REST.
Gary Rowe

1
bạn có thể muốn đọc paulgraham.com/avg.html để hiểu rõ hơn về lý do tại sao không có nhiều quảng cáo việc làm đang tìm kiếm nhà phát triển Lisp.

@ Thorbjørn Ravn Andersen Bài viết hay. Truyền cảm hứng cho tôi để thoát ra khỏi trình soạn thảo Lisp của tôi.
Gary Rowe

1

Lập trình chức năng mang lại cho tôi cảm giác ngứa ran giống như " wow, cái này mới " như khi tôi mới bắt đầu học hỏi về các vật thể cách đây nhiều năm.

Tôi nhận ra rằng FP không phải là một khái niệm mới cho đến nay, nhưng cũng không phải là OO khi nó đã thực sự phá vỡ vào những năm 1990 khi "mọi người" đột nhiên nhảy lên khỏi chương trình thủ tục. Điều này phần lớn là do sự thành công kịp thời của Java và sau đó là C #.

Tôi tưởng tượng điều tương tự sẽ xảy ra với FP cuối cùng một khi các ngôn ngữ tiếp theo bắt đầu lan truyền theo cùng một cách. Nhiều như họ đã có, ít nhất là trong một số vòng kết nối, với các ngôn ngữ như Scala và F #.


OO trẻ hơn nhiều so với FP, nhưng nó đã đi vào ánh đèn sân khấu trước đó. tôi đoán rằng dấu ngoặc đơn làm mọi người sợ quá nhiều
Javier

1

Đây là câu hỏi của tôi: 1. Điều gì đã đóng góp cho sự nhiệt tình gần đây của FP? Có phải chỉ đơn thuần là sự nhàm chán với OO, hoặc có điều gì đó đã thay đổi để làm cho FP trở nên cần thiết hơn trước? 2. Đây có phải là dấu hiệu của một tương lai FP không? Hay đây là một mốt nhất thời, giống như cơ sở dữ liệu hướng đối tượng?

Những người khác đã đưa ra lý do kỹ thuật tốt.

Tôi nghĩ lý do chính khiến FP đạt được sức hút giữa các loại nhà phát triển và nhà quản lý trung bình là vì nó hứa sẽ cho phép sử dụng CPU đa lõi tốt hơn. Từ tất cả mọi thứ tôi đã đọc FP cho phép lập trình song song dễ dàng hơn (không dễ dàng).

Việc sử dụng rộng rãi trong tương lai sẽ là nếu lời hứa là có thật và được thực hiện.


Đó là một chữ "nếu" lớn. COBOL, "bằng tiếng Anh" sẽ có nghĩa là bất cứ ai cũng có thể lập trình. AI sẽ làm cho lập trình trở nên lỗi thời. OO sẽ làm cho việc lập trình trở nên đơn giản như lắp ráp tinkertoys. Lập trình giống như groupies rock, luôn tìm kiếm những "điều lớn tiếp theo", và một trong những sau đó, và một trong những ...
Mike Dunlavey

0

Tôi nghĩ đó là sự kết hợp của hai xu hướng:

  1. Các tính năng chức năng đang được thêm vào các ngôn ngữ chính (ví dụ C #).
  2. Ngôn ngữ chức năng mới đang được tạo ra.

Có lẽ có một giới hạn tự nhiên đối với xu hướng đầu tiên, nhưng tôi đoán là bất kỳ ngôn ngữ mới nào cũng sẽ phải hỗ trợ lập trình chức năng, ít nhất là một tùy chọn, để được thực hiện nghiêm túc.


0

Trước đây, mọi người thường viết chương trình để chạy trên máy tính để bàn bằng API gốc của hệ điều hành và các API đó thường được viết bằng C, vì vậy, phần lớn nếu bạn muốn viết chương trình cho API gốc, bạn đã viết chương trình đó trong C.

Tôi nghĩ rằng sự đổi mới mới trong khoảng 10 năm trở lại đây là sự đa dạng của các API để bắt kịp, đặc biệt đối với những thứ như phát triển web nơi API nền tảng không liên quan (vì việc xây dựng một trang web về cơ bản liên quan đến thao tác chuỗi). Vì bạn không mã hóa trực tiếp vào API Win32 hoặc API POSIX, điều đó cho phép mọi người tự do thử các ngôn ngữ chức năng.


0

Nó gọn gàng, tiện lợi và làm nhột bộ não của bạn. Tốt rồi.

Đó cũng là, IMHO, một bandwagon cổ điển. Một giải pháp tìm kiếm một vấn đề.

Nó giống như tất cả các công ty khởi nghiệp được thành lập bởi các kỹ sư đã lóa mắt với một ý tưởng yêu thích, bùng cháy trong một thời gian, nhưng lặng lẽ bị các công ty thành lập dựa trên việc cung cấp những gì cần thiết.

Đó là ý tưởng mới mà tôi muốn thấy cất cánh, lập trình dựa trên nhu cầu, không phải lập trình dựa trên ý tưởng tiện lợi. Có thể điều đó nghe có vẻ trần tục, nhưng tôi nghĩ rằng trên thực tế nó có thể khá sáng tạo và tiện lợi.


-1

Chắc chắn là do F #, mặc dù đôi khi thật khó để nói cái nào là nguyên nhân và cái nào là hiệu ứng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.