Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание компилятора, Не баян - другая мотивация 
:(
    Опции темы
UniBomb
Дата 18.12.2006, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 97



Надеюсь эта тема переживёт прочтение модерации.... (это пролог)

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

- углублённое осознание "что такое компилятор"
- приобретение навыка работы в команде
- приобретение навыков ведения большого проекта
- улучшение навыков программирования
- ну и просто приятное время препровождение

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

Теперь собственно о языке и компиляторе. Название ему пока придумывать не стоит, ведь ничего пока ещё не создано, для краткости навесим на него ярлык "свой". Язык изначально не подразумевается как эзотерический. Он должен отвечать неким требованиям (они подберутся, если проект не загнётся), быть вполне функционален, работоспособный. Что бы любой желающий мог сваять программу посложнее чем "Hello World!". В общем и целом думаю понятно.

(на правах постскриптма) : если тема не выживет посещения модерации, но желающие появятся - стучитесь ко мне в личку...


--------------------
PM MAIL ICQ Skype   Вверх
Sartorius
Дата 18.12.2006, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: нет
Всего: 37



UniBomb, а CVS - то у тя есть?
PM MAIL ICQ   Вверх
UniBomb
Дата 18.12.2006, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 97



Sartorius

если бы я знал что это... скорее всего нет...


--------------------
PM MAIL ICQ Skype   Вверх
Artemios
Дата 18.12.2006, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: нет
Всего: 50



flex+byson+мануалы...
много документации по ASM-у, теории графов, формальных языков и грамматик...


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
UniBomb
Дата 18.12.2006, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 97



Artemios

Цитата

flex+byson+мануалы...
много документации по ASM-у, теории графов, формальных языков и грамматик...


Цитата

- углублённое осознание "что такое компилятор"


Тот же Турбо Паскаль не сразу седьмой версией вышел. Я же не говорил, что свой язык с первой версией будет достойный ответ всему существующему... Это я к тому, что начинать надо с малого, попутно накапливая эти самые "много документации по ASM-у, теории графов, формальных языков и грамматик...". Никто не говорил, что это будет легко. Никто не говорил, что всё будет сделано с первого раза, никто не говорил, что не нужно дополнительного багажа знаний. Да и потом я никого не принуждаю, тут все на личном желании и энтузиасме. А тот кто хочет, тот достанет нужный мануал, узнает что нужно, поймёт и запомнит. В этой затее ничего дурного нет, как нет и того, чего надо высмеивать. Да и во времени ничто не ограничивает...


--------------------
PM MAIL ICQ Skype   Вверх
Иванофф
Дата 19.12.2006, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 8.9.2006

Репутация: нет
Всего: нет



Цитата(Artemios @ 18.12.2006,  22:56)
flex+byson+мануалы...
много документации по ASM-у, теории графов, формальных языков и грамматик...

наверно нужно определить предметную область, рассмотреть сушествуюшие решения, наметить чем новый компилятор будет лучше или хотябы чем будет отличаться.
в бесплатно бездежной форме такой проект врядли будет жить.
PM MAIL   Вверх
UniBomb
Дата 19.12.2006, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 97



Иванофф

Уже пошёл креатифф... Пошли дельные мысли... 


Цитата

наверно нужно определить предметную область, рассмотреть сушествуюшие решения


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

Цитата

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


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


--------------------
PM MAIL ICQ Skype   Вверх
Иванофф
Дата 20.12.2006, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 8.9.2006

Репутация: нет
Всего: нет



давайте делать компилятор для создания 3Д САПРов. Возьмем подмножество фортрана, добавим 3Д примитивы и структуры, добавим библиотеку по вводу-выводу, апи по интефейсам, вин апи + сервисные функции для 1Д-2Д-3Д. 

а что дальше?
PM MAIL   Вверх
NightmareZ
Дата 20.12.2006, 02:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: нет
Всего: 13



Имхо. Язык должен придумывать один человек. Ибо иначе никогда не избавитесь от разногласий.


Цитата(Иванофф @  20.12.2006,  01:32 Найти цитируемый пост)
давайте делать компилятор для создания 3Д САПРов. Возьмем подмножество фортрана, добавим 3Д примитивы и структуры, добавим библиотеку по вводу-выводу, апи по интефейсам, вин апи + сервисные функции для 1Д-2Д-3Д. 

А зачем?

Цитата(Artemios @  18.12.2006,  22:56 Найти цитируемый пост)
много документации по ASM-у, теории графов, формальных языков и грамматик...

Убедился на своём опыте, что это всё лишний мусор. Если пишешь компилятор первый раз. Слишком много инфы, которая с трудом кладывается в голове и не даёт креативно мыслить. Писал свой первый basic-подобный интерпретатор, понятия не имея что такое графы и грамматики и прочее..... Хотя, не спорю, что вообще это нужные знания.



--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
Kostt
Дата 20.12.2006, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 8.1.2006
Где: Томск

Репутация: нет
Всего: 3



А у нас в универе преподавали теорию компиляторов, задание было - написать свой интерпретатор с функциональностью примерно паскаля. Теорию нужно учить, но хорошо, когда знаешь, что конкретно учить
PM MAIL   Вверх
UniBomb
Дата 20.12.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 97



Иванофф

Цитата

давайте делать компилятор для создания 3Д САПРов. Возьмем подмножество фортрана, добавим 3Д примитивы и структуры, добавим библиотеку по вводу-выводу, апи по интефейсам, вин апи + сервисные функции для 1Д-2Д-3Д. 


Действительно, зачем? Это уже не то... Это уже сборка, а не разработка... Намного интереснее разработать с нуля...


NightmareZ

Цитата

Имхо. Язык должен придумывать один человек. Ибо иначе никогда не избавитесь от разногласий.


Моё ИМХО - язык должны придумывать (хотя скорее разрабатывать) несколько человек. А выбирать наиболее удачные концепции - уже один человек. Это наиболее оптимальный вариант, т.к. один человек просто не в состоянии учесть особенности уже существующих языков - их прелести и недостатки. 

Цитата

Убедился на своём опыте, что это всё лишний мусор. Если пишешь компилятор первый раз. Слишком много инфы, которая с трудом кладывается в голове и не даёт креативно мыслить. Писал свой первый basic-подобный интерпретатор, понятия не имея что такое графы и грамматики и прочее..... Хотя, не спорю, что вообще это нужные знания.


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

Kostt

Цитата

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


Ну, что конкретно учить выяснится в процессе. Главное с чего начать...


--------------------
PM MAIL ICQ Skype   Вверх
Иванофф
Дата 21.12.2006, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 8.9.2006

Репутация: нет
Всего: нет



зачем писать компилятор с привязкой к предметной области? в таком виде он хоть кому-то понадобиться.
если будете писать компилятор под фортран, паскаль, си и т.д. или язык с близкой функциональностью, то потребителей (помимо разработчиков) не будет.
PM MAIL   Вверх
regis
Дата 21.12.2006, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: нет
Всего: 7



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


Это сообщение отредактировал(а) regis - 21.12.2006, 10:48
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
UniBomb
Дата 22.12.2006, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 97



Иванофф
regis


Почитайте повнимательней первый пост топика... Идея не в том, что бы создать какой-то супер пупер компилятор, который заткнёт cpp и c#. Этот проект должен стать первым опытом создания компиляторов. Хотя конечно хочется сделать самостоятельный и законченый продукт... 

Очередная агидинформация:

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

1) Чего не хватает современным ЯП?
2) Чего лишнего в современных ЯП?

Агидотдел закончил...

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

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

ЗЫ:. хорошо что хоть на этом этапе критики нет.... smile

Это сообщение отредактировал(а) UniBomb - 22.12.2006, 01:25


--------------------
PM MAIL ICQ Skype   Вверх
Artemios
Дата 22.12.2006, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: нет
Всего: 50



Цитата(UniBomb @  22.12.2006,  01:23 Найти цитируемый пост)
Из нововведений есть желание реализовать редактор формул. Не знаю, есть такое в фортране или нет (если там нет, то и нигде нет), но смысл вот в чём - если есть какая-нить большущая дробь, которую надо запрограммировать - во всех ЯП вся дробь записывается в одну длиннющую строку, в которой подчас ничего не разобрать, следовательно это надо сделать более удобным - позволить записывать эту дробь в привычном виде - под числителем знаменатель, над знаменателем - числитель. В общем как редактор формул в ворде.

Обычно, кто много возится с наборами формул (не в программировании, вообще математический текст) -- в конечном итоге большинство переходит от визуальных построителей (типа редактора формул в ворде) к системе LaTeX, где формулы как раз записываются в одну строчку набором комманд. Так что вопрос об удобстве WISIWIG построителей достаточно спорен, практика доказывает обратное.
А вообще, последнее предложение касается не языка, а IDE.

Цитата(UniBomb @  22.12.2006,  01:23 Найти цитируемый пост)
хорошо что хоть на этом этапе критики нет....

ну вот и критика smile)


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
UniBomb
Дата 22.12.2006, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 97



Artemios

Цитата

А вообще, последнее предложение касается не языка, а IDE.


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


--------------------
PM MAIL ICQ Skype   Вверх
Иванофф
Дата 23.12.2006, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 8.9.2006

Репутация: нет
Всего: нет



Цитата(UniBomb @ 22.12.2006,  18:10)
Artemios
Ну в принципе да... Просто есть желание по максимуму организовать WYSIWYG по максимуму, но приэтом что бы было комфортно работать... Можно сделать поддержку обоих вариантов...

можно объединить две темы, тогда появиться хоть какая-то конкретика

"Компилятор для языка программирования Д"

все чаще на подобные вопросы
1) Чего не хватает современным ЯП?
2) Чего лишнего в современных ЯП?

появляются ответы

1) Чего не хватает современным ЯП?

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

2) Чего лишнего в современных ЯП?

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

PM MAIL   Вверх
Sardar
Дата 23.12.2006, 04:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Ух ты какая регулярная тема снова всплыла smile

Цитата(UniBomb @  22.12.2006,  00:23 Найти цитируемый пост)

1) Чего не хватает современным ЯП?
2) Чего лишнего в современных ЯП?

Я перечислю что бы хотел видеть, но это не значит что этого нет (Ruby например рулит почти по всему, что я назову).

Closures и некоторые другие вещи (ну и конечно фуннкции высшего порядка, что будет автоматом):
Код
function functorShow(object) {
   return {|show=true|:
        object.style.visibility = show? 'visible': 'hidden';
   }
}
//.....
a = //some object
b = //other object

show = functorShow(a);
show(true); //"покажем" обьект
show(false); //скроем обьект

//также можно повесить каким нибудь обработчиком события
some_event_source.an_event += functorShow(b); //будет показывать обьект всякий раз как произойдёт событие an_event у обьекта some_event_source

//ну и конечно же куда без outerloop по коллекциям
//распечатает каждый элемент
["test", "bla", "винград"].foreach {|element, index|
   console.println("Element: %s at index: %d" % (element, index)); //из python'a, аналог printf из C
}

Функции и бы отдельно от closure's реализовать, для эффективности, всё таки не всегда контекст привязанный нужен.

Конечно интересны (мне smile ) именнованные блоки, но их применение (а также вообще смысл) сомнительно:
Код
function test() {
//блоки могут быть определены только в функции или в другом блоке
  test:{ //именованный блок test
     //что нибудь делаем
  }
  test!(); //собственно вот так блоки "вызываються"
  while(true) test!; //или так они могут реюзаться
}

Блоки могут сделать код похожим на "спагетти", т.к. это ограниченый аналг goto, но ИМХО очень удобно и при реализации с умом будет эффективней чем closure. Конечно же блоки это обьекты, но они не могут быть возвращеы как closure из функции.

Человеческие коллекции. Т.е. не всё под одну гребёнку, а возможность эффективно писать выбирая ArrayList (список на массиве), LinkedList (связанный список), LinkdHashMap (ассоциативный массив) и т.д. как в Java. Естественно подогнать это всё под удобный синтаксис, пример списка я дал в примере closure.

Конструкцию match как в Ocaml (спосоставление по типу). Это мощная вешь, с которй можно пойти дальше добавив операторы apply и pass. Конечно нужны тогда "жёсткие типы" (статическая типизация), что есть гуд. Также нужны алгебраические типы ну и прочее:
Код
//допустим есть классы/конструкторы One, Two и Three
//общий алгебраический тип
define A = One|Two|Three;
A a = new One();
A b = new Two();

match(a) {
   One -> {
       console.println(a);
       apply(b); //"вызываем" внешний match на b снова, pass то же самое, но без возврата (goto)
   }
   Two -> { /* что нибудь делаем с Two обьектом в a */ }
}

В паре слов не обьяснить конечно же, смотрим Ocaml и Haskell. Алгебраические типы позволят собирать какие угодно структуры, удобно в контейнерах и т.д. С помощью match + apply + pass можно проходить пол любым структурам (по деревьям идеально). Вообщем это очень круто smile

Расширение компилятора с помощью core интерфейсов. Это такой более продвинутый аналог перегрузки операторов и т.п.:
Код
//допустим есть интерфейс Callable, пусть требует метода call. Имплементирующий обьект может тогда использоваться как функция

public class SomeObject implements Callable {
  function call(arg) {
     console.println("Single argument: %s" % (arg));
  }
  function call(arg, arg2) {
     console.println("Two arguments, arg1: %s and %s " % (arg, arg2));
  }
  function call(...) {
     console.println("Total arguments: %d" % (callee.arguments.length));
  }
}

a = new SomeObject();
a("test"); //вызов с одним аргументом
a("bla", "cool"); //вызов с двумя аргументами
a("vingrad", "wow!", 90); //если бы call(...) не было, то была бы ошибка на момент трансляции (компиляции)

//Ну и куда деваться без ArrayAccess и подобных, смотреть PHP5
//в кратце позволяет обращаться к обьекту как к массиву []
//также можно продолжить на любой другой стандартный оператор


Много... так долго можно продолжать smile
В любом случае не нужно препроцессора, всё остальное по вкусу.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
adejneka
Дата 23.12.2006, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 8.7.2005
Где: Москва, Россия

Репутация: нет
Всего: 11



Простите за глупый вопрос, но чем блоки отличаются от dynamic-extent замыканий?
PM MAIL   Вверх
Sardar
Дата 23.12.2006, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



adejneka, возможно тем что к значениям переменных не имеет никакого отношения, т.е. переменные связываються статично со своим значением и не могут быть редекларированны в блоке ниже. Блоки что я предложил есть ничто иное чем "безопасный" goto или "функция в функции". Блок можно вызвывать снова и снова, строя например рекурсию внутри конкретной функции, это как приватные функции, не видимые вне функции/метода.

Но блок не функция, он не принимает никаких аргументов, а видит все переменные выше по контексту. Поэтому нельзя просто вызвать любой блок, а только те, что определены в текущем контексте(блоке) или выше. Внутри блока действуют break и continue, заставляющие соотвественно прыгнут в начало или в конец текущего блока (или "родительского" блока по имени).

Если предложить, что continue передаёт управление не блоку (он есть выражение), а на начало statement'а, то можно строить условия и циклы одним if'ом:
Код
int a = 90;
if(а > 0) {
    a--;
    continue; //прыгаем в начало statement'а, т.е. if. Этакий прямой аналог while
}

От такого код будет менее читабелен, но можно будет писать без дублирования участков кода, что облегчит не только работу оптимизатора, но и даст морально-эстетическое наслаждение программисту smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
regis
Дата 25.12.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: нет
Всего: 7



Цитата
Иванофф
regis

Почитайте повнимательней первый пост топика... Идея не в том, что бы создать какой-то супер пупер компилятор, который заткнёт cpp и c#. Этот проект должен стать первым опытом создания компиляторов. Хотя конечно хочется сделать самостоятельный и законченый продукт... 


Как раз желательно определиться вот с этим: будет ли это просто учебный пример, или язык, ориентированный на практическое применение. И кстати: если уж речь идет о чисто учебном примере, то призывать других принимать в этом участие как-то нелогично (поскольку учится человек всегда сам ;) ).
Если же речь идет о практической разработке, то опять встает вопрос о конкретике, который я уже задавал. В наши дни "язык программирования" вообще -- настолько общее, неконкретное понятие, что это уже ничего не говорит.
Если хочется просто поразрабатывать что-нибудь системное (заодно приобрести не только знания, но и какую-то известность), то позволю себе чуть саморекламы: а вы с моим проектом (AWL) знакомы? Там творческим личностям пока есть много возможностей для приложения усилий (и, кстати, вполне реальный шанс прославиться).

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


Речь уже идет о какой-то интерактивной программе? Не совсем понял: если встал вопрос о редактировании, предполагается, что это некий диалговый инструмент, а не просто ЯП.

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


Честно говоря, здесь важнее концепция: синтаксис, в конце концов, дело наживное. smile

Цитата
ЗЫ:. хорошо что хоть на этом этапе критики нет.... smile


Так пока что критиковать-то и нечего.   smile


Это сообщение отредактировал(а) regis - 25.12.2006, 12:40
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 25.12.2006, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: нет
Всего: 7



Здесь возникло сразу несколько вопросов:

Цитата(Sardar)

Closures и некоторые другие вещи (ну и конечно фуннкции высшего порядка, что будет автоматом):
Код
function functorShow(object) {
   return {|show=true|:
        object.style.visibility = show? 'visible': 'hidden';
   }
}
//.....
a = //some object
b = //other object

show = functorShow(a);
show(true); //"покажем" обьект
show(false); //скроем обьект


//также можно повесить каким нибудь обработчиком события
some_event_source.an_event += functorShow(b); //будет показывать обьект всякий раз как произойдёт событие an_event у обьекта some_event_source



Кстати, недурной пример на использование замыканий. Но что, действительно существует браузер, поддерживающий Ruby вместо JS?

Цитата(Sardar)


Код

//ну и конечно же куда без outerloop по коллекциям
//распечатает каждый элемент
["test", "bla", "винград"].foreach {|element, index|
   console.println("Element: %s at index: %d" % (element, index)); //из python'a, аналог printf из C
}

Функции и бы отдельно от closure's реализовать, для эффективности, всё таки не всегда контекст привязанный нужен.


Так, как я понял, цикл foreach своему телу передает два параметра -- сам элемент коллекции и его номер?

Цитата
Конечно интересны (мне smile ) именнованные блоки, но их применение (а также вообще смысл) сомнительно:
Код
function test() {
//блоки могут быть определены только в функции или в другом блоке
  test:{ //именованный блок test
     //что нибудь делаем
  }
  test!(); //собственно вот так блоки "вызываються"
  while(true) test!; //или так они могут реюзаться
}

Блоки могут сделать код похожим на "спагетти", т.к. это ограниченый аналг goto, но ИМХО очень удобно и при реализации с умом будет эффективней чем closure. Конечно же блоки это обьекты, но они не могут быть возвращеы как closure из функции.


Хмм-вроде это уже реализовано. Только синтаксис вот такой:

Код


` так присваиваем: `
test := { stmt1; stmt2; stmt3... };

` так вызываем: `
^test;


[/QUOTE]


Цитата

Человеческие коллекции. Т.е. не всё под одну гребёнку, а возможность эффективно писать выбирая ArrayList (список на массиве), LinkedList (связанный список), LinkdHashMap (ассоциативный массив) и т.д. как в Java. Естественно подогнать это всё под удобный синтаксис, пример списка я дал в примере closure.


Хмм, а не могли бы пояснить: в чем разница между всеми этими структурами данных? "Список на массиве", например?

А вообще, спасибо, идеи весьма интересные. Над некоторыми явно стоит подумать.


Это сообщение отредактировал(а) regis - 25.12.2006, 13:41
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Sardar
Дата 25.12.2006, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Цитата(regis @  25.12.2006,  12:38 Найти цитируемый пост)
Но что, действительно существует браузер, поддерживающий Ruby вместо JS?

К сожалению нет, но язык Ruby существует и является ИМХО очень мощной вещью. Правда я больше поклонник С подобного синтаксиса, но это мелочи smile

Цитата(regis @  25.12.2006,  12:38 Найти цитируемый пост)
Так, как я понял, цикл foreach своему телу передает два параметра -- сам элемент коллекции и его номер?

Цикла нет вообще. В примере создаётся дефолтовая коллекция (список), у которого определён метод foreach. Как и любой метод он может принимать любые аргументы, но вот один специальный аргумент передаётся не как обычно (в "()"), а блоком за конструкцией и это всегда должен быть closure. Фича впервые увиденная мной в Ruby, по сути посто syntatic sugar, но как удобно!

Получаеться любой метод или функция может принять любые аргументы + специальный "блок" - аргумент, что всегда является closure. Для такого специального аргумента можно создать специальное ключевое слово yield(), что будет вызывать closure если оно есть или ничего не делать если его нет. В скобках можно передать параметры. Естественно что какие параметры и сколько определяет сам метод.

Просто пример как это может реализоваться (выдуманный Java подобный язык):
Код
class LinkedList extends AbstractList {
   ......

   //можно вызывать как .foreach() {}
   public void foreach() {
       Node cur = this.root;
       int i = 0;

       while(cur != null) {
             yield(cur, i++); //вызов "блока"
             cur = cur.next; //переходим на следующую ноду
       }
   }

   //можно вызывать как .foreachArg({}); т.е. как "обычно"
   public void foreachArg(Closure block) {
       Node cur = this.root;
       int i = 0;

       while(cur != null) {
             block(cur, i++); //вызов "блока"
             cur = cur.next; //переходим на следующую ноду
       }
   }
}

//явно задаём список. Публичные переменные и методы в одном именном пространстве, потому () можно опустить.
LinkedList["test", "vingrad", "AWL"].foreach {|el| //создаём новый Closure обьект, пусть принимает только элемент, индекс нам не нужен
  console.println(el);   
}

["test", "vingrad", "AWL"].foreachArg({|el|
  console.println(el);   
});

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

В примере кстати даны пара примеров как расширять синтаксис компилера без препроцессора (который сам по себе является чистым злом). Допустим LinkedList реализует некий интерфейс ArrayAccess, позволяющий к классу или к обьекту обращаться как к массиву, вызывая соответствующие методы. Также Closure может быть системным классом от Function, который релизует интерфейс Callable. Любой обьект реализующий Callable может быть вызван как функция (допустим вызывается метод call, навязываемый интерфейсом). Ну а наследовав от Closure или имплементировав интерфейс (допустим) Yieldable можно вести себя как closure и быть переданным в любую функцию как блок.

Возможно покажется немного мозгодробильно, но ИМХО это очень хороший подход к использованию полного синтаксиса компилера любым класом/обьектом.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
maggot
Дата 18.6.2007, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 15.1.2007

Репутация: нет
Всего: нет



Ну как, сделали компилятор?
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Технологии: Разные | Следующая тема »


 




[ Время генерации скрипта: 0.1809 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.