LINUX.ORG.RU

Хочу C++ без C++

 ,


0

2

Такие дела.
Безплюсового старшего брата сразу отметаем. Интерпретируемые/JIT-языки тоже отметаем. Языки типа D, в которых размер бинарника хелловорда около мегабайта отметаем так же.
Хотелось бы, что-то типа Python, но который не требует интерпретатора, как Cython, для своей работы.
Что там остается? Есть ли Путь? Сколько времени прошло с создания C/C++, появилась ли им вменяемая альтернатива?
Если писать с нуля транслятор Python (СТ) в код на C (не машинный, не llvm), какие там основные проблемы будут? Преобразование грамматик? Падение производительности? В чем основные сложности и примерно сколько времени займет реализация такого проекта? Кто-нибудь подобным занимался?



Последнее исправление: cetjs2 (всего исправлений: 2)

Бери любой язык семейства ML. Ocaml (выдаёт шустрые и компактные бинарники), Цацкель (если с него крыша не поедет), или если не брезгуешь дотнетом, то F#.

Hertz ★★★★★
()

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

Можно почитать книгу: Т. Пратт «Языки программирования. Разработка и реализация» (Terrence W. Pratt «Programming Language. Design and Implementation»). Это фундаментальный труд, где в издании 1979 года (издательство «Мир», Москва, 574 страниц) первая часть называется - «Понятия», а во второй части «Языки» рассматриваются языки программирования: Фортран, Алгол 60, Кобол, ПЛ/1, Лисп 1.5, Снобол 4, АПЛ, и в эпилоге язык Тьюринга.

anonymous
()

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

Можно еще посмотреть BASIC (Бейсик), в ALTlinux есть BASIC256. и Паскаль (я в институте начинал с Turbo Pascal, а потом самостоятельно изучил и Бейсик). А в ALTLinux есть такие реализации языка Паскаль: Lazarus и Free Pascal IDE.

P.S. Я использую на ноутбуке ALTLinux 7 KDEsktop.

anonymous
()
Ответ на: комментарий от JN

Размер бинарника хелловорда в один метр показывает несерьезность подхода.
JN ★ (13.02.2016 23:54:56)

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

Когда-то давно у меня был обзор компьютерных вирусов от одного автора антивирусных программ для MS-DOS. Там был в обзоре один полноценный вирус размером в 132 байта.

anonymous
()
Ответ на: комментарий от anonymous

Когда-то давно у меня был обзор компьютерных вирусов от одного автора антивирусных программ для MS-DOS. Там был в обзоре один полноценный вирус размером в 132 байта.

Договаривать надо идиот! Тот вирус написан на ассемблерах.

anonymous
()

Бери цепепе, только не бросайся и не швыряйся исключениями :-)

anonymous
()

Посмотри на Раст. Возможно тебе подойдет. Правда он очень молод и библиотек на него маловато.

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

Надо так: «бери раст, пиши библиотеки — ну кто, если не ты?»

slackwarrior ★★★★★
()

Хотелось бы, что-то типа Python, но который не требует интерпретатора, как Cython, для своей работы.

Nim </thread>

Если писать с нуля транслятор Python (СТ) в код на C (не машинный, не llvm), какие там основные проблемы будут? Преобразование грамматик? Падение производительности? В чем основные сложности и примерно сколько времени займет реализация такого проекта? Кто-нибудь подобным занимался?

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

по сути это получается другой язык.

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

anonymous
()
Ответ на: комментарий от Bad_ptr

Просто всякие некст-ген истребители — это ж исследовательские проекты.

В случае F-35 им нужен не некст-ген сам по себе, а "дешевыймаленький F-22", который можно продать друзьям по «агрессивному блоку НАТО»... и, «в перспективе», заменить у себя сразу A-10, AV-8A, F-16, F/A-18, в вариантах соответственно F-35A, F-35B и F-35С, распихав по ним функции морально устаревших платформ (типа истребить зоопаркунифицировать парк по запчастям, логистике и т.д. Задача таким образом не сделать «дальше-выше-быстрее», которая по декларациям DoD «в целом решена на F-22», а впихнуть добрый кусок его возможностей в более мелкий и изначально «более дешевый» самолет. Но при том еще повыводить из эксплуатации кучу старья, которое еще на балансе, потому что... потому что не выходит каменный цветок, а республиканцы Чаке и Маккейн любят A-10 косить конвои бедуинов можно и на «Бородавочниках».

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от slackwarrior

В случае F-35 им нужен не некст-ген сам по себе, а «дешевыймаленький F-22», который можно продать друзьям

Это одна из целей. А ещё у него вертикальный взлёт. В общем, самолёты хоть и одного поколения, но достаточно разные. Задач ф-35 должен выполнять множество и электронно-софтовый компонент поднять на новый уровень(если получится).

Bad_ptr ★★★★★
()
Последнее исправление: Bad_ptr (всего исправлений: 1)
Ответ на: комментарий от Bad_ptr

А ещё у него вертикальный взлёт.

Только у одной версии, которая хариера заменит. F-35B, минус бортовая пушка. Будет как «Фантом», времен Вьетнама, с ганподом... Может быть :)

slackwarrior ★★★★★
()
Ответ на: комментарий от Iron_Bug

теория категорий и системная инженерия, диссер С. Ковалёва

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

речь идёт о более общей картине, поддержке жизненного цикла и комплексировке некоторых компонент на базе аспектно-ориентированного подхода, с привлечением теории категорий, например.

: cм. очень интересные диссертацию С. Ковалёва: автореферат сам диссер препринт

статью презентацию доклад

отзыв

там описан как раз, наиболее ОБЩИЙ подход и идея:

  • теория категорий как формализм для системной инженерии
  • аспектно-ориентированное, компонентно-ориентированное программирование, слоистая архитектура
  • порождающее проектирование, синтез-анализ компонентов при комплексировке
  • на основе теории категорий и различных DSL

мне как примату этот диссер очень понравился: наконец-то борщехачкели хоть на что-то годные, лол :))

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

а так вообще, см. например здесь про систему алгоритмических алгебр В. М. Глушкова, операторные схемы Янова, систему алгебр Г.О. Цейтлина.

Глушков вообще предлагал синтез-анализ железа из программы, а программы из алгебры (САА). см. РВМ, рекурсивная вычислительная машина учеников Глушкова.

anonymous
()
Ответ на: комментарий от Iron_Bug

в каком-то смысле, есть общие моменты у подхода С. П. Ковалёва про теоркат для системной инженерии, АОП и КОП; у Literate Programming WEB LP/RR; и у какой-то абстрактной «метаязыковой компонентно-ориентированной среды» (в противовес «языково-нейтральной» или «языково-специфической» КОП среды).

anonymous
()
Ответ на: комментарий от Iron_Bug

топологически ты при оптимизации программы искала какой-то гомеоморфизм между топологическими пространствами, топосами, логическими пространствами программ оптимизированной и не оптимизированной как пространств с изменяемой (программируемой) топологией (топосы Гротендика, например или пучки (shears)).

при этом количественная оптимизация — какая-то мера на гомеоморфизме, а качественная — как раз поиск подходящих пространств, отображений, логик в какой-то металогике.

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

routing placement для железа — это авторазводка в пределах логических инвариантов микросхем на конкретном размещении. а для софта — это кодирование и архитектурное проектирование, конкретных интерфейсов по компонентам.

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

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

есть ощущение что shears, пучки и топосы Гротендика как раз позволяют это сделать — перенести частные знания из одной теории, науки, её контекста в другую через общий механизм какой-то метатехнологии, метатеории.

например, теории категорий.

anonymous
()

Сколько времени прошло с создания C/C++, появилась ли им вменяемая альтернатива?

нет

IceWindDale
()
Ответ на: комментарий от tailgunner

Ну так если бы динамические библиотеки D были бы тоже в каждом Linux-дистрибутиве прямо «из коробки», то HelloWorld на нём тоже весил бы пару килобайт.

А вот если статически прилинковать libstdc++, HelloWorld на C++ внезапно раздувается до ~1 MB.

EXL ★★★★★
()
Ответ на: комментарий от EXL

В каждом Linux-дистрибутиве и так есть все что нужно «из коробки». Тратить силы на написание того что уже есть, вместо работы над созданием того чего нет, - в этом вся суть.

JN
() автор топика
Ответ на: комментарий от anonymous

гомеоморфизм между топологическими пространствами, топосами, логическими пространствами

Гомеоморфизмов между топосами и логическими пространствами не бывает.

топосы Гротендика, например или пучки (shears)

Причём тут топосы Гротендика? Пучки чего конкретно? И да, не shears, а sheaves (ед.ч. sheaf).

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

И тут Остапа понесло. Это троллинг что ли такой людей далёких от математики?

оптимизация программ использует инварианты таких топосов, но покамест практически не использует «аномалии»

Тебя интересуют фундаментальные ∞-групоиды, почитай HoTT.

mix_mix ★★★★★
()
Ответ на: комментарий от Hertz

На цацкеле кстати до необходимости можно писать вполне тупой код уровня Visual Basic, иногда применяя ФП. Я в универе когда-то даже формочки клепал, от Python не отличалось. Зато сами данные можно было обработать короче

vertexua ★★★★★
()
Ответ на: комментарий от JN
$ cat main.cc 
#include <iostream>

int main() {
  std::cout << "Hello world" << std::endl;
  return 0;
}
$ clang++ -O2 main.cc -static -o main
$ ./main 
Hello world
$ ls -lah
total 1.6M
drwxr-x---  2 x x 4.0K Feb 17 11:37 .
drwxr-x--- 14 x x 4.0K Feb 17 11:36 ..
-rwxr-x---  1 x x 1.6M Feb 17 11:37 main
-rw-r-----  1 x x   91 Feb 17 11:36 main.cc

GCC тоже дает 1.6 МБ

vertexua ★★★★★
()
Ответ на: комментарий от lenin386

Посмотри внимательно на мою команду сборки. Я выкурил флажок -static, чтобы сравнение с Rust/Go было корректным

vertexua ★★★★★
()

Языки типа D, в которых размер бинарника хелловорда около мегабайта отметаем так же.

Это напрасное требование. Статически слинкованный хеллоуворлд на C++ занимает полтора мегабайта.

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

И самое главное что не отказываясь от стандартной библиотеки уменьшить это практически не возможно, будет выше 1МБ по любому

vertexua ★★★★★
()
Ответ на: комментарий от vertexua
$ cat ./main.cpp
#include <iostream>
int main()
{
 std::cout << "Hello world" << std::endl;
 return 0;
}
$ g++ -O2 -o hw main.cc -static
$ ./hw
Hello world
$ ls -lh hw
-rwxr-xr-x 1 x y 1.5M Feb 17 14:54 hw

Ты гонишь, 1.5М — шланг проиграл :)

slackwarrior ★★★★★
()
Ответ на: комментарий от vertexua

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

JN
() автор топика
Ответ на: комментарий от JN

Написали один раз все что нужно, пользуйтесь, перед процессором все равны, но нет, нужно городить свое.

Я не понимаю смысла этого утверждения.

А еще мне странно, что в 2016 году тебя пугает рантайм в 1МБ памяти, когда одна фотография котика спокойно может весить больше.

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

Я не понимаю смысла этого утверждения.

libc тебе о чем нибудь говорит?

А еще мне странно, что в 2016 году тебя пугает рантайм в 1МБ памяти, когда одна фотография котика спокойно может весить больше.

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

JN
() автор топика
Ответ на: комментарий от JN

libc тебе о чем нибудь говорит?

Я не о libc. Что ты имел в виду под «перед процессором все равны»?

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

Пиши сайты на Си, чё. Поверь, все будет работать в 100 раз хуже.

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

Waterlaz ★★★★★
()
Ответ на: комментарий от JN

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

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

А вот я и не хочу писать сайты на C, в следствии чего создал этот тред.

Пример следствия моей мысли - Intellij IDEA, уже на протяжении множества лет при нажатии на меню File вынужден наблюдать, как оно компилируется. Это не Си, но подход «пусть остается все что не нужно» всегда оборачивается неприятными моментами.

JN
() автор топика
Ответ на: комментарий от JN

Вычислительные устройства следующего поколения уже на подходе, так зачем утруждаться?
Здесь можно представить гонку бегуна-стометровочника с велосипедистом. Короткие расстояние бегун может пробежать быстрее велосипедиста, если постарается, а вот со второй версты велосипедист неумолимо опередит бегуна. Так стоит ли утруждаться, врукопашную кодируя на Си++, если аппаратные Джава-ускорители всё-равно возьмут верх? Говоря языком предпринимателей, бегуна ещё искать нужно, откармливать и тренировать, а велосипед можно купить в ближайшей торговой лавке, усадив на него школьного физкультурника.

Enthusiast ★★★
()
Ответ на: комментарий от Enthusiast

Сила джавы в том, что огромные проекты имеют длительный лайфтайм при относительно меньшей себестоимости разработки. Достигается это за счет принципов построения архитектуры проектов и работы с ними, а также за счет стабильности API и платформы. Исходя из этого, основную роль тут играет сам язык. Зато наличие JVM изрядно все поганит. Сделайте тоже самое, только избавьтесь от VM и все будет как надо. Уже неоднократны истории, типа, перевели с языка N на язык M и получили в десять раз меньше серверов. Так возникает вопрос - какого черта?

JN
() автор топика
Ответ на: комментарий от JN

Ты уже Vala смотрел? HelloWorld порядка 6kB устроит? Там все есть: классы, интерфейсы, кучи всяких плюшек. Один минус - Linux-only.

void_ptr ★★★★
()
Ответ на: комментарий от void_ptr

Смотрел. Язык создавался для внутреннего потребления гномописцами, завязан на GObject, с кроссплатформом проблемы, целей сделать из него что-то большее нет, поэтому отпадает.
Пока остановился на Nim'е, хоть там и существует ряд проблем, но в целом удовлетворен.

JN
() автор топика
Ответ на: комментарий от JN

перевели с языка N на язык M и получили в десять раз меньше серверов.

Переписывание довольно часто улучшает результат, (практически?) независимо от языка. Хотя бы потому что в процессе можно выкинуть накопившиеся костыли.

DarkEld3r ★★★★★
()
Ответ на: комментарий от DarkEld3r

Да, но не в больших масштабах. Гугл, фейсбук, контакт - везде C++, хоть и транслированный.

JN
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.