LINUX.ORG.RU

язык мечты


0

1

Добрый вечер!

Теперь всё ясно: Common Lisp - это кал. О чём же теперь мечтать перед сном? Об обратимом препроцессоре? Это можно, но как-то мало. Хочется мечтать о большем. Например, о таком:

1. Одно понятие пространства имён. В "обычных" языках есть пространство имён как namespace, а есть виртуальное пространство имён, которое возникает внутри данного scope. Или пр-во тех имён, которые можно писать после точки, если переменная имеет тип. Обобщить до одного понятия, придать средства управления.

2. Паскаль - порядка 10000 строк в секунду. Хороший мальчик. Синтаксис должен быть простым для компьютера и читаемым для человека. При этом должна быть возможность делать быстрый и компактный код. Поэтому - строгая типизация. Есть тип variant (можно назвать его t для краткости) - он делает Паскаль вполне похожим на лисп по гибкости работы с типами, при условии, что в таком стиле написаны библиотеки.

3. Сборку мусора - в мусорное ведро вместе с JIT. Всё это - разводка на бабло, чтобы покупали новое железо. Вместо этого безопасность дадут декларации работы с памятью: function foo(caption:string):fresh(widgets.form); Что-то мне подсказывает, что весьма простым способом можно с помощью таких деклараций и выводов из них построить работу с памятью без сборщика мусора и с высокой степенью автоматизации (хотя могу ошибаться).

4. Язык должен быть сначала императивным, а потом уже можно строить всё остальное. Для функциональщиков покатит декларация pure. Если в функции f вызываются только чистые функции, то и сама эта функция чиста. Значит, декларацию pure легко проверить на этапе сборки. Соответственно же, декларации const тоже можно проверить (это ещё С умеет делать).

5. Встроенный тип variant. Один, а не 10, как в "некоторых других языках".

6. Макросы не хуже лиспа. А иначе - какой смысл.

7. Конечно же, генерация исполняемого кода в рантайме. Можно через .so, как GCL.

8. Встроенный FFI типа CFFI-GROVEL. Конечно, только С.

9. read-print как в лиспе. Ну и eval к ним (т.е., code=data)

10. Вменяемый синтаксис, но простой. Представление code=data - это промежуточное представление. Для человека оно преобразуется по простым, но гибким правилам. Ну и что-то вроде readtable, как в лиспе. А может,что-то более стройное и менее хакерское.

11. Не ОО. функции, примитивные типы и структуры. И хватит. Вместо ОО - функции как объекты первого класса. ОО должно быть маленькой и лёгкой библиоткой (стиля JavaScript, наверное). CLOS - это пример как делать не надо. Про С++ лучше вообще не говорите.

12. Замыкания... Наверное, состояние в них должно быть явным.

13. Встроенный codewalker.

14. Наверное,кроссплатформенность. Причём, в определении платформы должны содержаться и базовые элементы работы с GUI. Платформа может быть в чём-то неполной (например, не иметь примитивов для работы с файловой системой, eval или compile) и это не должно влиять на общую работоспособность - пусть работает то, что может работать.

Эх, мечты-мечты... Ладно, спокойной ночи.

anonymous
Ответ на: комментарий от tailgunner

>Это я как бэ намекаю, что мне нужен язык на замену Си

ну у тебя всегда есть путь авторов FFTW ;)

// jtootf

anonymous
()
Ответ на: комментарий от anonymous

>> The prototype was written in the high-level, functional programming language Haskell

> прототип. который автоматически траслировался в Isabelle/HOL и верифицировался. где ты тут слово "спецификация" увидел?

Вот тут: "The next level up, the low-level design, is a detailed, executable specification of the intended behaviour of the C implementation. This executable specification is derived automatically from a prototype of the kernel, developed in the seL4 project. The prototype was written in the high-level, functional programming language Haskell".

>>House - уже гораздо ближе к делу, но игрушка ("demo"). Больше всего напоминает Movitz

> ну, ты не просил production-leve

И ты решил, что я прошу игрущку? :D

> как видишь, это 4.2 - ядра есть

Ядер нет. Есть прототипы и игрушки.

> Cyclone не нужен

Тебе - вполне возможно. Мне вот Хаскел не нужен %)

> кстати, какие ядра на нём написаны?

Никаких. Я вроде и не говорил о ядрах на Cyclone (он умер, вообще-то). А вот то, что на нем можно писать драйверы в _существующие_ ОС - это доказано практикой. Проделаешь такой трюк с Хаскелем?

> именно на нём, не на C (который он генерирует)?

Это ты троллишь или шлангуешь? ;) А то ведь все эти хаскелевые игрушки вообще на ассемблере написаны (или что там генерит GHC).

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

>но некоторые плюсы ФП в данной области видны

Зато видны многие минусы. Самый первый и самый главный - взаимодействие с внешним миром. А если, упаси Боже, понадобиться комбинировать с какой-то другой монадой...

Macil ★★★★★
()
Ответ на: комментарий от anonymous

> даёт ту самую верифицируемость, которую так любит, например, Шапиро

А он, лопух, свой язык придумал :D Видать, не всё гладко с Хаскелем ;)

> чего же тебе не хватает?

Языка на замену Си.

> production-level ядра на Haskell?

Фантастику я могу посмотреть и в кино :-P

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>А он, лопух, свой язык придумал :D Видать, не всё гладко с Хаскелем ;)

он вообще тролль, лжец и девственник. другое дело, что с BitC тоже не всё так хорошо, увы

>Языка на замену Си

не хватает тебе чего? конкретно, пожалуйста

>Фантастику я могу посмотреть и в кино :-P

предпочитаю читать, экранизируют её всегда очень пошло :(

anonymous
()
Ответ на: комментарий от Macil

>Зато видны многие минусы. Самый первый и самый главный - взаимодействие с внешним миром. А если, упаси Боже, понадобиться комбинировать с какой-то другой монадой...

голос из зала: "неубедительно!"

// jtootf, и про фантастику тоже был jtootf

anonymous
()
Ответ на: комментарий от tailgunner

>Это ты троллишь или шлангуешь?

троллю. а Cyclon не то чтобы умер, во всяком случае он вполне успел достичь годности к использованию. почему же не использовали? какой killer feature ему не хватило?

// jtootf

anonymous
()
Ответ на: комментарий от anonymous

>> А он, лопух, свой язык придумал :D Видать, не всё гладко с Хаскелем ;)

> он вообще тролль, лжец и девственник.

Как ни странно, у меня тоже такое впечатление O_o Видел, как он работал над OpenCM.

>>Языка на замену Си

>не хватает тебе чего? конкретно, пожалуйста

Развитой системы типов, исключений, pattern matching'а, type inference. Контролируемое обращение к памяти и region inference тоже выглядят интересно, но без практического опыта тут трудно говорить (а практический опыт создателей говорит, что есть подводные камни).

>>Фантастику я могу посмотреть и в кино :-P

>предпочитаю читать, экранизируют её всегда очень пошло :(

Это по определению. Но есть фильмы не по книгам.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

> а Cyclon не то чтобы умер

Умер. Совсем.

> во всяком случае он вполне успел достичь годности к использованию

Если верить архивам списка рассылки, не успел.

> почему же не использовали?

Если язык никогда не использовался в практике, такая попытка неизбежно приведет к обнаружению проблем, которые некому фиксить (ибо оригинальная команда забила).

> какой killer feature ему не хватило?

Диеты ему не хватило. Даже создатели говорили, что напихали в язык многовато всего.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Умер. Совсем

OSS-проекты не умирают. как панки

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

отрезать - не пришивать ;)

// jtootf

anonymous
()
Ответ на: комментарий от anonymous

>> Развитой системы типов, исключений, pattern matching'а, type inference

> Felix видел?

One man show, компилируется в Си++ (так что для ядра не подходит).

> NH0?

Не слышал о таком.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Не слышал о таком

там тоже C++, увы. вернусь в Киев - кинусь ссылкой на блог автора

// jtootf

anonymous
()
Ответ на: комментарий от tailgunner

> AFAIU на Хаскеле делается прототип, из прототипа - спецификация.

а спецификация -- это исполняемая модель на хаскелле.

> Си-реализация _не генерируется_.


ну и что? да, неясность вышла, из-за того, что "смешал в кучу".
По буквам:
1. L4 -- есть проверяемая спецификация на концепцию микроядра. X2, и т.п. L3, L4 -- реализации спецификации, язык Си.
1.2. L4::Pistaschio, Fiasco, и т.п. Сделаны по своей спецификации на базе X2. Язык С++.
1.3. OK4L -- дальнейшее развитие этой 1.2. Плюс, дальнейшее развитие спецификации для прохождения сертификации. Спец. 1.3 включает спец. 1.2, кот. включает 1. Язык С++.
2. Прототип на хаскелле. Другой Форк 1. Своя спецификация 2 на базе 1. Спецификация аналогично OK4L, только другой язык реализации и другой процесс прохождения "сертификации"(ну и требования к серт. другие) -- выстроить формально проверяемую модель под стандарт. Модель 1. проверяема, модель 2. проверяема. Профит.
"Спецификация на Хаскелле" -- как набор юнит-тестов, на соответствие .
3. Другая ОС на базе L4, то есть, спецификации 1. Если делать на подмножестве 2, то тоже станет проверяемой. Поэтому приложению на базе 2. пофиг где работать, на каком подмножестве 2.

> Впрочем, хотя это всё очень интересно, это не делает ОС на Хаскеле реальной.


Видишь суслика? Оттож. А он есть.

anonymous
()
Ответ на: комментарий от tailgunner

>А вот то, что на нем можно писать драйверы в _существующие_ ОС - это доказано практикой. Проделаешь такой трюк с Хаскелем?

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.27.6268

не совсем о том, но возможно будет интересно

а насчёт драйвера на Haskell - отпишусь через недельку, самому интересно попробовать :)

// jtootf

anonymous
()
Ответ на: комментарий от tailgunner

а если ты в этот хаскелль прикрутишь кодогенератор в Си, что получится? (Да GHC вроде бы так и собирает, через gcc)

anonymous
()
Ответ на: комментарий от anonymous

> что даёт ту самую верифицируемость, которую так любит, например, Шапиро;

Coyotos, кстати, пишется на Cyclone? И где этот суслик?

anonymous
()
Ответ на: комментарий от anonymous

> а если ты в этот хаскелль прикрутишь кодогенератор в Си, что получится?

Если я сделаю этот кодогенератор дофига эффективным, изобрету RT-сборщик мусора, и вылечу деццкие болезни всего этого добра - будет щастье для всех. Но для этого надо быть гением.

И даже если бы я был гением, я бы вместо Хаскеля использовал *ML :-P

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Вот тут: .. This executable specification is derived automatically from a prototype of the kernel,

о чём говорит слово 'executable' ?

> > Cyclone не нужен

> Тебе - вполне возможно. Мне вот Хаскел не нужен %)

"не нужен" не нужен :-P

> А вот то, что на нем можно писать драйверы в _существующие_ ОС - это доказано практикой.

где эти драйвера? вот даже линус что-то там говорил про указатели с контролируемыми типами, да так Сyclone и ниасилил :))

> А то ведь все эти хаскелевые игрушки вообще на ассемблере написаны (или что там генерит GHC).

parse error. Кто на ком стоял?

anonymous
()
Ответ на: комментарий от Macil

> А если, упаси Боже, понадобиться комбинировать с какой-то другой монадой...

а что мешает монады комбинировать специальной монадой?

anonymous
()
Ответ на: комментарий от anonymous

>а что мешает монады комбинировать специальной монадой?

совесть!

// jtootf

anonymous
()
Ответ на: комментарий от anonymous

clojure на практике пробовал? Я даже доку толком не смотрел. В CL меня добивает следующее: необходимость упоминать тип структуры при каждом обращении к ней (сделать conc-name nil будет немасштабируемо) и родовые функции, которые медленны и которые не создают в себе пространств имён. Поэтому нельзя (как в С++, Java, Object Pascal) иметь в разных классах функцию с одинаковым именем, но с разными аргументами. Т.е., CLOS мало добавляет программе модульности.

Единственная нормальная модульность - это пакеты, но они просто плохо сконструированы и реально у них тоже большие проблемы с масштабируемостью (или с удобством работы при большом количестве пр-в имён, а это - тоже проблема масштабируемости).

> то есть, иерархическая вложенность разных пространств имён, так? "Пространство имён класса" = "его методы и свойства, с учётом наследования". "Пространство имён функции" = "с учётом замыканий, вложенности данной функции". Что-то вроде вложенных друг в друга контекстов, где символ имеет значение только в пределах заданного контекста.

О, наконец кто-то начал по существу ;) Да, примерно так. Плюс к тому, должно быть возможно опросить контекст (во время выполнения и компиляции) и перекрыть механизм, сопоставляющий смысл данному символу в данном контексте. Естественно, должны быть доступны и метаданные пространств имён (должно быть известно, какие в них есть имена) и классов. Этот механизм должен быть по возможности ортогонален всем остальным. В лиспе, как ни странно "отроду" этого нет, нужно налагать на язык ограничения и пользоваться особенностями реализаций.

anonymous
()
Ответ на: комментарий от anonymous

>> Вот тут: .. This executable specification is derived automatically from a prototype of the kernel,

> о чём говорит слово 'executable' ?

У меня спросили, где я нашел "specification". А смысл "executable" я не очень понял (но это не Си-код - может, HOL).

>> А вот то, что на нем можно писать драйверы в _существующие_ ОС - это доказано практикой.

> где эти драйвера?

Были где-то на http://cyclone.thelanguage.org

>> А то ведь все эти хаскелевые игрушки вообще на ассемблере написаны (или что там генерит GHC).

> parse error. Кто на ком стоял?

Это пикировка, не обращай внимания :)

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

> Но минус синтаксиса Паскаля -- читать просто, писать напрягает, многословный вельми.

На то есть макросы. Но идея не в том. Я не знаю, почему С тормозит. Или это из-за #include, или из-за сложности в разборе типов. Но факт налицо. Т.е., суть не в том, будем ли мы писать begin..end или {..}

> Поэтому нужно 2-3 РАЗНЫХ алгоритма GC + ручное управление Поутру я тоже пришёл к такому выводу. В лиспе можно работать с foreign объектами, но это получается малость... противоестественно... Т.е., отдельно от остального языка. Поскольку GC является всё же более синтетической вещью, чем явное управление, начинать нужно с явного управления. В наше время open-source стандарт можно заменить компактной и культурной реализацией, кстати. Которую при желании можно перекроить для своих задач. Но для этого нужна сначала хороша поддержка явного управления.

> Код - это как раз дерево.

Сначала он - это дерево. При его обходе нам нужно многое знать про это дерево, например, стек вложенности, имена и типы определённых переменных. Итератор кода - это не просто функция обхода дерева (она тривиальна не только в лиспе), а некое средство, которое понимает код в той степени, в которой это возможно. Проще всего это делается в Яве, т.к. язык - самый простой. Малореально сделать это в С++ (если только не иметь специальную версию компилятора). В лиспе этот вопрос относительно сложен (точнее, чреват проблемами из-за сложности самого процесса компиляции), но он разрешён.

> зачем, какой в нем смысл в статическом языке (точнее, только в статическом какой-то смысл и есть). Какой смысл делать в языке то, что можно сделать в библиотеке. Почему это должно быть в языке. Почему это вообще должно быть, чем не хватает auto f = .. и type inference.

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

> Взять и тупо заменить readtable -- вот и другой синтаксис. При этом умирают: остальные лисперы (а альтеративные люди не подтянутся, т.к. это остаётся CL с его прочими недостатками). Emacs мода. Свойство соответствия печати и чтения между собой. Так что это всё только на словах кажется простым.

> Бери http://en.wikipedia.org/wiki/Category:Extensible_syntax_programming_languages

Спасибо, буду курить. Так, ладно, извините, надо работать... На остальное потом отвечу.

anonymous
()
Ответ на: комментарий от tailgunner

>> production-level ядра на Haskell?

>Фантастику я могу посмотреть и в кино :-P


и следовало бы. Я вот пересмотрел "Plan 9 from the Outer Space", первосортнейший же трэшЪ. Инопланетяне решили убить всех человекав, оживив космическими лучами выкопавшихся из могил мертвецов, чтобы сделать дело их руками. У них нет другого выхода -- земляне уже открыли ядрёну бомбу, ещё один шаг вперёд -- и они откроют "солурунал", научатся взрывать солченый свет. И вся ваша страна будет под водой^U галактеко опасносте -- ибо всё, до чего дойдёт солнечный свет взорвётся нафиг по цепочке. Поэтому придётся увы, но УВЧ. А власти скрывают, да. Ведь инопланетяне уже 50 лет пытались договориться. Но деваться некуда -- с одной стороны мертвецы повыкопались, с другой инопланетяне с космическими писталетами трупиками управляют, с третьей, жить-то надо как-то.

Отборнейшая, эпичнейшая феерическая чушь. Всё это преподносится с апломбом deadly serious 100%, хроники документального фильма.
Пересмотрел и подумал: да, должно быть великолепное чуйство юмора у Кернигана с Ричи, чтобы в честь ЭТОГО поделия Эда Вуда ( да он ваапще упоротый) назвать свою ОС. Вот и думай после этого, кто тут в Plan9 инопланетяне, кто мертвецы со своим ядром.
Так и люникс с планом9 преподносится зрителям всей этой хроники -- ведь первосортейший же трэшЪ, а выражение лица benevolent диктора -- на полном серьёзе, да..

anonymous
()
Ответ на: комментарий от anonymous

>> А он, лопух, свой язык придумал :D Видать, не всё гладко с Хаскелем ;)

> или с Шапиро :)

Шапиро, конечно, не торт, но для целей Coyotos Хаскель не подходит - в рантайме слишком много Си :)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Си++ (так что для ядра не подходит).

ядра L4::Pistachio, Fiasco на C++, и ничего. На IOKit в MacOSX драйвера пишутся на embedded C++, и ничего.

anonymous
()
Ответ на: комментарий от tailgunner

> И даже если бы я был гением, я бы вместо Хаскеля использовал *ML :-P

не смей. "Гений и злодейство -- две вещи несовместные" ;-))

anonymous
()
Ответ на: комментарий от anonymous

>> Си++ (так что для ядра не подходит).

> ядра L4::Pistachio, Fiasco на C++, и ничего.

Мне для традиционных ядер, Линукса прежде всего.

> На IOKit в MacOSX драйвера пишутся на embedded C++, и ничего.

Это огрызок, а не Си++.

Кстати, L4 - на полном Си++, с исключениями, шаблонами и прочим?

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

>> И даже если бы я был гением, я бы вместо Хаскеля использовал *ML :-P

> не смей. "Гений и злодейство -- две вещи несовместные" ;-))

Ви таки чьто-то имеете против ML-подобных языков?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Ви таки чьто-то имеете против ML-подобных языков?

в основном - против F# :) а вообще синтаксис у них стрёмный

// jtootf

anonymous
()
Ответ на: комментарий от tailgunner

>Кстати, L4 - на полном Си++, с исключениями, шаблонами и прочим?

*с ноткой гордости* а вот у нас C++ с шаблонами (лучше бы их там, правда, не было)

но без исключений, увы, признаны нецелесообразными. и без STL. и почти без потоков ввода-вывода

но C++ же!

// jtootf

anonymous
()
Ответ на: комментарий от anonymous

> без исключений, увы, признаны нецелесообразными.

Бгг.

> и без STL. и почти без потоков ввода-вывода

> но C++ же!

Такой вот кастрированный Си++.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Такой вот кастрированный Си++.

это шутка была, если что; я прекрасно понимаю, что он кастрированный - более того, даже в таком виде он тут лишний. увы, решаю это не я

по теме кастрации, поговорим про F# vs OCaml? :)

// jtootf

anonymous
()
Ответ на: комментарий от anonymous

> Я не знаю, почему С тормозит. Или это из-за #include, или из-за сложности в разборе типов. Но факт налицо.

да, тут дело не в макросах, а в реализации модулей и раздельной компиляции. Нет отдельной таблицы символов в модулях, поэтому #include, #define, препроцессор, объявления прототипов "на клиенте" модуля, а не подгрузка отдельной таблицы символов, особо запущенный случай в С++ с шаблонами и ростом сложности задачки компилятору (время компиляции Qt кода на moc+шаблоны, как простой показатель проблемы).
В тоже время вот в D нормальные модули, и нормальное время компиляции.

> > Поэтому нужно 2-3 РАЗНЫХ алгоритма GC + ручное управление

> Поутру я тоже пришёл к такому выводу. В лиспе можно работать с foreign объектами, но это получается малость... противоестественно... Т.е., отдельно от остального языка.


следовательно, раз отдельно, будут сложности с first-class object

> Поскольку GC является всё же более синтетической вещью, чем явное управление, начинать нужно с явного управления.


то есть, разные алгоритмы управления памятью, разные GC, ручной, должны быть по одному интерфейсу, что-то вроде "спецификации" в D http://www.digitalmars.com/d/2.0/memory-safe-d.html http://digitalmars.com/d/2.0/memory.html , или в L4 grant/map/разные пейджеры и аллокаторы.

> Итератор кода - это не просто функция обхода дерева (она тривиальна не только в лиспе), а некое средство, которое понимает код в той степени, в которой это возможно.


шаблон visitor, не?

> Я не против выведения типов, но как раз его я вижу как дополнительную вещь, а не строго необходимую.


то есть, тип variant и операции по его разыменованию -- это результат работы type inference. Или, "закат солнца вручную" с ручной корректной расстановкой. Надо как-то сформулировать, зачем нужен variant, когда есть auto (на память приходит COM, и его динамические типы, но это довольно громоздко).

> При этом умирают: остальные лисперы (а альтеративные люди не подтянутся, т.к. это остаётся CL с его прочими недостатками). Emacs мода. Свойство соответствия печати и чтения между собой.


а если "замена readtable" будет двухсторонним, вроде "линзы" в Harmony/... ?

anonymous
()
Ответ на: комментарий от anonymous

> я прекрасно понимаю, что он кастрированный - более того, даже в таком виде он тут лишний

Между Си и Си++ я всегда выберу Си++ :)

> по теме кастрации, поговорим про F# vs OCaml? :)

Я разве что послушать могу :D

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Кстати, L4 - на полном Си++, с исключениями, шаблонами и прочим?

зависит, в каждом форке по-разному.
http://en.wikipedia.org/wiki/L4_microkernel_family

посмотрел fiasco, шаблоны есть, исключений мало, используются аккуратно.

anonymous
()
Ответ на: комментарий от tailgunner

> Ви таки чьто-то имеете против ML-подобных языков?

кстати, да. Тема для флейма. Почему на Хацкелле ОС есть, а на Окамле нету? Бенчмарки рейтрейсеров вроде вполне на уровне с Си.

anonymous
()
Ответ на: комментарий от anonymous

> но без исключений, увы, признаны нецелесообразными.

там какие-то глобальные непонятки со структурными исключениями, что на уровне ОС поддерживается, а что нет. Вот и LLVM с LDC компилятором тоже на эти же грабли наступила. И в D самом всё никак не разберутся.

anonymous
()
Ответ на: комментарий от anonymous

Почему на Хацкелле ОС есть, а на Окамле нету? Бенчмарки рейтрейсеров вроде вполне на уровне с Си.

Потому что Хаскель трендовее. "We have made no essential use of laziness in our code, so an eager language such as ML might seem a more natural choice".

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

Ббрось ты свою fuse, имхо 1К строк драфта полезнее 1К строк той твоей затеи.

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

Но главное кратко -- чтобы сэкономить как свое время, так и время читающего. Это все равно прототип.

М.б. также свои дискуссии на ЛОРе (и в других местах, если есть) изложи в виде статей.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от anonymous

>> Потому что Хаскель трендовее. "We have made no essential use of laziness in our code, so an eager language such as ML might seem a more natural choice"

> http://geekrant.wordpress.com/2008/06/23/misconceptions/

В этой типично хаскельной мути я предпочитаю верить людям, реализовавшим ОС :)

> F# трендовей

Нихрена. All cool kids know Haskell.

tailgunner ★★★★★
()

> House, L4

исчо: google Osker , an OS written in Haskell

anonymous
()
Ответ на: комментарий от anonymous

den73> В наше время open-source стандарт можно заменить компактной и культурной реализацией, кстати. Которую при желании можно перекроить для своих задач. Но для этого нужна сначала хороша поддержка явного управления.

ещё на тему управления памятью: http://cyclone.thelanguage.org/wiki/Papers http://www.l4ka.org/publications/paper.php?docid=919

anonymous
()

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

> Про С++ лучше вообще не говорите.

Ну разумеется, потому что на C++ пишут софт, а вам бы только дрочить

anonymous
()
Ответ на: комментарий от tailgunner

> Я вроде и не говорил о ядрах на Cyclone (он умер, вообще-то). А вот то, что на нем можно писать драйверы в _существующие_ ОС - это доказано практикой. Проделаешь такой трюк с Хаскелем?

загружать через FFI, не?

цытатко>>>kernels directly on top of the hardware. To achieve this, they implemented a monadic interface to access the low-level constructs of the IA32 architecture. The authors point out that the standard I/O monad and the Foreign Function Interface already allow low-level access to the hardware, but are inherently unsafe. For this reason, they propose a restricted monad, which provides access to the hardware while enforcing type and memory safety (with the exception of I/O operations taking place using Direct Memory Access).


Raul Barbosa

@InProceedings{Hallgren05,
title = "A principled approach to operating system construction in
{H}askell",
author = "Thomas Hallgren and Mark P. Jones and Rebekah Leslie and
Andrew P. Tolmach",
booktitle = "Proceedings of the 10th {ACM} {SIGPLAN} International
Conference on Functional Programming, {ICFP} 2005, {T}allinn,
{E}stonia, {S}eptember 26-28, 2005",
publisher = "ACM",
address = "New York, NY, USA",
year = "2005",
editor = "Olivier Danvy and Benjamin C. Pierce",
ISBN = "1-59593-064-7",
pages = "116--128",
}


Hallgren et al. have shown that Haskell is suitable for developing operating system kernels directly on top of the hardware. To achieve this, they implemented a monadic interface to access the low-level constructs of the IA32 architecture. The authors point out that the standard I/O monad and the Foreign Function Interface already allow low-level access to the hardware, but are inherently unsafe. For this reason, they propose a restricted monad, which provides access to the hardware while enforcing type and memory safety (with the exception of I/O operations taking place using Direct Memory Access). To demonstrate the capabilities of their monadic interface, they have written two experimental kernels in Haskell, named House and Osker

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.