Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Разработка языка программирования.

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Михаил Н.



Зарегистрирован: 30.10.2004
Сообщения: 12
Откуда: Ростов-на-Дону

СообщениеДобавлено: Сб Окт 30 2004 18:20    Заголовок сообщения: Разработка языка программирования. Ответить с цитатой

Здравствуйте!

Я решил разработать новый язык программирования и ищу единомышлеников. Для начала хотелось бы разработать концепцию языка. А потом реализовать компилятор, IDE и другие нужные программы. Прошу откликнуться желающих этим заняться.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
droopy



Зарегистрирован: 28.07.2004
Сообщения: 168

СообщениеДобавлено: Вс Окт 31 2004 14:38    Заголовок сообщения: Ответить с цитатой

На каком уровне ты находишься? Какие книжки прочел?
И что хочешь от нового языка программирования. Я знаю
одного чела который всерьез считает что миру нужен новый
язык программирования. Могу дать его почту. Но он ленивый.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Гость






СообщениеДобавлено: Вс Окт 31 2004 16:47    Заголовок сообщения: Ответить с цитатой

Цитата:

На каком уровне ты находишься? Какие книжки прочел?
И что хочешь от нового языка программирования. Я знаю
одного чела который всерьез считает что миру нужен новый
язык программирования. Могу дать его почту. Но он ленивый.


Хорошо знаю C++, немного Assembler. Изучал книжки по разработке компиляторов : Костельцев "Построение интерпретаторов и компиляторов"; А.Ахо, Р. Сети, Дж. Ульман "Компиляторы: принципы, технологии, инструменты", P.D. Terry "COMPILERS AND COMPILER GENERATORS an introduction with C++", Д. Грис "Конструирование компиляторов для цифровых вычислительных машин" и другую литературу. Писал калькулятор на yacc и bison. В книге Костельцева расказывается про их аналог под Windows, который прилагался на диске к книжке. Чего я хочу от нового языка? Я хочу чтобы он был

1) Бесплатным.
2) Хотелось бы чтобы синтаксис был си- подобным. Правда я еще рассматривал возможность создания языка с русскими ключевыми словами (и может быть имеющего синтаксис приближенный к синтаксису русского языка), однако я не совсем уверен, что это хорошая идея.
3) Этот язык должен быть компилируемым. Лично мне не нравиться тенденция перехода к интерпретируемым языкам ( типа C#, Java, ...).
4) Объектно- ориентированный.
5) Встроенная поддержка различных полезных алгоритмов.
6) Более менее безопасным. В частности я думаю, что указатели, которые являются причиной многих ошибок будут совсем ненужны если сделать встроенный тип данных - динамический массив. Кстати, я хочу реализовать в нем поддержку строк с помощью встроенного типа данных.
7) И, может быть, много другого, чего я еще пока не придумал.

А насчет того чела, ты лучше ему напиши (или скажи), чтобы он зашел в этот форум.
Вернуться к началу
Михаил Н.



Зарегистрирован: 30.10.2004
Сообщения: 12
Откуда: Ростов-на-Дону

СообщениеДобавлено: Вс Окт 31 2004 16:52    Заголовок сообщения: Ответить с цитатой

Забыл в предыдущем письме указать своё имя.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
dilmah



Зарегистрирован: 31.10.2004
Сообщения: 13

СообщениеДобавлено: Вс Окт 31 2004 20:52    Заголовок сообщения: Ответить с цитатой

я хочу 2 языка. Первый язык это domain specific язык.
Он должен быть портабельным ассемблером. Тo есть машинно-независимым,
остальные его фичи должны позволять компилятору генерировать эффективный
код. Фичам которые могут быть реализованы на уровне макропроцессора
в этом языке не место. В частности, никакого OO в нем не должно быть,
только extension структур.
Синтаксис у него предпочтительно лисп подобный.

Второй язык это надстройка над первым, которая генерирует код на первом.
(или как довесок, может генерировать код и на других языках, например TeX или VHDL).

> 3) этот язык должен быть компилируемым. Лично мне не нравиться тенденция перехода к
> интерпретируемым языкам ( типа C#, Java, ...).

ну вообще-то, и байт-код джавы, и Intermediate Language компилируются..

> 6) Более менее безопасным. В частности я думаю, что указатели, которые являются причиной
> многих ошибок будут совсем ненужны если сделать встроенный тип данных - динамический
> массив.

никакой безопасности в первом нижнем языке я, естественно, не планирую.
Безопасность должна реализовываться соответствующей политикой программирования.
Можно только думать о средствах, позволяющих посредством включения каких-то
макроопределений в текст программы на втором языке, обеспечить enforcement этой
политики.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Михаил Н.



Зарегистрирован: 30.10.2004
Сообщения: 12
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Ноя 01 2004 09:00    Заголовок сообщения: Ответить с цитатой

Цитата:

я хочу 2 языка. Первый язык это domain specific язык.
Он должен быть портабельным ассемблером. Тo есть машинно-независимым,
остальные его фичи должны позволять компилятору генерировать эффективный
код. Фичам которые могут быть реализованы на уровне макропроцессора
в этом языке не место. В частности, никакого OO в нем не должно быть,
только extension структур.
Синтаксис у него предпочтительно лисп подобный.


Логично, наверное. Только почему синтаксис лисп- подобный ? Какие в этом плюсы ?
Приведи, пожалуйста, пример таких конструкций. ( Я с языком lisp не знаком. Только что-то слышал
про него. Не уверен, что объективное).

Цитата:

Второй язык это надстройка над первым, которая генерирует код на первом.
(или как довесок, может генерировать код и на других языках, например TeX или VHDL).


С надстройкой над первым языком все понятно. А вот насчет TeX и VHDL не очень. TeX , насколько я знаю, это
язык для простого создания книг, статей и.т.п. со всевозможными специальными символами ( Я, например, пишу на
нем курсовые работы по математике). А вот про VHDL я ничего не слышал. Какого рода программы можно транслировать
в эти языки ?

Цитата:

> 3) этот язык должен быть компилируемым. Лично мне не нравиться тенденция перехода к
> интерпретируемым языкам ( типа C#, Java, ...).

ну вообще-то, и байт-код джавы, и Intermediate Language компилируются..


Да, вроде бы это так. Только они, по-моему компилируются на этапе запуска приложения. ( Кстати, над этим
можно еще подумать. Вроде-бы на основе такого подхода можно создавать оптимизированный платформо- независимый код.
Правда, в случае с двумя языками , это ,наверно, не имеет значения.)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
dilmah



Зарегистрирован: 31.10.2004
Сообщения: 13

СообщениеДобавлено: Пн Ноя 01 2004 14:19    Заголовок сообщения: Ответить с цитатой

> Логично, наверное. Только почему синтаксис лисп- подобный ?
> Какие в этом плюсы ?
> Приведи, пожалуйста, пример таких конструкций. ( Я с языком lisp
> не знаком. Только что-то слышал
> про него. Не уверен, что объективное).

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

Примеры, почему так лучше.
Например возьмем Си. В нем есть инструкция if. И отдельно, так как возникает желание элегантно включать условные вычисления в выражения, есть конструкция ?:. Это избыточно, ведь достаточно иметь одну конструкцию типа (if x y z).

Пример второй. Иногда возникает потребность/желание инструментировать код. Например у нас на работе люди исследовали как будет работать их код на процессорах с разными характеристиками кэшей. Для этого они его инструментировали, но Си/Си++ код они не отважились инструментировать, поэтому инструментировали прямо ассемблерный листинг. Чтобы инструментировать Си/Си++ код нужен нехилый парсер.
Или интструментировать код для получения данных о покрытии кода. И прочие манипуляции с кодом, меняющие его, собирающие какую-то статистику. Мне хочется чтобы подобные операции было легко проводить с кодом на первом языке.

> С надстройкой над первым языком все понятно. А вот насчет TeX и
> VHDL не очень. TeX , насколько я знаю, это
> язык для простого создания книг, статей и.т.п. со всевозможными
> специальными символами ( Я, например, пишу на
> нем курсовые работы по математике). А вот про VHDL я ничего не
> слышал. Какого рода программы можно транслировать
> в эти языки ?

VHDL я сам не знаю, но на нем как-то описывают устройство микросхем.
Собственно, Кнут же когда-то делал cweb -- и писал на нем -- это аналог второго языка-надстройки, который как раз и генерировал одновременно код на Си (или Паскале) и документацию на TeX'e.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Михаил Н.



Зарегистрирован: 30.10.2004
Сообщения: 12
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Ноя 01 2004 19:05    Заголовок сообщения: Ответить с цитатой

В общем, насчет первого языка программирования я согласен: хорошая идея. Можно даже попробовать сделать lisp-подобный синтаксис. А вообще у меня возникла идея сделать его мультисинтаксическим, чтобы те же выражения можно было бы записать и в виде lisp-выражений и в виде asm-выражений , например.

А что ты думаешь насчет языка высокого уровня (второго)?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
dilmah



Зарегистрирован: 31.10.2004
Сообщения: 13

СообщениеДобавлено: Пн Ноя 01 2004 23:59    Заголовок сообщения: Ответить с цитатой

Михаил Н. писал(а):
А что ты думаешь насчет языка высокого уровня (второго)?


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

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

У меня в планах было сперва реализовать первый язык, оставляя как раз все вопросы
которые можно решить во втором языке на потом.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Михаил Н.



Зарегистрирован: 30.10.2004
Сообщения: 12
Откуда: Ростов-на-Дону

СообщениеДобавлено: Вт Ноя 02 2004 09:29    Заголовок сообщения: Ответить с цитатой

dilmah писал(а):

Первый язык это domain specific язык.


Все хотел спросить: А что ты понимаешь под domain specific языком?


dilmah писал(а):

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


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

dilmah писал(а):

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


Можно чуть подробнее про интерфейсы. Что означает "Си-подобный интерфейс"?

dilmah писал(а):

У меня в планах было сперва реализовать первый язык, оставляя как раз все вопросы
которые можно решить во втором языке на потом.


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

Вооще, если не сложно, напиши пожалуйста все свои соображения по поводу первого языка более подробно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Гость






СообщениеДобавлено: Вт Ноя 02 2004 16:34    Заголовок сообщения: Ответить с цитатой

> Все хотел спросить: А что ты понимаешь под domain specific языком?

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

Недавно натыкался на текст по теме http://arxiv.org/abs/cs.PL/0409016

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

а что даст прямая трансляция?? Выигрыш времени компиляции вряд ли. Зато даст запутанность. Никакого выигрыша в эффективности кода при прямой трансляции быть не может по определению -- потому что в первый язык нужно включить все что может помочь генерировать эффективный код. А второму языку останется только задача повысить удобность программирования для человека.

Все сегодняшние компиляторы Си++ сперва транслируют во что-то промежуточное, и только потом это промежуточное оптимизируют.

> Можно чуть подробнее про интерфейсы. Что означает "Си-подобный
> интерфейс"?

ну, такой интерфейс может предоставлять некий элементарный набор типов, плюс структуры, массивы и юнионы из них. Может экспортировать переменные этих типов. И предоставлять entry points функций..

> Вооще, если не сложно, напиши пожалуйста все свои соображения > по поводу первого языка более подробно.

Есть две основных конструкции выражений:
(seq x y z) и (ind x y z)
они вычисляют подвыражения x y z.. соответственно последовательно или независимо. Результат -- это список из вычисленных подвыражений.

Есть (pick list i j k). Он выдает список состоящий из элементов i, j, k списка list.
В такой нотации, например оператор запятая в Си (a, b) запишется как:

(pick (seq a b) 2)

Есть конструкция для цикла. В принципе последовательный цикл избыточен при наличии goto.

Есть последовательный цикл:

Сишный цикл for ( i = 0, j = 0; i < 100; ++i ) j *= i;
будет выглядеть как-то типа:
(seqfor (ind (= i 0) (= j 0) (< i 100) (++ i) (*= j i))

Есть параллельный цикл.

Сишный цикл for ( i = 0; i < 100; ++i ) a[i] *= 2;
будет выглядеть как-то типа:
(indfor (ind (= i 0) (= j 0) (< i 100) (++ i) (*= ([] a i) 2))

Есть if:

(if (== i 2) a b)

Еще есть (sel list N).
sel берет список list и возвращает список из только N из них (любых) которые завершились и вернули не nil. Если все вернули nil, то и sel возвращает nil.

Таким образом можно описать switch.

Например:

switch ( i )
{
case 0: a; break;
case 1: b; break;
case 2: c; break;
}

выглядит как:

(sel (ind (if (== i 0) a nil) (if (== i 1) b nil) (if (== i 2) c nil)) 1)

В то же время

switch ( i )
{
case 0: a; break;
case 1: b; break;
case 2: c; break;
default: d; break;
}

выглядит как:

(sel (seq (sel (ind (if (== i 0) a nil) (if (== i 1) b nil) (if (== i 2) c nil)) 1) d) 1)

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

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



Зарегистрирован: 31.10.2004
Сообщения: 13

СообщениеДобавлено: Вт Ноя 02 2004 16:46    Заголовок сообщения: Ответить с цитатой

гостем запостил, и теперь редактировать не могу..

> Все хотел спросить: А что ты понимаешь под domain specific языком?

я понимаю это язык, основная задача которого описывать дела в конкретной области. Например Си это язык для описания кода который будет выполняться на процессоре. TeX/troff языки для описания документов. VHDL для описания интегральных схем.

Недавно натыкался на текст по теме http://arxiv.org/abs/cs.PL/0409016

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

а что даст прямая трансляция?? Выигрыш времени компиляции вряд ли. Зато даст запутанность. Никакого выигрыша в эффективности кода при прямой трансляции быть не может по определению -- потому что в первый язык нужно включить все что может помочь генерировать эффективный код. А второму языку останется только задача повысить удобность программирования для человека.

Все сегодняшние компиляторы Си++ сперва транслируют во что-то промежуточное, и только потом это промежуточное оптимизируют.

> Можно чуть подробнее про интерфейсы. Что означает "Си-подобный
> интерфейс"?

ну, такой интерфейс может предоставлять некий элементарный набор типов, плюс структуры, массивы и юнионы из них. Может экспортировать переменные этих типов. И предоставлять entry points функций..

> Вооще, если не сложно, напиши пожалуйста все свои соображения > по поводу первого языка более подробно.

Есть две основных конструкции выражений:
(seq x y z) и (ind x y z)
они вычисляют подвыражения x y z.. соответственно последовательно или независимо. Результат -- это список из вычисленных подвыражений.

Есть (pick list i j k). Он выдает список состоящий из элементов i, j, k списка list.
В такой нотации, например оператор запятая в Си (a, b) запишется как:

(pick (seq a b) 2)

Есть конструкция для цикла. В принципе последовательный цикл избыточен при наличии goto.

Есть последовательный цикл:

Сишный цикл for ( i = 0, j = 0; i < 100; ++i ) j *= i;
будет выглядеть как-то типа:
(seqfor (ind (= i 0) (= j 0)) (< i 100) (++ i) (*= j i))

Есть параллельный цикл.

Сишный цикл for ( i = 0; i < 100; ++i ) a[i] *= 2;
будет выглядеть как-то типа:
(indfor (= i 0) (< i 100) (++ i) (*= ([] a i) 2))

Есть if:

(if (== i 2) a b)

Еще есть (sel list N).
sel берет список list и возвращает список из только N из них (любых) которые завершились и вернули не nil. Если все вернули nil, то и sel возвращает nil.

Таким образом можно описать switch.

Например:

switch ( i )
{
case 0: a; break;
case 1: b; break;
case 2: c; break;
}

выглядит как:

(sel (ind (if (== i 0) a nil) (if (== i 1) b nil) (if (== i 2) c nil)) 1)

В то же время

switch ( i )
{
case 0: a; break;
case 1: b; break;
case 2: c; break;
default: d; break;
}

выглядит как:

(sel (seq (sel (ind (if (== i 0) a nil) (if (== i 1) b nil) (if (== i 2) c nil)) 1) d) 1)

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

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


Последний раз редактировалось: dilmah (Вт Ноя 02 2004 17:03), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
dilmah



Зарегистрирован: 31.10.2004
Сообщения: 13

СообщениеДобавлено: Вт Ноя 02 2004 17:00    Заголовок сообщения: Ответить с цитатой

еще в первом языке планируется возможность пометки отдельных вещей в коде, как событий, и можно будет задавать вероятностные распределения на этих событиях. Просто вероятности могут учитываться при оптимизации, а явные нули/единицы могут рассматриваться как ассерты.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Михаил Н.



Зарегистрирован: 30.10.2004
Сообщения: 12
Откуда: Ростов-на-Дону

СообщениеДобавлено: Вт Ноя 02 2004 18:40    Заголовок сообщения: Ответить с цитатой

dilmah писал(а):

я понимаю это язык, основная задача которого описывать дела в конкретной области. Например Си это язык для описания кода который будет выполняться на процессоре. TeX/troff языки для описания документов. VHDL для описания интегральных схем.


И в какой же именно области должен описывать дела первый язык? Я бы хотел сделать язык как минимум для “описания кода, который будет выполняться на процессоре”. Или ты хочешь сделать универсальный язык для описания всего ( типа как XML)?

dilmah писал(а):

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


Да, синтаксис действительно страшноватый и, кроме того, трудно читабельный. Зачем вообще делать синтаксис lisp-подобным? Мне кажется лучше придумать что-нибудь не слишком сложное для разбора ( как я понимаю, из-за этого и зашел разговор о lisp-подобном языке. Хотя я не понимаю: какие трудности могут быть с разбором, например, сишного синтаксиса? Я так думаю, что при использовании подходящего инструментария (lex,bison, zubr, Cocol/R, ...) это не принципиально.) и в тоже время более приятное глазам.
Мне как-то ближе даже ассемблерный синтаксис.

Со своей стороны хочу предложить реализовать стековую реализацию этого первого языка. Суть такова: в стек кладутся операнды для операций, а затем вызывается операция, которая берет параметры в стеке, производит с ними какую-то манипуляцию, а затем помещает в стек результат. Тогда выражение вида x=(a+b)*c можно записать, например, так:

push a
push b
add
push c
mul
set x
или так
#a #b + #c * = x
(Здесь # означает: поместить в стек, +,*,= - соответствующие операции.)
Ну или что-то в этом духе.

dilmah писал(а):

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


Что-то не очень понятно, что означает фраза “вероятностные распределения на событиях”. Для чего это может пригодиться?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
dilmah



Зарегистрирован: 31.10.2004
Сообщения: 13

СообщениеДобавлено: Вт Ноя 02 2004 20:32    Заголовок сообщения: Ответить с цитатой

Дополнение к моему предыдущему постингу:
seqfor и indfor стоит заменить на просто for который должен
как бы генерировать формальный список. Этот список потом
можно вычислить с помощью seq или ind.
У sel стоит убрать аргумент N..

> И в какой же именно области должен описывать дела первый язык? Я бы хотел сделать язык как
> минимум для "описания кода, который будет выполняться на процессоре". Или ты хочешь
> сделать универсальный язык для описания всего ( типа как XML)?

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

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

Также у меня есть подозрение что с помощью комбинации ind, for и sel
можно замутить более мощные конструкции чем с помощью только
стековой машины.

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

> Что-то не очень понятно, что означает фраза "вероятностные распределения на событиях". Для
> чего это может пригодиться?

Ну.. Как классический пример, по разному компилировать if в зависимости от вероятностей
ветвей.
Опять таки, нули/единицы использовать как ассерты. Чем умнее компилятор тем из большего
кол-ва ассертов он сможет извлечь пользу..
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Михаил Н.



Зарегистрирован: 30.10.2004
Сообщения: 12
Откуда: Ростов-на-Дону

СообщениеДобавлено: Ср Ноя 03 2004 18:25    Заголовок сообщения: Ответить с цитатой

dilmah писал(а):

У меня есть подозрение что если отойти от лисповского синтаксиса,
то будут получаться те же дублирования управляющих конструкций --
отдельно в виде инструкций, отдельно в виде операторов.
(как оператор запятая и оператор ?: в Си).
....
Также у меня есть подозрение что с помощью комбинации ind, for и sel
можно замутить более мощные конструкции чем с помощью только
стековой машины.


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

dilmah писал(а):

Ну.. Как классический пример, по разному компилировать if в зависимости от вероятностей
ветвей.


А как по-разному можно компилировать if ( разве, что если вероятность ветви равна 0, то исключить ее)?

dilmah писал(а):

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


А зачем вообще создавать компилятор lisp-а? Ведь предложенный синтаксис, кажется, не сильно отличается от его синтаксиса.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
dilmah



Зарегистрирован: 31.10.2004
Сообщения: 13

СообщениеДобавлено: Ср Ноя 03 2004 20:46    Заголовок сообщения: Ответить с цитатой

> Может быть. Но суть моего предложения была не в этом. Меня интересует упрощение
> синтаксиса. А насчет так называемого дублирования: не вижу ни чего страшного
> в операции запятой и ?: в си. (хотя, если честно, я не совсем понимаю что имеется
> в виду под "дублированием").

Есть инструкция if. Кроме этого, для возможности вставлять if в выражения
есть оператор ?:. Это дублирование.

Есть последовательное вычисление выражений
expr1;
expr2;
Кроме этого для возможности включать последовательное вычисление в выражения
есть запятая.
expr1, expr2;
Это дублирование.

Лисп-синтаксис и так предельно прост. Делать синтаксис простым для человека
задача второго языка..

> А как по-разному можно компилировать if ( разве, что если вероятность ветви равна 0,
> то исключить ее)?

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

> А зачем вообще создавать компилятор lisp-а? Ведь предложенный синтаксис, кажется,
> не сильно отличается от его синтаксиса.

Синтаксис не отличается. Но мне пока казалось что это не совсем лисп..
Язык который получается, по меньшей мере, не может быть
менее эффективен чем Си.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
dilmah



Зарегистрирован: 31.10.2004
Сообщения: 13

СообщениеДобавлено: Ср Ноя 03 2004 23:11    Заголовок сообщения: Ответить с цитатой

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

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

Это были так, общефилософские соображения..
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Михаил Н.



Зарегистрирован: 30.10.2004
Сообщения: 12
Откуда: Ростов-на-Дону

СообщениеДобавлено: Чт Ноя 04 2004 11:09    Заголовок сообщения: Ответить с цитатой

dilmah писал(а):

Есть инструкция if. Кроме этого, для возможности вставлять if в выражения
есть оператор ?:. Это дублирование.

Есть последовательное вычисление выражений
expr1;
expr2;
Кроме этого для возможности включать последовательное вычисление в выражения
есть запятая.
expr1, expr2;
Это дублирование.


А чем плохо такое дублирование? Могу предположить, что только идейными соображениями.

dilmah писал(а):

Лисп-синтаксис и так предельно прост. Делать синтаксис простым для человека
задача второго языка..

А вообще зачем нужен первый язык? Почему вместо него не использовать существующий, например ассемблер, для которого и так есть оптимальные компиляторы, или не генерить для второго языка сразу код на ВМ? Только не надо говорить, что для первого языка можно сделать эффективную кодогенерацию: для любого языка можно это сделать. Вообще я задаю этот вопрос, потому что из твоих слов выходит, что человек писать на первом языке не будет, т.е. он будет промежуточным шагом между вторым языком и ВМ ( или кодом на конкретном процессоре).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
dilmah



Зарегистрирован: 31.10.2004
Сообщения: 13

СообщениеДобавлено: Чт Ноя 04 2004 17:11    Заголовок сообщения: Ответить с цитатой

> А чем плохо такое дублирование? Могу предположить, что только идейными соображениями.

скорее соображениями вкуса. Не мне судить хорошего ли, но моего. И мои вкусовые
ощущения для меня очень важны.

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

ну то есть для тебя нормально ассемблер одного процессора скомпилировать в другой?

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

имхо, то что ты планируешь хорошо для курсового проекта, или чтобы приобрести
опыт написания компиляторов и облегчить нахождение работы. Ничего больше.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Гость






СообщениеДобавлено: Чт Ноя 04 2004 20:55    Заголовок сообщения: Ответить с цитатой

dilmah писал(а):

скорее соображениями вкуса. Не мне судить хорошего ли, но моего. И мои вкусовые
ощущения для меня очень важны.


Да... Как говорится: на вкус и цвет товарищей нет. Мне, например, сишный синтаксис нравится намного больше и кажется, что он очень понятный.

dilmah писал(а):

ну то есть для тебя нормально ассемблер одного процессора скомпилировать в другой?


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

dilmah писал(а):

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


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

dilmah писал(а):

Кстати, скоро у всех 20-ядерные девайсы в компах будут стоять..


А что это такое?

dilmah писал(а):

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


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

Цитата:

Ничего больше.


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

dilmah писал(а):

Есть инструкция if. Кроме этого, для возможности вставлять if в выражения
есть оператор ?:. Это дублирование.

Есть последовательное вычисление выражений
expr1;
expr2;
Кроме этого для возможности включать последовательное вычисление в выражения
есть запятая.
expr1, expr2;
Это дублирование.


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

Да, а для каких процессоров, например ты предполагаешь переносимость?
Вернуться к началу
dilmah



Зарегистрирован: 31.10.2004
Сообщения: 13

СообщениеДобавлено: Пт Ноя 05 2004 01:20    Заголовок сообщения: Ответить с цитатой

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

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

В стандарте Си++ прямо записано:

# 1.8 Program execution [intro.execution]
#
# 1 The semantic descriptions in this International Standard define a
# parameterized nondeterministic abstract machine. This International
# Standard places no requirement on the structure of conforming imple-
# mentations. In particular, they need not copy or emulate the struc-
# ture of the abstract machine. Rather, conforming implementations are
# required to emulate (only) the observable behavior of the abstract
# machine as explained below.....

Единственно, что код этой ВМ (сишный код) содержит в себе более высокоуровневые
вещи, чем просто ассемблерный код. Ну то есть например можно определить структуру,
а конкретная ее раскладка в памяти остается на усмотрение компилятора.
Но все равно какие-то ограничения эта
ВМ накладывает -- память состоит из char'ов, объект это непрерывный регион памяти
из целого числа char'ов. разные объекты имеют разные адреса и т.п.

> т.к. разработкой програм для множества различных процессоров я не занимался).

я тоже..

> > Кстати, скоро у всех 20-ядерные девайсы в компах будут стоять..

> А что это такое?

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

> Ну для курсового проекта мне это не надо ( к компъютерам мой курсовой проект не имеет
> никакого отношения), а насчет опыта : было бы неплохо. А вообще-то я хотел просто написать
> какой нибудь серьезный и интересный язык программирования ( наверное, его можно было бы
> потом использовать в дальнейшем), реализовать какие нибудь новые свежие идеи.
> Кстати, а для чего еще может быть хороша разработка нового языка программирования? И какие
> у тебя планы на создаваемый язык?

эстетическое удовольствиеSmile ну и опыт.
курсовые у меня в прошлом (и тоже не имели отношения к программированию).

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

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

Семантически хорошие вещи конечно заимствовать нужно -- тот же sel(ect) -- наверняка его
аналог есть в Оккаме. Но синтаксис.. Если хотеть уметь вставлять в выражения
произвольные управляющие конструкции языка, то лисповый синтаксис лучше.
И он наиболее прост и естественен.

> Да, а для каких процессоров, например ты предполагаешь переносимость?

я пользователь NetBSD. И мне очень нравится ее портируемость на много архитектур
(хотя я использую только x86).
Закладка на максимальную портабельность потенциально означает более чистый и продуманный дизайн.

Конечно, первый компилятор первого языка нужно делать для i386, а потом видно
будет.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
async



Зарегистрирован: 05.11.2004
Сообщения: 9

СообщениеДобавлено: Пт Ноя 05 2004 07:47    Заголовок сообщения: Насчет разработки языка Ответить с цитатой

Михаил Н.
Идея конечно хорошая, но спешу тебя огорчить знание C++ и асемблера маловатою Поскольку если ты хочешь разработать толковый язык внести новый синтаксис и сделать из него конфетку то тут нужно знание ПК и мнемоники. слышал о таком? так вот в чем вся загвоздка а так бы мы уже все писали свои языки и компиляторы Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Гость






СообщениеДобавлено: Пт Ноя 05 2004 11:43    Заголовок сообщения: Re: Насчет разработки языка Ответить с цитатой

> тут нужно знание ПК и мнемоники.

это наверно пипец как круто..
Вернуться к началу
Михаил Н.



Зарегистрирован: 30.10.2004
Сообщения: 12
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пт Ноя 05 2004 15:46    Заголовок сообщения: Re: Насчет разработки языка Ответить с цитатой

async писал(а):
Михаил Н.
Идея конечно хорошая, но спешу тебя огорчить знание C++ и асемблера маловатою Поскольку если ты хочешь разработать толковый язык внести новый синтаксис и сделать из него конфетку то тут нужно знание ПК и мнемоники. слышал о таком? так вот в чем вся загвоздка а так бы мы уже все писали свои языки и компиляторы Wink


А что, такое мнемоника? Это так называемые opcodes? Ну я их не то чтобы знаю, но представление имею, а также нашел intel'овский help по этому делу. Ну а вообще все что нужно я думаю можно при необходимости узнать.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Михаил Н.



Зарегистрирован: 30.10.2004
Сообщения: 12
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пт Ноя 05 2004 16:00    Заголовок сообщения: Ответить с цитатой

dilmah писал(а):

я пользователь NetBSD. И мне очень нравится ее портируемость на много архитектур
(хотя я использую только x86).


А я пользовался ОС QNX. Мне она очень понравилась. Она кстати тоже мультиплатформенная( правда я тоже пользуюсь только x86).

dilmah писал(а):

Закладка на максимальную портабельность потенциально означает более чистый и продуманный дизайн.


Это наверно правильно, только как можно разрабатывать многоплатформенный язык, работая при этом только с одной платформой?

dilmah писал(а):

Конечно, первый компилятор первого языка нужно делать для i386, а потом видно
будет.


Согласен. Ну может будем уже делать что-нибудь конкретное?
(Хотя бы оформим основные положения). Я кстати открыл свой e-mail. Так что пиши.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
dilmah



Зарегистрирован: 31.10.2004
Сообщения: 13

СообщениеДобавлено: Вт Ноя 09 2004 16:12    Заголовок сообщения: Ответить с цитатой

я создал проект https://sourceforge.net/projects/kernfach/
в проекте пока два человека -- я и мой братSmile
там есть список рассылки https://sourceforge.net/mail/?group_id=123519
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...