Будет биткоин падать или расти? Надо спросить у меня и сделать наоборот. Когда я думаю, что он будет расти — он падает, а когда думаю, что будет падать — он растёт ))
Что-то же работает. Вот видео даже делал, простенький примерчик… www.youtube.com/watch?v=zwUhDOVifdw
auto и return, да, наверное, не работают ))
Огромное спасибо, что потестировали!
Сейчас весь в процессе разработки Cj. В следующем месяце представлю новую версию (надеюсь в начале, а не в конце). Всё тщательно оттестирую, отлажу и только тогда вылезу на суд общественности.
Ничего не работает, только вот эта спецификация, хотя, возможно, с ошибками и недочётами, тут я не спорю:
Спецификация языка Cj (версия 0.1)
1. Идентификаторы
Идентификатор — это имя, задаёмое в программе на языке Cj для переменных, функций, типов данных или классов.
Идентификатор может состоять из следующих символов:
_ a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9
но не может начинаться с цифры.
2. Типы данных
2.1. Автоматический тип данных
Язык Cj в отношении к переменным/функциям ближе к языку Javascript. Специально объявлять переменные или тип возвращаемый фукнцией не обязательно. Тип определяется автоматически, при присвоении значения — для переменных или при возвращении значения — для функций. Если тип определился, поменять тип переменной нельзя.
Для описания автоматической переменной или функции либо используем ключевое слово auto (как в С++), либо не указываем тип данных совсем.
2.2. Базовые типы данных
Если критично, например, с точки зрения быстродействия, можно указать тип переменной. Базовые типы можно разделить на следующие категории:
void — специальный тип для пустых значений
bool — булевый (логический) тип данных
целочисленные типы: знаковые byte (1 байт), short (2 байт), int (4 байт), long (8 байт) и соответствующие им беззнаковые ubyte, ushort, uint, ulong
числа с плавающей точкой: float, double, real
char — символьный (знаковый) тип данных.
3. Переменная
3.1. Описание переменной
тип имя;
3.2. Использование переменной
Для использование переменной в программе нужно просто указать её имя.
4. Функция
4.1. Общее описание функции
тип имя ( параметры ) {
тело функции
}
4.2. Описание параметров функции
тип имя, тип имя, тип имя…
4.3. Описание тела функции
Тело функции — это набор операторов.
4.4. Оператор return
Возврат из функции можно осуществить с помощью оператора return. Чтобы функция вернула значение, его нужно указать в операторе return. Функция типа void не может возвращать значение. Если функция не void, то она обязана возвратить значение.
4.5. Вызов функции
Для вызова в программе функции нужно указать её имя и круглые скобочки () и параметры, если они есть.
имя ( параметры );
5. Операции
Данная версия Cj поддерживает ограниченный набор операций
Я опубликовал статью, её покритиковали, указали будущие недочёты, которые возникнут в будущем. Я нашёл единомышленников, которые тоже делают компиляторы и т.д… Всё отлично, я доволен. Рейтинг на Хабре дело наживное, да у меня есть и свой блог, где я могу выкладывать свои мысли. Всё отлично! =)
Основываясь на своём опыте опубликования статей на здесь на Хабре habrahabr.ru/post/340204 желаю автору статьи терпения и мужества! Вы выложили статью поздно вечером. Сейчас накинутся коршуны, точнее, их основные силы, и Вам не поздоровиться. У моей статьи рейтинг на данный момент -46, а мои карма -14 и рейтинг -28. Все мои комменты имеют отрицательный рейтинг. Хотя у меня уже выложены наработки на ГитХабе и реально работает трансляция лексер, парсер, генератор… Ну ка быстро минусовать этот коммент! )))
Да, спасибо, я в Javascript не силён, тем более его тонкости математики, знаю Javascript на уровне вызова из него JQuery )). Специализируюсь на другом. Я и в компиляторах не специализируюсь, но пишу: глаза бояться — руки делают, разберусь…
По-первому примеру думал так сделать: var z = x / y ^ 0;
За 2-ой пример, конечно, спасибо… Сильно!
На самом деле, эти тонкости на текущем этапе безразличны. Но на будущее, конечно, большое спасибо! Очень интересно!
вопиющая некомпетентность не позволяет ему осознать очевидные проблемы
Ещё раз повторюсь, что на javascript не специализируюсь. Эти очевидные проблемы на 1-ом этапе на мою задачу никак не повлияют
Интересные замечания. А ещё спрашивают, зачем я на Хабр обратился).
Тип можно задать так:
int a[];
Как определяется длина массива?
array[];
array[0] = 1; //так, наверное, можно
array[1] = 2; //так, наверное, тоже
array[3] = 4; //а так?
x = array[2]; //чему равен x?
x = array[4]; //а теперь?
Моя статья даже поинтереснее будет, как мне казалось. Но видимо ошибался.
Человек разрабытывает транслятор/компилятор. Сложная тема, интересно услышать мнение специалистов. Я не специализируюсь на разработке компилятора, интересно услышать спецов, в принципе, и я услышал…
А это что за комменты?
Автор либо тролль, либо у него что-то не в порядке с головой, либо просто недалекий.
такие оскорбления запрещены правилами Хабра. И где модератор? Нету )
Там есть маленькая виртуальная машина, статические скоупы, динамическая строгая типизация, лямбды, замыкания, оптимизация хвостовой рекурсии, примитивный remote repl… И, да, там тоже свой лексер и парсер. И даже мотивация была — DSL-движок, для описания всяких игровых моделей.
У вас всё сложно, поэтому и осознали сложность, а у меня всё намного проще и реально реализуемо, хотя есть и большие минусы, мне их указали комментаторы, но я о них даже не задумываюсь, потому что плюсов в моей идее намного больше!
В Javascript не нужна, да и в С++ от неё отказались
Хорошо, можно обойтись без нее, тогда приведите модель работы с памятью вашего языка. Например, где вообще создаются переменные? В куче? В стеке? Как получится? А динамически выделяемая память?
Ах да, вы язык разрабатываете, вам не до таких мелочей, когда понадобится, тогда и подумаем. Хорошо самолеты делают не так, а то шасси бы разрабатывали когда самолет уже в воздухе и пора садиться.
Совершенно верно, это не самолёт, это программа. В этой задаче я не работаю на дяденьку, а пишут в своё удовольствие. Если нет полного описания, значит я так решил или пока не продумал до мелочей как будет и это правильно!
Если вы не собираетесь использовать этот язык как системный
Конечно, собираюсь!
то никаких преимуществ перед js, Kotlin, Python, PHP, C#, Java, [любой другой язык прикладного уровня] вы не показали, а синтаксис пока что вы предлагаете несостоятельный. (А если собираетесь, то еще и перед Rust, D, да даже плюсы).
Синтаксис более минималистический, более чистый. Преимущества есть, но очевидны, если понять идею того, что я делаю.
В чем тогда идея?
Вроде распинался несколько часов, или уже даже дней, отвечал на комментарии, а вы всё не смогли понять идею. Странно. Идея такая: пишу на Cj и генерирую в Javascript или С++ или любой другой язык и поэтому я могу выполнить любую задачу заказчика на одном и том же языке программирования!
Вместо каждой операции деления будете подставлять код с ветвлением?
Совершенно не так. Если присваиваю переменную, а она в Cj целая, то тогда подставляю Math.floor().
x = 1.0 / 3.0;
y = 1.0 / 3.0;
z = y - x;
console.log(z);
Вот такой код получится на Javascript. Результат = 0, отличается от -0.000000009934107. Казалось бы это уже проблема. Но согласитесь, и наш мир не совершенен. Но в концепции языка Cj, как ни странно, это нормально. Я не собираюсь на Javascript заниматься точными математическими расчётами. Хотя, на такой случай, возможно, есть какие-то библиотеки на Javascript. Плюсы языка, если вдуматься, намного перевешивают такие минусы.
В z обязана лежать единица… да и не представляете как это реализовать
x = 6;
y = 4;
z = Math.floor(x / y);
и добавьте на скорую руку глобальную функцию print(), который будет превращаться в console.log на js.
У меня есть, конечно же, мысли, как это сделать, но пока не уверен на 100% (выкладывать пока не буду — обжёгся), как лучше… Выслушаю вашу точку зрения
Ну и да, главный вопрос — что вы хотите от своего языка, какая его ниша?
веб, мобайл, десктоп, сервер, да и всё остальное… яж хочу писать различного типа задачи на одном языке)))
Код функции malloc на вашем языке
Пока такой функции не будет. Что дальше, я не знаю. В 2017 году вроде можно обойтись без неё. Если нужно, будет обходной вариант. Язык же предполагается невероятно гибким! ))
Ну что там может не хватать? Это же не какая-то левая библиотека, это же не какой-то чёрный ящик, я сам писал, и я уверен в нём, если надо допишу, переделаю, всё норм
Но если разобраться, то внутри явно не string.Replace, а работает лексер, парсер и генератор… ладно, проехали… сейчас план такой:
1. Добавлю операторы условия и цикла (а то уж совсем)
2. Добавлю возможность подключать внешние функции, типа вывод в консоль
3. Делаю и для js и для с++
Ну и тогда опять сюда, получать очередную порцию полезной критики))
Возможно, Хабр слишком серьёзный сайт. На каком сайте можно представить разработки начального уровня, где пока что толком ничего не работает, но чтобы услышать добрый совет или какую-либо помощь?
правда сам писал)
auto и return, да, наверное, не работают ))
Огромное спасибо, что потестировали!
Сейчас весь в процессе разработки Cj. В следующем месяце представлю новую версию (надеюсь в начале, а не в конце). Всё тщательно оттестирую, отлажу и только тогда вылезу на суд общественности.
Я опубликовал статью, её покритиковали, указали будущие недочёты, которые возникнут в будущем. Я нашёл единомышленников, которые тоже делают компиляторы и т.д… Всё отлично, я доволен. Рейтинг на Хабре дело наживное, да у меня есть и свой блог, где я могу выкладывать свои мысли. Всё отлично! =)
По-первому примеру думал так сделать: var z = x / y ^ 0;
За 2-ой пример, конечно, спасибо… Сильно!
На самом деле, эти тонкости на текущем этапе безразличны. Но на будущее, конечно, большое спасибо! Очень интересно!
Ещё раз повторюсь, что на javascript не специализируюсь. Эти очевидные проблемы на 1-ом этапе на мою задачу никак не повлияют
Тип можно задать так:
Как я понимаю, Хабр — это площадка для ИТ-специалистов, где человек выкладывает статью на какую-то интересующую тему его и сообщество обсуждает это.
Куча статей просто не о чём, хотя на такие же темы:
habrahabr.ru/post/236907
habrahabr.ru/post/274083
и т.д…
Моя статья даже поинтереснее будет, как мне казалось. Но видимо ошибался.
Человек разрабытывает транслятор/компилятор. Сложная тема, интересно услышать мнение специалистов. Я не специализируюсь на разработке компилятора, интересно услышать спецов, в принципе, и я услышал…
А это что за комменты? такие оскорбления запрещены правилами Хабра. И где модератор? Нету )
У вас всё сложно, поэтому и осознали сложность, а у меня всё намного проще и реально реализуемо, хотя есть и большие минусы, мне их указали комментаторы, но я о них даже не задумываюсь, потому что плюсов в моей идее намного больше!
В Javascript не нужна, да и в С++ от неё отказались
Пока предполагаются только динамические массивы: sitev.ru/post/174
Совершенно верно, это не самолёт, это программа. В этой задаче я не работаю на дяденьку, а пишут в своё удовольствие. Если нет полного описания, значит я так решил или пока не продумал до мелочей как будет и это правильно!
Конечно, собираюсь!
Синтаксис более минималистический, более чистый. Преимущества есть, но очевидны, если понять идею того, что я делаю.
Вроде распинался несколько часов, или уже даже дней, отвечал на комментарии, а вы всё не смогли понять идею. Странно. Идея такая: пишу на Cj и генерирую в Javascript или С++ или любой другой язык и поэтому я могу выполнить любую задачу заказчика на одном и том же языке программирования!
Теперь понятна идея? Разве это не круто? ))
Совершенно не так. Если присваиваю переменную, а она в Cj целая, то тогда подставляю Math.floor().
Вот такой код получится на Javascript. Результат = 0, отличается от -0.000000009934107. Казалось бы это уже проблема. Но согласитесь, и наш мир не совершенен. Но в концепции языка Cj, как ни странно, это нормально. Я не собираюсь на Javascript заниматься точными математическими расчётами. Хотя, на такой случай, возможно, есть какие-то библиотеки на Javascript. Плюсы языка, если вдуматься, намного перевешивают такие минусы.
Предлагаю назвать это парадоксом kahi4.
У меня есть, конечно же, мысли, как это сделать, но пока не уверен на 100% (выкладывать пока не буду — обжёгся), как лучше… Выслушаю вашу точку зрения
веб, мобайл, десктоп, сервер, да и всё остальное… яж хочу писать различного типа задачи на одном языке)))
Пока такой функции не будет. Что дальше, я не знаю. В 2017 году вроде можно обойтись без неё. Если нужно, будет обходной вариант. Язык же предполагается невероятно гибким! ))
1. Добавлю операторы условия и цикла (а то уж совсем)
2. Добавлю возможность подключать внешние функции, типа вывод в консоль
3. Делаю и для js и для с++
Ну и тогда опять сюда, получать очередную порцию полезной критики))
youtu.be/zwUhDOVifdw
Зачем мне изучать чужое, если я написал своё и оно уже работает?
Я потратил несколько часов на ответы на комментарии, если это не прояснило ситуацию, ну извините…