The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Разработка модулей для Linux ядра на языке Haskell"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Разговоры, обсуждение новостей (Public)
Изначальное сообщение [ Отслеживать ]

"Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от opennews (ok) on 13-Сен-09, 21:10 
В статье (http://tommd.wordpress.com/2009/09/13/kernel-modules-in-haskell/) представлен пример создания и сборки рабочего модуля для Linux ядра, написанного на функциональном языке программирования Haskell (http://ru.wikipedia.org/wiki/Haskell) с интегрированным сборщиком мусора. Для сборки задействован компилятор GHC (http://www.haskell.org/ghc/) и наработки проекта House (http://web.cecs.pdx.edu/~kennyg/house/), ориентированные на использование  Haskell для низкоуровневого программирования.

URL: http://tommd.wordpress.com/2009/09/13/kernel-modules-in-haskell/
Новость: http://www.opennet.me/opennews/art.shtml?num=23394

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Разработка модулей для Linux ядра на языке Haskell"  +1 +/
Сообщение от pavlinux (ok) on 13-Сен-09, 21:10 
>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 :)

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Аноним (??) on 13-Сен-09, 23:15 
Ну или железо должно думать, а пользователь только нажимать на кнопки...
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от JLarky email on 14-Сен-09, 00:59 
>Ваще забавно, только не вижу смысла писать системные задачи на функциональном языке...

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Zenitur email on 14-Сен-09, 11:23 
Пусть думает - надо же защиту от дурака, чтобы пользователь не раскаивался в итоге от своих ошибок.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

15. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от dq0s4y71 (??) on 14-Сен-09, 11:51 
>Это Hello World! такой, c malloc и free :)

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Anonimous on 13-Сен-09, 23:25 
Сбылась мечта VSL! =)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Разработка модулей для Linux ядра на языке Haskell"  –1 +/
Сообщение от yantux (??) on 14-Сен-09, 00:03 
в чём тут прикол? вот если бы на паскале можно было писать модули для ядра...
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Karbofos (??) on 14-Сен-09, 01:05 
а почему бы не на коболе?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от pavlinux (ok) on 14-Сен-09, 02:30 
>в чём тут прикол? вот если бы на паскале можно было писать
>модули для ядра...

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

17. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Karbofos (??) on 14-Сен-09, 13:14 
думается, что p2c не так чисто работает, как хотелось бы. ;)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

37. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от User294 (ok) on 19-Сен-09, 17:36 
> Какие проблемы? Паскаль знаете? Вперед!

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от daemontux on 14-Сен-09, 04:46 
>в чём тут прикол? вот если бы на паскале можно было писать
>модули для ядра...

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Knuckles email(ok) on 14-Сен-09, 11:36 
Ты наверное свято веришь в то, что "настоящие" программисты пишут только на C/C++?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

16. "Разработка модулей для Linux ядра на языке Haskell"  +2 +/
Сообщение от dq0s4y71 (??) on 14-Сен-09, 11:54 
>Ты наверное свято веришь в то, что "настоящие" программисты пишут только на
>C/C++?

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

18. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Knuckles email(ok) on 14-Сен-09, 13:44 
>Настоящие программисты не забивают гвозди головой.

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


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

19. "Разработка модулей для Linux ядра на языке Haskell"  +1 +/
Сообщение от dq0s4y71 (??) on 14-Сен-09, 14:09 
Причем здесь "умеет - не умеет"? Можно ли гвозди забивать, например, плоскогубцами? Можно. Но никто так не делает - для этого есть молоток. Примерно так же и с языками программирования.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

20. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Karbofos (??) on 14-Сен-09, 14:34 
по скорости он будет уступать. нужно более конкретно обяснить, какая конкретно скорость подразумевается, или вы сами знаете? даже не скорость оптимизации (в этом случае можно условно не учитывать).
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

21. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от pavlinux (ok) on 14-Сен-09, 14:46 
>>Настоящие программисты не забивают гвозди головой.
>
>ОК. Прошу в студию примеры того, что не умеет паскаль такого, что
>умеет Си? :)

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

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

( 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 из мозга,
и поставить фаервол, чтоб не возвращалось.

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

22. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от dq0s4y71 (??) on 14-Сен-09, 15:52 
>Ах да, вспомнил, в Паскале незя мешать логику и математику...

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

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

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

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

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

27. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Knuckles email(ok) on 14-Сен-09, 16:40 
>>Ах да, вспомнил, в Паскале незя мешать логику и математику...
>
>Да можно. Но это опять забивание гвоздей при помощи плоскогубцев:
>>В Паскале нет арифметики с указателями
>
>Да есть. Но она тоже через жо^W^Wпреобразование типов.

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

28. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Karbofos (??) on 14-Сен-09, 17:04 
тогда программинг на асме - трехэтажный мат? :)

в действительности си (плюсы - немного меньше) для меня - ассемблер с "человеческим лицом". этот язык программирования так и был задуман по своей сути.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

29. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Knuckles email(ok) on 14-Сен-09, 17:22 
>тогда программинг на асме - трехэтажный мат? :)

Нет. Потому что проблема Си и в бОльшей степени Си++ не в низком уровне, а в расхлябанном стиле.

>в действительности си (плюсы - немного меньше) для меня - ассемблер с
>"человеческим лицом". этот язык программирования так и был задуман по своей
>сути.

Да. И только в этом смысле он действительно хорош.
Паскаль гораздо более продвинут, чем Си. Я считаю, что единственная причина, почему на нем не пишут ядра ОС (хотя, попытки наверняка были), это его богатая стандартная библиотека, которую тяжело перенести на уровень ядра (например, строки).

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

30. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от dq0s4y71 (??) on 14-Сен-09, 19:16 
>Паскаль гораздо более продвинут, чем Си.

Недавний пример из личной практики.

const
  LocoCodeTable: array [0..166] of TLocoRec = (
    (Name: '2М62'; Code: 539;),
    (Name: '2М62У'; Code: 579;),
    (Name: '2ТЭ10'; Code: 526;),
    (Name: '2ТЭ10В'; Code: 533;),
    (Name: '2ТЭ10Л'; Code: 527;),
    (Name: '2ТЭ10С'; Code: 580;),
    ...
    ...

Так вот, чтобы объявить этот массив, необходимо точно знать сколько в нем элементов, то есть мне их пришлось сначала все СОСЧИТАТЬ! И делать это приходилось каждый раз когда нужно было удалить или вставить несколько элементов! О_о Это, конечно, нетрудно (нужно из номера последней строки вычесть номер первой), но зачем, скажите, этот "продвинутый" язык заставляет меня заниматься такой херней?!

> Я считаю, что единственная причина, почему
>на нем не пишут ядра ОС (хотя, попытки наверняка были), это
>его богатая стандартная библиотека, которую тяжело перенести на уровень ядра (например,
>строки).

Странное утверждение. Богатую сишную стандартную библиотеку (со строками, с динамической памятью, бог знает еще с чем) на уровень ядра перенести смогли, а паскалевскую почему-то не могут... :\

И, кстати, да, Вирт написал свою Bluebottle на Обероне, паскальподобном языке. Я же говорю, что гвозди можно забивать и плоскогубцами :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

31. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Knuckles email(ok) on 14-Сен-09, 22:25 
>[оверквотинг удален]
>const
>  LocoCodeTable: array [0..166] of TLocoRec = (
>    (Name: '2М62'; Code: 539;),
>    (Name: '2М62У'; Code: 579;),
>    (Name: '2ТЭ10'; Code: 526;),
>    (Name: '2ТЭ10В'; Code: 533;),
>    (Name: '2ТЭ10Л'; Code: 527;),
>    (Name: '2ТЭ10С'; Code: 580;),
>    ...
>    ...

Не путаете с Си++? Это я к тому, что Линукс пишут на Си, хоть и используют расширения gcc.

>зачем, скажите, этот "продвинутый" язык заставляет меня заниматься такой херней?!

Этот продвинутый язык заставляет вас заниматься херней, чтоб вы наконец поняли, что делаете что-то не так, и что пора вынести данные из исходников во внешний файл, загружаемый в рантайме.

>Странное утверждение. Богатую сишную стандартную библиотеку (со строками, с динамической памятью, бог знает еще с чем) на уровень ядра перенести смогли, а паскалевскую почему-то не могут... :\

В Си нет строк. А в паскале они есть, да еще и с подсчетом ссылок и автоматическим управлением памятью под ними. Вот такие вещи как раз сложно унести в ядро, насколько я понимаю.

>И, кстати, да, Вирт написал свою Bluebottle на Обероне, паскальподобном языке. Я
>же говорю, что гвозди можно забивать и плоскогубцами :)

Совершенно другой язык, несмотря на то, что является далеким потомком Паскаля.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

32. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Karbofos (??) on 14-Сен-09, 23:13 
int Count[]={10, 20, 30};

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

язык си на момент начала написания ядра был более распространненным, и он более подходит для байтовых операций, операций с битами. конечно, порой нужна и обработка строк, но это как-бы на второстепенном плане. и можно без каких-либо больших трудностей работать с обычными символами и с уникоде. но все-таки там нет некоторых удобных функций для работы с битами, что приходится делать или в цикле, либо в ущерб мультиплатформенности делать на асме. пример - определение местоположения первого, установленного бита в байте. но остальное, типа циклического сдвига и прочего работает на ура и быстро.

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

в свое время переписывали "Реверси" из хаотичного бейсика на Паскаль. без единого goto, и исходник программки вышел процентов на 30 меньше на последнем. просто для понимания и поиска ошибок. а потом пришел сам по себе си, и на на нем можно писать элегантные программки. для больших и средних проектов больше подходит уже c++ даже с применением UML.

а настоящий программист скорее тот, кто пишет красивые и эффективные программки. если профессионально, то еще и успевает в срок сдать проект. но это уже философия, аки спор о "лучшести" того или иного языка.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

33. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от pavlinux (ok) on 14-Сен-09, 23:40 
>>[оверквотинг удален]
>В Си нет строк. А в паскале они есть, да еще и

Опа... это типа вот так вот... :)

type string = packed array [1..20] of char;

  var a: string;
     a := 'i'm dump Passal string';


----------
Просто и ясно:

char *str = "i'm nice c string"


Так что, везде строка это массив символов.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

34. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Knuckles email(ok) on 15-Сен-09, 00:33 
>type string = packed array [1..20] of char;
>Так что, везде строка это массив символов.

Это было давно и неправда. Серьезно :)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

35. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от pavlinux (ok) on 15-Сен-09, 00:37 
>>type string = packed array [1..20] of char;
>>Так что, везде строка это массив символов.
>
>Это было давно и неправда. Серьезно :)

А серьезно это в SNOBOLE? :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

36. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от dq0s4y71 (??) on 15-Сен-09, 12:02 
>Не путаете с Си++?

Нет. В Си++ не надо знать количество элементов чтобы инициализировать константный массив. :)

>Этот продвинутый язык заставляет вас заниматься херней, чтоб вы наконец поняли....

В топку. Язык, который пытается меня поучать, пусть используют прыщавые школьники. А мне работать надо.

>...что делаете что-то не так, и что пора вынести данные из исходников во внешний файл, загружаемый в рантайме.

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

>В Си нет строк. А в паскале они есть, да еще и с подсчетом ссылок и автоматическим управлением памятью под ними. Вот такие вещи как раз сложно унести в ядро, насколько я понимаю.

Почему сложно? Другое дело, что такие вещи в ядре и не нужны. Ядро - слишком ответственная вещь чтобы доверять управление памятью компилятору. В ядре это все контролируется и оптимизируется вручную, поэтому там нужен язык, который не учит жизни, а просто делает то, что от него требуют.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

23. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Karbofos (??) on 14-Сен-09, 15:53 
> В паскале указатель может ссылаться на не инициализируемую переменную - очень полезно для глюкофф

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

int *pvariInt;
int  variInt;

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

24. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от dq0s4y71 (??) on 14-Сен-09, 15:58 
>pVariInt = &variInt; // возможно, компайлер предупредит.

Не предупредит. С какой стати?


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

25. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Karbofos (??) on 14-Сен-09, 16:02 
потому что происходит использование неинициализированой variInt
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

26. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Karbofos (??) on 14-Сен-09, 16:05 
хотя, для pvariInt интересен только адрес памяти, а это уже известно. неизвестен только ее наполнитель.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

38. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от User294 (ok) on 19-Сен-09, 17:50 
>ОК. Прошу в студию примеры того, что не умеет паскаль такого, что
>умеет Си? :)

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

39. "Разработка модулей для Linux ядра на языке Haskell"  +/
Сообщение от Knuckles email(ok) on 21-Сен-09, 13:54 
>Грубо говоря - режим этакого "супер-ассемблера", когда компилер можно детально проинструктировать что
>и куда необходимо распихать, не геморроясь с выписыванием этого (или как
>минимум большинства из этого) на ассемблере (тем более что портировать будет
>сильно проще). В сях то оно с полпинка - язык для
>системных дел...

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




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

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