banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows Câu hỏi về Compiler C# ???  XML
  [Programming]   Câu hỏi về Compiler C# ??? 08/03/2009 12:31:03 (+0700) | #1 | 172321
trumdkny
Member

[Minus]    0    [Plus]
Joined: 13/07/2006 17:46:44
Messages: 22
Offline
[Profile] [PM] [Email]
Mình có câu hỏi này cần các bạn giải thích dùm ( mình mới zô nghề ).
Thầy mình dạy là trong C# , các câu lệnh C# sẽ được dịch sang MSIL ( ngôn ngữ trung gian ) , rồi khi nào chương trình này chạy mới được dịch sang Machine Language ( Ngôn ngữ máy ) bằng bộ công cụ thông minh JIT (just in time - chỉ những đoạn code nào sử dụng mới được dịch qua ngôn ngữ máy ) .
Vậy không bít khi nào thì code C# được dịch qua MSIL và khi nào thì được dịch qua ngôn ngữ máy (thao tác nào trong bộ Visual Studio)
Trong thằng Visual Studio có 2 chế độ là Build và Bug, mình không hiểu rõ bản chất của 2 thằng này lắm, bạn nào giải thích dùm.
À thầy mình còn nói là trong thằng VS nó còn tự sữa lỗi cho mình nữa , ông thầy làm như sau :
_ đầu tiên ông viết 1 cái Console.Writeline("..."); // rùi build rùi debug
_ kế tiếp ông sữa Writeline thành Ariteline (W -> A) // ko rebuil mà debug luôn thì chương trình không báo lỗi mà ra dòng chữ , rùi thầy kêu là VS sẽ tự sữa lỗi cho mình , nhưng mà mình thấy hồ nghi về cái này quá đi ...
[Up] [Print Copy]
  [Question]   Re: Câu hỏi về Compiler C# ??? 08/03/2009 15:02:08 (+0700) | #2 | 172337
[Avatar]
Z0rr0
Q+WRtaW5pc3RyYXRvc+g

Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
[Profile] [PM] [WWW] [Yahoo!]
Tui hiểu về .NET đại khái thế này:
- Khi compile (ra dạng .exe) thì compiler .NET sẽ biên dịch ra dạng ngôn ngữ trung gian
- Khi thực thi (run-time) thì chức năng thông dịch của .NET framework sẽ chuyển sang ngôn ngữ máy và tải lên vùng nhớ thực thi.

Còn vụ VS có khả năng tự sửa được code viết sai thì thì quả là hồ nghi thật smilie
Nếu ý thầy bồ nói về spell-check thì hy vọng đúng (tui chưa thử), nhưng nếu nói tự sửa được thì khi ấy không hiểu công việc thật sự của 1 programmer nhàm chán đến mức nào, khi VS nó "làm" được hết rồi.
Hibernating
[Up] [Print Copy]
  [Question]   Re: Câu hỏi về Compiler C# ??? 08/03/2009 16:21:21 (+0700) | #3 | 172340
[Avatar]
rongchaua
Elite Member

[Minus]    0    [Plus]
Joined: 19/01/2003 04:09:23
Messages: 124
Offline
[Profile] [PM]
Thầy mình dạy là trong C# , các câu lệnh C# sẽ được dịch sang MSIL ( ngôn ngữ trung gian ) , rồi khi nào chương trình này chạy mới được dịch sang Machine Language ( Ngôn ngữ máy ) bằng bộ công cụ thông minh JIT (just in time - chỉ những đoạn code nào sử dụng mới được dịch qua ngôn ngữ máy ) .  

Chính xác. Rõ ràng hơn nữa là hàm (function,void) nào được gọi thì mới được compile sang mã máy qua hàm compileMethod trong mscorjt.dll.

Vậy không bít khi nào thì code C# được dịch qua MSIL và khi nào thì được dịch qua ngôn ngữ máy (thao tác nào trong bộ Visual Studio)  

Khi bạn build thì C# sẽ được dịch qua MSIL (do VS làm). Khi chương trình run thì MSIL sẽ dịch sang ASM (nhiệm vụ của .Net Framework)

Trong thằng Visual Studio có 2 chế độ là Build và Bug, mình không hiểu rõ bản chất của 2 thằng này lắm, bạn nào giải thích dùm.  

Không phải là 2 chế độ Build và Debug. Mà là có 2 dạng Build đó là Build dạng Release và Build dạng Debug.
Khi bạn Build thì chương trình sẽ build ra file và không thực thi. Tùy theo thiết lập mà file sau khi build ra được sẽ ở thư mục Release hay Debug. Nếu file được Build ở dạng debug thì filesize sẽ lớn hơn so với Release vì trong file có chứa metadata cho việc debug.
Còn cái nút màu xanh lá cây để Debug(Release) là nó sẽ thực thi file sau khi đã build và dùng VS Debugger để hook vào để hỗ trợ debug. Tức là khi bạn nhấn nút Debug thì nó sẽ build file dạng Debug sau đó là VS Debugger sẽ hỗ trợ việc debug với source code.

À thầy mình còn nói là trong thằng VS nó còn tự sữa lỗi cho mình nữa , ông thầy làm như sau :
_ đầu tiên ông viết 1 cái Console.Writeline("..."); // rùi build rùi debug
_ kế tiếp ông sữa Writeline thành Ariteline (W -> A) // ko rebuil mà debug luôn thì chương trình không báo lỗi mà ra dòng chữ , rùi thầy kêu là VS sẽ tự sữa lỗi cho mình , nhưng mà mình thấy hồ nghi về cái này quá đi ...  

Không rõ bạn có hiểu lộn ý thầy bạn không nhưng ý trên là hoàn toàn sai.
Nếu sau khi sửa (W-->A) MÀ bạn run được Debug thì đó là VS đang debug file đã build trước đó chứ không phải là đối với source hiện tại do đó không có việc là VS tự động sửa chửa. Điều này có thể xảy ra với một số Compiler mà người ta có thể thiết lập Debug without rebuild. Còn đối VS thì mình không rõ có thiết lập được không vì hiện tại thiết lập của mình là Debug with rebuild để có thể luôn luôn làm việc với code hiện tại.
Mình cảm thấy rất lo lắng nếu thầy của bạn nói như trên là VS có khả năng tự động sửa chửa. Vì đây là một sai lầm rất nghiêm trọng.
My website: http://rongchaua.net
[Up] [Print Copy]
  [Question]   Re: Câu hỏi về Compiler C# ??? 08/03/2009 23:41:11 (+0700) | #4 | 172352
TQN
Elite Member

[Minus]    0    [Plus]
Joined: 29/06/2006 22:28:01
Messages: 888
Location: Biết làm chi ?
Offline
[Profile] [PM] [WWW] [Yahoo!]
Ông thầy nào mà đi nói tầm bậy vậy ?
[Up] [Print Copy]
  [Question]   Re: Câu hỏi về Compiler C# ??? 09/03/2009 00:47:05 (+0700) | #5 | 172364
[Avatar]
kenshin8x
Member

[Minus]    0    [Plus]
Joined: 29/11/2006 20:45:54
Messages: 195
Location: ĐH CNTT
Offline
[Profile] [PM]

TQN wrote:
Ông thầy nào mà đi nói tầm bậy vậy ? 

Chắc ông thầy khi build xuất hiện lỗi và nó hiện lên bảng thông báo mà ổng chẳng thèm đọc và click yes và tiện tay đánh dấu chọn never show dialog ...
và mỗi lần build bị lỗi thì nó cứ load chương trình đã được build trước đó => thấy VS có khả năng sửa lỗi smilie
[Up] [Print Copy]
  [Question]   Re: Câu hỏi về Compiler C# ??? 09/03/2009 08:38:23 (+0700) | #6 | 172425
trumdkny
Member

[Minus]    0    [Plus]
Joined: 13/07/2006 17:46:44
Messages: 22
Offline
[Profile] [PM] [Email]
À vậy thì tất cả các chương trình mà viết trên nên .Net thì khi không chạy đều là MSIL hết phải ko ?
Em đã học là C# và VB.Net đều dịch qua MSIL nên 1 program có thể viết = 2 ngôn ngữ , và cũng thấy trên thị trường có 1 số software convert code VB.Net -> C# và ngược lại , anh nào hiểu rõ thì hướng dẫn giúp em cái cơ chế làm việc của cái này nhé ?
[Up] [Print Copy]
  [Question]   Re: Câu hỏi về Compiler C# ??? 09/03/2009 21:51:25 (+0700) | #7 | 172489
protectHat
Member

[Minus]    0    [Plus]
Joined: 09/08/2008 11:02:35
Messages: 176
Location: DMZ
Offline
[Profile] [PM]

trumdkny wrote:
À vậy thì tất cả các chương trình mà viết trên nên .Net thì khi không chạy đều là MSIL hết phải ko ?
 

Đúng. Các file chạy mà đòi hỏi .net để chạy thì chỉ là MSIL. Khi file đó chạy thì nó sẽ gọi .Net và .Net sẽ dịch file đó phù hợp nhất trên máy đó (giống như java đó)

trumdkny wrote:

Em đã học là C# và VB.Net đều dịch qua MSIL nên 1 program có thể viết = 2 ngôn ngữ , và cũng thấy trên thị trường có 1 số software convert code VB.Net -> C# và ngược lại , anh nào hiểu rõ thì hướng dẫn giúp em cái cơ chế làm việc của cái này nhé ? 

Theo mình hiểu thì .Net chỉ có 1 ngôn ngữ mới ra đời đó là C# được tổng hợp trên những cái mà M$ cho là hay của các ngôn ngữ hiện tại và đưa thêm những tính năng mới. Như là dịch sang trung gian của java, hay khi . thì nó sẽ tự động đưa ra các khả năng để programer đỡ phải gõ của vb.... Nên chuyện mà code xong ra file exe rồi nhưng bị dịch lại thành source là bình thường với bộ VS 2003. sang VS 2005 thì hình như đã có phần chống dịch rồi nhưng về nguyên lý thì có thể dịch được.
Xem thêm tại http://www.red-gate.com/products/reflector/
Các ngôn ngữ khác trong bộ đó như VB.net hay J#... thực ra chỉ là viết ngôn ngữ C# theo kiểu VB hay java mà thôi. Nhằm kéo 1 lượng programer của các ngôn ngữ đó về C# smilie
=> Chuyển qua lại trong bộ .Net thì là điều dễ hiểu thôi
Xem thêm tại http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/fbbbb2f4-9178-4177-97f3-393bcaae6e48/
[Up] [Print Copy]
  [Question]   Re: Câu hỏi về Compiler C# ??? 10/03/2009 08:21:53 (+0700) | #8 | 172614
[Avatar]
rongchaua
Elite Member

[Minus]    0    [Plus]
Joined: 19/01/2003 04:09:23
Messages: 124
Offline
[Profile] [PM]
À vậy thì tất cả các chương trình mà viết trên nên .Net thì khi không chạy đều là MSIL hết phải ko ? 

Chính xác.


Em đã học là C# và VB.Net đều dịch qua MSIL nên 1 program có thể viết = 2 ngôn ngữ ,
 

Một program có thể được viết bằng hàng chục ngôn ngữ lập trình khác nhau. Tui có thể sử dụng C++,C,Java,VB,C#,script.... để viết ra cùng một program. Ngôn ngữ lập trình chỉ là phương tiện, công cụ để tạo ra program.


và cũng thấy trên thị trường có 1 số software convert code VB.Net -> C# và ngược lại , anh nào hiểu rõ thì hướng dẫn giúp em cái cơ chế làm việc của cái này nhé ?
 

Như đã biết là code sẽ được lưu dưới dạng MSIL, mà MSIL thì có thể decompile lại dạng ngôn ngữ bậc cao. Cho nên thật ra chẳng phải là VB.Net sang C# gì hết mà chỉ là MSIL->C# và MSIL->VB.Net. Ngoài ra với 1 chương trình .net đã build ra thì không có cách nào xác định được là nó viết bằng VB.Net hay C# hết bạn àh. Và do đó làm sao bạn có thể biết được chương trình viết bằng ngôn ngữ nào để mà chọn VB.Net sang C# hay C# sang VB.Net???
Bạn có thể tìm hiểu thêm về .Net tại đây http://rongchaua.net/security-mainmenu-28/13-dotnet/13-reverse-net-software .


Các ngôn ngữ khác trong bộ đó như VB.net hay J#... thực ra chỉ là viết ngôn ngữ C# theo kiểu VB hay java mà thôi. 

Bạn hãy tìm hiểu lại công dụng của MSIL và hiểu thế nào là Intermediate Language. Phát biểu trên của bạn là sai.

My website: http://rongchaua.net
[Up] [Print Copy]
  [Question]   Re: Câu hỏi về Compiler C# ??? 10/03/2009 22:10:35 (+0700) | #9 | 172705
protectHat
Member

[Minus]    0    [Plus]
Joined: 09/08/2008 11:02:35
Messages: 176
Location: DMZ
Offline
[Profile] [PM]
Code:
Các ngôn ngữ khác trong bộ đó như VB.net hay J#... thực ra chỉ là viết ngôn ngữ C# theo kiểu VB hay java mà thôi.

Mình hiểu rồi. Lúc mình học C# ông thầy mình cũng nói vậy đó. smilie( giờ mới biết
Ổng nói chỉ có C# là đáng học smilie(
[Up] [Print Copy]
  [Question]   Re: Câu hỏi về Compiler C# ??? 11/03/2009 04:48:37 (+0700) | #10 | 172758
[Avatar]
dannv
Member

[Minus]    0    [Plus]
Joined: 15/06/2008 11:44:46
Messages: 50
Location: phố Nhổn
Offline
[Profile] [PM]
Thực ra thì một file .exe hoặc .dll viết bằng c# hoặc vb vẫn có thể dịch ngược được.Bạn có thể tham khảo cái này: http://www.google.com.vn/search?hl=vi&q=download+dissharp3&btnG=Tìm+kiếm&meta=.Do đó việc dịch một file c# sang vb hay ngược lại cũng có thể thực hiện được
[Up] [Print Copy]
  [Question]   Re: Câu hỏi về Compiler C# ??? 11/03/2009 10:32:16 (+0700) | #11 | 172794
trumdkny
Member

[Minus]    0    [Plus]
Joined: 13/07/2006 17:46:44
Messages: 22
Offline
[Profile] [PM] [Email]
à tại bữa trước ông anh mình có giao cho mình 1 cái project viết = VB.Net rùi kêu mình dùng tool dịch ra thành C# cho ổng .
[Up] [Print Copy]
  [Programming]   Câu hỏi về Compiler C# ??? 09/04/2010 22:32:34 (+0700) | #12 | 208738
trumdkny
Member

[Minus]    0    [Plus]
Joined: 13/07/2006 17:46:44
Messages: 22
Offline
[Profile] [PM] [Email]
các anh cho em hỏi thêm ? là file .dll có phải là MSIL hok ? tại em thấy dùng viết mấy cái services trong VS thì cũng ra file .dll , mà mấy cái chương trình viết bằng java em thấy trong source nó cũng có mấy cái file .dll ? không biết dll này chưa mã gì trong đó
[Up] [Print Copy]
  [Programming]   Câu hỏi về Compiler C# ??? 09/04/2010 23:29:46 (+0700) | #13 | 208742
[Avatar]
Z0rr0
Q+WRtaW5pc3RyYXRvc+g

Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
[Profile] [PM] [WWW] [Yahoo!]
DLL và MSIL chẳng ăn nhập gì với nhau cả. Xem kĩ 2 link bên dưới:
- http://en.wikipedia.org/wiki/Dynamic-link_library
- http://en.wikipedia.org/wiki/Common_Intermediate_Language
Hibernating
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|