введение

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

Модератор: Модераторы

введение

Сообщение ev » 06.10.2007 22:18:18

Думаю, не преувеличу, если скажу, что как минимум каждый второй программист хотел сделать свой язык программирования или компилятор (даже на этом форуме промелькали как минимум 2-3 ветки). Есть предложение подумать (благо флеймить любят все – этож не программу писать) и придумать, что же должно быть и чему не быть в идеальном (по нашему мнению) языке программирования. Хотя может в итоге это будет и не совсем язык, а некоторые дополнения… которые впоследствии могут компилятор превратить в самостоятельный язык программирования (как случилось с Delphi).

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

Про синтаксис возможно пока говорить не имеет смысла (хотя это тоже не маловажный вопрос). Конечно, многим не удобны операция присваивания и некоторые другие моменты. Но это мелочи и лучше пока считать, ведь на нормальный каркас компилятора можно натянуть практически любой синтаксис и его производные (конечно, с некоторыми ограничениями).
ev
долгожитель
 
Сообщения: 1697
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение GrayEddy » 06.10.2007 22:38:50

Компиляторы фирмы XDS для Modula-2 и Oberon-2 рулят.
Очень строги, как экзаменаторы.
Проверено на личном опыте.
1. Очень хороший отладчик (для Win32).
2. Есть версии под Linux. Не пробовал.
3. Бесплатно для коммерческих приложений.
4. Выдающаяся скорость работы приложений.
5. В принципе выйдет версия для Win64 для Modula-2. Разработчики обещали (врое бы сделать доступной).

Из минусов. Почти нет библиотек. Они есть в Инете. но надо основательно рыться.
Все надо писать на WinAPI. Я писал, особого вдохновления не испытывал. Это хорошо для маленьких утилит, но для больших приложений - слишком расточительно.

Из языков. которые позволяют все - это Forth. Си отдыхает.
Выдающаяся гибкость наравне с трудной поддержкой (нечитабельность, код под себя).

За все надо платить.
GrayEddy
постоялец
 
Сообщения: 374
Зарегистрирован: 06.05.2005 09:37:56

Сообщение Alexander » 06.10.2007 22:47:24

Ну, собственно, Оберон и должен быть Обероном. В синтаксисе лично
мне не нравятся операторы с большой буквы и комменарии из двух
символов. Надо сделать наоборот. Ну может ещё что изменить.
А так язык УЖЕ хороший.

На обероне должна быть сделана сразу и ось. Только тогда
его преимущества проявятся.

А так есть сейчас три типа языков. Ассемблеры. Языки "высокого"
уровня - Паскаль..Оберон и "отстранённые от оборудования очень
высокого уровня" - Икон, (мб?)Питон ...

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

Второй (наш) тип наиболее универсален и позволяет делать от драйверов
до весьма замысловатых вещей. Но при повышении "замысловатости"
становится неудобен.

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

Оставив ассемблеры нетронутыми, остальные два типа нужно объединять,
достигнув средствами вторых эффективной работы третьих. При этом
они дожны как то слиться. Как ? Не знаю. Но можно.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 580
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение GrayEddy » 06.10.2007 23:19:32

> Alexander

На Обероне уже давно написаны ОС. Причем несколько.
Еще есть BlackBox - RAD-среда на Компонентном Паскале.
1. Краткое описание.
http://www.inr.ac.ru/~info21/info/qtoblackbox.htm
2. Это то, что сделано на нем. Впечатляет.
http://www.inr.ac.ru/~info21/info/obero ... ystems.htm

Есть только одно (imho). По моему скромному мнению, BlackBox отлично пригоден для разработки не-GUI-евых приложеий.
Если использовать GUI для БД - это надо постараться. Как всегда, проверено мною.
Если будут отклики - изложу подробнее.
GrayEddy
постоялец
 
Сообщения: 374
Зарегистрирован: 06.05.2005 09:37:56

Сообщение Sergei I. Gorelkin » 07.10.2007 01:41:09

А что такое "нормальный каркас компилятора"? Спереди парсер (настроенный на синтаксис), сзади кодогенератор (настроенный на процессор). Остается "абстрактное синтаксическое дерево" (Abstract Syntax Tree)?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1377
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение shade » 07.10.2007 11:44:26

Sergei I. Gorelkin писал(а):А что такое "нормальный каркас компилятора"? Спереди парсер (настроенный на синтаксис), сзади кодогенератор (настроенный на процессор). Остается "абстрактное синтаксическое дерево" (Abstract Syntax Tree)?

Вот это идеал! Согласен на все 100.

А по мелочам:
1. ничего хуже чем писать операторы Оберона большими буквами придумать сложно.
2. В C++ и FreePascal (мож и других ЯП) есть ключик inline. Так вот, я хочу объявить depricated - путь компилятор сам принимает решение, должна ли функция быть inline, и нужно ли её в каждом конкретном месте разворачивать или делать вызов. Субъективное IHMO: FreePascal производит страшненький код на для inline подстановок (иногда такое ощущение, что подстановка производиться уже после генерации кода)...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение e-moe » 07.10.2007 12:02:28

А меня другой вопрос мучает - будет ли на выходе псевдо код или машинный бинарик? По хорошему, в теперешнюю эпоху -гига и многоядерности псевдокод это не страшно... Главное выбрать что будет удобнее и давать больше возможностей... А можеи некий симбиоз того и другого... хз
e-moe
новенький
 
Сообщения: 31
Зарегистрирован: 27.09.2007 17:00:39

Сообщение ev » 07.10.2007 12:04:08

А что такое "нормальный каркас компилятора"? Спереди парсер (настроенный на синтаксис), сзади кодогенератор (настроенный на процессор). Остается "абстрактное синтаксическое дерево" (Abstract Syntax Tree)?

пока это видится примерно так
хотя может кто предложит более идеальное решение ;)

кстати, вот ссылочка на пожелания к FPC
http://wiki.freepascal.org/Modernised_Pascal
ev
долгожитель
 
Сообщения: 1697
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение e-moe » 07.10.2007 12:04:44

Sergei I. Gorelkin, оптимизатор не забывай ;)
e-moe
новенький
 
Сообщения: 31
Зарегистрирован: 27.09.2007 17:00:39

Сообщение Sergei I. Gorelkin » 07.10.2007 16:06:03

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

ev, хорошая ссылка. Потому что там объясняются причины, по которым команда не будет реализовывать _все_ предложенные "улучшения". Большинство из них сводится к уменьшению количества печатаемых символов, без понимания того, какой эффект это произведет в общем мастшабе. Вот например:

shade, пока что компилятор производит страшненький код только там, где программист написал 'inline'. Коряво, но оно работает, и распрямление - по болшей части вопрос пары патчей. А если ему позволить самому решать, где корявить а где нет, какова вероятность, что корявить начнет _везде_? ;)
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1377
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение noch » 08.10.2007 00:06:12

если нужен активный оберон и не нравятся заглавные буквы то есть реализация под нет и моно.
очень хороший язык - зоннон называется - в нем воплощены почти все обероновские идеи
стаканову понравится элегантность обьявления типов
integer{8} или integer{16} или integet{32} или integer{64}...
совершенно не зависит от платформы
к сожалению исходники открыты не будут - в компиляторе использован микрософтовский код

xds-овские компиляторы тоже закрыты и тоже открыты не будут.
Вместо их модулы лучше gnu modula-2, для 32 и 64 битных платформ и даже для avr

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

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

Да, есть очень хороший компилятор оберона-2 через си. oo2c - я сам к нему раньше плохо относился, однако вскоре научился портировать на что угодно. Не считая медленной компиляции и не очень быстрого кода он по моему остается лучшим если хочется писать на Обероне.
Аватара пользователя
noch
постоялец
 
Сообщения: 145
Зарегистрирован: 07.06.2005 09:45:49
Откуда: Armenia

Сообщение Alexander » 08.10.2007 01:24:23

noch писал(а):Он недавно новый компилятор написал


Сорцы есть ?

noch писал(а):integer{8} или integer{16} или integet{32} или integer{64}...


Если помечтать, то можно ещё так integer{>31} то есть на рост
компов. А наоборот для большей точности iint{32}, mint{32}
(Интел и Моторола).
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 580
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение e-moe » 08.10.2007 21:12:50

А наоборот для большей точности iint{32}, mint{32}
(Интел и Моторола).

это ты про -эндианы(LSB/MSB)?
e-moe
новенький
 
Сообщения: 31
Зарегистрирован: 27.09.2007 17:00:39

Сообщение Bonart » 09.10.2007 13:39:24

Ведь надо избавиться от своих недостатков и учесть хорошие идеи в других языках – только тогда итоговый результат будет стремиться к идеальному

Несколько хороших идей из функциональных языков, которые почему-то не слишком популярны в императивных.
1. Поиск по образцу - намного выразительнее, чем нынешний case, при этом компилируется в такой же эффективный код.
2. Охранные выражения - туда же.
3. Система типов Хиндли-Милнера. Идеал статической типизации - все типы статические, но указывать их при объявлении необязательно: они автоматически выводятся компилятором из выражений. После такой типизации на тотальную динамическую без слез не взглянешь.
4. Рекурсивные типы данных вместо указателей. Намного более четкая семантика определений, позволяющая исключить большинство указательных косяков .
5. Классы типов. Позволяют генерировать как обобщенный, так и специализированный быстрый код полиморфных процедур без шаблонных синтаксических извратов.
6. Максимально упрощенный синтаксис определений и вызовов подпрограмм. Для функциональных языков это необходимое условие, но и императивным принесет только пользу.
7. Двумерный синтаксис а-ля Haskell - позволяет писать и как в Си, и как в Питоне.
Еще полезно будет:
UTF-8 и только она как кодировка исходных текстов.
Разноязычные таблицы ключевых слов как в Алголе-68: удобно для обучения, а компилятору все равно.
Сразу и жестко заданная внутренняя Unicode-реализация строк с двумя байтами на символ.
Bonart
новенький
 
Сообщения: 81
Зарегистрирован: 29.06.2007 11:47:40

Сообщение Mirror » 09.10.2007 16:38:09

Bonart писал(а):UTF-8 и только она как кодировка исходных текстов.

Почему не UTF-16? Не 32?

Bonart писал(а):Сразу и жестко заданная внутренняя Unicode-реализация строк с двумя байтами на символ.

Почему не четырьмя? А вдруг я захочу написать написать идентификатор клинописью?
Mirror
новенький
 
Сообщения: 46
Зарегистрирован: 22.05.2005 12:02:48
Откуда: Минск

След.

Вернуться в Компилятор / язык программирования

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru