Erlang Là Gì

Cuộc tranh biện rét rộp vềScala vs. Erlangqua những trang blog vừa mới đây càng những. Tương lai đã là đa lõi,tuy vậy câu hỏi sẽ là rủi ro khủng hoảng nhiều lõi sẽ tiến hành giải quyết chũm làm sao. Scala với Erlang là hai ngôn từ có chức năng thay đổi lời giải nhất, nhưng mà bọn chúng tương đối khác nhau. CùngBizfly Cloudkhám phá ưu với yếu điểm của bọn chúng là gì?

Năm 2008,Erlang,Clojure, vàScalabước đầu nổi (nhưng lại không nổi rõ nhỏng bây giờ). Mình khủng hoảng rủi ro đắn đo nên chọn học thằng như thế nào, sau cùng học luôn cả tía (theo vật dụng trường đoản cú trên). Hiện mình muốn nhấtErlangbởi cú pháp nó đơn giản dễ học (còn dễ hơn JavaScript, tuy vậy học xong còn sáng dạ ra, chđọng không chỉ là có mỗi hiểu biết thêm một cỗ cú pháp ngữ điệu mới) và dễ dàng scale ra những thiết bị. Còn vào phần nhiều project thì mình dùng Scala vì ngữ điệu gần gũi nhỏng Ruby cùng Erlang, hoàn toàn có thể dùng tương đối nhiều thỏng viện Java với Scala tất cả sẵn (ko cần sử dụng thì... ngu). Clojure thì bản thân thấy cực nhọc sử dụng.

Bạn đang xem: Erlang là gì


Hình ảnh 1.

Vấn đề

Định luật pháp Moore sẽ biến đổi. Chúng ta cần yếu tăng xung nhịp CPU lên mãinhư trước đó được. Txuất xắc vào kia, chúng ta có không ít lõi rộng. Trong thời điểm này, ngay cả sản phẩm công nghệ xách tay của bạn cũng có thể gồm nhị lõi.

Để dùng được rộng một lõi, vận dụng của người tiêu dùng buộc phải nhiều nhiệm. Nếu người sử dụng của bạn đặt hàng vật dụng gồm 8 lõi, các bạn sẽ khó ăn uống nói Khi giải thích đến họ là hay công tác chỉ cần sử dụng được khoảng tầm 12% khả năng của CPU, ngay cả giả dụ vật dụng chỉ dùng để làm chạy mỗi chương trình kia.

Trong sau này, điều đó còn tồi tệ hơn. Không phần lớn công tác 1-1 nhiệm của khách hàng không chạy nkhô cứng rộng, mà thật ra nó còn chạy chậm chạp hơn. Lí bởi vì là bạn càng có nhiều lõi, thì mỗi lõi vẫn chạy đủng đỉnh rộng vày lí bởi năng lượng cùng sức nóng. Máy tính với Smartphone có tương đối nhiều corebây giờ là chuyện siêu bình thường, với xu hướng của công nghệ cho biết trong khi các bạn không nhận thấy thì số lõi vẫn lên đến hàng chục ngàn. Nhưng từng lõi đã chạy chậm rì rì rộng so với lõi hiện thời.

Mã nhiều nhiệm

Vấn đề minh bạch nhằm giải bài bác toán thù là viết (cùng viết lại) ứng dụng thành đa nhiệm. Cách phổ cập tốt nhất là sử dụng luồng (thread), nhưng mà phần nhiều thiết kế viên nhận định rằng vận dụng nhiều luồng vô cùng cực nhọc viết. Treo (deadlock), đói (starvation) và tình trạng đua (race condition) là gần như tư tưởng vượt thân thuộc với nhiều phần thiết kế viên lập trình đa nhiệm. Cả Erlang với Scala phần đông giúp giải thoát nỗi khổ kia.

Sơ lược về 2 ngôn ngữ

Scalacòn thỉnh thoảng được coi là ngôn ngữ mới với nổi độc nhất được chạy xe trên JVM. Nó phối kết hợp xây dựng hướng đối tượng người sử dụng và thiết kế hàm, có cú pháp xúc tích hơn Java, định thứ hạng tĩnh và nhanh, thậm chí còn thỉnh phảng phất còn nkhô nóng hơn hết JavaScript. Có nhiều lí do để mày mò Scala cẩn thận.

Erlanglà ngôn ngữ có thiết kế với mục tiêu Chịu được "va đập", nhưng nhờ vào thiết kế đó, nó là ngữ điệu dễ dàng scale. Nó Thành lập trước Java, cơ mà lại thường xuyên được xem như là ngữ điệu của sau này đa nhiệm. Nó là ngôn từ định dạng hình hễ, hàm, với từng được dùng để làm viết ra khối hệ thống số đông không khi nào down.

Cuộc ttinh quái luận

Thế thì cuộc bàn cãi Scala vs. Erlang là về cái gì? Cốt lõi là tốc độ với kỹ năng scale, tuy nhiên cuộc tranh luận cũng bao hàm các vật dụng khác ví như phong cách, thiên tài ngôn ngữ cùng tlỗi viện cung cấp. Cuộc tranh biện bắt đầu một bí quyết ko nhà đích Khi Ted Newardđưa ra ý kiến về vài ba ngôn từ với bảo rằng "vấn đề Erlang gồm công tác phiên dịch riêng biệt là xấu".

Steve sầu Vinoskicùng Ted trường đoản cú này đã bàn cãi vài lần, nhưng mà cuộc bàn bạc sau đó gửi sang vài blog khác chỗ nó nhấn mạnh các biệt lập với tương đương độc đáo thân Scala với Erlang. Chúng tôi sẽ tổng kết từng điểm độc đáo nhằm nêu ra ưu và kmáu của từng ngữ điệu với những ý kiến khác nhau về vài vụ việc.

Độ tin cậy

Steve sầu Vinoski vấn đáp post của Ted, nói tới câu hỏi Erlang điều khiển xe trên chươngtrình thông dịch riêng rẽ.

Việc nó chạy xe trên chương trình thông ngôn riêng rẽ của nó là vấn đề tốt; nếu không nó không có an toàn cùng sẽ chỉ là ngôn từ kì quái new mang tính thể nghiệm.

Steve nói rằng trong cả Lúc ngôn từ đáng tin cậy, thì mẫu dùng để chạy nó cũng phải tin cậy. Vì Erlang ngay từ đầu vẫn được thiết kế để xứng đáng tin cậ cùng nhiều nhiệm, nó không chạm mặt sự việc thường tạo ra lúc chuyển sang đa nhiệm, hay là tlỗi viện dưới nên chạy giỏi trong cơ chế nhiều nhiệm.

Scala chạy trên JVM với điểm đáng để ý là chương trình Scala có thể sử dụng mã Java bao gồm sẵn. Tuy nhiên, không ít mã Java ko được thiết kế mang lại đa nhiệm, đề xuất mã Scala đề xuất tính mang lại vụ việc này.

Tiến trình hạng vơi (lightweight process)

Để chạy rất nhiều ứng dụng nhiều nhiệm, bắt buộc chạy đồng thời nhiều đồ vật. Có vài ba phương pháp triển khai vấn đề này. Dùng luồng là giải pháp phổ cập, dùng quy trình là 1 trong cáh nữa. Điểm không giống nhau là luồng cần sử dụng tầm thường không khí bộ lưu trữ với nhau, còn các bước khác nhau thì ko cần sử dụng tầm thường gì cả. Điều đó gồm nghĩa luồng yêu cầu vẻ ngoài loông xã nhỏng mutex để ngnạp năng lượng nhì luồng thao tác làm việc thuộc bộ lưu trữ đồng thời, nhưng mà các bước thì ko gặp mặt vấn đề này với cố kỉnh chính vì vậy nó cần sử dụng cách truyền thông media điệp để liên hệ với nhau. Nhưng thường quy trình khá "tốn tiền" Lúc xét mang đến tốc độ sinh sản và bộ lưu trữ sở hữu, với đó là một trong lí vị bạn ta thường chọn luồng nhằm tiến hành đa nhiệm, ngay cả Lúc cạnh tranh xây dựng.

Steve Vinoski viết:

Khả năng đa nhiệm trlàm việc nên dễ ợt lúc bao gồm cấu trúc cung cấp quy trình dịu, mà lại điều ấy không có nghĩa rằng một lúc xây dựng kết thúc kết cấu này, sự việc còn sót lại không những dễ dàng là hợp tác viết công tác.

Erlang theo phía tiếp cận này. Tiến trình Erlang khôn xiết nhẹ, cùng một lịch trình Erlang thông thường có vài chục nlẩn thẩn cái.

Scala ngoài ra thực hiện câu hỏi tựa như bởi actor dựa vào sự kiện (event-based actor). Yariv Sadan lý giải phương pháp làm:

Scala gồm nhị các loại Actor: dựa vào luồng với dựa trên sự kiện. Actor dựa vào luồng chạy vào luồng hạng nặng nề của hệ quản lý điều hành. Chúng chạy tuy vậy tuy nhiên với nhau, dẫu vậy tất yêu không ngừng mở rộng ra rộng vài ba ndại dột actor bên trên một vật dụng ảo. Actor dựa vào sự kiện là đối tượng người dùng bình thường. Chúng khôn xiết dịu cân nặng, và, nhỏng quá trình của Erlang, hoàn toàn có thể tạo ra hàng triệu dòng bên trên máy tính xách tay thông số kỹ thuật bình thường.

Xem thêm: Là Gì? Nghĩa Của Từ Cái Cân Trong Tiếng Anh Là Gì? Cái Cân (Để) Bàn Tiếng Anh Là Gì

Tuy nhiên cũng có điểm khác hoàn toàn, Yariv giải thích:

Điểm khác cùng với các bước của Erlang là trong những luồng của hệ quản lý điều hành, những actor dựa vào sự kiện chạy tuần từ (sequentially) với không có mẫu như thế nào được ưu tiên rộng chiếc nào. Điều này dẫn tới việc một actor dựa vào sự khiếu nại có thể sở hữu toàn thể luồng hệ điều hành quản lý nhưng mà trong số ấy nó đang chạy (có thể không đoán thù trước được).

Tính thiết yếu vắt đổi

Erlang là ngôn từ hàm. Điều này còn có nghĩa tài liệu ko chuyển đổi, nhỏng chuỗi của Java, buộc phải ko xẩy ra hiệu ứng prúc. Bất kì thao tác trên dữ liệu nào thì cũng mọi tạo ra phiên bản mới của dữ liệu, nhưng lại cái cũ vẫn y nguim. Tính thiết yếu đổi khác là nhân tố cực kỳ đặc biệt khiến cho tính bình an yển đưa, vì mã lịch trình quan yếu chuyển đổi dữ liệu cội (dòng hoàn toàn có thể được sử dụng chung). Nếu tài liệu ko đổi khác, nguy cơ nó bị đổi khác do hai loại đang làm việc tuy nhiên tuy vậy là không sống thọ với không dừng lại ở đó tài liệu có thể được coppy sang máy tính không giống mà ko đề nghị nhất quán hoá.

Vì Scala dựa vào JVM cùng kết hợp lập trình hướng đối tượng người dùng là lập trình sẵn hàm, không tồn tại gì đảm bảo an toàn tính quan trọng thay đổi giả dụ so sánh cùng với ngữ điệu hàm. Tuy nhiên, ở đoạn comment của bài của Yariv, gồm cuộc đàm đạo thú vị giữa Yariv và David Pollackvề sự việc không giống nhau của nhì một số loại ngữ điệu. David, tác giả của framework Lift viết bằng Scala, nêu cách nhìn về tính cần yếu chuyển đổi.

Tính bắt buộc thay đổi — Erlang nghiền xây dựng viên phải tuân theo, với phần nhiều tất yêu tránh khỏi khi sử dụng Erlang. Nhưng những điều đó thì các bạn nên đánh thay đổi hầu hết thiên tài tuyệt đối khác của Scala đem sự ép buộc này. Tôi dùng kiểu dáng dữ liệu cần yếu thay đổi khi thiết kế actor với Scala.

Yariv hỏi:

Dùng từng một loại dữ liệu thiết yếu chuyển đổi có phải là bị hạn chế quá không? lấy ví dụ anh quan yếu đem bean tự Hiberate cùng gửi nó đến actor khác.

David trả lời:

Tôi từng làm các sản phẩm xuất bán cho khách dựa trên Scala actor. Thực tế chỉ đề nghị viết thêm tí mã để giải quyết vấn đề tài liệu cần yếu biến đổi này. Chỉ đề xuất khái niệm lớp nhằm đựng thông điệp là chẳng thể đổi khác là xong.

Hệ thống định kiểu

Erlang được định dạng hình động. Scala thì được định thứ hạng tĩnh cùng có khối hệ thống định phong cách to gan lớn mật hơn Java. Tuy nhiên, điểm khác biệt to đối với Java là Scala bao gồm tuấn kiệt từ suy ra kiểu. Điều này có nghĩa bạn có thể vứt bỏ được cực kỳ đoạn mã knhị báo mẫu mã dữ liệu, mã vẫn thật sạch hơn nhưng lại trình biên dịch vẫn đề xuất soát sổ dạng hình.

Trỡ luận về ưu nhược của ngôn từ động cùng tĩnh có thể chẳng bao giờ chấm dứt, nhưng mà kia là vấn đề khác hoàn toàn phải chú ý giữa Erlang và Scala.

Đệ qui đuôi (tail recursion) với vòng lặp

Lại Yariv:

Lập trình hàm cùng đệ qui song song cùng nhau. Thực tế, khó có thể viết công tác Erlang nhưng mà không dùng đệ qui đuôi vì chưng Erlang không tồn tại vòng lặp — nó sử dụng đệ qui cho hầu như sản phẩm (tôi suy nghĩ đây là mẫu hay).

Chắc chắn đây là điểm tạo nên Erlang khác nhiều đối với Scala. Scala có vòng lặp truyền thống lâu đời, dẫu vậy David Pollachồng chẳng thấy đệ qui đuôi bổ ích điểm gì lúc nói:

Đệ qui đuôi — Chẳng thành vụ việc đến actor dựa trên sự khiếu nại.

Trong trường đúng theo này, vụ việc chỉ là ý mê thích và phong thái xây dựng của xây dựng viên.

Cập nhật rét mã chương thơm trình

Vì Erlang được thiết kế theo phong cách do độ tin cậy cao, cập nhật nóng mã chương trình(thay đổi mã lúc chương trình vẫn chạy) là kỹ năng bao gồm sẵn trong ngữ điệu.

JVM cũng hỗ trợ chút ít anh tài này. Lớp có thể thay đổi, tuy nhiên vì khối hệ thống định phong cách tĩnh, danh sách tsay đắm số của hàm tất yêu biến đổi - chỉ thân hàm. Có tlỗi viện nhằm khắc chế điều đó, có framework cho phép làm điều đó.Jonas Bonér gồm ví dụ cách tiến hành vớiScala actor.

Tổng kết

CảScala cùng Erlangphần lớn là ngữ điệu tìm hiểu xử lý khủng hoảng nhiều lõi. Chúng gồm nguồn gốc không giống nhau và tuổi tác khác biệt bắt buộc được bố trí theo hướng tiếp cận khác biệt so với một số sự việc, tuy nhiên chúng giống như nhau nhiều hơn nữa là khác biệt, ít nhất so với vụ việc nhiều nhiệm.

Erlang sẽ được sử dụng vài ba thập kỉ, và vào trong thực tế đã chứng tỏ khả năng trong vô số khối hệ thống phệ. giữa những giảm bớt là không nhiều tín đồ biết, tuy vậy độ phổ biếncũng không ảnh ảnh cộng đồng Erlang mấy.

Scala còn mặt khác còn là một đứa trẻ vào lãnh vực của Erlang. Cũng bao gồm vài ba thành phầm được được đưa vào sử dụng, cũng có công ty tiến công cược sau này đến nó. Lợi cố gắng lớn nhất của Scala so với Erlang là nó chạy xe trên JVM cùng có thể sử dụng mã và lao lý Java gồm sẵn. Tuy vậy, hầu hết mã Java ko tương hợp cùng với quy mô actor của Scala.

Cả nhì ngôn ngữ cung cấp giải pháp giải quyết và xử lý giống như nhau mang đến vấn đề có áp lực ngày càng bự nhưng phần đa ngôn từ khác cực nhọc giải quyết và xử lý. Hi vọng chúng ta vẫn làm rõ rộng thực trạng nhằm rất có thể chọn học một ngữ điệu để giải quyết vấn đề của chính bản thân mình sau khi phát âm ngừng bài tổng kết này.