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

Анон, кончай тупить.

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

А вообще есть специальная литра для ликбеза.

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

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

В случае с астрофизикой - нет.

Ты опять делаешь ту же подмену понятий. Как минимум утверждения вида «А коррелирует с Б» таким образом очень даже отлично проверяются. И выроботка теории, которая это достоверно описывает тоже. Абсолютно нормальная научная деятельность.

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

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

Кому и что он обязан? Вот как ты берешься судить о научности/ненаучности философии если сам не понимаешь элементарной философии научных методов познания?

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

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

ВНЕЗАПНО! опытом и вправду является весь наблюдаемый нами мир.

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

Да ты упоротый! %)))

Кому и что он обязан?


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

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

Еще раз. Ты в упор не понимаешь ни смысла эксперимента, ни того, как наука «работает». Но веское мнение свое на этот счет клнечно же имеешь.

Я специально обходил семимильными шагами вопрос чистоты опыта, но ты умудрился со всего разбега влететь в него по самые уши.

Это здесь совершенно не при чем.

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

Ученые давно знают о сверхновых звёздах. И у них задача подробнее изучить процессы, происходящие с ней.

Есть 2 варианта:
1) Самостоятельно изготовить звезду и довести её до стадии сверхновой и исследовать.
2) Следить за небом. При обнаружении сверхновой исследовать.

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

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

> В чём разница между этими двумя вещами?

Ты такой же упоротый как Waterlaz ? Суть научного эксперимента заключается в том, что испытуемое явление проходит в условно-чистых условиях. Конечная цель - подтвердить/выверить теоретическую модель на практике. Сделать это можно только полностью нивелируя не входящие в модель воздействия.

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

Путать поставленный опыт и наблюдаемое явление - это никаких фейспальмов не хватит во всех тропиках.

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

>Конечная цель - подтвердить/выверить теоретическую модель на практике.

Именно так была открыта планета Нептун. На основе возмущений в движениях других планет и законов гравитации была предложена теория о существовании неизвесной ранее планеты. После чего её обнаружили в рассчитанной точке пространства. Фактически был произведён опыт по проверке законов гравитации. Хоть опыт и не был организован учёными.

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

>Конечная цель - подтвердить/выверить теоретическую модель на практике.

Именно. Проверка согласованости того, что мы наблюдаем с теорией или нет. Грубо говоря, можно считать, что теория тебе дает проедикат P допустимых наблюдений. Либо он истинный - эксперимент не противоречит теории, либо не истинный - теория расходится с экспериментом.

Ненаучные теории - теории со всюду истинным предикатом. Любой итог эксперимента(наблюдения) вписывается в теорию. Так вот. Нам не важно, искусственно воссозданы условия наблюдения или нет.

Сделать это можно только полностью нивелируя не входящие в модель воздействия.

Что значит полностью нивелируя? Идеально чистого эксперимента не может быть в принципе.

Даже простое падение камешка нельзя замерить из-за атмосферы, влияние атмосферы нельзя учесть из-за ветра/влажности/давления, и так далее по цепочке.

И?

Путать поставленный опыт и наблюдаемое явление - это никаких фейспальмов не хватит во всех тропиках.

А нет тут строгого деления на эксперимент/наблюдение. В любом случае на научность/ненаучность это не влияет.

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

> Фактически был произведён опыт по проверке законов гравитации.

Это не опыт, блджад! Не опыт. Опыт, если бы они создали аналогичную солнечной систему и в ней внезапно обнаружили бы Нептун. ))))

Это подтверждение теоретической гипотезы практическими наблюдениями.

Купите себе толковые словари, наконец!

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

> В любом случае на научность/ненаучность это не влияет.

Я же говорил, что ты - упоротый. Экперимент и наблюдение - два разных, но одинаково «научных» способа познания мира.

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

Лор сильный сайт. Тема нового языка программирования вывела в вопросы астрофизики и способы познания мира. Плавно подходим к вопросам метафизики.

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

Для метафизики тут контингент слабоват. А так - тема располагала, да.

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

>Экперимент и наблюдение - два разных

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

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

Есть наблюдение некоего процесса, осуществляемое с какой-то целью. Процесс может 1) быть организован наблюдателями или 2) происходить самостоятельно независимо от желания на то наблюдателей. Видимо LamerOK имеет в виду под словом «опыт» первый вариант.

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

> google://фальсифицируемость

Дурачок, она требует только _принципиальной_ возможности опровержения, а не реальной.

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

И что? Фишка в том, что критерий фальсифицируемости отрезает от понятия «наука» всякий бред вроде философии и пр. В отличие от астрофизики. О чем тут спорить - непонятно.

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

> критерий фальсифицируемости отрезает от понятия «наука» всякий бред вроде философии

/0, молодец.

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

> А, ну то есть ты идиот? Понятно.

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

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

Фальсифицируемость и критерий Поппера попадает сам под своё определение?
Если не попадает, то он значит не является наукой и не может ни о чём судить.

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

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

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

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

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

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

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

>Следовательно для научности «критерия фальсифицируемости» необходимым условием является попадание его под «критерий фальсифицируемости».

Смешались в кучу кони, люди...

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

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

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

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

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

Ты, придурок, что-то от темы отходишь. У тебя теория и утверждение это разные вещи. И Попплер у тебя применяется только к теориям. Может быть ты идиот? Любое утверждение есть теория, состоящая из одного это утверждения. Следовательно утверждение о свойстве науки обязательно обладать фальсифицируемостью является теорией. И по твоей логике эта теория фальсифицируемости должна для своей научности обладать свойством фальсифицируемости.
Вопрос: обладает ли теория о необходимости науке обладать свойствои фальсифицируемости свойством фальсифицируемости?
Фальсифицируется ли фальсифицируемость?

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

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

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

И каким образом из обязательности ложности нефальсифицируемой теории следует истинность теории Поплера о научности?

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

Но для начала докажите фальсифицируемость теории фальсифицируемости Поплера для выявления у неё необходимого условия для её научности.

BOEHKOM
()

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

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

Критерий Поппера это аксиоматика методологии науки. Она не обязана проверяться в рамках науки. См. теорему Геделя о неполноте.

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

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

Аксиомы не могут быть аксиомами науки вообще. Аксиомы геометрии Евклида не равны аксиомам геометрии Лобачевского. Постулаты Эйнштейна лишь постулаты в его теориях. Нет общих универсальных «аксиом науки». Поэтому не надо записывать утерждения Поплера в аксиомы всей науки. Теория Попплера не аксиома. Это одна из теорий о науках. Которая может быть ложной.

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

для особо петросянов - там пропущено слово «методология»

Это одна из теорий о науках.

Это не какая-то «одна из теорий о науках», это __методология_науки__

Которая может быть ложной.

Вперед
http://www.linux.org.ru/view-message.jsp?msgid=4335258&page=8&lastmod=1261565...

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

И не надо подменять понятия. Попплер говорит лишь о необходимом научности, а не о достаточном условии.
Попплер гласит: «Любая наука попадает под моё определение научности». Но отсюда не следует, что всё, что попадает под его определение, является наукой.
Поэтому даже из истинности его утверждения не следует научность его утверждения по его же собственному утверждению.

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

Чё вперёд-то? Ну предположим истинно его утверждение и что? Оно даст лишь необходимое условие научности, но не достаточное. И значит его собственое утверждение не доказывает научность его собстенного утверждения.

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

> И это методология науки, идиот, а не наука во-первых, и не философия во-вторых

Вот же ты упоротый болван )) Философия помимо прочего в основном - методология науки.

философы случайно квантовую механику к философии не причисляют?


Саму механику нет, но применительно к определиню материи используют и в хвост, и в гриву. Разрыв шаблона, да, детка? ;)))

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

> Это не наука, это ее методология(аксиоматика

Бгггг.

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

> Критерий Поппера это аксиоматика методологии науки. Она не обязана проверяться в рамках науки.

xDDDD

Тебе весть тред объясняют, что то, что ты считаешь «аксиомой» на самом деле является _результатом_ работы другой науки. Науке о науке - метанауке - философии. Чтобы твой куцый моск окончательно вскипел, добавлю, что еще есть философия философии. :3

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

Всё проще:

Поппер: Теория является научной, если её можно опровергнуть.

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

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

Исправление:

Поппер: Всякая научная теория является опровержимой.

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

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