2009-01-10 20 views
10

Tôi chỉ muốn biết tất cả các vấn đề nhỏ có giữa bạn và giải pháp cuối cùng của bạn khi bạn mới sử dụng Erlang.Học Erlang? speedbump thread, common, small problems

Ví dụ, đây là những speedbumps đầu tiên tôi có:

  1. Sử dụng controlling_process (Socket, Pid) nếu bạn đẻ trứng tắt theo nhiều chủ đề. Gói phải cho đúng chuỗi.
  2. Bạn sẽ bắt đầu nói chuyện với một máy chủ khác? Nhớ net_adm: ping ('car @ bsd-server'). trong vỏ. Khác không có thông tin liên lạc sẽ được thông qua.
  3. Hẹn giờ: ngủ (10), nếu bạn không muốn làm gì cả. Luôn hữu ích khi gỡ lỗi.
+0

Câu hỏi hay Joe, nhưng bạn nên có câu trả lời của bạn làm câu trả lời hoặc giữ câu trả lời cho câu hỏi của bạn, chứ không phải cả hai. Tốt hơn là họ nên trả lời. – ryeguy

Trả lời

1

controlling_process()

Sử dụng controlling_process (Socket, Pid) nếu bạn đẻ trứng tắt theo nhiều chủ đề. Gói phải cho đúng chuỗi.

1

net_adm: ping()

Bạn sẽ bắt đầu nói chuyện với máy chủ khác? Nhớ net_adm: ping ('car @ bsd-server'). trong vỏ. Khác không có thông tin liên lạc sẽ được thông qua.

0

timer: giấc ngủ()

Tạm dừng cho ms X.

0

Điều khiến tôi mất nhiều thời gian nhất để có được đầu xung quanh chỉ là ý tưởng cấu trúc mã của tôi hoàn toàn xung quanh các cuộc gọi chức năng và gửi tin nhắn. Phần còn lại của nó hoặc chỉ rơi ra từ đó (sinh sản, các nút từ xa) hoặc cảm thấy như những thứ thông thường bạn phải học bằng bất kỳ ngôn ngữ mới nào (cú pháp, stdlib).

2

Tích hợp nó vào msvc 6, vì vậy tôi có thể sử dụng trình chỉnh sửa và xem kết quả trong cửa sổ đầu ra.

Tôi tạo ra một công cụ, với

lệnh - đường dẫn đến erlc

luận - + debug_info $ (FileName) $ (FileExt)

Initial mục - $ (fileDir)

Đã kiểm tra Sử dụng cửa sổ đầu ra.

5
  • Learning để duyệt qua các tài liệu tiêu chuẩn

    Một khi bạn học cách tài liệu OTP được tổ chức nó trở nên dễ dàng hơn để tìm thấy những gì bạn đang tìm kiếm (bạn có xu hướng cần phải học mà ứng dụng cung cấp những mô-đun hoặc các loại mô-đun).

    Cũng chỉ duyệt tài liệu cho các ứng dụng thường khá bổ ích - Tôi đã phát hiện ra rất nhiều mã thực sự hữu ích theo cách này - sys, dbg, toolbar, v.v.

  • Sự khác biệt giữa erlang vỏ và mô-đun erlang

    Shell erlang là một phương ngữ hơi khác nhau để mô-đun erlang. Bạn không thể xác định các chức năng mô-đun (chỉ vui), bạn cần tải các định nghĩa bản ghi để làm việc với các bản ghi (rr/1) và vân vân. Học cách viết mã erlang về các hàm ẩn danh có phần phức tạp, nhưng rất cần thiết để làm việc trên các hệ thống sản xuất với một trình bao từ xa.

    Tìm hiểu tương tác giữa trình bao và {start, spawn} _link ed processes - khi bạn chạy một số mã shell bị treo (tăng ngoại lệ), quá trình shell thoát và sẽ phát tín hiệu thoát cho bất kỳ thứ gì bạn liên kết. Điều này sẽ lần lượt tắt máy gen_server mới mà bạn đang làm việc. ("Tại sao quá trình máy chủ của tôi giữ biến mất?")

  • Sự khác biệt giữa biểu erlang và biểu thức bảo vệ

    biểu Guard (khi khoản) không phải là biểu thức Erlang. Chúng có thể trông giống nhau, nhưng chúng khá khác nhau. Các nhân viên bảo vệ không thể gọi hàm erlang tùy ý, chỉ có các chức năng bảo vệ (length/1, kiểm tra kiểu, element/2 và một vài chức năng khác được chỉ định trong tài liệu OTP). Các lính canh thành công hay thất bại và không có phản ứng phụ. Biểu thức Erlang mặt khác có thể làm những gì họ thích.

  • Mã tải

    Làm việc ra khi nào và cách mã nâng cấp làm việc, các câu thần chú để có được một gen_server để nâng cấp lên phiên bản mới nhất của một module gọi lại (code:load(Mod), sys:suspend(Pid), sys:change_code(Pid, Mod, undefined, undefined), sys:resume(Pid).).

    Đường dẫn máy chủ mã (code:get_path/0) - Tôi không thể đếm số lần tôi gặp phải lỗi chức năng không xác định hóa ra là tôi quên thêm thư mục ebin vào đường dẫn tìm kiếm mã.

  • đang xây dựng erlang

    làm việc ra một sự kết hợp hữu ích của emake (make:all/0erl -make) và làm gnu mất một thời gian khá dài (khoảng ba năm cho đến nay :).

    makefiles yêu thích hiện tại của tôi có thể được nhìn thấy ở http://github.com/archaelus/esmtp/tree/master

  • Erlang phân phối

    Bắt tên nút, dns, cookies và tất cả các phần còn lại ngay trong trật tự để có thể net_adm:ping/1 nút khác. Điều này có thực hành.

  • từ xa vỏ IO phức tạp

    Ghi nhớ để vượt qua group_leader()-io:format cuộc gọi chạy trên nút từ xa để đầu ra xuất hiện trong vỏ của bạn chứ không phải là một cách bí ẩn biến mất (Tôi nghĩ rằng báo cáo SASL trình duyệt rb vẫn có một vấn đề với việc gửi một số sản lượng của nó đến nút sai khi sử dụng qua kết nối remote shell)

2
  • Debugging là khó khăn. Tất cả những gì tôi biết là phải kết nối các cuộc gọi đến "error_logger: info_msg" trong mã của tôi.
  • Tài liệu đã được chú ý - chúng đúng, nhưng rất rất ngắn gọn.
  • Đây là lỗi của riêng tôi, nhưng: Tôi bắt đầu viết mã trước khi tôi hiểu eunit, vì vậy rất nhiều mã của tôi khó kiểm tra hơn mức cần thiết.