The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Разработка модулей для Linux ядра на языке Haskell

13.09.2009 20:50

В статье представлен пример создания и сборки рабочего модуля для Linux ядра, написанного на функциональном языке программирования Haskell с интегрированным сборщиком мусора. Для сборки задействован компилятор GHC и наработки проекта House, ориентированные на использование Haskell для низкоуровневого программирования.

  1. Главная ссылка к новости (http://tommd.wordpress.com/200...)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/23394-Haskell
Ключевые слова: Haskell, linux, kernel
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (35) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, pavlinux (ok), 21:10, 13/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >As a result, the first command below should not result in output while
    >the second should be minimal.
    > nm module.ko | egrep “^ +C ”
    > nm module.ko | egrep “^ +U ”

            U __kmalloc
            U kfree
            U krealloc
            U mcount
            U printk

    Это Hello World! такой, c malloc и free :)

    Ваще забавно, только не вижу смысла писать системные задачи на функциональном языке...

    Ядро не должно думать, ядро должно ПРАВИЛЬНО передавать от юзера к железу и обратно.

     
     
  • 2.6, Аноним (-), 23:15, 13/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Ну или железо должно думать, а пользователь только нажимать на кнопки...
     
  • 2.9, JLarky (?), 00:59, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Ваще забавно, только не вижу смысла писать системные задачи на функциональном языке...

    сходу кажется что immutable states и прочие штуки повышающие стабильность и предсказуемость языка по сравнению с C того стоят

     
  • 2.13, Zenitur (?), 11:23, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Пусть думает - надо же защиту от дурака, чтобы пользователь не раскаивался в итоге от своих ошибок.
     
  • 2.15, dq0s4y71 (??), 11:51, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Это Hello World! такой, c malloc и free :)

    А как же! Там же сборщик мусора. Без него теперь никак... ;)

     

  • 1.7, Anonimous (?), 23:25, 13/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сбылась мечта VSL! =)
     
  • 1.8, yantux (??), 00:03, 14/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    в чём тут прикол? вот если бы на паскале можно было писать модули для ядра...
     
     
  • 2.10, Karbofos (??), 01:05, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    а почему бы не на коболе?
     
  • 2.11, pavlinux (ok), 02:30, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >в чём тут прикол? вот если бы на паскале можно было писать
    >модули для ядра...

    Какие проблемы? Паскаль знаете? Вперед!
    Такие же объектники генерит, даже asm впаян... можно прогнать через p2c

     
     
  • 3.17, Karbofos (??), 13:14, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    думается, что p2c не так чисто работает, как хотелось бы. ;)
     
  • 3.37, User294 (ok), 17:36, 19/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    > Какие проблемы? Паскаль знаете? Вперед!

    Блин, ждем пример модуля ядра на брейнфаке. Уж ты извини, павлинукс, но gcc с асм вставками получается как-то сильно менее черезпопно и кроссплатформенно чем паскаль с оными, имхо :).Более того - в gcc как-то проще и понятнее генерация кода и упихивание всего этого в случаях когда на выходе надо получить что-то предсказуемое до битика (e.g. бинарь с предсказуемым размещением частей для зашивки в однокристалку, etc).

     
  • 2.12, daemontux (?), 04:46, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >в чём тут прикол? вот если бы на паскале можно было писать
    >модули для ядра...

    Лучше на брейнфаке.

     
     
  • 3.14, Knuckles (ok), 11:36, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Ты наверное свято веришь в то, что "настоящие" программисты пишут только на C/C++?
     
     
  • 4.16, dq0s4y71 (??), 11:54, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >Ты наверное свято веришь в то, что "настоящие" программисты пишут только на
    >C/C++?

    Настоящие программисты не забивают гвозди головой.

     
     
  • 5.18, Knuckles (ok), 13:44, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Настоящие программисты не забивают гвозди головой.

    ОК. Прошу в студию примеры того, что не умеет паскаль такого, что умеет Си? :)


     
     
  • 6.19, dq0s4y71 (??), 14:09, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Причем здесь "умеет - не умеет"? Можно ли гвозди забивать, например, плоскогубцами? Можно. Но никто так не делает - для этого есть молоток. Примерно так же и с языками программирования.
     
  • 6.20, Karbofos (??), 14:34, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    по скорости он будет уступать. нужно более конкретно обяснить, какая конкретно скорость подразумевается, или вы сами знаете? даже не скорость оптимизации (в этом случае можно условно не учитывать).
     
  • 6.21, pavlinux (ok), 14:46, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >>Настоящие программисты не забивают гвозди головой.
    >
    >ОК. Прошу в студию примеры того, что не умеет паскаль такого, что
    >умеет Си? :)

    модули для ядра :)

    Ах да, вспомнил, в Паскале незя мешать логику и математику...

    ( a || b ) * ( a && b ) << c
    c + !( a || b ) * d

    которая ох как нужна при работе с девайсами  

    В паскале указатель может ссылаться на не инициализируемую переменную - очень полезно для глюкофф
    В Паскале нет арифметики с указателями

    Вычисление чисел Фибоначчи, работает раз в 20 быстрее чем любая рекурсия, рекурсия с массивами,....

    /* ---------------- */

    #include <stdio.h>

    void l(unsigned int* n1, unsigned int* n2, int n) {

        unsigned int k1,k2;

        if(n<=1) { *n1=1; *n2=1; return; }
        if(n==2) { *n1=2; *n2=1; return; }
        
        if(n%2) {  
                  l(&k1, &k2, (n-1)/2 );
                  *n1 = k1 * ( k1 + k2 ) + k1 * k2;
                 *n2 = k1*k1 + k2*k2;
        } else {    
                 l(&k1, &k2, (n/2)-1);
                 *n1 = ( k1+k2 ) * ( k1+k2 ) + k1*k1;
                 *n2 = ( k1+k2 ) * k1 + k1*k2;
        }
    }

    unsigned int f(int n) {

        unsigned int n1, n2;
        l(&n1,&n2,n);
        return n1;
    }

    void f_print(int n) {
        printf("%dth Fibonacci number is %lu\n",n,f(n));
    }

    int main(void) {
        f_print(46);
        return 0;
    }

    /* ---------------- */

    Только ради такой красоты, можно выкинуть слово Pascal из мозга,
    и поставить фаервол, чтоб не возвращалось.

    У Паскаля есть один большой ПЛЮС, - С него ЛЕГКО перейти на С, обратно уже не возможно. :)

     
     
  • 7.22, dq0s4y71 (??), 15:52, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Ах да, вспомнил, в Паскале незя мешать логику и математику...

    Да можно. Но это опять забивание гвоздей при помощи плоскогубцев:

    Integer( a or b ) * Integer( a and b ) shl c;
    c + Integer(not( a or b) ) * d

    >В паскале указатель может ссылаться на не инициализируемую переменную - очень полезно для глюкофф

    Не совсем понятно что здесь имелось ввиду, но способность указателей ссылаться на все что угодно - это, скорее, свойство Си.

    >В Паскале нет арифметики с указателями

    Да есть. Но она тоже через жо^W^Wпреобразование типов.

     
     
  • 8.27, Knuckles (ok), 16:40, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Все, что вы тут называете забиванием гвоздей плоскогубцами , является примером ... текст свёрнут, показать
     
     
  • 9.28, Karbofos (??), 17:04, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    тогда программинг на асме - трехэтажный мат в действительности си плюсы - н... текст свёрнут, показать
     
     
  • 10.29, Knuckles (ok), 17:22, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Нет Потому что проблема Си и в бОльшей степени Си не в низком уровне, а в рас... текст свёрнут, показать
     
     
  • 11.30, dq0s4y71 (??), 19:16, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Недавний пример из личной практики const LocoCodeTable array 0 166 of TLo... текст свёрнут, показать
     
     
  • 12.31, Knuckles (ok), 22:25, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    gt оверквотинг удален Не путаете с Си Это я к тому, что Линукс пишут на Си,... текст свёрнут, показать
     
     
  • 13.32, Karbofos (??), 23:13, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    int Count 10, 20, 30 так можно на си и это не расширение gcc си может обр... текст свёрнут, показать
     
  • 13.33, pavlinux (ok), 23:40, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Опа это типа вот так вот type string packed array 1 20 of char ... текст свёрнут, показать
     
     
  • 14.34, Knuckles (ok), 00:33, 15/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Это было давно и неправда Серьезно ... текст свёрнут, показать
     
     
  • 15.35, pavlinux (ok), 00:37, 15/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    А серьезно это в SNOBOLE ... текст свёрнут, показать
     
  • 13.36, dq0s4y71 (??), 12:02, 15/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Нет В Си не надо знать количество элементов чтобы инициализировать константны... текст свёрнут, показать
     
  • 7.23, Karbofos (??), 15:53, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    > В паскале указатель может ссылаться на не инициализируемую переменную - очень полезно для глюкофф

    в сях тоже можно это сделать. или подразумевалось что-то специфичное?

    int *pvariInt;
    int  variInt;

    pVariInt = &variInt; // возможно, компайлер предупредит.

     
     
  • 8.24, dq0s4y71 (??), 15:58, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Не предупредит С какой стати ... текст свёрнут, показать
     
     
  • 9.25, Karbofos (??), 16:02, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    потому что происходит использование неинициализированой variInt ... текст свёрнут, показать
     
  • 9.26, Karbofos (??), 16:05, 14/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    хотя, для pvariInt интересен только адрес памяти, а это уже известно неизвестен... текст свёрнут, показать
     
  • 6.38, User294 (ok), 17:50, 19/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >ОК. Прошу в студию примеры того, что не умеет паскаль такого, что
    >умеет Си? :)

    А можно на паскале сформировать raw binary с предсказуемой структурой и поведением? А чтоб еще и под не самую простую архитектуру, типа гарвадрца (например, Atmel AVR, у которого флеш для кода и статичных данных, а оператива - только для временных данных и не может выполнять код вообще). Чтоб машинный код, статичные данные и динамичные данные можно было пхнуть в конкретные адреса (возможно, обитающие в разных адресных пространствах) и бинарь сразу мог бы выполняться процом из его флехи, не делая левых обращений куда попало, не ожидая никакого рантайма вообще, не нуждаясь в сложном предварительном загрузчике педалящем формат типа ELF'а и прочая. В свое такое с борланд паскалем это было напряжно. То есть, асм вставки воткнуть - можно, но вот получить гольный бинарь способный работать в нестандартном окружении - уже опаньки. А как с этим сейчас?

    Грубо говоря - режим этакого "супер-ассемблера", когда компилер можно детально проинструктировать что и куда необходимо распихать, не геморроясь с выписыванием этого (или как минимум большинства из этого) на ассемблере (тем более что портировать будет сильно проще). В сях то оно с полпинка - язык для системных дел...

     
     
  • 7.39, Knuckles (ok), 13:54, 21/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Грубо говоря - режим этакого "супер-ассемблера", когда компилер можно детально проинструктировать что
    >и куда необходимо распихать, не геморроясь с выписыванием этого (или как
    >минимум большинства из этого) на ассемблере (тем более что портировать будет
    >сильно проще). В сях то оно с полпинка - язык для
    >системных дел...

    Это верно, но тут речь больше идет о языке, чем о компиляторе  или кодогенераторе.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру