Liệu một cách thay thế gõ tĩnh cho JavaScript trên các trang web có thực tế không?


9

Ưu tiên cho kiểu gõ động và tĩnh phần lớn là vấn đề sở thích và những người khác nhau thấy chúng ít nhiều phù hợp trong các tình huống khác nhau.

Câu hỏi của tôi là, liệu về mặt kỹ thuật có thể có một sự thay thế được gõ tĩnh cho JavaScript để tăng cường trang web phía máy khách, v.v.?


3
Tại sao không? '`` `
Josh K

2
Bạn đang nói về một ngôn ngữ gõ tĩnh giả định mà mọi trình duyệt sẽ phải thực hiện, hoặc khả năng hiện có?
user281377

2
Bạn có thể sử dụng các applet Java, tôi cho rằng.
David Thornley

@ammoQ mà một người bạn đề cập, Giả thuyết
Armand

@ Tôi không biết. @David LOL, cảm ơn vì điều đó!
Armand

Câu trả lời:


22

Chắc chắn không có lý do kỹ thuật nào mà một thứ như vậy không thể tồn tại. Không có gì đặc biệt về mã phía máy khách bắt buộc sử dụng các ngôn ngữ được gõ động.


1
Dart có kiểu gõ tĩnh tùy chọn nhưng biên dịch sang Javascript thông thường. www.dartlang.com
Nishant George Agrwal

16

Vì rất khó có ngôn ngữ khác sẽ tìm thấy sự chấp nhận rộng rãi, nên cách tốt nhất của bạn là tạo một phiên bản JavaScript được gõ tĩnh (tức là ngôn ngữ gần với java) và bộ tiền xử lý chuyển đổi ngôn ngữ đó thành JavaScript thông thường.

Ví dụ: tập lệnh của bạn trông như thế:

<script type="text/staticjavascript">
   String foobar(int foo, String bar) {
      String result="";
      for (int i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

và bộ tiền xử lý kiểm tra xem mọi biến, hàm, đối tượng, v.v ... được sử dụng đúng theo loại của nó và thay đổi tập lệnh thành

<script type="text/javascript">
   function foobar(foo, bar) {
      var result="";
      for (var i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

mà mọi trình duyệt có thể xử lý.


5
+1 cho cách tiếp cận thực dụng
Gary Rowe

Thực sự câu hỏi này không phải về chủ nghĩa thực dụng - đó là về lý thuyết. Sẽ nâng cấp.
Armand

2
Tôi cũng sẽ đề nghị sử dụng loại suy luận.
Oliver Weiler

Phương thức trợ giúp: Đề xuất rất tốt, nhưng hiện tại tôi không thay đổi ví dụ của mình, vì suy luận kiểu sẽ làm cho phiên bản tĩnh rất giống với phiên bản động, vì ví dụ này rất đơn giản.
dùng281377

4
Tôi không nghĩ rằng một javascript được gõ tĩnh sẽ rất gần với java, ngoài cú pháp. Javascript và Java có nhiều điểm khác biệt ngoài việc gõ tĩnh so với gõ động - OO dựa trên lớp so với nguyên mẫu cho một. Vì mã mẫu của bạn dường như dựa trên lớp, tôi cho rằng "staticjavascript" là một cách viết sai cho ngôn ngữ đó và nó nên được gọi là "java phía máy khách". +1 để biên dịch thành javascript (btw Google Web Toolkit sẽ biên dịch java thành javascript).
sepp2k

8

Câu hỏi của tôi là, liệu về mặt kỹ thuật có thể có một sự thay thế được gõ tĩnh cho JavaScript để tăng cường trang web phía máy khách, v.v.?

Chắc chắn rồi. Các Google Web Toolkit biên dịch tĩnh đánh máy Java để Javascript ... Chỉ cần nghĩ về nó: tất cả vẻ đẹp và sự linh hoạt của Java, với tất cả các hiệu suất của JavaScript do máy tạo!

Nghiêm túc mà nói, bạn có thể làm điều này cho tất cả các loại ngôn ngữ và nhiều người đã thử (có, hoặc đã có, trình biên dịch cho C và C #). Kết quả cuối cùng có thực tế hay không phụ thuộc vào những gì bạn đang cố gắng thực hiện: Google sau một nền tảng nhất quán để phát triển các ứng dụng phía khách hàng rất lớn và có công cụ JavaScript riêng để khởi động; bạn cũng có thể thấy rằng việc áp dụng một con thú như vậy cho các hiệu ứng di chuột và cuộc gọi AJAX kỳ quặc gây ra nỗi đau hơn nhiều so với việc học cách sống với một chút mã chưa được xử lý ...


3
Tôi hoàn toàn không thể biết bạn có nói đùa về "lợi ích" của GWT hay không. Nếu bạn là, bravo. Làm việc với GWT là một trong những trải nghiệm điên rồ nhất trong cuộc đời tôi.
Nicole

@Renesis: Như thể làm việc với Javascript và khả năng tương thích của trình duyệt đã không còn điên rồ? Nhưng nó có các tính năng bóng bẩy, như tải xuống nhiều hình ảnh trong một hình ảnh, và sau đó cắt chúng trên máy khách.
Macneil

1
@Macneil Họ có thể đã sửa lỗi này ngay bây giờ, nhưng khi tôi làm việc với Sprites, nó gần như phủ nhận tất cả lợi ích vì nó tự động viết các thuộc tính nền CSS khác mà bạn có thể không muốn, vì vậy bạn phải làm lộn xộn CSS của mình mỗi lần để ghi đè lên nó .
Nicole

6

Hầu hết các lợi ích của các ngôn ngữ gõ tĩnh được nhận ra tại thời điểm biên dịch. Nếu ngôn ngữ sẽ được giải thích trên máy khách, thì rất nhiều những lợi thế đó sẽ bị mất. Nếu bạn biên dịch chúng trên máy chủ, thì bạn cần tìm ra cách tải chúng và chạy trên máy khách (nghĩ điều khiển ActiveX). Bạn có thể đi theo một cách tiếp cận hỗn hợp (biên dịch thành một số dạng mã thông báo trung gian), nhưng về cơ bản, bạn đã quay lại với các applet Java.


2
+1 để giải thích lý do có thể tại sao không , không chỉ trả lời nếu có thể.

4

Nó tồn tại rồi.

ActionScript 3 (ngôn ngữ kịch bản đằng sau Flash và Flex) là một phương ngữ của ECMAScript thực hiện các loại mạnh và bạn có thể sử dụng nó theo cách ít nhiều giống với phía máy khách như JavaScript (sự khác biệt là AS3 yêu cầu plugin flash và được biên soạn). Cá nhân tôi cố gắng tránh xa nó trong những ngày này, nhưng nếu bạn đang ở trong trại "tĩnh", hãy cho nó một vòng xoáy.

Điều đó trả lời cho câu hỏi chính và bây giờ chúng tôi có câu hỏi đó, câu hỏi phụ của bạn trở thành "Flash có thực tế không?" Câu trả lời là "có", với một vài "nếu" s và "nhưng"

  • ... Nếu bạn cần ẩn mã của mình vì bất kỳ lý do gì.
  • ... nếu bạn muốn mức độ tương tác cao, rất (quá khứ của jQuery)
  • ... nhưng ngay cả khi không có HTML5, tính tương thích của nhiều trình duyệt đang trở nên tốt hơn gần đây.
  • ... nhưng HTML5 sẽ sớm ra mắt.
  • ... nhưng một trong những điểm thu hút lớn của việc gõ / biên dịch tĩnh (trái ngược với giải thích) là tốc độ được thêm vào mà nó cho phép thông qua tối ưu hóa (và Flash không thực sự có tốc độ rất tốt, mặc dù có hệ thống loại)

AS3 dựa trên ES4 bị bỏ rơi.
gsnedder

3

Về lý thuyết, bạn có thể dán bất kỳ tập lệnh nào trên một trang bạn muốn. Các <script>thẻ có typethuộc tính, sau khi tất cả.

Rào cản duy nhất là có đủ thị phần về mặt triển khai trong các trình duyệt khác nhau để làm cho nó đáng để sử dụng.


Vì vậy, yeah, nó không có khả năng tại thời điểm này.


Vì vậy, không có vấn đề với gõ tĩnh sau đó? Tôi không quá bận tâm về thực tiễn của việc nắm bắt này.
Armand

1
@ Alison: Bạn có thể đặt bất kỳ nội dung văn bản nào bạn muốn trong thẻ script (với một ngoại lệ - nó không thể chứa chuỗi ký tự </script>). Bạn có thể dán mã Brainf * ck vào đó nếu bạn thực sự muốn. Sau đó, tất cả những gì bạn cần làm là triển khai trình thông dịch cho ngôn ngữ bạn đã chọn trong trình duyệt bạn muốn sử dụng.
Anon.

@Anon. cảm ơn, rất thú vị Nếu nó dễ dàng, có lẽ nó đã được thực hiện ở đâu đó. Tôi nhớ <script type="vbscript">từ xưa đến giờ ...
Armand

Alison: vbscript chỉ dành cho IE và một số người đã sử dụng nó khi thị phần của IE> 90%. Ngày nay, với thị phần của IE ở đâu đó khoảng 50%, có lẽ ít hơn ở một số nơi trên thế giới, đó là một điều không nên; và miễn là không có trình duyệt nào có được thị phần lớn như vậy một lần nữa, đừng mong đợi bất cứ điều gì như ngôn ngữ kịch bản phía máy khách mới xảy ra.
user281377

@ Alison: Internet Explorer vẫn hỗ trợ VBScript làm ngôn ngữ kịch bản ... Tôi nên biết, chúng tôi có các trang mạng nội bộ ở đây sử dụng nó (và do đó yêu cầu Internet Explorer - urgh!)
Dean Harding

2

Nó sẽ là thực tế? Không.

Có thể không? Đúng!

Phát triển thay thế gõ tĩnh của riêng bạn cho JavaScript sẽ tốn nhiều thời gian nhất. Tệ nhất, bạn sẽ không thể thuyết phục bất kỳ trình duyệt hiện có nào thực hiện ngôn ngữ kịch bản ứng dụng khách của bạn và sẽ phải tự viết.


Quan tâm để giải thích?
back2dos

Đã thêm một đoạn tiếp theo.
Marcie

Tôi chỉ nói thêm rằng lý do duy nhất tại sao nó có thể không thực tế là tình hình hiện tại. Nếu chúng tôi quay lại thời điểm trước khi Javascript được phát hành, mọi thứ sẽ khác.
yakiv


1

Bạn có thể sử dụng các ngôn ngữ như haXe để viết mã theo cách gõ tĩnh và xuất nó sang javascript. JavaScript đang trở nên rất nhanh, vì vậy nó là ngôn ngữ đầu ra đủ. Cố gắng thực thi một ngôn ngữ gõ tĩnh như một tiêu chuẩn web là gần như không thể. Nỗ lực giới thiệu gõ tĩnh vào JavaScript đã thất bại vì lý do để thảo luận.


1

Về mặt kỹ thuật nó có thể được không? Nếu nó được triển khai trong Java, tôi sẽ nói "rất, rất khó, nhưng có thể" mà không làm giảm hiệu suất đáng kể.

Tôi thực sự đang viết tay một DSL được gõ tĩnh trong Java ngay bây giờ và cách duy nhất tôi tìm thấy để tránh kiểm tra kiểu thời gian chạy là sử dụng tổng quát và loại bỏ các cảnh báo "không được kiểm tra" ... đó là cho đến khi thời gian thực hiện mảng đa chiều (tham số lớp phải được biết tại thời điểm biên dịch và do đó vốn là hữu hạn, trong khi mảng đa chiều đại diện cho vô số loại ...) Thật không may, tôi vẫn cố gắng tìm ra cái này 'Sẽ gặp vấn đề tương tự với các lớp do người dùng định nghĩa.

Điều đó là, tôi tiếp tục vấp phải những vấn đề như vậy, nhưng sau khi ngồi một lúc, tôi nghĩ ra một giải pháp tốt. Vì vậy, để làm điều đó và có các lợi ích hiệu suất của việc gõ tĩnh (không kiểm tra kiểu thời gian chạy), tôi sẽ nói nó cực kỳ khó, nhưng không phải là không thể. Trừ đi hiệu suất, tôi sẽ nói khó nhưng rất có thể.

Tôi biết đó là một câu hỏi cũ, chỉ nghĩ rằng kinh nghiệm của tôi có thể có giá trị với ai đó.


0

Về mặt kỹ thuật có thể viết các tập lệnh phía máy khách bằng bất kỳ ngôn ngữ kịch bản nào mà tác nhân người dùng (trình duyệt) hỗ trợ. Trong thực tế, ngôn ngữ được hỗ trợ rộng rãi duy nhất là JavaScript / ECMAScript. Thuyết phục các nhà sản xuất trình duyệt thực hiện và hỗ trợ một ngôn ngữ mới ở giai đoạn này khó có thể thành công; do đó, nếu bạn muốn sử dụng ngôn ngữ phía máy khách được nhập tĩnh, bạn sẽ cần dịch ngôn ngữ mới sang JavaScript hoặc triển khai trình thông dịch cho ngôn ngữ đó bằng JavaScript.

Có một số dự án đã làm một cái gì đó như thế này; ví dụ: Google Web Toolkit , như được đề cập trong một trong những câu trả lời khác.


0

Cho rằng bạn không có hy vọng có được tất cả các trình duyệt được sử dụng trong thế giới thực để hỗ trợ một ngôn ngữ mới; ngôn ngữ sẽ phải biên dịch xuống jscript.

Vì tất cả các ví dụ của web đều ở dạng jscript, nên ngôn ngữ sẽ giống như jscript.

Tôi nghĩ rằng có một phạm vi với một tập hợp con của bộ dữ liệu của jscript được kiểm tra bởi một trình kiểm tra tĩnh nhưng cũng là jscript hợp lệ. Ví dụ:

  • Tất cả các biến phải có một nhận xét cho biết có các loại trước khi sử dụng đầu tiên.
  • Tất cả các tập quán của các biến phải hợp lệ với ở trên.
  • Hàm / lớp có thể không được sử dụng nếu chúng chưa được khai báo trong một nhận xét #
  • Một nhận xét ở đầu tệp js phải liệt kê tất cả các tệp js khác mà nó phụ thuộc vào.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.