출처: 
Google+ Rob Pike - 
https://plus.google.com/u/0/101960720994009339267/posts?hl=ko 
Dennis Ritchie, inventor of the C programming language, has died
메아리 저널 - 데니스 리치 
Tim BrayDMR, 1941—2011

Dennis Ritchie
Dennis Ritchie by hyoga 저작자 표시비영리동일조건 변경허락


C언어를 창시하고 UNIX 시스템을 설계 및 구현한 Dennis Ritchie 가 가 지난 주말 자신의 집에서 사망했습니다.

Dennis Ritchie는 C프로그래밍 언어를 만들었고, UNIX시스템의 지대한 공헌자였습니다. 1983년 그는 운영체제(Operating System) 이론 개발 및 UNIX 시스템의 구현으로 오랜 동료인 Ken Thompson과  튜링 상(Turing Award)를 받았습니다.

그는 1972년 벨 연구소에서 B언어의 후속으로 C언어 개발을 시작했으며 1983년 12월 14일 C언어 표준이 지정된 이후 C언어는 지금까지 IT산업계에 막대한 영향을 끼쳤습니다.


Dennis Ritchie는 운영체제(Operating System)의 이론을 확립 하고 실제 구현까지 하였으며, C언어라는 획기적인 컴퓨터 프로그래밍 언어도 개발하여 인류가 편하게 컴퓨터를 사용할 수 있게 만든 위대하신 분입니다.


참고로 Apple의 Mac OSX나 iOS도 기본 설계는 Dennis Ritchie가 설계한 UNIX시스템을 근간으로 하고 있으며, 개발도 C언어로 되어있습니다. 그리고 MS사의 Windows도 C언어로 구현되었으며, Linux도 UNIX시스템을 원래는 Linus Torvalds가 UNIX 시스템을 PC로 포팅하여 흉내낸 시스템으로 볼수 있습니다 Android도 Linux 기반에 Dalvik VM을 올렸으며 기본  소스코드가 C언어 입니다.


Steve Jobs가 별세하였다고 일반인들이 추모하긴 한데, 이 Steve Jobs도 Dennis Ritchie가 없었으면 Apple이란 회사도 없었을겁니다 또한 Bill Gates의 M$(Microsoft)사도 없었고, Oracle, SUN(Oracle에 인수되었다만) Linux를 구현한 Linus Torvalds도 Android도 없었을겁니다.



강성훈님께서 메아리 저널에서 아래와 같은 글을 남겼습니다.

메아리 저널 - 데니스 리치

데니스 리치는 사실 스티브 잡스보다 더 중요한 사람이다. 왜냐하면 그가 수십년 전에 (일부는 여러 사람과 함께) 만들었던 운영체제와 프로그래밍 언어가 세계를 장악하고 있기 때문이다. (모르는 사람을 위해: 각각 유닉스와 C.) 운영체제는 마이크로소프트 윈도의 도래로 그 세력이 좀 줄어들었다고 반론할 수는 있겠으나, 그 윈도조차도 결국 그가 만든 프로그래밍 언어로 짜였다는 걸 생각해 보면 반론을 할 여지도 별로 없다. 게다가 그 운영체제에서 유래한 개념들은 지금의 운영체제들에서 마치 당연하다는 듯이 쓰이고 있지만 (역시 모르는 사람을 위해: 파이프!) 그 당시로서는 매우 혁명적인 것이었다. 그렇기에 스티브 잡스의 영향력은 그가 직간접적으로 관여한 장비와 소프트웨어를 사용하는 사람들에게만 미치지만, 데니스 리치의 영향력은 현대의 거의 모든 프로그래머와, 그 프로그래머들이 만든 프로그램을 사용하는 거의 모든 사용자들에게 미친다.


인류에 크나큰 공헌을 한 데니스 리치(Dennis Ritchie)의 죽음을 애도합니다. 


아래는 누군가 Flickr 에 Dennis Ritchie가 작성했던 C언어의 교본인 "The C Programming Language" 사진을 찍은 후 Dennis Ritchie를 추모하고 있는 사진을 올렸습니다.

RIP Dennis M. Ritchie !
RIP Dennis M. Ritchie ! by believekevin 저작자 표시



Rest In Peace, Dennis Ritchie.


ps. 아래는 대학 3학년 아니 대학 3학년 진학 전 대학 2학년 겨울방학때 Dennis Ritchie와 Brian W.Kernighan이 공동저작한The C Programming Language 에 대해서 쓴글입니다. C언어를 맨처음 공부한다고 Dennis Ritche가 작성한 The C Programming Language 원서를 낑낑대며 읽던 대학 입학전 저가 생각나군요 ^^

2007/01/12 - [끄적거림] - 시대가 변해도 변하지 않는



Buy me a coffeeBuy me a coffee

어제부터 GTK+ 3.0 Reference Manual을 주말마다 짬을 내어 올해안까지 번역해보자는 목표를 세워보았다.

이렇게 목표를 잡고 나서 간한단 GTK+ 프로그램을 C로 작성해보았다.
아래는 C소스코드입니다.

#include <gtk/gtk.h>

GtkWidget* build_label() {
    GtkWidget *label = gtk_label_new("Hello, World!");
    gtk_label_set_selectable(GTK_LABEL(label), FALSE);
    return label;
}

int main (int argc, char **argv)
{
    GtkWidget *win;

    gtk_init (&argc, &argv);

    win = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    gtk_container_add(GTK_CONTAINER(win), build_label());
    gtk_window_resize(GTK_WINDOW(win), 300, 200);

    g_signal_connect(win, "destroy", G_CALLBACK(gtk_main_quit), NULL);

    gtk_widget_show_all (win);

    gtk_main ();
   
    return 0;
}

소스코드를 컴파일 하는 방법은, GTK+3.0 라이브러리가 설치되어야 하며, 아래와 같은 명령어를 작성하여 누르면 컴파일이 됩니다. 실행파일을 열면 아래와 같은 화면이 나옵니다.

gcc `pkg-config --cflags gtk+-3.0`  -o gtkmain gtkmain.c  `pkg-config --libs gtk+-3.0`



조만간 재미있는 GTK+용 프로그램이 나오겠지?ㅎㅎ



Buy me a coffeeBuy me a coffee




GTK+ 3.2가 2011년 9월 25일(일)에 출시되었습니다.



GTK+ 3.2.0에서는 2가지 중요한 실험적인 기능이 포함되었습니다.

  1. HTML5을 사용하는 웹 브라우저 안에서 GTK+어플리케이션을 실행할수 있는 기능 (First, the ability to run Gtk+ applications inside a browser using HTML5.)
  2. Wayland display server를 지원(Second, initial support for the Wayland display server.)


GTK+ 3.2는 사용자가 바로 혜택을 누릴수 있는 수많은 소소한 기능을 소개합니다.

  • CSS Themeing 기능의 향상(CSS themeing support has been improved)
  • GtkFileChooser는 사용 할수 있도록 돌리었음. (GtkFileChooser has been overhauled)
  • GtkFontSelection 은 GtkFontChooser 위젯의 새로운 세트로 대체 되었음(GtkFontSelection has been replaced by a new set of GtkFontChooser widgets)
  • 여러 새로운 위젯들이 소개되었음(several new widgets have been introduced as well.)

GTK+3.2에서 HTML5의 지원은 여전히 실험적입니다. 이 것은 HTML5에 적합한 브라우저 안에서 계산기나 노트패드 어플리케이션류의 GTK+ 어플리케이션을 작동할수 있도록 허락을 해준다. 

아래는 Firefox 4.0안에서 GIMP를 실행하는 데모비디오입니다.


아래 동영상은 HTML5을 지원하는 Firefox4안에서 계산기와 Evince를 실행하는 동영상입니다.

Gtk+ broadway demo from Alexander Larsson on Vimeo.



또 다른 큰 새로운 것도 실험적인 것입니다. 알다시피 Wayland 자체는 매우 실험적인데, GTK+ 3.2 에서는 Wayland display server를 지원한다. 현재 많이 알려져 있는 X.org를 대신하여 미래에 많이 사용할 Wayland에 대해 GTK+가 미래를 위해 준비를 확실히 하고 있다.

QT또는 Wayland를 지원을 하는 중이기 때문에 두가지 오픈 소스 툴킷(GTK+, QT은 미래를 위한 준비를 하고 있다고 볼수 있습니다.



※ GTK+란? (What is GTK+)

GTK+는 그래픽 유저 인터페이스(GUI)를 만들기 위한 멀티 플랫폼 툴킷입니다. (아래서 부턴 알아서 번역을 바랍니다.)

GTK+ is a multi-platform toolkit for creating graphical user interfaces. Offering a complete set of widgets, GTK+ is suitable for projects ranging from small one-off tools to complete application suites.

GTK+ has been designed from the ground up to support a range of languages, not only C/C++. Using GTK+ from languages such as Perl and Python (especially in combination with the Glade GUI builder) provides an effective method of rapid application development.

GTK+ is free software and part of the GNU Project. However, the licensing terms for GTK+, the GNU LGPL, allow it to be used by all developers, including those developing proprietary software, without any license fees or royalties. GTK+ is the only 100% free-of-cost open source industrial-strength GUI toolkit available today.

Since its origins as the toolkit for the GNU Image Manipulation Program (GIMP), GTK+ has been used in a wide range of software. Notably, GTK+ is the foundation of the GNOME desktop.


Buy me a coffeeBuy me a coffee


하루종일 Android OS에서 C/C++코드와 Java 코드를 연동하기 위해서 Android NDK를 사용하여 프로그래밍중입니다.

C/C++로 개발된 기능을 Java에서 쓰기 위해서 JNI(Java Native Interface)를 사용해야되긴 하지만 처음 접하니 어렵군요.

분명히 Visual Studio에서 빌드하여 성공한 코드가 JNI(Java Native Interface)로 빌드할땐 에러가 나니 짜증이 나군요.


ps. 2011년 2월 21일 오후 5시 18분경 컴파일 성공. 이제 마무리 작업만 하면 됩니다 ~_~





Buy me a coffeeBuy me a coffee

출처: Android DevelopersWhat is the NDK?


Android NDK는 안드로이드 어플리케이션(앱)에 Native code(C,C++등)을 이용한 임베딩 요소들을 사용할수 있는 툴셋입니다.

참고로 NDK는 Native Development Kit의 약자입니다.

안드로이드 어플리케이션(앱)은 Dalvik Virtual machine(VM)에서 돌아갑니다. NDK는 C나 C++같은 Native code를 어플리케이션에서 구현할수 있게 허락해줍니다.


NDK를 쓰는 이유

  1. Garbage Collection이 무서워서
  2. 메모리가 너무 많이 필요해서 (over 16M~24M of JVM)
  3. 다른 C/C++ 라이브러리를 사용하고 싶어서
  4. ㅂㅌ인증을 받고 싶어서...(농담입니다 @.@)

영상처리쪽이나 음성처리같이 메모리를 많이 필요하는 어플 구현에 NDK를 써야 최상의 결과를 낼수 있을겁니다.
ps. 그러나 용량이 엄청많이 늘어나겠지.. (먼산)
Buy me a coffeeBuy me a coffee

이번에 Android에서 디코딩관련해서 C++코드를 사용해야할 일이 생겼다.

그래서 디코딩관련 C++코드와 Android 어플과 연계하는 방법을 찾다보니 JNI을 알아야겠다는 결론이 나왔음.

The Java Native Interface Programmer's Guide and Specification

간단한 Java Native Interface 예제

위의 링크에 나오는 Java Native Interface 관련 문서를 읽고 있다만 아직도 이해를 못하겠다.
너무 익숙하지 않아서 그런가?

Java 코드와 C++ 코드만 쳐다보니 어질어질..  

Buy me a coffeeBuy me a coffee

이번에 안드로이드의 리눅스 기반 애플리케이션 만들기에 도전을 해보았습니다.

리눅스를 기반한 안드로이드 플랫폼 개발을 위해선 C언어를 우선 알아야 합니다.

C언어 정도는 Java를 알면 금방 배우는 쉬운 언어입니다^^


C언어를 알았으면 리눅스 기반의 안드로이드 애플리케이션을 만들때 필요한 크로스 컴파일용 툴 체인(Tool Chain)을 설치해야합니다.

툴체인은 android-group-koreaDownload에 여러가지 종류가 있는데 그 중 하나인 arm-cortex_a8-linux-gnueabi-20100108.1030.tar.bz2 을 다운로드 받아 Ubuntu 10.04에 툴 체인을 설치하였습니다.

(※ Tool Chain설치는 [common]Kandroid Toolchain Ver.20090108 for Cortex-A8를 참고하시면 됩니다.)


툴체인을 설치 후엔 아래와 같이 C언어 코드(hello.c)를 작성합니다.


#include <stdio.h>
int main(int argc, char *argv[])
{
    printf("Hello, Android!\n");
    return 0;
}

코드 작성후 아래와 같이 컴파일 합니다.

저는 arm-cortex_a8-linux-gnueabi-20100108.1030.tar.bz2 를 다운 받아서 arm-cortex_a8-linux-gnueabi-gcc가 들어갔습니다. 툴체인의 버전에 따라 이름이 다르긴해도 툴체인의 컴파일러 실행파일 뒤에는 gnueabi-gcc가 붙습니다.


studioego@studioego-desktop:~/working$ arm-cortex_a8-linux-gnueabi-gcc hello.c -static -o hellostatic

컴파일을 하고 나선 컴퓨터에서 실행하려면 안됩니다. 이유는 컴퓨터(x86)용으로 컴파일 한 것이 아니라 안드로이드용 기계(arm)용으로 컴파일되어 돌아가지 않을뿐.


studioego@studioego-desktop:~/working$ ./hellostatic
bash: ./hellostatic: cannot execute binary file

위의 실행파일을 실행시키려면 x86용으로 컴파일을 하지 않았기 때문에 실행이 되지 않습니다.


컴파일하여 나온 결과파일을 안드로이드폰인 제 hTC Desire에 넣어보고 실행을 하겠습니다.


studioego@studioego-desktop:~/working$ adb push hellostatic /data/ch13
614 KB/s (586197 bytes in 0.931s)
studioego@studioego-desktop:~/working$ adb shell
# cd /data/ch13
# chmod 777 hellostatic
# ./hellostatic
Hello, Android!
#




위의 화면에서 나온 것 처럼 Hello, Android!가 실행됩니다.

그리고 휴대폰에서 터미널을 띄어넣고 hellostatic을 실행해도 똑같은 화면이 나옵니다.




단순한 애플리케이션이지만 C언어로도 Android 어플을 만들수 있다는 것을 보여줍니다.

여기까지 경지에 오려면 툴체인의 개념을 잘 알아야 하던데, 아직 저도 툴체인쪽 개념은 젬병 ㅡㅡ;;

Buy me a coffeeBuy me a coffee


관련포스트
Inside the C Programming - 아쉽지만 원 저자의 요청으로 비공개가 되었습니다.

관련내용
GNUPro Toolkit Manuals 4. Basic Principles of the Tools


2010년 5월 30일 오후 2시경.

강남구 아무개동 아무개회사에서 GNU Korea의 blueguy님의 세미나가 있었습니다.

제목은 Inside the C Programming 이라는 것이였습니다.

세미나 내용은 Inside the C Programming 의 내용 그대로 진행하였습니다.

Inside the C Programming 의 내용을 보면 학부 3~4학년때 배우는 과목인 System Programming+Operating System+Compiler(앞부분)을 종합하여 넣은 것이라 내공이 상당하게 쌓이지 않은 이상 쉽게 설명하려고 해도 안드로메다로 넘어갈수 있습니다.

학부를 졸업한 사람에게도 내용이 이해되는건 몇개 있고 약간 모르는 내용들이 여러 개씩 나오긴 하지만, 학부생에게 이런 내용 알려주면 거의 상모돌리고 졸아 버릴 위험성이 높겠군요.

Inside the C Programming 에서 다루는 내용을 아래와 같이 압축하여 간단하게 설명하겠습니다.


1. (우선 C언어를 학부때 배웠다는 전제하에서) gcc(the GNU Compiler Collection-GNU C Compiler가 아님.)는 IDE를 가지지 않은 command line compiler이다.

gcc가 하는 일

(1) 사용자에게 옵션과 소스 파일명들의 입력을 받는다.

(2) 소스 파일명의 확장자를 보고 어떤 단계를 처리해야 할지 결정합니다.

(3) 사용자의 옵션을 각각의 단계를 맡고 있는 실행파일의 옵션으로 변경합니다.

(4) 각각의 단계를 맡고 있는 실행파일을 호출(fork와 exec이겠죠?)하여 단계를 수행하도록 한다.

2. gcc는 껍데기이고 내부에서 cpp, as, ld 등에서 처리된다.  (참조: GNUPro Toolkit Manuals 4. Basic Principles of the Tools)

3. 전처리(preprocessing)과정에서는 프로그래밍 컴파일을 하기전 소스코드의 매크로 치환을 합니다. 여기까지는 소스 코드의 parsing을 하지도 않고, 컴파일 과정도 거치지 않으므로 여기까진 어느 플랫폼의 컴파일러가 돌아가던 문제 없이 처리할수 있습니다.
(※ 참고로 전처리 과정은 매크로 치환을 할 뿐이고 에러를 잡을 수 없습니다.)

4. 전처리과정이 끝났으면 C언어 소스의 파싱을 합니다. 여기에서 모든 에러를 걸려줍니다. 전처리과정에선 매크로 치환만 하지 에러는 파싱과정에서 대부분을 잡습니다.

5. 파싱이 끝나고 나선 Assemble 과정을 거칩니다 as(GNU assembler)가 어셈블리 언어로 변환을 해 줍니다.

5. 이후 relocatable object과정을 거칩니다. Assemble과정이 끝나면 Object파일이 생성됩니다. 이 Object파일들을 모아서 어떤 symbol을 참조하는지에 대해서 조사하고 Linking을 하고 메모리상에 Loading을 하게 됩니다. 이를 Linking and Loading이라고 부릅니다.

2시간 동안 진행 되었던 Inside the C Programming (원 저자 요청으로 비공개) 세미나 내용을 매우 압축하여 표현하였으나 여기선 설명이 부족한듯 합니다. -_-;; 상세한 내용은 Inside the C Programming (원 저자 요청으로 비공개)을 보시기 바랍니다.

(참조: GNUPro Toolkit Manuals 4. Basic Principles of the Tools)
Compilation involves up to four stages, always in the following order:

  • preprocessing

  • compiling

  • assembling

  • linking


컴파일러가 컴파일을 하면 preprocessing, compiling, assembling, linking 등의 4단계로 진행된다고 설명할 수 있습니다. 컴파일러가 컴파일하는 것의 내부를 더 뜯어보면 Parsing은 물론이고 컴퓨터 메모리 구조등의 OS 기본지식이 있어야 알수 있는 내용들이 들어있습니다.

역시 컴퓨터공학부 3~4학년 과정 과목인 System Programming, Operating System, Compiler(앞부분) 3과목의 내용을 통틀어 설명하기 때문에 2시간의 세미나가 부족하긴 하더군요. 더 많은 정보를 얻고 싶은 분들은 gcc, cpp, as, ld 등의 manpage와 manual을 참조해야 되는 사실을 보고나선... (한글화가 된 자료는 joinc.co.kr의 내용을 다 읽어보면 빠른 시간내에 이해되실겁니다.)

공부할 것은 많고, 시간은 부족하다.


'컴퓨터 > 프로그래밍' 카테고리의 다른 글

Unicode의 이해 단계는?  (1) 2010.10.11
Inside the C compiler  (0) 2010.05.30
suvbersion 설치 및 사용법 링크  (1) 2010.03.31
Google App Engine으로 Twitter 봇을 구현!  (3) 2010.01.24
Regualr Expressions  (0) 2009.09.15
Buy me a coffeeBuy me a coffee

+ Recent posts