2011-12-14 13 views
6

Tôi từ từ rơi vào tình yêu với Erlang, và chỉ có một vấn đề lớn, lớn.Đánh máy tĩnh trong erlang

Tôi là một fan hâm mộ lớn của các ngôn ngữ như Standart ML và ocaml với kỹ thuật đánh máy tĩnh mạnh mẽ của họ.

là có một cách tốt đẹp và sạch sẽ để giới thiệu somesort của typechecking tĩnh trong erlang. Tôi đang xem chú thích -type-spec.

Có ai có giải pháp tốt không?

Trả lời

11

Tôi đã ở đó! Tôi yêu cả OCaml và Erlang và thường xuyên sử dụng chúng.

Khi tôi bắt đầu sử dụng Erlang, tôi đã có nhiều năm kinh nghiệm với OCaml. Nó đã cho tôi vài tuần để điều chỉnh để thực tế là không có typechecker tĩnh trong trình biên dịch. Nhưng sau đó, cơn đau đã biến mất hoàn toàn.

Đến một mức độ nhất định, không có người đánh máy là một bài tập đáng giá. Đối với tôi, đó là trải nghiệm giác ngộ và thực sự khiến tôi trở thành một lập trình viên giỏi hơn.

Tuy nhiên, có một máy đánh chữ tĩnh bên ngoài cho Erlang được gọi là Dializer. Tôi thấy nó rất hữu ích. Vấn đề với nó là bạn cần phải gọi nó một cách riêng biệt và nó là chậm. Chạy nó một lần trong một thời gian (ví dụ: trước khi cam kết mã hoặc như là một phần xây dựng tự động) hoạt động tốt. Tôi đã không bao giờ cố gắng chạy nó sau mỗi lần biên dịch vì nó sẽ là quá nhiều của một phân tâm để chờ đợi cho đến khi nó hoàn thành.

+0

bạn có thể giải thích lý do tại sao đi mà không có một typechecker đã làm sáng tỏ? Bạn có nghĩ rằng những người đánh máy là vô dụng trong kinh nghiệm của bạn? – mljrg

+0

Có rất nhiều ứng dụng mà máy đánh chữ cực kỳ hữu ích. Và họ làm việc như ma thuật trong các ngôn ngữ như OCaml. Đối với tôi, một tác dụng phụ của việc luôn luôn dựa vào chúng là phần não của tôi không chú ý đến khía cạnh cao cấp quan trọng của một chương trình. Nó trở thành thứ gì đó giống như một điểm mù và tôi muốn duy trì nhận thức đầy đủ và tập trung vào chương trình tôi đang viết. Điều đó nói rằng, tôi muốn có một typechecker tùy chọn tốt hơn trong Erlang. Không thể đánh bại máy đánh chữ để tái cấu trúc và cộng tác vì không thể duy trì cùng một tiêu điểm với tất cả mã mọi lúc. – alavrik

3

kiểm tra công cụ Dialyzer

bộ lọc là điều một công cụ phân tích tĩnh để xác định sự khác biệt phần mềm như lỗi kiểu nhất định, mã mà đã trở thành chết hoặc không thể truy cập do một số lỗi lập trình, kiểm tra không cần thiết, vv trong các mô-đun Erlang đơn lẻ hoặc toàn bộ (bộ) ứng dụng.

2

tôi chủ yếu sử dụng -spec-type cho các mục đích tài liệu: bạn viết spec với -spec, sau đó kiểm tra xem nó với Typer và sau đó (sau khi thêm một số thông tin bổ sung dưới dạng edoc) tạo ra tài liệu

+0

thats những gì tôi đã kết thúc cũng làm :) –

3

Qua nhiều năm, có là một số nỗ lực để xây dựng hệ thống kiểu trên đầu Erlang. Một trong những nỗ lực đó đã xảy ra vào năm 1997, được thực hiện bởi Simon Marlow, một trong những nhà phát triển hàng đầu của trình biên dịch Glasgow Haskell và Philip Wadler, người đã làm việc trên thiết kế của Haskell và có đóng góp vào lý thuyết đằng sau monads. loại hệ thống). Joe Armstrong sau đó đã nhận xét về bài báo này:

Một ngày Phil gọi điện cho tôi và thông báo rằng a) Erlang cần một hệ thống kiểu, b) anh ta đã viết một mẫu thử nghiệm nhỏ của hệ thống loại và c) có một năm sabbatical và sẽ viết một hệ thống kiểu cho Erlang và “chúng ta có quan tâm không?” Trả lời - “Có.”

Phil Wadler và Simon Marlow đã làm việc trên một hệ thống kiểu trong hơn một năm và kết quả là xuất bản [20]. Kết quả của dự án phần nào là đáng thất vọng.Để bắt đầu, chỉ có một tập hợp con của ngôn ngữ là có thể kiểm tra được, thiếu sót chính là thiếu các loại quy trình và của các loại kiểm tra thông điệp liên tiến trình.

http://learnyousomeerlang.com/types-or-lack-thereof