LINUX.ORG.RU

новый язык. Еще один подход.


0

0

Доброго времени суток!

Давненько я здесь не флудил. Короче, ещё одно видение нового мегаязыка.
Известно, что паскаль компилируется в несколько раз быстрее, чем С. Поэтому, подход к созданию динамического языка через промежуточный компилятор Паскаля выглядит более здравым, чем подобный же подход через промежуточный компилятор С. Однако, сложилось так, что «всё» написано на С. Значит, мораль-то в чём?

1. Вычленяем в С то, что заставляет его медленно компилировать.
2. Делаем частичный компилятор С в язык, подобный Паскалю (который можно быстро компилировать).
По моим понятиям, что мешает С быстро компилироваться (могу ошибаться):
- система типов
Значит, нужен промежуточный язык, в котором неявное становится явным.
- идеология сборки с многократным чтением инклюдников
Значит, нужно поменять идеологию сборки. Я думаю, нужно уметь создавать некий «модуль», подобный «прекомпилированному хедеру», но более гибкий. С gcc я почти не работал, в MSVS прекомпилированный хидер - один на проект и этого мало. Нужно несколько. Они должны инкапсулировать состояние препроцессора и перекомпилироваться только по необходимости.

Тем самым мы получаем в наследство всё, что есть в С, только с быстрой сборкой.
Далее добавляем:
- нормальные макросы (включая обратимые макросы, возможность подменить лексеры и включая средства отслеживания сорсов)
- возможность делать код динамическим, т.е. динамически перекомпилировать отдельные функции и менять типы данных. Не все, но большинство.
- специальные переменные, локальные функции, замыкания
- встроенный тип «вариант» и полноценный полиморфизм
- декларативное управление памятью. Работая в лиспе, я чётко понимаю, что он мало подходит для задач реального времени. Я не думаю, что языки со сборкой мусора когда-нибудь смогут использоваться для этого. Да, можно извратиться и иногда накрутить много циклов без сборки мусора, но программирование становится очень сложным. Кроме того, ничего не декларируется о неожиданном порождении мусора в библиотеках или даже в самой рантайм-среде (например, если вдруг запустится JIT-компилятор). Поэтому, предлагается поддерживать на уровне компилятора всякие «умные указатели», чтобы можно было в статике проверить правильность работы с памятью.Конечно, вообще говоря эта задача не разрешима. Но представьте себе, например, сигнатуру функции:

fresh treeNode makeTreeNod(alien referenced treeNode parent);

Здесь говорится о том, что функция возвращает treeNode, выделенный в куче. Значит, кто-то в будущем должен будет позаботиться о его уничтожении (если мы не находимся в режиме компиляции с автоматической сборкой мусора, что может быть нужно для отладки или гарантии динамизма). При этом параметр parent также является ссылкой. alien говорит о том, что этот параметр не будет уничтожен нашей функцией. referenced говорит о том, что мы, возможно, создадим на него новую ссылку. Как минимум, это - автодокументация. Как максимум - подсказка компилятору. Я для своего пользования разработал несколько таких деклараций и пользуюсь ими на работе (пишу на Дельфи). Мой набор неполон, но вот он:

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

fresh - для возвращаемого значения или локальной переменной. Создали в области видимости и куда-то передаём (или возвращаем), после чего мы уже не отвечаем за удаление
my - для локальной переменной. Функция создаёт объект и удаляет его
alien - для параметра. Функция не берёт ответственности за удаление объекта.
eat - для параметра. Принимающая функция теперь отвечает за удаление
kill - для параметра функции. Не я создал, но я убъю до возврата из функции.
нет декларации - ничего не известно и нельзя судить о поведении функции в отношении удаления этого объекта.

Вот, видимо, этот набор не полон. Он, как минимум, не учитывает возможности включения объекта в подсчёт ссылок или сборку мусора, не рассматривает возможность существования объекта на стеке. Видимо, можно развить некую «алгебру» и получить полный набор таких деклараций. Он будет довольно сложным и не всегда однозначным, но он позволит, анализируя возможные пути исполнения, во многих случаях найти ошибки работы с памятью. Подобно тому, как сейчас компиляторы находят неинициализированные переменные, или неиспользованные присваивания значений.

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

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

/*М fresh*/treeNode makeTreeNod(/*M alien referenced*/ treeNode parent);
по сути означает то же самое, но не проверяется компилятором. Или же

typedef treeNode fresh_treeNode;

или же
#define FRESH(x) x
#define ALIEN(x) x

FRESH(treeNode) makeTreeNode(FRESH(ALIEN(treeNode)) parent);

Я пользуюсь, мне нравится.

А, вот ещё одну фишку вспомнил, только не могу её сформулировать в виде С.
declare procedure foo returns (x int, y varchar(100)) as
begin
end
соответственно, foo.return_type должно быть именем записи с двумя полями x и y. Чтобы не придумывать ей имя. Маленькая фишка, но ИМХО полезная.

★★★★★

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

Более того, это конечная наука. Все другие науки рано или поздно превратятся в историю.

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

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

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

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

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

Теория условных рефлексов Павлова, например. Эволюционная теория Дарвина. Теория возникновения жизни Опарина. Теория химической ковалентной связи.

eugine_kosenko ★★★
()
Ответ на: комментарий от pseudo-cat

> можно применить регрессионный анализ

Да, а еще с помощью математики можно рассчитать гороскоп! :-)

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

> однако судя по оглавлению, это не тот эфир

Угук. Это просто указание на тот факт, что пространство обладает физическими свойствами, а не является абсолютным Ничто. Почему эта абстракция и не была принята — с одной стороны она не даёт ничего сверх факта, что пространство таки не является абсолютным Ничто (что, в общем-то, уже было очевидно, от Абсолюта давно отказались), но вводит путаницу со «старым» эфиром, который совсем про другое.

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

В философии нет аксиом, детка. А математики с физиками иногда генерируют бред покруче философского, ага.

Насчёт сравнения математики и философии:

Профессор физики заходик к декану:
«Нам нужно ещё один миллион долларов для строительства ещё большей установки» - говорит он декану.
Декан стонет: "-Ну почему вы, физики, не можете жить как сотрудники факультета математики - им нужны только карандаши, бумага да мусорные корзины?".
"-Вы, наверное, имеете в виду факультет философии? - переспрашивает профессор -им нужны только карандаши и бумага".

И какой же бред сгенерировали математики? Всё логически выводится из аксиом, а не строится на постулатах и гипотезах. Значит какая-то аксиома вам кажется бредом, скажите какая.

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

> И какой же бред сгенерировали математики? Всё логически выводится из аксиом

Не всё. Всякая более или менее сложная формальная система либо противоречива либо неполна.

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

Вся современная логика находится в рамках математики.

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

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

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

Философия - __не__наука__. Читай определение слова «наука» и связанное с ним. И у нее вообще нет смысла.

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

Да пиздец, конечно. Еще скажи, что богословие(теология) так же важно, как и 1000 лет назад.

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

Авторитетно заявил крупный знаток логики.. xDD

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

>Примером нематематической логики является диалектика.

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

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

>> И какой же бред сгенерировали математики? Всё логически выводится из аксиом

Не всё. Всякая более или менее сложная формальная система либо противоречива либо неполна.

Молодец. Теперь каждый, кто узнает про теорему о неполноте считает необходимым об этом упомянуть? К теме не относится ведь. Все утверждения в математике выводятся из аксиом или сами ими являются.

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

следствием каких математических эффектов является принцип неопределенности Гейзенберга?

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

при чём тут философия, вот что мне интересно

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

алгебра логики — это небольшая часть логики, которую удалось осилить математикам

разница в том, что алгебра логики работает, и позволяет делать вполне проверяемые выводы. философы могут долго и радостно рассказывать о том, что всё в мире относительно, однако в отличие от формальной модели ТО они не предсказывают ничего, проверяемого фактически (экспериментально) - аналогично, в общем-то, это выглядит и в логике

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

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

почему возникла необходимость в исчислении Коши-Вейерштрасса и почему подход Ньютона-Лейбница до сих пор называют «наивным математическим анализом»

по той же причине, по которой классическую теорию множеств называют «наивной» - в противовес ZFC и BNG; к философии это не имеет никакого отношения, вопрос в проработанности матаппарата

Теорема Мальцева и вообще теория моделей.

а вот это посмотрю, спасибо

Роль философии скорее индуктивно-эвристическая, о чем, собственно, и речь

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

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

> можно предоставить полное разделение логики на части с указанием весов?

1. Понятие. 60%
2. Суждение. 40%

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

> индуктивно-эвристическая - это как? разбиваем задачу на много шагов, и на каждом шаге решение принимаем наугад? так это уже скорей генетический алгоритм получается :)

Так человек вообще не склонен думать «математически». Вот к примеру ситуация: ты переходишь дорогу по которой в твою сторону едет автомобиль. Как ты оценишь, что успеешь или нет? Сколько матопераций ты проделываешь в уме? Какое количество переменных используешь? Какого они разряда и какова точность вычислений? ;)))

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

Так человек вообще не склонен думать «математически»

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

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

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

1. Понятие. 60% 2. Суждение. 40%

а это ещё что такое?

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

>Тут разрабатывают философский язык программирования?

«Если у вас хорошая жена вы станете счастливым, если плохая - вы станете философом» (Ц) Сократ. По индукции можно сделать цепь предположений, приводящих к тому что самый философский язык программирования это С++.

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

>«Если у вас хорошая жена вы станете счастливым, если плохая - вы станете философом» (Ц) Сократ. По индукции можно сделать цепь предположений, приводящих к тому что самый философский язык программирования это С++.
У него самая плохая жена?

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

> да, это хороший упрёк

А это вовсе не упрёк.

предоставляй философия сколько-нибудь сравнимо практически полезную систему.


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

Польза философии в том, что она позволяет свзяывать между собой разрозненные системы и тем самым формировать новую систему. Если тебе известен принцип «система - больше, чем сумма частей», то профит очевиден. Если не известна - то и не увдиишь ;)

а это ещё что такое?


Ответ на твой вопрос. Сюрпирз? ))

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

>Польза философии в том, что она позволяет свзяывать между собой разрозненные системы и тем самым формировать новую систему. Если тебе известен принцип «система - больше, чем сумма частей», то профит очевиден. Если не известна - то и не увдиишь ;)

Не делает этого философия. Хоть ты тресни.

Несмотря на культурную значимость философии, практической пользы в ней нету. И никакой «метанпукой» она не является. С точки зрения людей науки, интерес конечно представляет философия научного познания, но это уже другой вопрос.

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

>И никакой «метанпукой» она не является.

Черт, какая опечатка =)

И никакой «метанаукой» она не является.

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

>Разница в том, что алгебра логики — это небольшая часть логики, которую удалось осилить математикам.

Разница в том, что математическая логика интересна не только как умение бабам зубы заговаривать.

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

> интерес конечно представляет философия научного познания, но это уже другой вопрос.

Какой еще «другой»? Тут полтреда объясняют, что именно это и есть современная философия в первую очередь.

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

>Так человек вообще не склонен думать «математически». Вот к примеру ситуация: ты переходишь дорогу по которой в твою сторону едет автомобиль. Как ты оценишь, что успеешь или нет? Сколько матопераций ты проделываешь в уме? Какое количество переменных используешь? Какого они разряда и какова точность вычислений? ;)))

По твоему он мыслит «философски»? =) Это так, эмпирически подобранная эвристика. =). Фишка в том, что тут можно построить мат. модель этого дела (пусть возможно и хреновую), а философия, кроме как о бытие поговорить, ничего в сущности сделать не может.

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

>Какой еще «другой»? Тут полтреда объясняют, что именно это и есть современная философия в первую очередь.

Вот только эта самая философия научного познания умещается на двух листах А4 14-ым шрифтом и неразрывно связана и непосредственно вырабатывается собвстенно как раз науками. А чем занимаются тысячи философов и не совсем ясно. По крайней мере науке от этого ни холодно ни жарко.

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

> По твоему он мыслит «философски»? =)

Ну что за бред. Как можно из тезиса А не Б, сделать вывод А есть В, при том, что между Б и В отношения не заданы?

Вот только эта самая философия научного познания умещается на двух листах А4 14-ым шрифтом


Это _твои познания_ о философии умещаются на. %)))

неразрывно связана и непосредственно вырабатывается собвстенно как раз науками.


Правильно.

А чем занимаются тысячи философов и не совсем ясно. По крайней мере науке от этого ни холодно ни жарко.


1. Ты предыдущий пост писал в бреду и уже забыл?
2. Философов не тысячи. И даже не сотни. На всех просторах бСССР их от силы несколько десятков. Меньше, чем даже историков. Если ты конечно преподавателей в ВУЗах в «философы» не записал. ;))
3. «Чистых» философов не существует, это городская легенда. Все, кто занимаются философией на практике (т.е. строят модели, системы) тесно повязаны с конкретными науками и в большинстве своём с естественными. Ну а холодно или тепло ли науке от философии - видно научным работникам. ;))

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

>Ну что за бред. Как можно из тезиса А не Б, сделать вывод А есть В, при том, что между Б и В отношения не заданы?

Я такого вывода не сделал =). Тут либо ты сам делал такой вывод, либо тот пост про светофор - пустая болтовня. Вот я и интересуюсь =)

Это _твои познания_ о философии умещаются на. %)))

Это к тому, о чем я и говорил. Философы вокруг этого развели пустой болтовни на 3k5 дисертаций ни о чем.

1. Ты предыдущий пост писал в бреду и уже забыл?

1. Ты предыдущее предложение*

Какое именно? И чем оно тебе не нравится?

2. Философов не тысячи. И даже не сотни. На всех просторах бСССР их от силы несколько десятков. Меньше, чем даже историков. Если ты конечно преподавателей в ВУЗах в «философы» не записал. ;))

Хм... допустим.

3. «Чистых» философов не существует, это городская легенда. Все, кто занимаются философией на практике (т.е. строят модели, системы) тесно повязаны с конкретными науками и в большинстве своём с естественными. Ну а холодно или тепло ли науке от философии - видно научным работникам. ;))

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

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

> Тут либо ты сам делал такой вывод, либо тот пост про светофор - пустая болтовня.

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

Какое именно?


Предыдущее. )))

И чем оно тебе не нравится?


Оно мне нравиться. Более того, оно отвечает тебе же на твой же вопрос. ))))

, так как науки они не изучали


Они как раз изучают науки. xDD
ВСЕ. Посмотри для разнообразия учебную программу философского фака МГУ.

На счет выпускников - увы, да. 99,9% можно списывать в утиль, ибо быдлоторчки пристроенные родителями.

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

Гыгы, выпускники философских факультетов - торчки, да еще и быдло.

Надо полагать, где-то есть труъ философы, которых 30 штук на весь мир(или хотя бы рф), и они, судя по всему, делают что-то очень важное, и не просто для науки какой-то там, а для судеб человечества прямо-таки - крутят земную ось, например, или систематизируют системы, гыгы.

вот это гсм так гсм

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

В общем, наверное, самое главное - это определиться, какие вообще цели. Для чего нужен язык. В языке может быть множество фич, в т.ч., некоторые - новые, которых ещё никогда не было. Но чего я хотел бы в итоге? Я вот подумал-подумал - и вот что надумал, примерно в порядке убывания приоритета:
1. Динамическая реализация. Возможность поменять тело и сигнатуру функции в рантайме, равно как и определение класса - это вещи совершенно необходимые. То, что я сейчас делаю в лиспе, нельзя будет делать, если язык не будет поддерживать этих возможностей.
2. Простота и компактность реализации самого языка, при хорошей расширяемости. Открытая, хорошо документированная реализация. По возможности, вместо спец. средств для расширений - возможность пропатчить саму реализацию.
3. РидМакросы и макросы: возможность внедрения любого синтаксиса (например, удобное встраивание SQL, html, xml квазицитат в исходник). Возможность проводить более-менее произвольные вычисления во время компиляции над деревом грамматического разбора. В лиспе это сделано почти идеально, хотя, по-моему, файловая компиляция в лиспе - это вещь достаточно сложная. Может быть, от неё стоило бы отказаться.
4. Простая статическая типизация и тип «полиморфный вариант», конструкции as (dynamic_cast) и is (typep). Type inference мне (наверное) не нужен, хотя, может быть, это просто из-за того, что я им не пользовался. Во всяком случае, в ocaml далеко не всё гладко с системой типов, а на Хаскель я и смотреть не буду.
5. Достаточная быстрота и достаточная компактность. Догонять и обгонять С вряд ли нужно. Достаточно быть где-нибудь на уровне ocaml по скорости и на уровне Ruby по памяти. Хотя я вовсе не уверен, что это так уж просто. Мне кажется, что статическая типизация и ограничение применения сборки мусора должны здесь помочь.
6. Хорошая переносимость. Более того, возможность порождать код на «экзотических» языках, таких, как языки хранимых процедур. Эта задача сложна и накладывает дополнительные ограничения на сам язык. Например, в языках хранимых процедур сборки мусора вообще нет и не может быть.

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