Những nhược điểm của việc thực hiện thời gian chạy JavaScript đa luồng là gì? [đóng cửa]


51

Tôi đã làm việc trên một triển khai thời gian chạy JavaScript đa luồng trong tuần qua. Tôi có một bằng chứng về khái niệm được tạo trong C ++ bằng JavaScriptCore và boost.

Kiến trúc rất đơn giản: khi bộ thực thi kết thúc việc đánh giá tập lệnh chính, nó khởi chạy và tham gia nhóm luồng, bắt đầu chọn các tác vụ từ hàng đợi ưu tiên chia sẻ, nếu hai tác vụ cố gắng truy cập đồng thời một biến thì nó được đánh dấu nguyên tử và chúng dự định truy cập .

Hoạt động thời gian chạy node.js đa luồng

Vấn đề là khi tôi hiển thị thiết kế này cho một lập trình viên JavaScript, tôi nhận được phản hồi cực kỳ tiêu cực và tôi không biết tại sao. Ngay cả ở chế độ riêng tư, tất cả đều nói rằng JavaScript có nghĩa là một luồng đơn, rằng các thư viện hiện tại sẽ phải được viết lại và gremlins sẽ sinh ra và ăn mọi sinh vật nếu tôi tiếp tục làm việc này.

Ban đầu tôi cũng đã triển khai coroutine bản địa (sử dụng bối cảnh tăng cường), nhưng tôi đã phải bỏ nó (JavaScriptCore là mô phạm về ngăn xếp) và tôi không muốn mạo hiểm với cơn thịnh nộ của họ nên tôi quyết định không đề cập đến nó.

Bạn nghĩ sao? Là JavaScript có nghĩa là một luồng đơn, và nó có nên được để lại một mình không? Tại sao mọi người chống lại ý tưởng về thời gian chạy JavaScript đồng thời?

Chỉnh sửa: Dự án hiện đã có trên GitHub , hãy tự mình thử nghiệm và cho tôi biết bạn nghĩ gì.

Sau đây là hình ảnh về những lời hứa chạy trên tất cả các lõi CPU song song không có sự tranh chấp:

Chạy hứa hẹn đồng thời.


7
Đây có vẻ như là một câu hỏi rất quan tâm. Bạn có hỏi những người dường như không thích ý tưởng của bạn tại sao họ nghĩ nó sẽ rắc rối không?
5gon12eder

26
Thêm chủ đề vào thứ gì đó không có nghĩa là đa luồng cũng giống như chuyển đổi một làn đường thành đường cao tốc mà không cung cấp thông tin cho người lái xe. Nó sẽ hoạt động khá tốt hầu hết thời gian, cho đến khi mọi người bắt đầu gặp sự cố ngẫu nhiên. Với đa luồng, bạn sẽ có những lỗi thời gian tinh tế mà bạn không thể tái tạo hoặc hành vi thất thường hầu hết thời gian. Bạn phải thiết kế với ý nghĩ đó. Bạn cần đồng bộ hóa chủ đề. Chỉ làm biến số nguyên tử không loại bỏ điều kiện chủng tộc.
mgw854

2
Làm thế nào để bạn có kế hoạch xử lý truy cập đa luồng đến trạng thái chia sẻ? "Được đánh dấu là nguyên tử và tranh giành quyền truy cập" không giải thích cách bạn nghĩ điều này sẽ thực sự hoạt động. Tôi đoán rằng thái độ tiêu cực đối với ý tưởng là bởi vì mọi người không biết bạn thực sự làm việc này như thế nào. Hoặc, nếu bạn đặt tất cả gánh nặng lên nhà phát triển như trong Java hoặc C ++ để sử dụng các biến đổi phù hợp và như vậy, thì mọi người có thể đang nghĩ tại sao họ muốn sự phức tạp và rủi ro lập trình đó trong một môi trường không có nó.
jfriend00

17
Bởi vì việc tự động phối hợp trạng thái ngẫu nhiên giữa các luồng được coi là một vấn đề gần như không thể, do đó bạn không có sự tin cậy rằng bạn có thể cung cấp bất cứ điều gì tự động. Và, nếu bạn định đặt lại gánh nặng cho nhà phát triển như Java hoặc C ++, thì hầu hết các lập trình viên của node.js không muốn gánh nặng đó - họ thích rằng node.js không phải đối phó với điều đó hầu hết các phần. Nếu bạn muốn có một đôi tai thông cảm hơn, bạn sẽ phải giải thích / chỉ ra cách thức và những gì bạn sẽ cung cấp về vấn đề này và tại sao nó sẽ tốt và hữu ích.
jfriend00

3
Hãy tiếp tục công việc của bạn. Tôi coi ngôn ngữ mà không đa luồng như ngôn ngữ đồ chơi. Tôi nghĩ rằng hầu hết các nhà phát triển JavaScript đều làm việc với trình duyệt có mô hình một luồng.
Chloe

Câu trả lời:


70

1) Đa luồng là vô cùng khó khăn, và thật không may là cách bạn đã trình bày ý tưởng này cho đến nay ngụ ý rằng bạn đang đánh giá thấp mức độ khó của nó.

Hiện tại, có vẻ như bạn chỉ đơn giản là "thêm chủ đề" vào ngôn ngữ và lo lắng về cách làm cho nó chính xác và hiệu suất sau này. Đặc biệt:

nếu hai tác vụ cố gắng truy cập đồng thời một biến thì nó được đánh dấu nguyên tử và chúng tranh giành quyền truy cập.
...
Tôi đồng ý rằng các biến nguyên tử sẽ không giải quyết được mọi thứ, nhưng làm việc trên một giải pháp cho vấn đề đồng bộ hóa là mục tiêu tiếp theo của tôi.

Thêm chủ đề vào Javascript mà không có "giải pháp cho vấn đề đồng bộ hóa" sẽ giống như thêm số nguyên vào Javascript mà không có "giải pháp cho vấn đề bổ sung". Nó rất cơ bản đối với bản chất của vấn đề đến nỗi về cơ bản không có vấn đề gì để thảo luận liệu đa luồng có đáng để thêm vào hay không mà không có giải pháp cụ thể nào, cho dù chúng ta có muốn nó đến mức nào.

Thêm vào đó, làm cho tất cả các biến nguyên tử là loại điều có khả năng làm cho một chương trình đa luồng hoạt động kém hơn so với đối tác đơn lẻ của nó, điều này càng quan trọng hơn khi thực sự kiểm tra hiệu suất trên các chương trình thực tế hơn và xem liệu bạn có đạt được gì hay không.

Tôi cũng không rõ liệu bạn đang cố gắng giấu các luồng khỏi lập trình viên node.js hay nếu bạn dự định phơi bày chúng vào một lúc nào đó, thực sự tạo ra một phương ngữ Javascript mới cho lập trình đa luồng. Cả hai tùy chọn đều có khả năng thú vị, nhưng có vẻ như bạn thậm chí chưa quyết định bạn đang nhắm đến cái nào.

Vì vậy, hiện tại, bạn đang yêu cầu các lập trình viên xem xét chuyển đổi từ môi trường đơn lẻ sang môi trường đa luồng hoàn toàn mới, không có giải pháp cho vấn đề đồng bộ hóa và không có bằng chứng nào cải thiện hiệu suất trong thế giới thực và dường như không có kế hoạch giải quyết các vấn đề đó.

Đó có lẽ là lý do tại sao mọi người không coi trọng bạn.

2) Sự đơn giản và mạnh mẽ của vòng lặp sự kiện duy nhất là một lợi thế rất lớn .

Các lập trình viên Javascript biết rằng ngôn ngữ Javascript "an toàn" khỏi các điều kiện chủng tộc và các lỗi cực kỳ quỷ quyệt khác gây ra tất cả các chương trình đa luồng thực sự. Việc họ cần những lý lẽ mạnh mẽ để thuyết phục họ từ bỏ rằng sự an toàn không khiến họ trở nên khép kín, điều đó khiến họ có trách nhiệm.

Trừ khi bạn có thể giữ được sự an toàn đó bằng cách nào đó, bất kỳ ai muốn chuyển sang node.js đa luồng có lẽ tốt hơn nên chuyển sang ngôn ngữ như Go được thiết kế từ đầu cho các ứng dụng đa luồng.

3) Javascript đã hỗ trợ "luồng nền" (WebWorkers) và lập trình không đồng bộ mà không trực tiếp đưa ra quản lý luồng cho lập trình viên.

Các tính năng này đã giải quyết rất nhiều trường hợp sử dụng phổ biến ảnh hưởng đến các lập trình viên Javascript trong thế giới thực, mà không từ bỏ sự an toàn của vòng lặp sự kiện.

Bạn có bất kỳ trường hợp sử dụng cụ thể nào mà các tính năng này không giải quyết được không và các lập trình viên Javascript muốn có giải pháp cho? Nếu vậy, sẽ là một ý tưởng tốt để trình bày node.js đa luồng của bạn trong ngữ cảnh của trường hợp sử dụng cụ thể đó.


PS Điều gì sẽ thuyết phục tôi thử chuyển sang triển khai node.js đa luồng?

Viết một chương trình không tầm thường trong Javascript / node.js mà bạn nghĩ sẽ được hưởng lợi từ đa luồng chính hãng. Thực hiện kiểm tra hiệu suất trên chương trình mẫu này trong nút bình thường và nút đa luồng của bạn. Cho tôi thấy rằng phiên bản của bạn cải thiện hiệu năng thời gian chạy, khả năng phản hồi và sử dụng nhiều lõi ở một mức độ đáng kể, mà không đưa ra bất kỳ lỗi hoặc mất ổn định nào.

Khi bạn đã thực hiện điều đó, tôi nghĩ bạn sẽ thấy mọi người quan tâm nhiều hơn đến ý tưởng này.


1
1) Được rồi, tôi sẽ thừa nhận rằng tôi đã ngừng vấn đề đồng bộ hóa một thời gian rồi. Khi tôi nói rằng 'hai nhiệm vụ sẽ tranh', đó không phải là thiết kế của tôi, nó chủ yếu là một quan sát: dl.dropboxusercontent.com/u/27714141/... - Tôi không chắc chắn những loại phù thủy JavaScriptCore được thực hiện ở đây, nhưng shouldn' Chuỗi này có bị hỏng nếu nó không phải là nguyên tử không? 2) Tôi rất không đồng ý. Đây là lý do JS được xem như một ngôn ngữ đồ chơi. 3) ES6 hứa hẹn sẽ hiệu quả hơn nhiều nếu được thực hiện bằng cách sử dụng bộ lập lịch nhóm luồng.
voodooattack

13
@voodooattack "Đây là lý do JS được xem như một ngôn ngữ đồ chơi." Không, đây là lý do bạn coi nó là ngôn ngữ đồ chơi. Hàng triệu người sử dụng JS mỗi ngày và hoàn toàn hài lòng với nó, những thiếu sót và tất cả. Hãy chắc chắn rằng bạn đang giải quyết một vấn đề mà đủ người khác thực sự có, đó không phải là giải quyết tốt hơn bằng cách thay đổi ngôn ngữ.
Chris Hayes

@ChrisHayes Câu hỏi là, tại sao lại đưa ra những thiếu sót của nó khi tôi có thể sửa chúng? Sẽ đồng thời là một tính năng cải thiện JavaScript?
voodooattack

1
@voodooattack Đó là câu hỏi. Sẽ đồng thời là một tính năng cải thiện Javascript? Nếu bạn có thể nhận được câu trả lời của cộng đồng cho rằng đó không phải là "không", thì có lẽ bạn đang làm điều gì đó. Tuy nhiên, dường như vòng lặp sự kiện và ủy quyền riêng của Node cho các luồng công nhân để chặn các sự kiện đủ cho hầu hết những gì mọi người cần làm. Tôi nghĩ rằng nếu mọi người thực sự cần Javascript theo luồng, họ sẽ sử dụng các nhân viên Javascript. Tuy nhiên, nếu bạn có thể tìm cách làm cho công nhân làm việc với các hàm hạng nhất thay vì các tệp JS, tuy nhiên .... thì bạn có thể thực sự đang ở một cái gì đó.
bữa ăn trưa317

7
@voodooattack Những người gọi JavaScript là ngôn ngữ đồ chơi không biết họ đang nói về cái gì. Nó có phải là ngôn ngữ cho tất cả mọi thứ? Tất nhiên là không, nhưng loại bỏ nó như thế chắc chắn là một sai lầm. Nếu bạn muốn xua tan quan niệm rằng JS là ngôn ngữ đồ chơi, thì hãy tạo một ứng dụng sản xuất không tầm thường trong đó hoặc trỏ đến một ngôn ngữ hiện có. Dù sao, chỉ cần thêm đồng thời sẽ không thay đổi suy nghĩ của mọi người.
jpmc26

16

Chỉ cần đoán ở đây để chứng minh một vấn đề trong cách tiếp cận của bạn. Tôi không thể kiểm tra nó so với triển khai thực tế vì không có liên kết ở bất cứ đâu ...

Tôi muốn nói rằng đó là vì các bất biến không phải luôn luôn được biểu thị bằng giá trị của một biến và 'một biến' không đủ để là phạm vi của khóa trong trường hợp chung. Ví dụ: hãy tưởng tượng chúng ta có một bất biến a+b = 0(số dư của một ngân hàng có hai tài khoản). Hai hàm bên dưới đảm bảo rằng bất biến luôn được giữ ở cuối mỗi hàm (đơn vị thực hiện trong JS đơn luồng).

function withdraw(v) {
  a -= v;
  b += v;
}
function deposit(v) {
  b -= v;
  a += v;
}

Bây giờ, trong thế giới đa luồng của bạn, điều gì xảy ra khi hai luồng thực thi withdrawdepositcùng một lúc? Cảm ơn, Murphy ...

(Bạn có thể có mã xử lý + = và - = đặc biệt, nhưng điều đó không có ích. Đến một lúc nào đó, bạn sẽ có trạng thái cục bộ trong một hàm và không có cách nào để 'khóa' hai biến cùng một lúc bị vi phạm.)


EDIT: Nếu mã của bạn tương đương về mặt ngữ nghĩa với mã Go tại https://gist.github.com/thriqon/f94c10a45b7e0bf656781b0f4a07292a , nhận xét của tôi là chính xác ;-)


Nhận xét này không liên quan, nhưng các nhà triết học có khả năng khóa nhiều đối tượng, nhưng họ chết đói vì họ khóa chúng theo một trật tự không nhất quán.
Dietrich Epp

3
@voodooattack "Tôi vừa thử nghiệm ..." Bạn chưa bao giờ gặp phải lệnh thực thi không nhất quán với lập lịch xử lý? Nó thay đổi từ chạy để chạy, từ máy này sang máy khác. Ngồi xuống và chạy một bài kiểm tra duy nhất (hoặc thậm chí một trăm bài kiểm tra!) Mà không xác định cơ chế cho cách các hoạt động được lên lịch là vô ích.
jpmc26

4
@voodooattack Vấn đề là chỉ đơn giản là kiểm tra đồng thời không hữu ích. Bạn cần phải có khả năng chứng minh rằng bất biến sẽ nắm giữ, hoặc cơ chế không bao giờ có thể được tin cậy trong sản xuất.
sapi

1
Nhưng bạn chưa cung cấp cho người dùng bất kỳ công cụ nào để "sử dụng hệ thống một cách có trách nhiệm" vì hoàn toàn không có cơ chế khóa. Làm cho mọi thứ nguyên tử tạo ra ảo tưởng về sự an toàn của luồng (và bạn đánh vào hiệu suất của mọi thứ là nguyên tử, ngay cả khi bạn không cần truy cập nguyên tử), nhưng nó không thực sự giải quyết được hầu hết các vấn đề tương tranh như một thriqon đưa ra ở đây. Đối với một ví dụ khác, hãy thử lặp qua một mảng trên một luồng trong khi một luồng khác thêm hoặc xóa các phần tử khỏi mảng. Đối với vấn đề đó, điều gì khiến bạn nghĩ rằng việc triển khai Array của động cơ thậm chí là an toàn cho luồng?
Zach Lipton

2
@voodooattack Vì vậy, nếu người dùng chỉ có thể sử dụng các luồng của bạn cho các chức năng mà không có dữ liệu chung hoặc tác dụng phụ (và tốt hơn hết là không sử dụng chúng cho bất kỳ điều gì khác, vì như chúng ta đã thấy ở đây, không có cách nào để đảm bảo an toàn cho luồng), Vậy thì giá trị nào bạn cung cấp cho Công nhân web (hoặc một trong nhiều thư viện cung cấp API có thể sử dụng nhiều hơn cho Công nhân web)? Và Web Worker an toàn hơn nhiều, vì chúng khiến người dùng không thể sử dụng hệ thống một cách "vô trách nhiệm".
Zach Lipton

15

Một thập kỷ trước, Brendan Eich (người phát minh ra JavaScript) đã viết một bài luận có tên là Suck , đây chắc chắn là một trong số ít tài liệu kinh điển về thần thoại thiết kế của JavaScript.

Liệu nó có đúng hay không là một câu hỏi khác, nhưng tôi nghĩ nó có ảnh hưởng lớn đến cách cộng đồng JavaScript nghĩ về sự tương tranh.


31
Người cuối cùng tôi sẽ nhận lời khuyên từ Brendan Eich. Toàn bộ sự nghiệp của anh ấy dựa trên việc tạo JavaScript, điều này thật tệ, chúng tôi có rất nhiều công cụ được tạo ra để thử và khắc phục sự tào lao bẩm sinh của nó. Hãy nghĩ về bao nhiêu giờ nhà phát triển đã bị lãng phí trên thế giới vì anh ta.
Phil Wright

12
Mặc dù tôi hiểu lý do tại sao bạn nói chung giảm giá ý kiến ​​của anh ấy và thậm chí bạn coi thường JavaScript, tôi không hiểu quan điểm của bạn sẽ cho phép coi thường chuyên môn của anh ấy trong miền như thế nào.
Billy Cravens

4
@BillyCravens haha, ngay cả cuốn sách kinh điển về Javascript: "Javascript phần hay " của Crockford mang lại cho trò chơi trong tựa đề. Hãy đối xử với thái độ của Eich theo cách tương tự, chỉ cần tuân theo những điều anh ấy nói là tốt :-)
gbjbaanb

13
@PhilWright: Việc triển khai Javascript đầu tiên của anh ấy là một biến thể Lisp. Mà với tôi kiếm được cho anh ta sự tôn trọng rất lớn. Quyết định của ông chủ buộc ông thay thế cú pháp Lisp bằng cú pháp giống như C không phải là lỗi của ông. Javascript ở cốt lõi của nó vẫn là thời gian chạy Lisp.
slebetman

7
@PhilWright: Bạn không nên đổ lỗi cho Eich vì sự ngu ngốc của ngôn ngữ. Đó là lỗi trong việc triển khai sớm và nhu cầu tương thích ngược đối với ngôn ngữ web đã ngăn không cho JS trưởng thành. Các khái niệm cốt lõi vẫn tạo thành một ngôn ngữ tuyệt vời.
Bergi

8

Truy cập nguyên tử không chuyển thành hành vi an toàn chủ đề.

Một ví dụ là khi cấu trúc dữ liệu toàn cầu cần phải không hợp lệ trong quá trình cập nhật như làm lại một hashmap (ví dụ khi thêm một thuộc tính vào một đối tượng) hoặc sắp xếp một mảng toàn cục. Trong thời gian đó, bạn không thể cho phép bất kỳ luồng nào khác truy cập vào biến. Điều này về cơ bản có nghĩa là bạn cần phát hiện toàn bộ chu trình đọc-cập nhật-ghi và khóa nó. Nếu bản cập nhật không tầm thường sẽ dẫn đến việc tạm dừng lãnh thổ vấn đề.

Javascript đã được phân luồng đơn và hộp cát ngay từ đầu và tất cả các mã được viết với các giả định này trong tâm trí.

Điều này có một lợi thế lớn liên quan đến các bối cảnh bị cô lập và cho phép 2 bối cảnh riêng biệt chạy trong các luồng khác nhau. Tôi cũng có nghĩa là mọi người viết javascript không cần phải biết cách xử lý các điều kiện chủng tộc và các pitfals đa luồng khác.


Đây là lý do tại sao tôi nghĩ rằng API lập lịch nên có nhiều hơn về phía nâng cao và được sử dụng nội bộ cho các lời hứa và các chức năng không có tác dụng phụ.
voodooattack

6

Là cách tiếp cận của bạn sẽ cải thiện đáng kể hiệu suất?

Nghi ngờ. Bạn thực sự cần phải chứng minh điều này.

Là cách tiếp cận của bạn sẽ làm cho nó dễ dàng hơn / nhanh hơn để viết mã?

Chắc chắn là không, mã đa luồng khó gấp nhiều lần so với mã đơn.

Là cách tiếp cận của bạn sẽ mạnh mẽ hơn?

Bế tắc, điều kiện chủng tộc, vv là một cơn ác mộng để khắc phục.


2
Hãy thử xây dựng một raytracer bằng node.js, bây giờ hãy thử lại với các luồng. Nhiều quá trình không phải là tất cả.
cuộc tấn công voodoo

8
@voodooattack, không ai trong tâm trí của họ sẽ viết một trình theo dõi bằng cách sử dụng javascript, có hoặc không có luồng, bởi vì đây là một thuật toán tương đối đơn giản nhưng chuyên sâu về tính toán được viết tốt hơn bằng ngôn ngữ được biên dịch đầy đủ, tốt nhất là có hỗ trợ SIMD . Đối với các loại vấn đề mà javascript được sử dụng cho, đa quy trình là quá đủ.
Jan Hudec

@JanHudec: Heh, JS sẽ nhận được hỗ trợ SIMD cũng :-) hacks.mozilla.org/2014/10/introducing-simd-js
Bergi

2
@voodooattack Nếu bạn không biết về chúng, hãy xem SharedArrayBuffers . JavaScript đang có nhiều cấu trúc đồng thời hơn, nhưng chúng được thêm vào một cách thận trọng, giải quyết các điểm đau cụ thể, cố gắng giảm thiểu đưa ra các quyết định thiết kế tồi tệ mà chúng ta sẽ phải sống trong nhiều năm.
REINSTATE MONICA -Jeremy Banks

2

Việc triển khai của bạn không chỉ là giới thiệu đồng thời, mà là giới thiệu một cách cụ thể để thực hiện đồng thời tức là đồng thời theo trạng thái có thể thay đổi được chia sẻ. Trong suốt lịch sử, con người đã sử dụng loại đồng thời này và điều này dẫn đến nhiều loại vấn đề. Tất nhiên, bạn có thể tạo các chương trình đơn giản hoạt động hoàn hảo với việc sử dụng đồng thời trạng thái có thể thay đổi được chia sẻ nhưng thử nghiệm thực sự của bất kỳ cơ chế nào không phải là những gì nó có thể làm mà có thể mở rộng khi chương trình trở nên phức tạp và ngày càng có nhiều tính năng được thêm vào chương trình. Hãy nhớ rằng phần mềm không phải là một thứ tĩnh mà bạn xây dựng một lần và được thực hiện với nó, thay vào đó nó tiếp tục phát triển theo thời gian và nếu bất kỳ cơ chế hoặc khái niệm nào có thể '

Bạn có thể xem xét các mô hình đồng thời khác (ví dụ: truyền tin nhắn) để giúp bạn tìm ra loại lợi ích mà các mô hình đó cung cấp.


1
Tôi nghĩ rằng các lời hứa ES6 sẽ được hưởng lợi từ mô hình triển khai của tôi, vì chúng không tranh giành quyền truy cập.
voodooattack

Có một cái nhìn về đặc điểm kỹ thuật của WebWorkers. Có các gói npm cung cấp triển khai của chúng nhưng bạn có thể triển khai chúng làm cốt lõi của công cụ thay vì gói
Ankur

JavaScriptCore (triển khai bộ công cụ web của JS tôi đang sử dụng) đã triển khai chúng, đây chỉ là một cờ tổng hợp.
voodooattack

Đồng ý. WebWorkers đồng thời với thông điệp truyền qua. Bạn có thể thử ví dụ raytracer của bạn với họ và so sánh nó với phương pháp trạng thái có thể thay đổi.
Ankur

4
Truyền tin nhắn luôn được thực hiện trên đầu trạng thái có thể thay đổi, có nghĩa là nó sẽ chậm hơn. Tôi không thấy quan điểm của bạn ở đây. : - /
voodooattack

1

Điều này là cần thiết. Việc thiếu một cơ chế đồng thời ở mức thấp trong nút js sẽ hạn chế các ứng dụng của nó trong các lĩnh vực như toán học và tin sinh học, v.v ... Bên cạnh đó, đồng thời với các luồng không nhất thiết phải xung đột với mô hình đồng thời mặc định được sử dụng trong nút. Có những ngữ nghĩa nổi tiếng để phân luồng trong một môi trường có vòng lặp sự kiện chính, chẳng hạn như khung ui (và nodejs) và tho chúng chắc chắn quá phức tạp đối với hầu hết các tình huống chúng vẫn sử dụng hợp lệ.

Chắc chắn, ứng dụng web trung bình của bạn sẽ không yêu cầu chủ đề, nhưng hãy thử làm bất cứ điều gì ít thông thường hơn và việc thiếu tính nguyên thủy đồng thời ở mức độ thấp sẽ nhanh chóng đưa bạn đến một thứ khác cung cấp nó.


4
Nhưng "toán học và tin sinh học" sẽ được viết tốt hơn bằng C #, JAVA hoặc C ++
Ian

Trên thực tế Python và Perl là ngôn ngữ chính trong các lĩnh vực đó.
Dryajov

1
Trên thực tế, lý do chính khiến tôi thực hiện điều này là do các ứng dụng học máy. Vì vậy, bạn có một điểm.
voodooattack

@dryajov Hãy vui mừng vì bạn không biết FORTRAN lớn như thế nào trong một số lĩnh vực khoa học tính toán ...
cmaster

@dryajov Bởi vì chúng dễ tiếp cận hơn với Con người, những người có thể không phải là lập trình viên toàn thời gian, chứ không phải vì họ vốn đã giỏi hơn trong giải trình tự bộ gen - chúng tôi có các ngôn ngữ được xây dựng có mục đích như R và biên dịch các lang khoa học như Fortran cho điều đó.
con mèo

0

Tôi thực sự tin rằng đó là vì đó là một ý tưởng khác biệt và mạnh mẽ. Bạn đang đi ngược lại các hệ thống niềm tin. Công cụ trở nên được chấp nhận hoặc phổ biến thông qua mạng ảnh hưởng không dựa trên công đức. Ngoài ra không ai muốn thích nghi với một ngăn xếp mới. Mọi người tự động từ chối những thứ quá khác biệt.

Nếu bạn có thể đưa ra một cách để biến nó thành một mô-đun npm thông thường nghe có vẻ không ổn, thì bạn có thể sẽ có một số người sử dụng nó.


Bạn có nghĩa là các lập trình viên JS bị khóa nhà cung cấp đến npm?
voodooattack

3
Câu hỏi là về một hệ thống thời gian chạy mới chứ không phải một số mô-đun npm và đồng thời trạng thái chia sẻ trạng thái chia sẻ có thể thay đổi thực sự là một ý tưởng cũ.
Ankur

1
@voodooattack Tôi có nghĩa là họ bị cản trở trong cách tiếp cận đã phổ biến và sẽ không thể vượt qua xu hướng hiện trạng.
Jason Livesay
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.