Như mình có đề cập thì 1 project có thể tạo được nhiều services. Trong docs của railway mình không thấy đề cập đến giới hạn nhưng theo mình hiểu thì có thể triển khai được nhiều app nhé.
Hi anh, mặc dù trong bài viết của anh không có phần này, nhưng mà em đọc nhiều bài viết khác thì đa số đều có ghi vào log là AA trước, sau đó mới send payload, em tìm hiểu mấy ngày nay rồi, vẫn không hiểu lý do tại sao. Mong anh giải đáp giúp em thắc mắc này, em cảm ơn anh ạ 😁
Bằng ngôn ngữ lập luận đanh thép, số liệu cụ thể thiết thực, tác giả đã đúc kết kinh nghiệm thực tiễn của mình, cho độc giả thấy cách thức và tinh thần bất khuất quả cảm vượt qua khó khăn. 👍️ 💯
Hy vọng sẽ sớm triển khai trên diện rộng để những doanh nghiệp nhỏ như chúng em (https://vc24h.com) ở dưới có thể được hưởng lợi ích từ việc chuyển đổi số: Ứng dụng blockchain trong quản lý chuỗi cung ứng.
Ownership enforce C++ guidelines, RAII pattern của C++, thực hiện check trong compiler luôn thay vì phải dùng tool rời hay đưa vô guidelines như C++. C++ là một ngôn ngữ cỡ 40 năm tuổi với tỉ dòng code trong rất nhiều project cần "backward compatibility" nên họ không muốn thực thi nó trong compiler ảnh hưởng đến các project đó. Rust lại là ngôn ngữ mới nên nó đưa thẳng vào compiler ngay từ ban đâu luôn. Mặt khác, với statically typed language thì compiler là bạn: "Mọi lỗi nên được kiểm tra ở compile time và cái nào không kiểm tra được ở compile time thì phải được kiểm tra ở runtime". Ownership không khó hiểu, nó là kinh nghiệm đúc ra từ những người sử dụng C/C++.
Về memory
Không chỉ có stack và heap, ít nhất theo model của C cũng phải 4 phần.
Move sematic là từ C++, như đã nói ở trên, nó được đúc ra từ khi mấy ổng làm việc với C++,
Array
Array chưa bao giờ liên quan đến push, pop hay bất kỳ method nào, đó là vì library của các ngôn ngữ OOP(broken paradigm) dùng từ như vậy khiến người ta nhầm lẫn, trong Khoa học máy tính nó không đúng.
Array có 2 loại Array: Static Array và Dynamic Array.
Static Array là primitive trong KHMT rồi. Còn Dynamic Array được bạn cấp phát nó ở runtime bằng cách invoke allocator của OS,/Standard Library. Cái "push", "pop" method đó thuộc các Abstract Data Type trong các ngôn ngữ nó viết sẵn trong thư viện chuẩn. Array không có liên quan gì đến "push", "pop", "enque", "deque". Tác giả (của cuốn sách) do đó sẽ không có lí gì nhắc nó vì nó không phải trong core của language. Dynamic Array được dùng để triển khai Queue, Stack, Deque ở runtime, bạn truy cập nó thông qua pointer/ref ở compile time mà thôi. Vector là API/Abstract Data Type mà std library người ta viết cho bạn để dùng nó sẽ invoke allocator để cấp phát động, String cũng vậy.
Đầu tiên &str không dùng lưu trữ string, nó là "slice" hay "view", và "string slice" thì view đến một phần string, string mà nó view đến có thể ở trên stack, heap hoặc static storage( e.g, .rodata section). String này có thể là "literal" cũng có thể là String và còn nhiều kiểu String khác trong rust nữa. Bản chất của nó là pointer/reference(safe pointer). "literal string". Không có pointer hay primitve type nào thay đổi được kích thước cả, bởi vậy tụi nó mới là fixed size, mới dùng "static analysis" là compiler. Pointer theo giả định size của nó là usize (nhưng thực tế có thể sẽ khác, trên kiến trúc x86-64 chẳng hạn, chỉ mới dùng 48-bit đầu tiên cho addressing). Nên "&str" hay tất cả các primitive khác luôn luôn xác định kích thước, không có cái gọi là "không cố định kích thước nhưng phải xác định kích thước ở compile time" cả, hiện tại thì chưa thấy ISA nào làm được như vậy cả, cái sugar syntax:
// cả hai RHS đều là hard code trong binary.letmut x ="abc";// string slice, ref to "abc"
x ="cdef";// ref to "acef"
Bạn thay đổi cái string mà x trỏ đến, bạn không thay đổi được string litteral.
bạn có thể tham khảo ở đây: immutable, vì nó là hardcode thẳng trong .rodata section, nên lifetime của nó là 'static, đến khi bạn kết thúc chương trình.
Ownership của function
assign và passing là phụ thuộc vào strategy evaluation (C, C++, rust áp dụng call-by-value) và rust nó bắt buộc thực thi thẳng move sematic. Mình muốn nói thêm về nó còn liên quan đến call stack và stack frame, ASM code nữa nằm ngoài phạm vi chủ đề, nhưng passing/assign thường là cùng sematic như vậy.
Cái đoạn mã trên về function thực chất không ai dùng nó cả, tác giả ( The Rust Programming Language) muốn .
Char
Từ C:
char: u8 -> 1 byte để encode 1 ký tự ASCII
string, array của char
Nhưng ngày nay người ta dùng UTF-8, và UTF-8 là backward compatible với ASCII, bởi ngôn ngữ lâu đời như C hay C++ phải thêm vào wchar, wstring để làm việc với Unicode point. Rust là ngôn ngữ mới, nên kiểu Char encode thẳng 1 Unicode point của UTF-8 luôn, tức là dùng [1-4] bytes.
Ownership có phải của nợ không?
Không, rust ngay từ đầu được phát triển để nhắm đến thay C++ trong engine browser của Firefox do đó C++ (cùng Ocalm) ảnh hưởng nhiều nhất đến rust và nó thực sự đang đạt được mục đích được thế kế ban đầu: Rust có mặt trong linux kernel, android, windows, browser và nó power một runtime mới của JS/TS(Deno), bắt đầu được sử dụng trong game development, ...
Rust có đáng học không?
Về bài viết
Mình nghĩ bài viết này là bạn dịch lại ý trong The Rust Programming Language, vì thế nên để nguồn cuốn sách trong bài viết.
THẢO LUẬN
@nampt.me ,free chỉ xài được 500 giờ à,sao không hướng dẫn cấu hình django,py thon đi,mình làm theo docs và web nước ngoài hoài mà không được
Như mình có đề cập thì 1 project có thể tạo được nhiều services. Trong docs của railway mình không thấy đề cập đến giới hạn nhưng theo mình hiểu thì có thể triển khai được nhiều app nhé.
@minhtuan.nguy
Hi anh, mặc dù trong bài viết của anh không có phần này, nhưng mà em đọc nhiều bài viết khác thì đa số đều có ghi vào log là AA trước, sau đó mới send payload, em tìm hiểu mấy ngày nay rồi, vẫn không hiểu lý do tại sao. Mong anh giải đáp giúp em thắc mắc này, em cảm ơn anh ạ 😁
@umi0063
còn lỗi này là khi mình push lên host được mà nó lại báo application error port
@umi0063
không bít mình biến env của mình sai 0
mà host này cho làm 4,5 app của 4,5 ngôn ngữ như heroku 0,thí dụ vửa làm laravel,vừa làm frame khác
Google dịch luôn cả code import
@umi0063 ,railway, à sao có lúc push lên được sao lại bị lỗi application error $port gì đó,huhu mình cũng từ heroku sang
Bằng ngôn ngữ lập luận đanh thép, số liệu cụ thể thiết thực, tác giả đã đúc kết kinh nghiệm thực tiễn của mình, cho độc giả thấy cách thức và tinh thần bất khuất quả cảm vượt qua khó khăn. 👍️ 💯
@longyu ủa bạn đang nói đến railway hay flashvps
@umi0063 ,mình có tạo gunicorn và procfile mà,à có lúc thì nó báo lỗi error port gì đó,à bản free chỉ dùng được 500 giờ à,
Cảm ơn bạn rất nhiều vì đã ủng hộ mình. Đăng ký để xem những bài viết khác của mình trong tương lai nhé
@longyu sorry bạn, mình tìm hiểu thêm thì cần phải cấu hình thêm django gunicorn nữa mà hiện tại chưa hỗ trợ đủ cho python
Mình sẽ tìm hiểu và phát triển thêm
Cho em hỏi ở bước chuẩn hóa, tại sao không lại được coi là positive vậy ạ?
mình đang dùng deploy django mà nó cứ báo lỗi not support language, hoặc lỗi thiếu pyproject.toml mà nó hỗ trỡ python 3.11 ,django mình xài py 3.11
Cảm ơn comment của bạn nhé. Có thời gian mình sẽ check lại.
Hy vọng sẽ sớm triển khai trên diện rộng để những doanh nghiệp nhỏ như chúng em (https://vc24h.com) ở dưới có thể được hưởng lợi ích từ việc chuyển đổi số: Ứng dụng blockchain trong quản lý chuỗi cung ứng.
Góc nhìn của mình:
Về ownership:
Ownership enforce C++ guidelines, RAII pattern của C++, thực hiện check trong compiler luôn thay vì phải dùng tool rời hay đưa vô guidelines như C++. C++ là một ngôn ngữ cỡ 40 năm tuổi với tỉ dòng code trong rất nhiều project cần "backward compatibility" nên họ không muốn thực thi nó trong compiler ảnh hưởng đến các project đó. Rust lại là ngôn ngữ mới nên nó đưa thẳng vào compiler ngay từ ban đâu luôn. Mặt khác, với statically typed language thì compiler là bạn: "Mọi lỗi nên được kiểm tra ở compile time và cái nào không kiểm tra được ở compile time thì phải được kiểm tra ở runtime". Ownership không khó hiểu, nó là kinh nghiệm đúc ra từ những người sử dụng C/C++.
Về memory
Không chỉ có stack và heap, ít nhất theo model của C cũng phải 4 phần. Move sematic là từ C++, như đã nói ở trên, nó được đúc ra từ khi mấy ổng làm việc với C++,
Array
Array chưa bao giờ liên quan đến push, pop hay bất kỳ method nào, đó là vì library của các ngôn ngữ OOP(broken paradigm) dùng từ như vậy khiến người ta nhầm lẫn, trong Khoa học máy tính nó không đúng. Array có 2 loại Array: Static Array và Dynamic Array. Static Array là primitive trong KHMT rồi. Còn Dynamic Array được bạn cấp phát nó ở runtime bằng cách invoke allocator của OS,/Standard Library. Cái "push", "pop" method đó thuộc các Abstract Data Type trong các ngôn ngữ nó viết sẵn trong thư viện chuẩn. Array không có liên quan gì đến "push", "pop", "enque", "deque". Tác giả (của cuốn sách) do đó sẽ không có lí gì nhắc nó vì nó không phải trong core của language. Dynamic Array được dùng để triển khai Queue, Stack, Deque ở runtime, bạn truy cập nó thông qua pointer/ref ở compile time mà thôi.
Vectorlà API/Abstract Data Type màstdlibrary người ta viết cho bạn để dùng nó sẽ invoke allocator để cấp phát động,Stringcũng vậy.Stringvà&strBản thân String là một smart pointer, nhưng trong chủ đề bài viết thì không cần quan tâm, hãy nói về nhận định không đúng về &str. two components: a pointer to some bytes and a length.
Đầu tiên &str không dùng lưu trữ string, nó là "slice" hay "view", và "string slice" thì view đến một phần
string,stringmà nó view đến có thể ở trênstack,heaphoặcstatic storage( e.g,.rodatasection). String này có thể là "literal" cũng có thể là String và còn nhiều kiểu String khác trong rust nữa. Bản chất của nó là pointer/reference(safe pointer). "literal string". Không có pointer hay primitve type nào thay đổi được kích thước cả, bởi vậy tụi nó mới là fixed size, mới dùng "static analysis" là compiler. Pointer theo giả định size của nó là usize (nhưng thực tế có thể sẽ khác, trên kiến trúc x86-64 chẳng hạn, chỉ mới dùng 48-bit đầu tiên cho addressing). Nên "&str" hay tất cả các primitive khác luôn luôn xác định kích thước, không có cái gọi là "không cố định kích thước nhưng phải xác định kích thước ở compile time" cả, hiện tại thì chưa thấy ISA nào làm được như vậy cả, cáisugar syntax:Bạn thay đổi cái string mà x trỏ đến, bạn không thay đổi được string litteral. bạn có thể tham khảo ở đây: immutable, vì nó là hardcode thẳng trong
.rodatasection, nên lifetime của nó là'static, đến khi bạn kết thúc chương trình.Ownership của function
assign và passing là phụ thuộc vào strategy evaluation (C, C++, rust áp dụng
call-by-value) và rust nó bắt buộc thực thi thẳngmove sematic. Mình muốn nói thêm về nó còn liên quan đến call stack và stack frame, ASM code nữa nằm ngoài phạm vi chủ đề, nhưng passing/assign thường là cùngsematicnhư vậy.Cái đoạn mã trên về function thực chất không ai dùng nó cả, tác giả ( The Rust Programming Language) muốn .
Char
Từ C: char: u8 -> 1 byte để encode 1 ký tự ASCII string, array của char Nhưng ngày nay người ta dùng UTF-8, và UTF-8 là backward compatible với ASCII, bởi ngôn ngữ lâu đời như C hay C++ phải thêm vào wchar, wstring để làm việc với Unicode point. Rust là ngôn ngữ mới, nên kiểu
Charencode thẳng 1 Unicode point của UTF-8 luôn, tức là dùng [1-4] bytes.Ownership có phải của nợ không?
Không, rust ngay từ đầu được phát triển để nhắm đến thay C++ trong engine browser của Firefox do đó C++ (cùng Ocalm) ảnh hưởng nhiều nhất đến rust và nó thực sự đang đạt được mục đích được thế kế ban đầu: Rust có mặt trong linux kernel, android, windows, browser và nó power một runtime mới của JS/TS(Deno), bắt đầu được sử dụng trong game development, ...
Rust có đáng học không?
Về bài viết
Mình nghĩ bài viết này là bạn dịch lại ý trong
The Rust Programming Language, vì thế nên để nguồn cuốn sách trong bài viết.Tham Khảo
The Rust Programming Language - Second Edition
call-by-value
immutable
move semantic
two components: a pointer to some bytes and a length
String and str
Tác giả hiểu nhầm về các khái niệm rồi, mấy cái này đâu có tránh re-render, những cái này chỉ là tối ưu hóa performance thôi.
@minhtuan.nguy Dạ em cảm ơn anh