Tôi sắp bắt đầu một bản phân phối Linux dựa trên LFS chỉ cho một dự án sở thích. Tôi có kế hoạch thực hiện một số nhiệm vụ rất không chuẩn, và hầu hết nó sẽ liên quan đến việc thay đổi gần như tất cả các kịch bản trong bản phân phối. (chủ yếu là init script, nhưng tôi cũng sẽ viết một tập hợp đơn giản các kịch bản quản lý gói.) Vì tôi sẽ vượt xa tiêu chuẩn này, và vì tôi chưa bao giờ là một fan của các ngôn ngữ gõ động (perl, python, bash và phần còn lại là tốt, nhưng không phải là sở trường của tôi), tôi đã tự hỏi nếu có ai biết ngôn ngữ thông dịch thực sự đã khai báo biến.Bất kỳ ai biết về bất kỳ ngôn ngữ kịch bản được nhập tĩnh nào?
Trả lời
Tìm trong lệnh "sắp chữ" trong trình yêu thích của bạn. bash và ksh93 đều có thể thực thi các số nguyên và chuỗi, sử dụng tham chiếu (biến biến), v.v. Với ksh93, bạn cũng có thể thực hiện phép toán dấu chấm động và sử dụng các đối tượng với các thuộc tính. Đánh máy tĩnh không thực sự giúp bạn mua bất cứ thứ gì hữu ích trong các tập lệnh init và tương tự. Bạn chủ yếu sẽ đọc các tập tin và chạy các lệnh hệ thống - đó là những gì thực sự tốt. Hãy dành một chút thời gian với cuốn sách O'Reilly "học Korn Shell" trước khi quyết định rằng tất cả những Unixes khác được thiết kế ngu ngốc ...;)
và "set -o nounset" sớm trong kịch bản ... – dannysauer
Đây là một gợi ý khủng khiếp. Nếu OP không ngôn ngữ động, anh ta sẽ * ghét * shell scripting. Chúng năng động hơn bất kỳ ngôn ngữ kịch bản nào khác. –
Câu trả lời này cung cấp một gợi ý để thực thi các loại trong một ngôn ngữ mà OP đã quen thuộc với một tập lệnh init có thể đã được viết. Tôi đoán tôi sẽ nhận được nhiều phiếu hơn nếu tôi vừa nói "điều này là không thể" hoặc "ở đây, sử dụng ngôn ngữ này mà ba người đã nghe nói về," :) – dannysauer
Thông thường, các ngôn ngữ được nhập tĩnh sẽ được biên dịch ngôn ngữ. Tôi đoán lý do là, phân tích thống kê các loại là khá tốn kém và bạn phải có một chiều sâu nhìn vào tất cả các mã bạn đang xử lý. Sau khi bạn đã làm điều đó nó cảm thấy như một sự lãng phí để không viết tất cả các thông tin đó vào một tập tin, do đó bạn không phải làm điều đó một lần nữa trong thời gian tới. Vì vậy, bạn nhanh chóng kết thúc với một ngôn ngữ biên soạn.
Mặt khác, để biến ngôn ngữ được biên dịch thành một ngôn ngữ "chưa được biên dịch" khá dễ dàng. Bạn chỉ cần không lưu trữ các kết quả của quá trình biên dịch ở bất cứ đâu nhưng thực thi chúng trực tiếp. Một trình biên dịch mà tôi biết cung cấp trình bao bọc như vậy là GHC, trình biên dịch chuẩn Haskell. Bạn có thể thêm #!/usr/bin/runhaskell
vào tệp nguồn của bạn và sau đó trực tiếp thực hiện chúng. Và kể từ khi bạn đang có kế hoạch để được ra khỏi tiêu chuẩn, Haskell có vẻ như một sự phù hợp hoàn hảo;). Nhưng mong đợi một số thời gian khởi động khá lớn cho các kịch bản của bạn, bởi vì tất cả các phân tích "thời gian biên dịch" và tối ưu hóa không phải là miễn phí.
Haskell không được tạo cho shell scripting và nó là một ngôn ngữ chức năng, vì vậy nếu bạn chưa bao giờ thấy nó trước đây, có thể mất chút thời gian để làm quen. Nhưng nó có rất ít chi phí cú pháp và sức mạnh của các ngôn ngữ chức năng là trừu tượng, vì vậy tôi không thấy lý do tại sao bạn không thể tạo một thư viện mà làm cho kịch bản shell vui vẻ. Thậm chí còn có một số experimental Haskell shell, nhưng nó dường như là một bằng chứng về khái niệm hơn là một giải pháp thực sự.
Nói chung tôi sẽ nói chi phí của tất cả các phân tích kiểu là quan trọng, nhưng tôi khuyên bạn nên chọn ngôn ngữ được biên dịch tĩnh được yêu thích và tìm kiếm một trình bao bọc như runhaskell
để thực thi các tập lệnh được viết trong đó.
Không có ngôn ngữ * biên dịch * như vậy. Mọi ngôn ngữ có thể được thực hiện bởi trình biên dịch hoặc thông dịch viên. Và, trên thực tế, phần lớn các ngôn ngữ lập trình có ít nhất một triển khai của mỗi ngôn ngữ. Ngoài ra, hầu hết các triển khai ngôn ngữ hiện đại đều có * cả * trình biên dịch * và * một trình thông dịch. Vì bạn đề cập đến Haskell: Hugs là một trình thông dịch Haskell. V8 là trình biên dịch JavaScript. PowerShell của Microsoft là một trình biên dịch. Một vài năm trước, các nhà phát triển Bash đã suy nghĩ về việc chuyển sang thực hiện được biên dịch. HotSpot JVM vừa là phiên dịch và biên dịch –
google nhanh. F3, tập lệnh javaFX, Ngôn ngữ kịch bản lệnh Linden (kịch bản cho cuộc sống thứ hai), Không giống như nhận xét về câu trả lời đầu tiên F # có thể được sử dụng làm ngôn ngữ kịch bản http://blogs.msdn.com/chrsmith/archive/2008/09/12/scripting-in-f.aspx
Felix, Tuga, CFGScript, Talc, Angelscript và đoán thêm hơn tìm kiếm nhanh đó.
Douglas
Groovy. Theo mặc định nó là động, vịt gõ. Nhưng cũng hỗ trợ gõ tĩnh.
- 1. Có bất kỳ ngôn ngữ kịch bản lệnh được nhập tĩnh nào không?
- 2. Bất kỳ ai biết về bất kỳ mẫu T4 nào để tạo các lớp từ xsd?
- 3. Có bất kỳ ngôn ngữ nào được nhập động nhưng không cho phép nhập sai?
- 4. Bất kỳ ai cũng biết hướng dẫn về Silverlight tốt?
- 5. Krypton Điều khiển bất kỳ ai?
- 6. Thư đối sánh bằng bất kỳ ngôn ngữ nào
- 7. Có ai biết về bất kỳ hướng dẫn tốt nào cho Slick 2D lib không?
- 8. Có ai biết về bất kỳ bộ sưu tập sprite nào không?
- 9. Bất kỳ ai sử dụng Qi4J
- 10. Tham khảo lập trình Bất kỳ ai?
- 11. Bất kỳ ai sử dụng Rhino Security?
- 12. Bất kỳ hướng dẫn nào về libclang?
- 13. Nguồn đào tạo tốt cho OOP PHP, Bất kỳ ai?
- 14. Bất kỳ ai đã thử ngôn ngữ lập trình tinh thể (mã máy được biên dịch Ruby)?
- 15. Bất kỳ ai biết về bất kỳ Plugin Mặt nạ jQuery nào hoạt động với Xác thực không bị bóp méo MVC?
- 16. API bất khả tri về ngôn ngữ
- 17. Bất kỳ lời khuyên nào tốt về cách tránh chu kỳ nhập trong Go?
- 18. .net Regular Expression để phù hợp với bất kỳ loại lá thư từ bất kỳ ngôn ngữ
- 19. Mảng bản ghi vs bất kỳ []
- 20. Trong Javascript bất kỳ cách nào để biết kịch bản máy chủ lưu trữ được tải từ đâu?
- 21. Bất kỳ ai cũng biết cách sử dụng tràn văn bản CSS trên văn bản được gói?
- 22. Có bất kỳ ngôn ngữ nào biên dịch thành Bash không?
- 23. Dịch trang web sang bất kỳ ngôn ngữ cụ thể nào, trên trang tải
- 24. Bất kỳ sự bất lợi về hiệu suất của GC.disable?
- 25. Bất kỳ ai biết về việc triển khai java.util.Map được tối ưu hóa để sử dụng bộ nhớ thấp?
- 26. Java hoặc bất kỳ ngôn ngữ nào khác: Phương thức/lớp nào đã gọi cho tôi?
- 27. Bản ghi được liên kết với bất kỳ bảng nào?
- 28. Cách sử dụng đúng các xét nghiệm đơn vị (bằng bất kỳ ngôn ngữ nào)
- 29. Eclipse không nhận ra bất kỳ nhập khẩu nào
- 30. Emacs: bất kỳ hướng dẫn tốt nào về việc tạo đánh dấu cú pháp cho ngôn ngữ tùy chỉnh?
Python được nhập mạnh mẽ. Không năng động. Bạn không thể thêm số và chuỗi âm thầm mà không có chuyển đổi rõ ràng. – George
@gdivos: Python được nhập mạnh mẽ * và * động.Đó là động vì bạn có thể thử gọi bất kỳ hàm nào với bất kỳ đối số kiểu nào và loại thông số không khớp sẽ không được phát hiện cho đến khi thời gian chạy. Một ngôn ngữ tĩnh sẽ phát hiện vấn đề đó tại thời gian biên dịch (hoặc ít nhất, trước thời gian chạy). –
Không có ngôn ngữ thông dịch nào như vậy. Mọi ngôn ngữ có thể được thực hiện bởi trình biên dịch hoặc thông dịch viên. Và, trên thực tế, phần lớn các ngôn ngữ lập trình có ít nhất một triển khai của mỗi ngôn ngữ. Ngoài ra, hầu hết các triển khai ngôn ngữ hiện đại đều có cả trình biên dịch và trình thông dịch. Vì bạn đề cập đến Haskell: Hugs là một trình thông dịch Haskell. V8 là trình biên dịch JavaScript. PowerShell của Microsoft là một trình biên dịch. Một vài năm trước, các nhà phát triển Bash đã suy nghĩ về việc chuyển sang thực hiện được biên dịch. HotSpot JVM vừa là phiên dịch vừa là trình biên dịch. –