![]() |
|
Модераторы: powerfox, ZeeLax |
![]()
|
|
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 18 Всего: 58 |
Символьный язык программирования.
Преамбула. В этом маленьком тексте я попробую описать идею, которая у меня родилась буквально вчера. Просьба сильно не пинать и, по возможности воздержаться от критики, если тема покажется Вам не интересной. Конечно, в дальнейшем без критики будет не обойтись, но на данном этапе она может только помешать. Оговорка. Каких-либо других наработок, кроме идей, на данный момент нет. все будет пережевываться не одну тыщу раз, прежде чем появится то, что можно будет действительно "заюзать". Зачем мне это ? Ни зачем. Но работать над проектом я собираюсь все свободное время. Это, для меня, действительно интересно. Немного о brainfuck Кратко рассмотрим язык под названием "brainfuck". Суть его, кто еще не в курсе - написание последовательности символов, которая выполняет какое-то одно действие. К сожалению он имеет некоторые недостатки и недоработки. Данный язык может выполнять только примитивные операции и имеет мизерный набор символов. Максимум, что Вы можете сделать на нем - это вывод приветствия ("Hello world !"). Однако, замечу, если бы для brainfuck была нормальная среда разработки, его можно было бы использовать. Скажем огромная команда echo "Hello World" занимала бы не сотни строк кода на Си, а несколько символов на brainfuck. Подытожу недостатки brainfuck. Первое и самое главное - не серьезный подход к языку. Что и следует из названия. Отсутствие среды разработки. По идее, все что надо для этого языка - редактор и симулятор. Наличие встроенного симулятора в данном случае критично, ибо иначе для отладки приходилось бы вызывать не очень быструю команду, которая бы выполняла код... Так же к недостаткам нужно отнести абсолютную минималистичность и "низкоуровненность". Проблемы современных языков. Во всех известных языках программирования используется такой подход. Есть команды. которые состоят из слов. Прчем слова состоят из крайне мизерного запаса английских букв. Для команд приходится подбирать соответствующее команде слово. Это работает, если у вас пара тыщ строк кода. Это работает и дальше, но в какой-то момент наступает полный абздец. Английских слов просто начинает нехватать. Плюс трудно подобрать "правильнрое" слово. И пошло... Сначала команды из нескольких слов, потом префиксы к командам. Потом документация по командам. Потом документация по префиксам.... В итоге получаем код, в котором надо разбираться самому разработчику. Следующие проблемы - необходимость "анализа" программы и компиляция в машинный код. Да, программа после этого выполняется очень быстро, но в этом есть один очень неприятный момент. Всё это занимает драгоченное время программиста. Да и "отладка" кода порой убивает времени на порядок больше, чем требовалось для написания самого кода. Что я предлагаю ? Я предлагаю разработать систему программирвония, в которой используются комбинации символов не одного английского языка, а всего спектра utf-8 символов. Исключая символы, которые трудны для восприятия. К примеру - символы арабского, китайского, японского и аналогичных языков. К чему сведется программирование в итоге ? Программист будет выбирать нужный символ (при необходимости читая документацию) и вставлять его в программу. Вывод сообщения вроде "Hello World" будет сводится к поиску (на первых порах) симовола-команды вывода текста, вставки его в программу, и дописывания нужной фразы "Hello World !" Пока все, Олег Пучинин. Это сообщение отредактировал(а) GrayCardinal - 12.6.2011, 17:10 |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: нет Всего: 37 |
Не совсем понятно какие у этого плюсы, кроме компактных сорцев? Может их сжимать просто? Хотя сорцы обычно и так немольшие, кроме асма
|
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 18 Всего: 58 |
Компактные сырцы дают быстрое написание и быстрое выполнение, плюс такие сырцы проще понимать и отлаживать. Компиляция в принципе не требуется. Получаем нечто вроде интерпретатора. По всем скоростям, предположительно, сие чудо будет бить все существующие интерпретируемые языки.
Это сообщение отредактировал(а) GrayCardinal - 12.6.2011, 18:16 |
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 1 Всего: 49 |
Как бы так помягче выразиться... идея несколько неудачна, причем этот факт давно экспериментально проверен. Посмотрите на APL.
|
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 18 Всего: 58 |
Фантом,
Отклонено |
|||
|
||||
| bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 14 Всего: 317 |
GrayCardinal, привет.
Идея интересная, но: 1) самая большая проблема программирования - не ограничения я.п. в ракурсе длинны команд, или ограниченности именного пространства. самая большая проблема программирования обычно находится между стулом и клавиатурой ;-) 2) существует несколько инoй интересный метод программирования, который по-моему перпендикулярен родному языку программиста (см. MIT Scratch) 3) с т.з. координации работы разработчиков, по-моему нет более удобного метода, чем словесное или как минимум письменное (ужасно хуже первого) общение, поэтому для нечитабельных кусков кода - есть комменты. 4) для непонятно написанного кода существует код-ревью. это делается сразу после или сразу ДО коммитов. Ессно делается более крутым чем ты девелопером (я конечно понимаю, что разрабатывая код самому, в одиночку, очень трудно расщепить личность, и сделать себе самому код ревью. Это причина обычно очень медленного роста программистов-одиночек) 5) очень удивило от тебя, т.к. ты вроде бы и с руби и с питоном имел какое-то трение... неужели с т.з. читаемости кода они тебя не устроили ? и с т.з. расширяемости языка.... ? 6) стоит как-то проверить насколько широта диапазона разрешенных символов я.п. (и разрешенных слов) воздействует на вычислительную сложность парсинга (и его время) 7) удачи! Это сообщение отредактировал(а) bilbobagginz - 12.6.2011, 20:41 -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
| kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
А как насчет таких платформ как Java и .NET, где в коде можно использовать символы юникода?
Хотя я, после просмотра кода одной программки, за такое руки бы поотрывал, так как там были намешаны идентификаторы типа newПокупатель и текущийDbConnection... Понятно что у автора с мозгами не лады, но все равно осадочек остался... -------------------- ![]() |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 18 Всего: 58 |
kosmonaFFFt,
Вы говорите я системах, где можно использовать _слова_ состоящие из любых букв. Я предлагаю (практически) полностью забить на слова и использовать символы. Везде. В командах, именах(символах) переменных etc. То есть речь идет о принципиально другом подходе. |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 18 Всего: 58 |
В связи с личными проблемами выпуск ноль первой версии проекта временно откладывается... Приношу свои извинения.
|
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 18 Всего: 58 |
На чем будет реализована система.
Прояснился следующий аспект разработки системы символьного языка. Сам интерпретатор будет разрабатываться на GoLang. Выбор пал на него по нескольким причинам. Во-первых он быстрый и компилируемый. Плюс программы Гоу линкуются статически. Т.е. Вы сможете запускать интерпретатор сразу после загрузки ядра Linux. Так же язык Гоу достаточно высокоуровненный, что даст интерпретатору символьного языка те же свойства. На символьном языке можно будет писать как низкоуровневые так и высокоуровневые приложения с одинаковой легкостью. Сама среда разработки будет писаться на Qt4. Просто на Qt4 можно сделать все что нужно. В среде не будет своего редактора. Будет использоваться любой доступный редактор от Vi и до LibreOffice. Взаимодействие среды с редактором будет осуществляться — через удаленное управление для Gvim и через dbus для остальных редакторов, поддерживающих эту шину (а это почти все). Пока все. Ваш. Олег. |
|||
|
||||
| bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 14 Всего: 317 |
что самое страшное - что этот Олег сядет и сделает.
-------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
| 1000000dollars |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 6.10.2007 Репутация: нет Всего: 8 |
bilbobagginz, и дай бог, чтобы у него не было администртивного ресурса для продвижения написанного...
|
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 18 Всего: 58 |
1000000dollars,
Надо будет - сами продвинут... |
|||
|
||||
| bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 14 Всего: 317 |
GrayCardinal,
теорема: использование всего диапазона символов UTF8 в качестве символов языка не возможно при существовании схожих символов разных регистров (тут регистр = диапазон карактер сета какого-то языка "Х") доказательство (на пальцах с элементами "от противного"): для программирования нужны объекты хранения и команды с наименованиями (именное пространство) для работы в именном пространстве нужно представления наименований в компьютере. оставим команды языка, но для программирования нужна реализация "переменных", т.е. штук, в которых мы можем хранить что-то в разные моменты запуска программы. для этого нужно определение переменной, как единицы хранения. в современных языках программирования принято определять переменные двумя измерениями (как минимум):
нужна уникальность имен переменных. Уникальность переменных нужна для:
При использовании более чем одного регистра юникода с одинаковыми по внешнему виду символами, свойство внешней уникальности имен теряется. Человек по внешнему виду не знает какой символ у него перед глазами: о из латинницы, или кириллицы? п из кириллицы или из греческого алфавита ? Естественно, при возможности ввода таких внешне схожих символов можно получать переменные, которые выглядят одинаково, но по сути (и strncmp()) разные. Но к ступору и истерике это приводит не компьютер, а человека. Напр. понять из ошибки, что переменная "кака" != "кaкa" (слева версия с обеими 'а' из кириллицы, а справа - буквы 'а' из латинницы) практически ... невозможно (можно, но мы же не будем, в процессе работы преобразовывать имя каждой перменной в массив байтов!) Более того, такого рода ошибки будут вноситься, и отнимать не мало времени в отладке. Если мы позволяем это, то неэффективность - налицо. для такой байды нужно будет дописать тулзы для выявления внешней схожести (но разных с т.з. юникода) имен, т.е. изначально убивать время вместо моря и солнца - на ненужный труд. И ладно бы это решало проблему: нет, это потом продолжит отнимать время не только у тебя, но и у программистов на твоем языке. Поэтому придется остаться с ограниченным списком символов. Что интересно - как раз похожие регистры (напр. европейских языков) мешать нельзя. Можно мешать только очень внешне разные, напр. русский+китайский+иврит+арабский. даже греческий не используешь, т.к. там есть буквы, похожие на кириллицу. Грубо говоря "что и требовалось доказать". (в математике обозначается черным квадратиком): ■ Это сообщение отредактировал(а) bilbobagginz - 17.6.2011, 10:10 -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 18 Всего: 58 |
bilbobagginz,
Благодарю что подключился ■ Это сообщение отредактировал(а) GrayCardinal - 17.6.2011, 02:16 |
|||
|
||||
![]()
|
| Правила форума "Linux/UNIX: Клуб юнуксоидов" | |
|
|
Что такое клуб юнуксоидов? Это место более свободного общения специалистов и любителей *NIX систем. Новичкам: Этот раздел предназначен в основном именно для общения а не решения проблем. Правила всего раздела Linux/UNIX сюда не распространяются, но здесь имеются свои правила:
Короче, по репе получите по полной программе ;-) Happy hacking! Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Клуб юнуксоидов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |