Hỏi đáp về IT
Mã xác nhận Thay đổi một

Scala vs. GO

Duyệt qua: 229
Giới thiệuKể từ khi tôi tham gia vào DevOps  Dữ liệu lớn, tôi đã sử dụng hai ngôn ngữ lập trình xuất sắc nhưng khá khác biệt: GO  Scala .Scala là một ngôn ngữ lập trình cũ hơn và trưởng thành hơn đã tìm thấy vị trí thích hợp trong các lĩnh vực như lập trình đồng thời và xử lý Dữ liệu lớn. Mặt khác, Go là một ngôn ngữ mới hơn, đơn giản hơn được tạo ra bởi Google để vượt qua những lời chỉ trích về C ++; thiết kế một ngôn ngữ có bộ xử lý đa lõi .Cả hai đều là những ngôn ngữ tuyệt vời có thể đạt được hiệu suất tuyệt vời cho các ứng dụng đồng thời và xử lý luồng nhưng thiết kế của chúng khá khác nhau. Trong bài viết này, tôi sẽ cố gắng cung cấp cho bạn một cái nhìn tổng quan nhanh về cả hai ngôn ngữ, ưu điểm và nhược điểm của chúng và xem xét một số trường hợp sử dụng từ thực tế mà chúng tôi sẽ đề xuất ngôn ngữ này hơn ngôn ngữ kia.Tóm lại là ScalaScala là một ngôn ngữ lập trình được tạo ra bởi các học giả và nó là ngôn ngữ thay thế đầu tiên cho Java chạy trên JVM . Nó tự định nghĩa là:
Scala là một ngôn ngữ lập trình đa mô hình hiện đại được thiết kế để diễn đạt các mẫu lập trình phổ biến một cách ngắn gọn, trang nhã và an toàn về kiểu chữ. [1]
Scala là cả hai, chức năng  hướng đối tượng, cung cấp những gì tốt nhất của cả hai thế giới. Nó có một cách linh hoạt để xác định các chương trình của bạn và tùy thuộc vào bạn để quyết định cách bạn muốn mô tả chúng: từ lập trình thuần chức năng đến lập trình hướng đối tượng thuần túy.Giống như Java, Scala là hướng đối tượng :
Scala là một ngôn ngữ hướng đối tượng thuần túy theo nghĩa mọi giá trị đều là một đối tượng . Các kiểu và hành vi của các đối tượng được mô tả bằng các lớp  đặc điểm . [1]
Nó cũng cung cấp hỗ trợ cho lập trình chức năng và một hệ thống kiểu tĩnh mạnh mẽ . Không giống như Java, Scala có nhiều tính năng của các ngôn ngữ lập trình chức năng như Scheme , Standard ML  Haskell , bao gồm currying , kiểu suy luận , tính bất biến , đánh giá lười biếng  đối sánh mẫu . Nó cũng có một hệ thống kiểu nâng cao hỗ trợ các kiểu dữ liệu đại số , hiệp phương sai và phương sai , các kiểu bậc cao hơn (nhưng không phải kiểu bậc cao hơn ) vàcác loại ẩn danh .
Scala cũng là một ngôn ngữ hàm theo nghĩa là mọi hàm là một giá trị . Scala cung cấp một cú pháp nhẹ để xác định các hàm ẩn danh, nó hỗ trợ các hàm bậc cao hơn , cho phép các hàm được lồng vào nhau và hỗ trợ currying . [1]
Hình ảnh cho bài đăng
Các tính năng khác của Scala không có trong Java bao gồm nạp chồng toán tử , tham số tùy chọn, tham số được đặt tên  chuỗi thô . Ngược lại, một tính năng của Java không có trong Scala được kiểm tra ngoại lệ , điều này đã gây tranh cãi.Scala được sử dụng nhiều trong Dữ liệu lớn trong số các trường hợp sử dụng khác. Các công ty như Twitter đã chuyển sang Scala, đặc biệt là vì hỗ trợ đồng thời tốt hơn. Scala mạnh mẽ nhưng khó học và vẫn có một số vấn đề về khả năng tương thích với Java.Hai động lực chính của việc sử dụng Scala là khung công tác Akka dựa trên hệ thống tác nhân để lập trình đồng thời và công cụ xử lý Spark cho Dữ liệu lớn. Do tính chất học thuật của nó, Scala không tìm thấy nhiều cách sử dụng từ thực so với các ngôn ngữ khác, ngoài Akka hoặc Spark. Mặc dù nó được sử dụng nhiều trong các tổ chức tài chính.Thang đo ưu điểm
    Chạy trên JVM . Nó đi kèm với tất cả các tối ưu hóa JVM được xây dựng trong nhiều năm và nó tương thích với Java .Rất ngắn gọn, nó yêu cầu ít mã soạn sẵn hơn so với Java hoặc GO.Chức năng và Hướng đối tượng .Các hệ thống kiểu là rất mạnh mẽ. Bạn có thể xây dựng DSL tùy chỉnh cho thư viện của mình, thực thi kiểm tra tại thời điểm biên dịch và hơn thế nữa.Tất cả các lợi thế của lập trình chức năng.Hệ sinh thái Akka dựa trên mô hình tác nhân làm cho nó trở thành một lựa chọn tuyệt vời cho các hệ thống đồng thời.Công cụ xây dựng mạnh mẽ .Đa năng . Scala có thể được sử dụng để thể hiện bất kỳ loại vấn đề nào.
Khuyết điểm về quy mô
    Tính phức tạp. Khó học và thành thạo. Thường được sử dụng bởi các lập trình viên cao cấp.Quá rộng , có cả trăm cách để diễn đạt cùng một thứ, mỗi nhà phát triển Scala có một phong cách riêng và rất khó để duy trì tính nhất quán của mã trong một dự án lớn.Một số vấn đề tương thích với Java ; Ngoài ra, nếu bạn cần sử dụng các thư viện Java, nó sẽ lấy đi những lợi thế của Scala.Trình biên dịch chậm. Mặc dù có những công cụ như Bloop giúp giảm thiểu các vấn đề.Nó kế thừa các vấn đề JVM cho các ứng dụng gốc đám mây như kích thước vùng chứa lớn, thời gian cảnh báo chậm, khó điều chỉnh, chậm triển khai, v.v.Mặc dù khá linh hoạt, Scala chỉ tìm thấy một số ngách nhất định và nó không được áp dụng rộng rãi.
Trường hợp sử dụng
    Dữ liệu lớn và Phân tích . Do hệ thống loại mạnh và khả năng mở rộng, nhiều công cụ trong thế giới Dữ liệu lớn như Spark sử dụng Scala. Nó là ngôn ngữ ưa thích cho các Kỹ sư dữ liệu và các công cụ phát trực tuyến và hàng loạt lớn.Hệ thống đồng thời và ứng dụng thời gian thực . Các Akka Framework là nổi tiếng cho nó khả năng mở rộng cho các hệ thống đồng thời và sử dụng rộng rãi trong kinh doanh dịch vụ và hệ thống đánh giá cao đồng thời khác bằng cách sử dụng JVM.Các API đồng thời cao . Các Chơi Khung cung cấp một khuôn khổ web đánh giá cao đồng thời để xây dựng ứng dụng và API hỗ trợ bởi Akka .Đá nguyên khối . Scala là lựa chọn tuyệt vời cho các ứng dụng nguyên khối lớn, thậm chí cả các ứng dụng phân tán. Sử dụng Akka clustering, bạn có thể tạo các ứng dụng có tính phân tán cao bên trong một ứng dụng duy nhất.Nói chung, Scala được sử dụng để xây dựng khung và thư viện cho một miền cụ thể như trường hợp của Akka hoặc Spark.
Tóm lạiCờ vây là một con thú khác. So với Scala, nó không thanh lịch, mạnh mẽ hay ngắn gọn nhưng nó được xây dựng cho một mục đích cụ thể và nó làm điều đó cực kỳ tốt.Go được thiết kế bởi Google và nó là cú pháp tương tự C . Mục tiêu của nó là khắc phục các hoạt động không an toàn hiện có trong C ++ bằng cách thêm tính năng an toàn bộ nhớ , thu thập rác , nhập cấu trúc . Nó rất dễ học và sử dụng đơn giản. Nó được xây dựng cho các máy đa lõi để tối đa hóa tính song song cho các chương trình đồng thời. Nó sử dụng các luồng màu xanh lá cây rất nhẹ được gọi là Go Routines để lập trình đồng thời.
Go biên dịch nhanh chóng sang mã máy nhưng có sự tiện lợi của việc thu thập rác và sức mạnh của phản ánh thời gian chạy. Đó là một ngôn ngữ được biên dịch, được đánh máy tĩnh, nhanh chóng, có cảm giác giống như một ngôn ngữ được đánh máy và thông dịch động. [2]
Go nhỏ , nhưng nó bao gồm nhiều trường hợp sử dụng như microservices, xử lý luồng, CLI và hơn thế nữa. Golang cung cấp hỗ trợ tuyệt vời để sản xuất mã nhị phân cho các nền tảng khác nhau mà không cần phải cài đặt Go trên mục tiêu. Do kích thước nhị phân nhỏ và hiệu quả, nó rất phù hợp cho các ứng dụng gốc đám mây được đóng gói trong Container. Vùng chứa ứng dụng của bạn có thể được đóng gói thành một vùng chứa nhỏ (~ 5–10MB) có thể được triển khai chỉ trong vài giây, làm cho nó trở thành một lựa chọn tốt hơn nhiều cho các dịch vụ vi mô so với các ngôn ngữ JVM. Để biết thêm thông tin, hãy xem bài viết của tôi về việc triển khai Go Microservices trong Kubernetes .
Hình ảnh cho bài đăng
Tiến lên
    Trình biên dịch siêu nhanh , nó giống như một ngôn ngữ được thông dịch. Trải nghiệm tuyệt vời dành cho nhà phát triển. Quá trình phát triển nhanh chóng và tăng năng suất .Đơn giản và an toàn , điều tôi thích ở GO là thường chỉ có một cách diễn đạt các vấn đề, điều này đẩy nhanh quá trình phát triển, đánh giá mã và nói chung là toàn bộ quá trình phát triển.Tuyệt vời cho cả nhà phát triển cấp dưới và cấp cao. Nó rất dễ học và áp dụng vì nó không yêu cầu môi trường ảo.Sự lựa chọn hoàn hảo cho các ứng dụng gốc đám mây và Kubernetes . Do kích thước nhỏ, không có thời gian và tốc độ khởi động.Tiền tệ tương đồng được thực hiện dễ dàng nhờ Go Routines .Thư viện tiêu chuẩn tuyệt vời bao gồm một máy chủ web.GO có thể được sử dụng trong một loạt các trường hợp sử dụng : CLI, ứng dụng web, xử lý luồng, v.v.Sử dụng tài nguyên rất thấp . Bạn có thể chạy hàng triệu Go Routines trong một máy chủ. Nó sử dụng rất ít RAM và CPU so với JVM làm cho nó rẻ hơn nhiều để chạy .
Khuyết điểm
     không ngắn gọn và khó giữ cho mã KHÔ.Những thứ quá đơn giản , cơ bản như Generics không có sẵn trong Go, mặc dù chúng sẽ sớm được bổ sung .Đó là một ngôn ngữ tương đối mới với không nhiều thư viện hoặc hướng dẫn.Quản lý phụ thuộc hơi phản trực quan và khó quản lý nhưng nó đã được cải thiện kể từ khi bổ sunggo mod. Tin tốt là đógo modlà một phần của ngôn ngữ và không phải là một dự án riêng biệtsbt, mặc dùsbtnó mạnh hơn nhiều.Xử lý lỗi rất phức tạp .Không thanh lịch, mạnh mẽ và linh hoạt so với Scala.Còn hơi non nớt , GO mới hơn so với Scala.
Trường hợp sử dụng
    CLI và tập lệnh : Hầu hết các CLI như kubectl đều sử dụng Go.Ứng dụng web . Vì nó có tính đồng thời cao và không yêu cầu nhiều tài nguyên, nên nó hoàn hảo để xử lý các yêu cầu HTTP.Ứng dụng Dòng . Go có thể xử lý hàng triệu sự kiện cực kỳ nhanh chóng bằng cách sử dụng các quy trình của Go. Nó là đối thủ cạnh tranh của dòng Akka ở Scala.Dịch vụ siêu nhỏ . Do kích thước nhỏ, tốc độ và khả năng giám sát, Go là một lựa chọn tuyệt vời cho các dịch vụ điện toán đám mây gốc.Ứng dụng máy chủ và đám mây . Go là một lựa chọn hoàn hảo cho các chức năng Serverless , đặc biệt là trong Google Cloud.
Scala vs GOCác ngôn ngữ lập trình bot thuộc loại mạnh mẽ, có bộ thu gom rác, chúng an toàn, đồng thời cao và có thể xử lý hàng triệu bản ghi mỗi giây.Đối với xử lý Luồng, GO dễ sử dụng hơn và đơn giản hơn nhưng phụ thuộc vào hệ thống pub / sub như Kafka   sở dữ liệu NoSQL như Cassandra . Akka tự nó là một con quái thú và có thể tự quản lý số lượng lớn các yêu cầu mà không cần bất kỳ sự phụ thuộc nào, nó cũng cung cấp nhiều áp lực trở lại như vậy .Đối với các ứng dụng web , Play Framework phù hợp hơn với các ứng dụng web trạng thái hoặc các ứng dụng đã tồn tại lâu, nơi có đủ thời gian để JVM tối ưu hóa ứng dụng. Scala là tuyệt vời cho các dịch vụ nhỏ hoặc đá nguyên khối . Nó cũng là một lựa chọn tốt nếu bạn cần tích hợp với Akka. Mặt khác, GO phù hợp hơn với các dịch vụ vi mô, ứng dụng gốc đám mây và các chức năng Serverless . Đối với các API không trạng thái trên đám mây, tôi sẽ sử dụng GO vì nó rẻ hơn và dễ dàng hơn.GO có hỗ trợ tuyệt vời gRPC, tạo ra một lựa chọn tuyệt vời cho các dịch vụ nhỏ bên trong có thể được tiêu thụ theo kiểu truyền phát cực nhanh.Đối với Dữ liệu lớn, Scala hoặc Python là lựa chọn tốt nhất . GO vẫn còn sơ khai trong thế giới Dữ liệu lớn.Nói chung, GO rẻ hơn để chạy và thuê . Vì vậy, nếu chi phí là một vấn đề, hãy xem xét GO. Mặt khác, các nhà phát triển Scala có xu hướng trở thành những kỹ sư thực sự giỏi, điều này cũng mang lại giá trị cho tổ chức.Mã nguồn GO có xu hướng trở nên khó bảo trì hơn khi ứng dụng phát triển, vì vậy tôi sẽ không khuyên bạn nên sử dụng nó một cách nguyên khối, đối với các dự án lớn hơn và ổn định hơn, Scala là một lựa chọn tốt hơn, đặc biệt cho các doanh nghiệp truyền thống hơn .Hiệu suấtĐây là một câu hỏi khó , nếu bạn thực hiện Google vs GO, bạn sẽ tìm thấy một số bài báo và tùy thuộc vào các bài kiểm tra, kết quả khác nhau. Lúc đầu, GO có vẻ hoạt động tốt hơn đối với các trường hợp sử dụng đơn giản nhưng đối với các tình huống trong thế giới thực, Scala và đặc biệt là Play Framework, bắt kịp do tối ưu hóa JIT JVM , trong thời gian chạy điều chỉnh mã byte bổ sung tối ưu hóa.Đối với các microservices, các ứng dụng không trạng thái và các ứng dụng được container hóa, GO sẽ nhanh hơn và rẻ hơn, đó là một lợi thế rất lớn. Nói chung, nếu chi phí là quan trọng đối với bạn, GO sẽ chiếm thế thượng phong. Đối với các ứng dụng phức tạp, nguyên khối, xử lý trạng thái, Scala là một lựa chọn tốt hơn. Để so sánh chi tiết giữa Go và Play Framework, hãy xem bài viết tuyệt vời này .
Hình ảnh cho bài đăng
GO vs Play REST Nhận hiệu suất, nguồn: https://medium.com/ymedialabs-innovation/rest-api-performance-comparison-between-golang-and-play-991a8f4040deĐối với xử lý Luồng, đó cũng là một câu chuyện. Akka mạnh mẽ và thanh lịch hơn nhiều, nó có một hệ sinh thái khổng lồ và có nhiều chức năng hơn, nhưng nó phức tạp để sử dụng, phát triển và tối ưu hóa. Nếu bạn có một nhóm các nhà phát triển Akka giỏi, họ có thể viết một khối duy nhất xử lý các sự kiện nhanh hơn nhiều so với GO. Tuy nhiên, GO rất đơn giản để mở rộng quy mô.khuyến nghịNếu bạn là nhà phát triển…
    Học GO nếu bạn là nhà phát triển cơ sở và / hoặc bạn không có kinh nghiệm Java nhưng có kinh nghiệm Python hoặc C ++.Tìm hiểu GO nếu bạn muốn làm việc trên đám mây, trong các dự án khởi nghiệp và thú vị.Học GO nếu bạn không đủ khả năng dành nhiều năm để thành thạo một ngôn ngữ mới.Tìm hiểu GO nếu bạn là kỹ sư back-end đang phát triển các ứng dụng và API luồng.Học ĐI nếu bạn nắm bắt được văn hóa DevOps.Tìm hiểu GO nếu bạn đang sử dụng Google Cloud.Sử dụng GO để viết tập lệnh và công cụ dòng lệnh, POC hoặc API siêu nhanh.Tìm hiểu Scala nếu bạn là nhà phát triển cấp cao và / hoặc nhà phát triển Java.Tìm hiểu Scala nếu bạn đã làm việc với JVM và / hoặc bạn chạy tại chỗ.Tìm hiểu Scala nếu bạn đang tìm kiếm các công việc được trả lương cao bằng Akka và Spark.Tìm hiểu Scala nếu bạn đầu tư nhiều vào Dữ liệu lớn.Tìm hiểu Scala nếu bạn muốn làm việc trong các ngành truyền thống hơn như các tổ chức tài chính.
Nói tóm lại, GO rất vui và thú vị, dễ học và đơn giản. Trong 3 tháng, bạn có thể viết các ứng dụng sẵn sàng sản xuất cho các ứng dụng trong thế giới thực. Scala rất thú vị, phức tạp và đầy thử thách nhưng bổ ích, nó trả khá cao và có uy tín hơn, đặc biệt là trong thế giới Dữ liệu lớn.Nếu bạn là một nhà lãnh đạo công nghệ…
    Sử dụng GO khi bạn không có phụ thuộc JVM và có thể chạy các ứng dụng nhị phân bên trong vùng chứa.Sử dụng GO cho các chức năng Serverless thay vì JVM.Sử dụng GO cho các ứng dụng web hoặc API phân phối tồn tại trong thời gian ngắn được quản lý trên đám mây hoặc Kubernetes.Sử dụng GO cho các tập lệnh tùy chỉnh, các công việc nhỏ và CLI.Sử dụng GO để tiêu thụ và xử lý số lượng lớn sự kiện với chi phí thấp, sử dụng rất ít tài nguyên.Sử dụng GO nếu bạn chạy trên đám mây, đặc biệt là Google Cloud.Sử dụng Scala nếu bạn phụ thuộc vào JVM hoặc nhóm phát triển của bạn đã quen thuộc với Java.Sử dụng Scala cho các hệ thống phân tán đồng thời cao tận dụng tối ưu hóa JVM.Sử dụng Scala cho Dữ liệu lớn, đặc biệt là Spark.Sử dụng Scala nếu bạn gặp vấn đề về tỷ lệ với các ứng dụng Java của mình.
Tóm lại, GO là một ngôn ngữ nhị phân tiêu thụ rất ít và rất dễ áp ​​dụng, nó là một công cụ tốt cho vành đai công cụ của bạn nhưng tôi sẽ không sử dụng nó làm ngôn ngữ lập trình duy nhất cho các tổ chức lớn hơn vì nó không linh hoạt như các ngôn ngữ khác. Scala khó hơn nhưng đó là một bước tuyệt vời tiếp theo nếu bạn đã sử dụng Java.Nếu bạn là người quản lý…
    Sử dụng GO như một cơ chế tiết kiệm chi phí. Go rẻ hơn Scala , không chỉ sử dụng ít tài nguyên hơn mà lương của các nhà phát triển cũng thấp hơn.Sử dụng GO cho Serverless hoặc Kubernetes .Sử dụng GO để thu hút tài năng trẻ hơn và giới thiệu công ty như một công ty khởi nghiệp.Sử dụng GO nếu bạn đang chạy trong Google Cloud vì hầu hết các dịch vụ GCP đều dựa trên API GO.Sử dụng Scala cho các ứng dụng đồng thời quan trọng, nguyên khối hoặc hệ thống thời gian thực.Sử dụng Scala để thu hút các nhà phát triển cấp cao có tay nghề cao.Sử dụng Scala cho Dữ liệu lớn .Sử dụng Scala nếu bạn đã sử dụng Java và việc thay đổi tổ chức của bạn rất khó khăn và mất thời gian.Nếu bạn đang tìm kiếm thêm một ngôn ngữ mới và bạn không thể mất nhiều thời gian, GO dễ áp ​​dụng hơn Scala rất nhiều, đặc biệt nếu bạn đã sử dụng C ++ chứ không phải Java.
Tóm lại, GO rẻ hơn để chạy và thuê nhân tài; nó rất dễ sử dụng và có thể được áp dụng trong nhiều trường hợp sử dụng. Nó cũng có thể được sử dụng như một ngôn ngữ bổ sung trong khi bạn vẫn là một ngôn ngữ khác cho các ứng dụng cốt lõi của mình. Scala rất phù hợp cho các dự án lớn hơn và Dữ liệu lớn. Nếu bạn đầu tư nhiều vào JVM, Scala là bước tiếp theo phổ biến.Phần kết luậnTôi đã sử dụng cả hai, Go và Scala trong vài năm qua, cả hai đều có điểm mạnh và điểm yếu. Là một nhà phát triển, tôi thích giải quyết các vấn đề trong Scala , nó khá tao nhã, ngắn gọn và mạnh mẽ; và một niềm vui khi sử dụng ; tuy nhiên trong các vấn đề của thế giới thực, tôi có xu hướng dựa vào GO thường xuyên hơn vì tôi hoàn thành công việc nhanh hơn và rẻ hơn; và đây là cách cư xử khi bạn làm việc trong một công ty cần kiếm tiền. Nhờ thời gian biên dịch và thời gian triển khai nhanh chóng cùng với việc sử dụng tài nguyên rất thấp, GO là ngôn ngữ tiết kiệm chi phí nhất để sử dụng cho các ứng dụng gốc đám mây. Tuy nhiên, đối với Dữ liệu lớn và các hệ thống quan trọng đồng thời cao, Scala là lựa chọn tốt nhất, đồng thời nó cũng trưởng thành hơn GO. Đối với các doanh nghiệp lớn hơn và truyền thống hơn, Scala có xu hướng phù hợp hơn. ,
backend 2020/11/3 13:24

Để lại dấu chân

Bước trên một chân

Bình luận

copyright © backend 2010-2020
Processed in 0 seconds, 0 queries