장/단은 딱 랭기지 위치가 설명 해주는것 같다. C#보다 고급 랭기지보다는 네트웤이나 스레드 핸들링, 데이터 스트럭쳐를 더 디테일하게 다룰 수 있고, 지원되는 검증된 라이브러리 종류도 상당히 많고, 랭기지 난이도 대비 성능도 괜찮은 편이다. 최근 mono도 상당히 수준이 올라서 linux나 라즈베리파이같이 mcu 스펙이 어느정도 받쳐주는 타깃보드에 올리는 것도 가능하고. 유니티나 ASP.NET WCF WPF등 비교적 간단하게 서비스나 어플리케이션 꾸릴 수 있는 템플릿들도 잘 되어 있는 편이고
음음엄(67.188)2017-07-01 07:59
저급 랭기지와 비교를 해보면, 일단 성능을 네이티브나 델파이와 비할바는 못되고, 내년 웹어셈블리 나오는것도 현재 벤치마크 수준이 네이티브 대비 1.2~1.5가 나오는데 C#은 아직 멀었다. mono기준 대략 4배정도로 생각하면 되고(벤치마크마다 수치가 다른데, 대충 2~4 수준), 매니지드 환경으로부터 관리/유지/생산의 편의성을 얻는 대신 성능 손실을 본다고 생각을 하면 되는데, 이 때문에 어플리케이션이나 서버군에서 포지션이 애매하다. 게임에선(적어도 게임오픈하고 몇달후에 망하는 회사 말고) 거의 대부분이 네이티브를 고수하고 있고, 이미 성능면에서 현저한 차이로 인해 발도 못딛음.. 예전에 마영전 서버 닷넷베이스로 만들고 몇년동안 욕을 먹었는지 보면 된다.. 최근에는 바꿨나 모르겠네
음음엄(67.188)2017-07-01 08:10
앞서서 임베도 잠깐 언급 했는데, '제품' 찍는 곳에는 명함 못내미는 상황이고, 자바는 생태라도(좋은말인지 나쁜말인지는 알아서 판단) 받혀주는데, 닷넷은 아직 생태도 많이 부족함. 머 로레벨 메모리 핸들링 마샬로 되지 않냐 하는 사람들도 종종 있는데, 언매니지드 운영 리스크 대비 성능 향상 폭이 그리 크지 않다. 이럴바엔 걍 네이티브 라이브러리 물려 쓰고 말지,
음음엄(67.188)2017-07-01 08:15
MS에서 윈폰 해볼라다가 망하고 모바일판 접히나 했지만, 앞에서 잠깐 언급된 유니티가, 정말 한참전에 잠깐 빤짝 했다가 사장되는듯 하더니만, 다시금 모바일에서 움직임을 보이고 있는듯 보인다. 개인적인 예상이지만 MS가 꾸준히 밀어 줄 것으로 보이긴 해.
음음엄(67.188)2017-07-01 08:19
랭기지가 제공하는 코딩 환경으로, 특히 눈에 띄는게 리플렉션이 있고, (런타임에 타입 뒤집어 깔수 있는건데 이게 보안 문제를 야기하기도 함. 양날의 검임) 이걸 네이티브가 따라하기도 했지. 아마 스태틱 리플렉션은 17 코드네임 1y일때 후보군으로 있던걸로 기억하는데 지금 들어와 있는지 모르겠다.
음음엄(67.188)2017-07-01 08:22
네이티브 하다 C#으로 넘어온사람들은 생각보다 안정적인 환경에 놀래기도 하는데, 모든 프레임웤이 throw 기반이라, 프레임웤 내의 힙깨먹는 수준으로 에러만 내지 않으면 거의 안죽는다고 봐도 된다. 그리고 매니지드 특성상 기본 메모리 배리어가 내장 되어있다 보면 됨, strcpy같은 stack overflow같은 취약 포인트는 없다고 봐도 무방하지. 앞에서 잠깐 논했던 프레임웤 상에서 도는 IL형식의 바이너리를 뽑아내는 형태의 컴파일이라, 실 동작 플랫폼 걱정이 매우 적은 반면 리버싱에 엄청나게 취약함. 바이너리 배포를 했으면 그냥 오픈소스 프로젝트 했다고 생각하면 된다. 비개발자도 소스 다뒤집어 깔수 있을정도로 쉽게 리버싱됨
음음엄(67.188)2017-07-01 08:32
throw 얘기를 하면 이 내용을 빼먹을수가 없는데, C# 개발자들은 MS권장이라며 try/catch를 애용 하는 편인데(실제로도 권장이 맞긴 해), 문제는 null exception 잡는 목적으로 try/catch를 쓰거나..(의도하진 않았겠지.. 근데 굳이 하나하나 찾아가면서 익셉션 다 처리하지 않음) 분기를 try/catch로 한다거나... 이건 좀 말을 삼갈게
음음엄(67.188)2017-07-01 08:37
C#을 볼때 보통 몇차례 wrapped 된 API만 사용한다고 오해하는 경우가 좀 있는데, 꼭 그렇지는 않아, ntdll.dll이나 kernel32.dll도 종종 들여다 쓰는 편이고, 성능 요하는 구간 네이티브로 작성해서 사용할수도 있어. 자주 애용하는 기능이지.
음음엄(67.188)2017-07-01 08:44
말이 좀 길어졌는데, 물어본 질문의 답 결론으로, C#만 알아서는 1. 일단 당장 메이저 랭기지가 아니고, 2. 생태가 아직 자리잡지 못했고, 3. 성능상 최고도 아니고, 그렇다고 생상성으로도 최고라 보기 힘들어. 걍 압축하면, 거의 대부분의 것이 가능하지만, 시점상 또렷하게 요분야는 C#이다! 할게 없다는거임
음음엄(67.188)2017-07-01 08:48
물론 그 어떤 사람도 시간이 남아돌진 않겠으나, 네이티브로 기반 쌓고 기술 스택 쌓아 올리는걸 추천한다.
음음엄(67.188)2017-07-01 08:49
마지막말이 오해를 좀 사겠다. 시간이 남아돌아서 네이티브 하란말이 아니고, 기반 잡힌 후에 C#보는걸 추천 한다는 뜻임
C#말하는거 맞음?
장/단은 딱 랭기지 위치가 설명 해주는것 같다. C#보다 고급 랭기지보다는 네트웤이나 스레드 핸들링, 데이터 스트럭쳐를 더 디테일하게 다룰 수 있고, 지원되는 검증된 라이브러리 종류도 상당히 많고, 랭기지 난이도 대비 성능도 괜찮은 편이다. 최근 mono도 상당히 수준이 올라서 linux나 라즈베리파이같이 mcu 스펙이 어느정도 받쳐주는 타깃보드에 올리는 것도 가능하고. 유니티나 ASP.NET WCF WPF등 비교적 간단하게 서비스나 어플리케이션 꾸릴 수 있는 템플릿들도 잘 되어 있는 편이고
저급 랭기지와 비교를 해보면, 일단 성능을 네이티브나 델파이와 비할바는 못되고, 내년 웹어셈블리 나오는것도 현재 벤치마크 수준이 네이티브 대비 1.2~1.5가 나오는데 C#은 아직 멀었다. mono기준 대략 4배정도로 생각하면 되고(벤치마크마다 수치가 다른데, 대충 2~4 수준), 매니지드 환경으로부터 관리/유지/생산의 편의성을 얻는 대신 성능 손실을 본다고 생각을 하면 되는데, 이 때문에 어플리케이션이나 서버군에서 포지션이 애매하다. 게임에선(적어도 게임오픈하고 몇달후에 망하는 회사 말고) 거의 대부분이 네이티브를 고수하고 있고, 이미 성능면에서 현저한 차이로 인해 발도 못딛음.. 예전에 마영전 서버 닷넷베이스로 만들고 몇년동안 욕을 먹었는지 보면 된다.. 최근에는 바꿨나 모르겠네
앞서서 임베도 잠깐 언급 했는데, '제품' 찍는 곳에는 명함 못내미는 상황이고, 자바는 생태라도(좋은말인지 나쁜말인지는 알아서 판단) 받혀주는데, 닷넷은 아직 생태도 많이 부족함. 머 로레벨 메모리 핸들링 마샬로 되지 않냐 하는 사람들도 종종 있는데, 언매니지드 운영 리스크 대비 성능 향상 폭이 그리 크지 않다. 이럴바엔 걍 네이티브 라이브러리 물려 쓰고 말지,
MS에서 윈폰 해볼라다가 망하고 모바일판 접히나 했지만, 앞에서 잠깐 언급된 유니티가, 정말 한참전에 잠깐 빤짝 했다가 사장되는듯 하더니만, 다시금 모바일에서 움직임을 보이고 있는듯 보인다. 개인적인 예상이지만 MS가 꾸준히 밀어 줄 것으로 보이긴 해.
랭기지가 제공하는 코딩 환경으로, 특히 눈에 띄는게 리플렉션이 있고, (런타임에 타입 뒤집어 깔수 있는건데 이게 보안 문제를 야기하기도 함. 양날의 검임) 이걸 네이티브가 따라하기도 했지. 아마 스태틱 리플렉션은 17 코드네임 1y일때 후보군으로 있던걸로 기억하는데 지금 들어와 있는지 모르겠다.
네이티브 하다 C#으로 넘어온사람들은 생각보다 안정적인 환경에 놀래기도 하는데, 모든 프레임웤이 throw 기반이라, 프레임웤 내의 힙깨먹는 수준으로 에러만 내지 않으면 거의 안죽는다고 봐도 된다. 그리고 매니지드 특성상 기본 메모리 배리어가 내장 되어있다 보면 됨, strcpy같은 stack overflow같은 취약 포인트는 없다고 봐도 무방하지. 앞에서 잠깐 논했던 프레임웤 상에서 도는 IL형식의 바이너리를 뽑아내는 형태의 컴파일이라, 실 동작 플랫폼 걱정이 매우 적은 반면 리버싱에 엄청나게 취약함. 바이너리 배포를 했으면 그냥 오픈소스 프로젝트 했다고 생각하면 된다. 비개발자도 소스 다뒤집어 깔수 있을정도로 쉽게 리버싱됨
throw 얘기를 하면 이 내용을 빼먹을수가 없는데, C# 개발자들은 MS권장이라며 try/catch를 애용 하는 편인데(실제로도 권장이 맞긴 해), 문제는 null exception 잡는 목적으로 try/catch를 쓰거나..(의도하진 않았겠지.. 근데 굳이 하나하나 찾아가면서 익셉션 다 처리하지 않음) 분기를 try/catch로 한다거나... 이건 좀 말을 삼갈게
C#을 볼때 보통 몇차례 wrapped 된 API만 사용한다고 오해하는 경우가 좀 있는데, 꼭 그렇지는 않아, ntdll.dll이나 kernel32.dll도 종종 들여다 쓰는 편이고, 성능 요하는 구간 네이티브로 작성해서 사용할수도 있어. 자주 애용하는 기능이지.
말이 좀 길어졌는데, 물어본 질문의 답 결론으로, C#만 알아서는 1. 일단 당장 메이저 랭기지가 아니고, 2. 생태가 아직 자리잡지 못했고, 3. 성능상 최고도 아니고, 그렇다고 생상성으로도 최고라 보기 힘들어. 걍 압축하면, 거의 대부분의 것이 가능하지만, 시점상 또렷하게 요분야는 C#이다! 할게 없다는거임
물론 그 어떤 사람도 시간이 남아돌진 않겠으나, 네이티브로 기반 쌓고 기술 스택 쌓아 올리는걸 추천한다.
마지막말이 오해를 좀 사겠다. 시간이 남아돌아서 네이티브 하란말이 아니고, 기반 잡힌 후에 C#보는걸 추천 한다는 뜻임